(no commit message)
authorSapan Bhatia <sapanb@cs.princeton.edu>
Mon, 4 May 2009 15:45:07 +0000 (15:45 +0000)
committerSapan Bhatia <sapanb@cs.princeton.edu>
Mon, 4 May 2009 15:45:07 +0000 (15:45 +0000)
linux-2.6-720-click.patch [new file with mode: 0644]

diff --git a/linux-2.6-720-click.patch b/linux-2.6-720-click.patch
new file mode 100644 (file)
index 0000000..0cc82e2
--- /dev/null
@@ -0,0 +1,131290 @@
+diff -Nurb click-1.6.0/Makefile click-1.6.0-27/Makefile
+--- click-1.6.0/Makefile       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/Makefile    2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,230 @@
++# Warning: this file must be usable by regular make
++# (unlike the Makefiles in subdirectories).
++
++SHELL = /bin/sh
++
++
++PACKAGE = click
++VERSION = 1.6.0
++
++top_srcdir = .
++srcdir = .
++top_builddir = .
++subdir = .
++conf_auxdir = $(top_srcdir)
++
++AUTOCONF = autoconf
++# ACLOCAL = aclocal -I m4
++ACLOCAL = :
++PERL = perl
++INSTALL = /usr/bin/install -c
++INSTALL_IF_CHANGED = $(top_builddir)/installch
++INSTALL_DATA = /usr/bin/install -c -m 644
++INSTALL_DATA_IF_CHANGED = $(top_builddir)/installch -m 644
++mkinstalldirs = $(conf_auxdir)/mkinstalldirs
++
++EXTRA_PROVIDES =
++PROVISIONS = i686 i386 i586 int64 linux linux_2_6 pcap $(EXTRA_PROVIDES)
++
++prefix = /d/click/click-1.6.0-27/inst
++exec_prefix = /d/click/click-1.6.0-27/inst
++includedir = /d/click/click-1.6.0-27/inst/include
++clickincludedir = $(includedir)/click
++netincludedir = $(includedir)/clicknet
++toolincludedir = $(includedir)/clicktool
++bindir = /d/click/click-1.6.0-27/inst/bin
++datarootdir = /d/click/click-1.6.0-27/inst/share
++datadir = /d/click/click-1.6.0-27/inst/share
++clickdatadir = $(datadir)/click
++
++DRIVERS =  userlevel linuxmodule
++OTHER_TARGETS =  tools
++ALL_TARGETS = $(DRIVERS) $(OTHER_TARGETS)
++
++all: $(ALL_TARGETS) Makefile
++
++bsdmodule: Makefile click-buildtool stamp-h
++      @cd bsdmodule && $(MAKE) all
++linuxmodule: Makefile click-buildtool stamp-h
++      @cd linuxmodule && $(MAKE) all
++ns: Makefile click-buildtool stamp-h
++      @cd ns && $(MAKE) all
++userlevel: Makefile click-buildtool click-compile stamp-h
++      @cd userlevel && $(MAKE) all
++exopc: Makefile click-buildtool stamp-h
++      @cd exopc && $(MAKE) all
++tools: Makefile
++      @cd tools && $(MAKE) all
++
++install: Makefile click-buildtool click-compile stamp-h installch
++      @for d in $(ALL_TARGETS); do (cd $$d && $(MAKE) install) || exit 1; done
++      @$(MAKE) install-local install-doc install-local-include
++install-local: elementmap.xml click-buildtool click-compile config.mk \
++      etc/pkg-config.mk installch
++      $(mkinstalldirs) $(DESTDIR)$(bindir)
++      $(INSTALL_IF_CHANGED) click-buildtool $(DESTDIR)$(bindir)/click-buildtool
++      $(INSTALL_IF_CHANGED) click-compile $(DESTDIR)$(bindir)/click-compile
++      $(INSTALL_IF_CHANGED) $(srcdir)/click-mkelemmap $(DESTDIR)$(bindir)/click-mkelemmap
++      $(INSTALL_IF_CHANGED) $(top_srcdir)/test/testie $(DESTDIR)$(bindir)/testie
++      $(mkinstalldirs) $(DESTDIR)$(clickdatadir)
++      $(INSTALL) $(mkinstalldirs) $(DESTDIR)$(clickdatadir)/mkinstalldirs
++      $(INSTALL_DATA) elementmap.xml $(DESTDIR)$(clickdatadir)/elementmap.xml
++      $(INSTALL_DATA_IF_CHANGED) config.mk $(DESTDIR)$(clickdatadir)/config.mk
++      $(INSTALL_DATA_IF_CHANGED) etc/pkg-config.mk $(DESTDIR)$(clickdatadir)/pkg-config.mk
++      $(INSTALL_DATA_IF_CHANGED) $(srcdir)/etc/pkg-Makefile $(DESTDIR)$(clickdatadir)/pkg-Makefile
++      $(INSTALL_DATA_IF_CHANGED) $(srcdir)/etc/pkg-userlevel.mk $(DESTDIR)$(clickdatadir)/pkg-userlevel.mk
++      $(INSTALL_DATA_IF_CHANGED) $(srcdir)/etc/pkg-linuxmodule.mk $(DESTDIR)$(clickdatadir)/pkg-linuxmodule.mk
++      $(INSTALL_DATA_IF_CHANGED) $(srcdir)/etc/pkg-linuxmodule-26.mk $(DESTDIR)$(clickdatadir)/pkg-linuxmodule-26.mk
++      (cd $(top_srcdir); pwd) > $(DESTDIR)$(clickdatadir)/srcdir
++      /bin/rm -rf $(DESTDIR)$(clickdatadir)/src
++      /bin/ln -s "`cd $(top_srcdir); pwd`" $(DESTDIR)$(clickdatadir)/src
++install-doc: elementmap.xml
++      @cd doc && $(MAKE) install
++install-info:
++      @cd doc && $(MAKE) install-info
++install-man: elementmap.xml
++      @-for d in $(ALL_TARGETS) doc; do (cd $$d && $(MAKE) install-man); done
++install-local-include: stamp-h installch
++      $(mkinstalldirs) $(DESTDIR)$(clickincludedir)
++      $(INSTALL_DATA_IF_CHANGED) $(srcdir)/include/click/*.h $(DESTDIR)$(clickincludedir)
++      $(INSTALL_DATA_IF_CHANGED) $(srcdir)/include/click/*.hh $(DESTDIR)$(clickincludedir)
++      $(INSTALL_DATA_IF_CHANGED) $(srcdir)/include/click/*.cc $(DESTDIR)$(clickincludedir)
++      $(INSTALL_DATA_IF_CHANGED) $(top_builddir)/include/click/*.h $(DESTDIR)$(clickincludedir)
++      $(mkinstalldirs) $(DESTDIR)$(clickincludedir)/standard
++      $(INSTALL_DATA_IF_CHANGED) $(srcdir)/include/click/standard/*.hh $(DESTDIR)$(clickincludedir)/standard
++      $(mkinstalldirs) $(DESTDIR)$(netincludedir)
++      $(INSTALL_DATA_IF_CHANGED) $(srcdir)/include/clicknet/*.h $(DESTDIR)$(netincludedir)
++install-include: install-local-include
++      @cd tools && $(MAKE) install-include
++install-lib:
++      @if echo $(ALL_TARGETS) | grep userlevel >/dev/null 2>&1; then cd userlevel && $(MAKE) install-lib; fi
++      @if echo $(ALL_TARGETS) | grep tools >/dev/null 2>&1; then cd tools && $(MAKE) install-lib; fi
++
++uninstall: elementmap.xml
++      @for d in $(ALL_TARGETS) doc; do (cd $$d && $(MAKE) uninstall) || exit 1; done
++      @$(MAKE) uninstall-local uninstall-local-include
++uninstall-local:
++      /bin/rm -f $(DESTDIR)$(bindir)/click-buildtool $(DESTDIR)$(bindir)/click-compile $(DESTDIR)$(bindir)/click-mkelemmap $(DESTDIR)$(bindir)/testie $(DESTDIR)$(clickdatadir)/elementmap.xml $(DESTDIR)$(clickdatadir)/srcdir $(DESTDIR)$(clickdatadir)/src $(DESTDIR)$(clickdatadir)/config.mk $(DESTDIR)$(clickdatadir)/mkinstalldirs
++      /bin/rm -f $(DESTDIR)$(clickdatadir)/pkg-config.mk $(DESTDIR)$(clickdatadir)/pkg-userlevel.mk $(DESTDIR)$(clickdatadir)/pkg-linuxmodule.mk $(DESTDIR)$(clickdatadir)/pkg-linuxmodule-26.mk $(DESTDIR)$(clickdatadir)/pkg-Makefile
++uninstall-local-include:
++      cd $(srcdir)/include/click; for i in *.h *.hh *.cc; do /bin/rm -f $(DESTDIR)$(clickincludedir)/$$i; done
++      cd $(top_builddir)/include/click; for i in *.h; do /bin/rm -f $(DESTDIR)$(clickincludedir)/$$i; done
++      cd $(srcdir)/include/click/standard; for i in *.hh; do /bin/rm -f $(DESTDIR)$(clickincludedir)/standard/$$i; done
++      cd $(srcdir)/include/clicknet; for i in *.h; do /bin/rm -f $(DESTDIR)$(netincludedir)/$$i; done
++      @-/bin/rmdir $(DESTDIR)$(clickincludedir)/standard
++      @-/bin/rmdir $(DESTDIR)$(clickincludedir)
++      @-/bin/rmdir $(DESTDIR)$(netincludedir)
++
++elemlist elemlists: click-buildtool
++      @for d in $(DRIVERS); do (cd $$d && $(MAKE) elemlist) || exit 1; done
++
++MKELEMMAPFLAGS =
++elementmap.xml: click-buildtool $(srcdir)/click-mkelemmap always
++      echo $(DRIVERS)  app aqm ethernet icmp ip standard tcpudp $(EXTRA_PROVIDES) | $(top_builddir)/click-buildtool findelem -r "$(PROVISIONS) $(DRIVERS)" -p $(top_srcdir) | $(PERL) $(top_srcdir)/click-mkelemmap -r "$(PROVISIONS)" -t "$(DRIVERS)" -p $(top_srcdir) -Iinclude -s "`cd $(top_srcdir) && pwd`" $(MKELEMMAPFLAGS) > elementmap.xml
++always:
++      @:
++
++click-buildtool: $(srcdir)/click-buildtool.in config.status
++      cd $(top_builddir) && \
++        CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
++      @chmod +x click-buildtool; touch click-buildtool
++click-compile: $(srcdir)/click-compile.in config.status
++      cd $(top_builddir) && \
++        CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
++      @chmod +x click-compile; touch click-compile
++config.mk: $(srcdir)/config.mk.in config.status
++      cd $(top_builddir) && \
++        CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
++installch: $(srcdir)/installch.in config.status
++      cd $(top_builddir) && \
++        CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
++      @chmod +x installch; touch installch
++etc/pkg-config.mk: $(srcdir)/etc/pkg-config.mk.in config.status
++      cd $(top_builddir) && \
++        CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
++
++$(srcdir)/configure: $(srcdir)/configure.in $(srcdir)/m4/click.m4
++      cd $(srcdir) && $(ACLOCAL) && $(AUTOCONF)
++config.status: $(srcdir)/configure
++      $(SHELL) $(srcdir)/configure  '--prefix=/d/click/click-1.6.0-27/inst' '--exec-prefix=/d/click/click-1.6.0-27/inst' '--with-linux=/d/kernels/linux-2.6.27.10-clickport' '--with-linux-map=/d/uml/trelclickSystem.map'
++Makefile: config.status $(srcdir)/Makefile.in
++      cd $(top_builddir) && \
++        CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
++config.h: stamp-h
++stamp-h: $(srcdir)/config.h.in $(srcdir)/config-bsdmodule.h.in $(srcdir)/config-linuxmodule.h.in $(srcdir)/config-ns.h.in $(srcdir)/config-userlevel.h.in config.status
++      cd $(top_builddir) \
++        && CONFIG_FILES= $(SHELL) ./config.status
++      echo > stamp-h
++
++check-filenames:
++      @a=`find . \( -name \*.cc -or -name \*.c \) -print | sed 's/.*\/\(.*\)\.c*$$/\1.o/' | grep -v 'elements\.o' | sort | uniq -d`; \
++      if test -z $$a; then echo OK; else echo "*** warning: duplicate object file names:"; echo "$$a"; fi
++
++clean:
++      @-for d in  bsdmodule linuxmodule ns userlevel tools doc; do (cd $$d && $(MAKE) clean); done
++      -rm -f elementmap.xml conftest.*
++distclean:
++      @-for d in  bsdmodule linuxmodule ns userlevel tools doc; do (cd $$d && $(MAKE) distclean); done
++      -rm -f Makefile config.status etc/libclick/Makefile
++      -rm -f include/click/config.h include/click/config-*.h include/click/pathvars.h
++      -rm -f config.cache config.log click-buildtool click-compile config.mk stamp-h
++      -rm -f etc/pkg-config.mk
++      -rm -f elementmap.xml conftest.* installch
++
++
++distdir = $(PACKAGE)-$(VERSION)
++top_distdir = $(distdir)
++
++dist: distdir
++      tar czf $(distdir).tar.gz $(distdir)
++      -rm -rf $(distdir)
++distdir: $(srcdir)/configure
++      -rm -rf doc/click.info* doc/testie.1 $(srcdir)/doc/click.info* $(srcdir)/doc/testie.1
++      cd doc && $(MAKE) info testie.1
++      cd $(srcdir)/etc/samplepackage && $(AUTOCONF)
++      -rm -rf $(distdir)
++      mkdir $(distdir)
++      chmod 777 $(distdir)
++      @echo Copying library, documentation, configuration, and driver files...
++      [ "$(srcdir)" == . ] || cp doc/click.info* doc/testie.1 $(srcdir)/doc
++      @for file in `cat $(srcdir)/DISTFILES | grep .`; do \
++        if expr "$$file" : '.*:$$' >/dev/null 2>&1; then \
++          d=`echo $$file | sed 's/:$$//;s/^\.\///'`; \
++        elif test -d "$(srcdir)/$$d/$$file"; then \
++          mkdir $(distdir)/$$d/$$file; \
++          chmod 777 $(distdir)/$$d/$$file; \
++        else \
++          for f in `cd $(srcdir)/$$d && echo $$file`; do \
++            test -f "$(distdir)/$$d/$$f" \
++            || ln $(srcdir)/$$d/$$f $(distdir)/$$d/$$f 2> /dev/null \
++            || cp -p $(srcdir)/$$d/$$f $(distdir)/$$d/$$f \
++            || echo "Could not copy $$d/$$f!" 1>&2; \
++        done; fi; \
++      done
++      @echo Copying element files...
++      @d=$(srcdir); \
++      for dir in `cd $$d && find elements -type d | grep -v 'exopc\|CVS'`; do \
++        mkdir $(distdir)/$$dir 2>/dev/null; \
++        chmod 777 $(distdir)/$$dir; \
++        for cfile in `cd $$d && find $$dir -maxdepth 1 \( -type f -and \( -name \[^,.]\*.cc -or -name \[^,.]\*.c -or -name \[^,.]\*.hh -or -name \[^,.]\*.h -or -name README \) \) -print`; do \
++          ln $$d/$$cfile $(distdir)/$$cfile; \
++        done; \
++      done
++      @echo Removing files not meant for distribution...
++      @if test -r $(srcdir)/NODIST; then \
++      for i in `cat $(srcdir)/NODIST`; do \
++        rm -rf $(distdir)/$$i; \
++      done; fi
++      @if grep -q 'Id:.*benjie' `find $(srcdir)/etc -maxdepth 1 -type f`; then \
++        echo 'ERROR: Benjie must be punished!'; exit 1; \
++      fi
++      @if test `grep 'CLICK_VERSION=' $(srcdir)/configure.in` != `grep 'CLICK_VERSION=' $(srcdir)/etc/libclick/lc-configure.in`; then \
++        echo 'ERROR: Bad libclick CLICK_VERSION!'; exit 1; \
++      fi
++
++
++.PHONY: all always elemlist elemlists \
++      bsdmodule exopc linuxmodule ns tools userlevel \
++      clean distclean dist distdir \
++      install install-doc install-lib install-man install-local install-include install-local-include \
++      uninstall uninstall-local uninstall-local-include
+diff -Nurb click-1.6.0/autom4te.cache/output.0 click-1.6.0-27/autom4te.cache/output.0
+--- click-1.6.0/autom4te.cache/output.0        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/autom4te.cache/output.0     2009-01-27 12:14:43.000000000 -0500
+@@ -0,0 +1,17329 @@
++@%:@! /bin/sh
++@%:@ Guess values for system-dependent variables and create Makefiles.
++@%:@ Generated by GNU Autoconf 2.61 for click 1.6.0.
++@%:@ 
++@%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
++@%:@ 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
++@%:@ This configure script is free software; the Free Software Foundation
++@%:@ gives unlimited permission to copy, distribute and modify it.
++## --------------------- ##
++## M4sh Initialization.  ##
++## --------------------- ##
++
++# Be more Bourne compatible
++DUALCASE=1; export DUALCASE # for MKS sh
++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
++  emulate sh
++  NULLCMD=:
++  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
++  # is contrary to our usage.  Disable this feature.
++  alias -g '${1+"$@"}'='"$@"'
++  setopt NO_GLOB_SUBST
++else
++  case `(set -o) 2>/dev/null` in
++  *posix*) set -o posix ;;
++esac
++
++fi
++
++
++
++
++# PATH needs CR
++# Avoid depending upon Character Ranges.
++as_cr_letters='abcdefghijklmnopqrstuvwxyz'
++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
++as_cr_Letters=$as_cr_letters$as_cr_LETTERS
++as_cr_digits='0123456789'
++as_cr_alnum=$as_cr_Letters$as_cr_digits
++
++# The user is always right.
++if test "${PATH_SEPARATOR+set}" != set; then
++  echo "#! /bin/sh" >conf$$.sh
++  echo  "exit 0"   >>conf$$.sh
++  chmod +x conf$$.sh
++  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
++    PATH_SEPARATOR=';'
++  else
++    PATH_SEPARATOR=:
++  fi
++  rm -f conf$$.sh
++fi
++
++# Support unset when possible.
++if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
++  as_unset=unset
++else
++  as_unset=false
++fi
++
++
++# IFS
++# We need space, tab and new line, in precisely that order.  Quoting is
++# there to prevent editors from complaining about space-tab.
++# (If _AS_PATH_WALK were called with IFS unset, it would disable word
++# splitting by setting IFS to empty value.)
++as_nl='
++'
++IFS=" ""      $as_nl"
++
++# Find who we are.  Look in the path if we contain no directory separator.
++case $0 in
++  *[\\/]* ) as_myself=$0 ;;
++  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
++done
++IFS=$as_save_IFS
++
++     ;;
++esac
++# We did not find ourselves, most probably we were run as `sh COMMAND'
++# in which case we are not to be found in the path.
++if test "x$as_myself" = x; then
++  as_myself=$0
++fi
++if test ! -f "$as_myself"; then
++  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
++  { (exit 1); exit 1; }
++fi
++
++# Work around bugs in pre-3.0 UWIN ksh.
++for as_var in ENV MAIL MAILPATH
++do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
++done
++PS1='$ '
++PS2='> '
++PS4='+ '
++
++# NLS nuisances.
++for as_var in \
++  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
++  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
++  LC_TELEPHONE LC_TIME
++do
++  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
++    eval $as_var=C; export $as_var
++  else
++    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
++  fi
++done
++
++# Required to use basename.
++if expr a : '\(a\)' >/dev/null 2>&1 &&
++   test "X`expr 00001 : '.*\(...\)'`" = X001; then
++  as_expr=expr
++else
++  as_expr=false
++fi
++
++if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
++  as_basename=basename
++else
++  as_basename=false
++fi
++
++
++# Name of the executable.
++as_me=`$as_basename -- "$0" ||
++$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
++       X"$0" : 'X\(//\)$' \| \
++       X"$0" : 'X\(/\)' \| . 2>/dev/null ||
++echo X/"$0" |
++    sed '/^.*\/\([^/][^/]*\)\/*$/{
++          s//\1/
++          q
++        }
++        /^X\/\(\/\/\)$/{
++          s//\1/
++          q
++        }
++        /^X\/\(\/\).*/{
++          s//\1/
++          q
++        }
++        s/.*/./; q'`
++
++# CDPATH.
++$as_unset CDPATH
++
++
++if test "x$CONFIG_SHELL" = x; then
++  if (eval ":") 2>/dev/null; then
++  as_have_required=yes
++else
++  as_have_required=no
++fi
++
++  if test $as_have_required = yes &&   (eval ":
++(as_func_return () {
++  (exit \$1)
++}
++as_func_success () {
++  as_func_return 0
++}
++as_func_failure () {
++  as_func_return 1
++}
++as_func_ret_success () {
++  return 0
++}
++as_func_ret_failure () {
++  return 1
++}
++
++exitcode=0
++if as_func_success; then
++  :
++else
++  exitcode=1
++  echo as_func_success failed.
++fi
++
++if as_func_failure; then
++  exitcode=1
++  echo as_func_failure succeeded.
++fi
++
++if as_func_ret_success; then
++  :
++else
++  exitcode=1
++  echo as_func_ret_success failed.
++fi
++
++if as_func_ret_failure; then
++  exitcode=1
++  echo as_func_ret_failure succeeded.
++fi
++
++if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
++  :
++else
++  exitcode=1
++  echo positional parameters were not saved.
++fi
++
++test \$exitcode = 0) || { (exit 1); exit 1; }
++
++(
++  as_lineno_1=\$LINENO
++  as_lineno_2=\$LINENO
++  test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
++  test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
++") 2> /dev/null; then
++  :
++else
++  as_candidate_shells=
++    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  case $as_dir in
++       /*)
++         for as_base in sh bash ksh sh5; do
++           as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
++         done;;
++       esac
++done
++IFS=$as_save_IFS
++
++
++      for as_shell in $as_candidate_shells $SHELL; do
++       # Try only shells that exist, to save several forks.
++       if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
++              { ("$as_shell") 2> /dev/null <<\_ASEOF
++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
++  emulate sh
++  NULLCMD=:
++  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
++  # is contrary to our usage.  Disable this feature.
++  alias -g '${1+"$@"}'='"$@"'
++  setopt NO_GLOB_SUBST
++else
++  case `(set -o) 2>/dev/null` in
++  *posix*) set -o posix ;;
++esac
++
++fi
++
++
++:
++_ASEOF
++}; then
++  CONFIG_SHELL=$as_shell
++             as_have_required=yes
++             if { "$as_shell" 2> /dev/null <<\_ASEOF
++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
++  emulate sh
++  NULLCMD=:
++  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
++  # is contrary to our usage.  Disable this feature.
++  alias -g '${1+"$@"}'='"$@"'
++  setopt NO_GLOB_SUBST
++else
++  case `(set -o) 2>/dev/null` in
++  *posix*) set -o posix ;;
++esac
++
++fi
++
++
++:
++(as_func_return () {
++  (exit $1)
++}
++as_func_success () {
++  as_func_return 0
++}
++as_func_failure () {
++  as_func_return 1
++}
++as_func_ret_success () {
++  return 0
++}
++as_func_ret_failure () {
++  return 1
++}
++
++exitcode=0
++if as_func_success; then
++  :
++else
++  exitcode=1
++  echo as_func_success failed.
++fi
++
++if as_func_failure; then
++  exitcode=1
++  echo as_func_failure succeeded.
++fi
++
++if as_func_ret_success; then
++  :
++else
++  exitcode=1
++  echo as_func_ret_success failed.
++fi
++
++if as_func_ret_failure; then
++  exitcode=1
++  echo as_func_ret_failure succeeded.
++fi
++
++if ( set x; as_func_ret_success y && test x = "$1" ); then
++  :
++else
++  exitcode=1
++  echo positional parameters were not saved.
++fi
++
++test $exitcode = 0) || { (exit 1); exit 1; }
++
++(
++  as_lineno_1=$LINENO
++  as_lineno_2=$LINENO
++  test "x$as_lineno_1" != "x$as_lineno_2" &&
++  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
++
++_ASEOF
++}; then
++  break
++fi
++
++fi
++
++      done
++
++      if test "x$CONFIG_SHELL" != x; then
++  for as_var in BASH_ENV ENV
++        do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
++        done
++        export CONFIG_SHELL
++        exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
++fi
++
++
++    if test $as_have_required = no; then
++  echo This script requires a shell more modern than all the
++      echo shells that I found on your system.  Please install a
++      echo modern shell, or manually run the script under such a
++      echo shell if you do have one.
++      { (exit 1); exit 1; }
++fi
++
++    
++fi
++
++fi
++
++
++
++(eval "as_func_return () {
++  (exit \$1)
++}
++as_func_success () {
++  as_func_return 0
++}
++as_func_failure () {
++  as_func_return 1
++}
++as_func_ret_success () {
++  return 0
++}
++as_func_ret_failure () {
++  return 1
++}
++
++exitcode=0
++if as_func_success; then
++  :
++else
++  exitcode=1
++  echo as_func_success failed.
++fi
++
++if as_func_failure; then
++  exitcode=1
++  echo as_func_failure succeeded.
++fi
++
++if as_func_ret_success; then
++  :
++else
++  exitcode=1
++  echo as_func_ret_success failed.
++fi
++
++if as_func_ret_failure; then
++  exitcode=1
++  echo as_func_ret_failure succeeded.
++fi
++
++if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
++  :
++else
++  exitcode=1
++  echo positional parameters were not saved.
++fi
++
++test \$exitcode = 0") || {
++  echo No shell found that supports shell functions.
++  echo Please tell autoconf@gnu.org about your system,
++  echo including any error possibly output before this
++  echo message
++}
++
++
++
++  as_lineno_1=$LINENO
++  as_lineno_2=$LINENO
++  test "x$as_lineno_1" != "x$as_lineno_2" &&
++  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
++
++  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
++  # uniformly replaced by the line number.  The first 'sed' inserts a
++  # line-number line after each line using $LINENO; the second 'sed'
++  # does the real work.  The second script uses 'N' to pair each
++  # line-number line with the line containing $LINENO, and appends
++  # trailing '-' during substitution so that $LINENO is not a special
++  # case at line end.
++  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
++  # scripts with optimization help from Paolo Bonzini.  Blame Lee
++  # E. McMahon (1931-1989) for sed's syntax.  :-)
++  sed -n '
++    p
++    /[$]LINENO/=
++  ' <$as_myself |
++    sed '
++      s/[$]LINENO.*/&-/
++      t lineno
++      b
++      :lineno
++      N
++      :loop
++      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
++      t loop
++      s/-\n.*//
++    ' >$as_me.lineno &&
++  chmod +x "$as_me.lineno" ||
++    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
++   { (exit 1); exit 1; }; }
++
++  # Don't try to exec as it changes $[0], causing all sort of problems
++  # (the dirname of $[0] is not the place where we might find the
++  # original and so on.  Autoconf is especially sensitive to this).
++  . "./$as_me.lineno"
++  # Exit status is that of the last command.
++  exit
++}
++
++
++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
++  as_dirname=dirname
++else
++  as_dirname=false
++fi
++
++ECHO_C= ECHO_N= ECHO_T=
++case `echo -n x` in
++-n*)
++  case `echo 'x\c'` in
++  *c*) ECHO_T='       ';;     # ECHO_T is single tab character.
++  *)   ECHO_C='\c';;
++  esac;;
++*)
++  ECHO_N='-n';;
++esac
++
++if expr a : '\(a\)' >/dev/null 2>&1 &&
++   test "X`expr 00001 : '.*\(...\)'`" = X001; then
++  as_expr=expr
++else
++  as_expr=false
++fi
++
++rm -f conf$$ conf$$.exe conf$$.file
++if test -d conf$$.dir; then
++  rm -f conf$$.dir/conf$$.file
++else
++  rm -f conf$$.dir
++  mkdir conf$$.dir
++fi
++echo >conf$$.file
++if ln -s conf$$.file conf$$ 2>/dev/null; then
++  as_ln_s='ln -s'
++  # ... but there are two gotchas:
++  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
++  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
++  # In both cases, we have to default to `cp -p'.
++  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
++    as_ln_s='cp -p'
++elif ln conf$$.file conf$$ 2>/dev/null; then
++  as_ln_s=ln
++else
++  as_ln_s='cp -p'
++fi
++rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
++rmdir conf$$.dir 2>/dev/null
++
++if mkdir -p . 2>/dev/null; then
++  as_mkdir_p=:
++else
++  test -d ./-p && rmdir ./-p
++  as_mkdir_p=false
++fi
++
++if test -x / >/dev/null 2>&1; then
++  as_test_x='test -x'
++else
++  if ls -dL / >/dev/null 2>&1; then
++    as_ls_L_option=L
++  else
++    as_ls_L_option=
++  fi
++  as_test_x='
++    eval sh -c '\''
++      if test -d "$1"; then
++        test -d "$1/.";
++      else
++      case $1 in
++        -*)set "./$1";;
++      esac;
++      case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
++      ???[sx]*):;;*)false;;esac;fi
++    '\'' sh
++  '
++fi
++as_executable_p=$as_test_x
++
++# Sed expression to map a string onto a valid CPP name.
++as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
++
++# Sed expression to map a string onto a valid variable name.
++as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
++
++
++
++exec 7<&0 </dev/null 6>&1
++
++# Name of the host.
++# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
++# so uname gets run too.
++ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
++
++#
++# Initializations.
++#
++ac_default_prefix=/usr/local
++ac_clean_files=
++ac_config_libobj_dir=.
++LIB@&t@OBJS=
++cross_compiling=no
++subdirs=
++MFLAGS=
++MAKEFLAGS=
++SHELL=${CONFIG_SHELL-/bin/sh}
++
++# Identity of this package.
++PACKAGE_NAME='click'
++PACKAGE_TARNAME='click'
++PACKAGE_VERSION='1.6.0'
++PACKAGE_STRING='click 1.6.0'
++PACKAGE_BUGREPORT=''
++
++# Factoring default headers for most tests.
++ac_includes_default="\
++#include <stdio.h>
++#ifdef HAVE_SYS_TYPES_H
++# include <sys/types.h>
++#endif
++#ifdef HAVE_SYS_STAT_H
++# include <sys/stat.h>
++#endif
++#ifdef STDC_HEADERS
++# include <stdlib.h>
++# include <stddef.h>
++#else
++# ifdef HAVE_STDLIB_H
++#  include <stdlib.h>
++# endif
++#endif
++#ifdef HAVE_STRING_H
++# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
++#  include <memory.h>
++# endif
++# include <string.h>
++#endif
++#ifdef HAVE_STRINGS_H
++# include <strings.h>
++#endif
++#ifdef HAVE_INTTYPES_H
++# include <inttypes.h>
++#endif
++#ifdef HAVE_STDINT_H
++# include <stdint.h>
++#endif
++#ifdef HAVE_UNISTD_H
++# include <unistd.h>
++#endif"
++
++ac_subst_vars='SHELL
++PATH_SEPARATOR
++PACKAGE_NAME
++PACKAGE_TARNAME
++PACKAGE_VERSION
++PACKAGE_STRING
++PACKAGE_BUGREPORT
++exec_prefix
++prefix
++program_transform_name
++bindir
++sbindir
++libexecdir
++datarootdir
++datadir
++sysconfdir
++sharedstatedir
++localstatedir
++includedir
++oldincludedir
++docdir
++infodir
++htmldir
++dvidir
++pdfdir
++psdir
++libdir
++localedir
++mandir
++DEFS
++ECHO_C
++ECHO_N
++ECHO_T
++LIBS
++build_alias
++host_alias
++target_alias
++ac_configure_args
++CLICK_VERSION
++conf_auxdir
++build
++build_cpu
++build_vendor
++build_os
++host
++host_cpu
++host_vendor
++host_os
++target
++target_cpu
++target_vendor
++target_os
++CC
++CXX
++CFLAGS
++LDFLAGS
++CPPFLAGS
++ac_ct_CC
++EXEEXT
++OBJEXT
++DEPCFLAGS
++CFLAGS_NDEBUG
++CPP
++CXXFLAGS
++ac_ct_CXX
++CXXFLAGS_NDEBUG
++CXXCPP
++KERNEL_CC
++KERNEL_CXX
++AR
++LD
++RANLIB
++STRIP
++AR_CREATEFLAGS
++linuxdir
++element_groups
++freebsd_srcdir
++freebsd_includedir
++LIB@&t@OBJS
++GREP
++EGREP
++BUILD_CC
++BUILD_CXX
++BUILD_AR
++BUILD_RANLIB
++HOST_TOOLS
++DL_LIBS
++LDMODULEFLAGS
++BUILD_DL_LIBS
++SOCKET_LIBS
++EXTRA_DRIVER_OBJS
++EXTRA_TOOL_OBJS
++LINUXMODULE_2_6
++POSSIBLE_DRIVERS
++DRIVERS
++HAVE_USERLEVEL_DRIVER
++HAVE_LINUXMODULE_DRIVER
++HAVE_BSDMODULE_DRIVER
++OTHER_TARGETS
++TOOLDIRS
++TOOL_TARGETS
++PCAP_INCLUDES
++PCAP_LIBS
++PROPER_INCLUDES
++PROPER_LIBS
++XML2CLICK
++EXPAT_INCLUDES
++EXPAT_LIBS
++LINUX_CFLAGS
++INSTALL_PROGRAM
++INSTALL_SCRIPT
++INSTALL_DATA
++INSTALL_IF_CHANGED
++CLICKINSTALL
++SUBMAKE
++GMAKE
++AUTOCONF
++perl5
++localperl5
++PERL
++INSTALL_INFO
++MAKEINFO
++TEXI2DVI
++POD2MAN
++clickdatadir
++provisions
++LTLIBOBJS'
++ac_subst_files=''
++      ac_precious_vars='build_alias
++host_alias
++target_alias
++CC
++CFLAGS
++LDFLAGS
++LIBS
++CPPFLAGS
++CPP
++CXX
++CXXFLAGS
++CCC
++CXXCPP'
++
++
++# Initialize some variables set by options.
++ac_init_help=
++ac_init_version=false
++# The variables have the same names as the options, with
++# dashes changed to underlines.
++cache_file=/dev/null
++exec_prefix=NONE
++no_create=
++no_recursion=
++prefix=NONE
++program_prefix=NONE
++program_suffix=NONE
++program_transform_name=s,x,x,
++silent=
++site=
++srcdir=
++verbose=
++x_includes=NONE
++x_libraries=NONE
++
++# Installation directory options.
++# These are left unexpanded so users can "make install exec_prefix=/foo"
++# and all the variables that are supposed to be based on exec_prefix
++# by default will actually change.
++# Use braces instead of parens because sh, perl, etc. also accept them.
++# (The list follows the same order as the GNU Coding Standards.)
++bindir='${exec_prefix}/bin'
++sbindir='${exec_prefix}/sbin'
++libexecdir='${exec_prefix}/libexec'
++datarootdir='${prefix}/share'
++datadir='${datarootdir}'
++sysconfdir='${prefix}/etc'
++sharedstatedir='${prefix}/com'
++localstatedir='${prefix}/var'
++includedir='${prefix}/include'
++oldincludedir='/usr/include'
++docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
++infodir='${datarootdir}/info'
++htmldir='${docdir}'
++dvidir='${docdir}'
++pdfdir='${docdir}'
++psdir='${docdir}'
++libdir='${exec_prefix}/lib'
++localedir='${datarootdir}/locale'
++mandir='${datarootdir}/man'
++
++ac_prev=
++ac_dashdash=
++for ac_option
++do
++  # If the previous option needs an argument, assign it.
++  if test -n "$ac_prev"; then
++    eval $ac_prev=\$ac_option
++    ac_prev=
++    continue
++  fi
++
++  case $ac_option in
++  *=*)        ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
++  *)  ac_optarg=yes ;;
++  esac
++
++  # Accept the important Cygnus configure options, so we can diagnose typos.
++
++  case $ac_dashdash$ac_option in
++  --)
++    ac_dashdash=yes ;;
++
++  -bindir | --bindir | --bindi | --bind | --bin | --bi)
++    ac_prev=bindir ;;
++  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
++    bindir=$ac_optarg ;;
++
++  -build | --build | --buil | --bui | --bu)
++    ac_prev=build_alias ;;
++  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
++    build_alias=$ac_optarg ;;
++
++  -cache-file | --cache-file | --cache-fil | --cache-fi \
++  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
++    ac_prev=cache_file ;;
++  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
++  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
++    cache_file=$ac_optarg ;;
++
++  --config-cache | -C)
++    cache_file=config.cache ;;
++
++  -datadir | --datadir | --datadi | --datad)
++    ac_prev=datadir ;;
++  -datadir=* | --datadir=* | --datadi=* | --datad=*)
++    datadir=$ac_optarg ;;
++
++  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
++  | --dataroo | --dataro | --datar)
++    ac_prev=datarootdir ;;
++  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
++  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
++    datarootdir=$ac_optarg ;;
++
++  -disable-* | --disable-*)
++    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
++    # Reject names that are not valid shell variable names.
++    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
++      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
++   { (exit 1); exit 1; }; }
++    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
++    eval enable_$ac_feature=no ;;
++
++  -docdir | --docdir | --docdi | --doc | --do)
++    ac_prev=docdir ;;
++  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
++    docdir=$ac_optarg ;;
++
++  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
++    ac_prev=dvidir ;;
++  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
++    dvidir=$ac_optarg ;;
++
++  -enable-* | --enable-*)
++    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
++    # Reject names that are not valid shell variable names.
++    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
++      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
++   { (exit 1); exit 1; }; }
++    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
++    eval enable_$ac_feature=\$ac_optarg ;;
++
++  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
++  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
++  | --exec | --exe | --ex)
++    ac_prev=exec_prefix ;;
++  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
++  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
++  | --exec=* | --exe=* | --ex=*)
++    exec_prefix=$ac_optarg ;;
++
++  -gas | --gas | --ga | --g)
++    # Obsolete; use --with-gas.
++    with_gas=yes ;;
++
++  -help | --help | --hel | --he | -h)
++    ac_init_help=long ;;
++  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
++    ac_init_help=recursive ;;
++  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
++    ac_init_help=short ;;
++
++  -host | --host | --hos | --ho)
++    ac_prev=host_alias ;;
++  -host=* | --host=* | --hos=* | --ho=*)
++    host_alias=$ac_optarg ;;
++
++  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
++    ac_prev=htmldir ;;
++  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
++  | --ht=*)
++    htmldir=$ac_optarg ;;
++
++  -includedir | --includedir | --includedi | --included | --include \
++  | --includ | --inclu | --incl | --inc)
++    ac_prev=includedir ;;
++  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
++  | --includ=* | --inclu=* | --incl=* | --inc=*)
++    includedir=$ac_optarg ;;
++
++  -infodir | --infodir | --infodi | --infod | --info | --inf)
++    ac_prev=infodir ;;
++  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
++    infodir=$ac_optarg ;;
++
++  -libdir | --libdir | --libdi | --libd)
++    ac_prev=libdir ;;
++  -libdir=* | --libdir=* | --libdi=* | --libd=*)
++    libdir=$ac_optarg ;;
++
++  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
++  | --libexe | --libex | --libe)
++    ac_prev=libexecdir ;;
++  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
++  | --libexe=* | --libex=* | --libe=*)
++    libexecdir=$ac_optarg ;;
++
++  -localedir | --localedir | --localedi | --localed | --locale)
++    ac_prev=localedir ;;
++  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
++    localedir=$ac_optarg ;;
++
++  -localstatedir | --localstatedir | --localstatedi | --localstated \
++  | --localstate | --localstat | --localsta | --localst | --locals)
++    ac_prev=localstatedir ;;
++  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
++  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
++    localstatedir=$ac_optarg ;;
++
++  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
++    ac_prev=mandir ;;
++  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
++    mandir=$ac_optarg ;;
++
++  -nfp | --nfp | --nf)
++    # Obsolete; use --without-fp.
++    with_fp=no ;;
++
++  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
++  | --no-cr | --no-c | -n)
++    no_create=yes ;;
++
++  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
++  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
++    no_recursion=yes ;;
++
++  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
++  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
++  | --oldin | --oldi | --old | --ol | --o)
++    ac_prev=oldincludedir ;;
++  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
++  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
++  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
++    oldincludedir=$ac_optarg ;;
++
++  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
++    ac_prev=prefix ;;
++  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
++    prefix=$ac_optarg ;;
++
++  -program-prefix | --program-prefix | --program-prefi | --program-pref \
++  | --program-pre | --program-pr | --program-p)
++    ac_prev=program_prefix ;;
++  -program-prefix=* | --program-prefix=* | --program-prefi=* \
++  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
++    program_prefix=$ac_optarg ;;
++
++  -program-suffix | --program-suffix | --program-suffi | --program-suff \
++  | --program-suf | --program-su | --program-s)
++    ac_prev=program_suffix ;;
++  -program-suffix=* | --program-suffix=* | --program-suffi=* \
++  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
++    program_suffix=$ac_optarg ;;
++
++  -program-transform-name | --program-transform-name \
++  | --program-transform-nam | --program-transform-na \
++  | --program-transform-n | --program-transform- \
++  | --program-transform | --program-transfor \
++  | --program-transfo | --program-transf \
++  | --program-trans | --program-tran \
++  | --progr-tra | --program-tr | --program-t)
++    ac_prev=program_transform_name ;;
++  -program-transform-name=* | --program-transform-name=* \
++  | --program-transform-nam=* | --program-transform-na=* \
++  | --program-transform-n=* | --program-transform-=* \
++  | --program-transform=* | --program-transfor=* \
++  | --program-transfo=* | --program-transf=* \
++  | --program-trans=* | --program-tran=* \
++  | --progr-tra=* | --program-tr=* | --program-t=*)
++    program_transform_name=$ac_optarg ;;
++
++  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
++    ac_prev=pdfdir ;;
++  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
++    pdfdir=$ac_optarg ;;
++
++  -psdir | --psdir | --psdi | --psd | --ps)
++    ac_prev=psdir ;;
++  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
++    psdir=$ac_optarg ;;
++
++  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
++  | -silent | --silent | --silen | --sile | --sil)
++    silent=yes ;;
++
++  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
++    ac_prev=sbindir ;;
++  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
++  | --sbi=* | --sb=*)
++    sbindir=$ac_optarg ;;
++
++  -sharedstatedir | --sharedstatedir | --sharedstatedi \
++  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
++  | --sharedst | --shareds | --shared | --share | --shar \
++  | --sha | --sh)
++    ac_prev=sharedstatedir ;;
++  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
++  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
++  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
++  | --sha=* | --sh=*)
++    sharedstatedir=$ac_optarg ;;
++
++  -site | --site | --sit)
++    ac_prev=site ;;
++  -site=* | --site=* | --sit=*)
++    site=$ac_optarg ;;
++
++  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
++    ac_prev=srcdir ;;
++  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
++    srcdir=$ac_optarg ;;
++
++  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
++  | --syscon | --sysco | --sysc | --sys | --sy)
++    ac_prev=sysconfdir ;;
++  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
++  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
++    sysconfdir=$ac_optarg ;;
++
++  -target | --target | --targe | --targ | --tar | --ta | --t)
++    ac_prev=target_alias ;;
++  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
++    target_alias=$ac_optarg ;;
++
++  -v | -verbose | --verbose | --verbos | --verbo | --verb)
++    verbose=yes ;;
++
++  -version | --version | --versio | --versi | --vers | -V)
++    ac_init_version=: ;;
++
++  -with-* | --with-*)
++    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
++    # Reject names that are not valid shell variable names.
++    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
++      { echo "$as_me: error: invalid package name: $ac_package" >&2
++   { (exit 1); exit 1; }; }
++    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
++    eval with_$ac_package=\$ac_optarg ;;
++
++  -without-* | --without-*)
++    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
++    # Reject names that are not valid shell variable names.
++    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
++      { echo "$as_me: error: invalid package name: $ac_package" >&2
++   { (exit 1); exit 1; }; }
++    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
++    eval with_$ac_package=no ;;
++
++  --x)
++    # Obsolete; use --with-x.
++    with_x=yes ;;
++
++  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
++  | --x-incl | --x-inc | --x-in | --x-i)
++    ac_prev=x_includes ;;
++  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
++  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
++    x_includes=$ac_optarg ;;
++
++  -x-libraries | --x-libraries | --x-librarie | --x-librari \
++  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
++    ac_prev=x_libraries ;;
++  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
++  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
++    x_libraries=$ac_optarg ;;
++
++  -*) { echo "$as_me: error: unrecognized option: $ac_option
++Try \`$0 --help' for more information." >&2
++   { (exit 1); exit 1; }; }
++    ;;
++
++  *=*)
++    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
++    # Reject names that are not valid shell variable names.
++    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
++      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
++   { (exit 1); exit 1; }; }
++    eval $ac_envvar=\$ac_optarg
++    export $ac_envvar ;;
++
++  *)
++    # FIXME: should be removed in autoconf 3.0.
++    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
++    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
++      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
++    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
++    ;;
++
++  esac
++done
++
++if test -n "$ac_prev"; then
++  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
++  { echo "$as_me: error: missing argument to $ac_option" >&2
++   { (exit 1); exit 1; }; }
++fi
++
++# Be sure to have absolute directory names.
++for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
++              datadir sysconfdir sharedstatedir localstatedir includedir \
++              oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
++              libdir localedir mandir
++do
++  eval ac_val=\$$ac_var
++  case $ac_val in
++    [\\/$]* | ?:[\\/]* )  continue;;
++    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
++  esac
++  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
++   { (exit 1); exit 1; }; }
++done
++
++# There might be people who depend on the old broken behavior: `$host'
++# used to hold the argument of --host etc.
++# FIXME: To remove some day.
++build=$build_alias
++host=$host_alias
++target=$target_alias
++
++# FIXME: To remove some day.
++if test "x$host_alias" != x; then
++  if test "x$build_alias" = x; then
++    cross_compiling=maybe
++    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
++    If a cross compiler is detected then cross compile mode will be used." >&2
++  elif test "x$build_alias" != "x$host_alias"; then
++    cross_compiling=yes
++  fi
++fi
++
++ac_tool_prefix=
++test -n "$host_alias" && ac_tool_prefix=$host_alias-
++
++test "$silent" = yes && exec 6>/dev/null
++
++
++ac_pwd=`pwd` && test -n "$ac_pwd" &&
++ac_ls_di=`ls -di .` &&
++ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
++  { echo "$as_me: error: Working directory cannot be determined" >&2
++   { (exit 1); exit 1; }; }
++test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
++  { echo "$as_me: error: pwd does not report name of working directory" >&2
++   { (exit 1); exit 1; }; }
++
++
++# Find the source files, if location was not specified.
++if test -z "$srcdir"; then
++  ac_srcdir_defaulted=yes
++  # Try the directory containing this script, then the parent directory.
++  ac_confdir=`$as_dirname -- "$0" ||
++$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++       X"$0" : 'X\(//\)[^/]' \| \
++       X"$0" : 'X\(//\)$' \| \
++       X"$0" : 'X\(/\)' \| . 2>/dev/null ||
++echo X"$0" |
++    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++          s//\1/
++          q
++        }
++        /^X\(\/\/\)[^/].*/{
++          s//\1/
++          q
++        }
++        /^X\(\/\/\)$/{
++          s//\1/
++          q
++        }
++        /^X\(\/\).*/{
++          s//\1/
++          q
++        }
++        s/.*/./; q'`
++  srcdir=$ac_confdir
++  if test ! -r "$srcdir/$ac_unique_file"; then
++    srcdir=..
++  fi
++else
++  ac_srcdir_defaulted=no
++fi
++if test ! -r "$srcdir/$ac_unique_file"; then
++  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
++  { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
++   { (exit 1); exit 1; }; }
++fi
++ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
++ac_abs_confdir=`(
++      cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
++   { (exit 1); exit 1; }; }
++      pwd)`
++# When building in place, set srcdir=.
++if test "$ac_abs_confdir" = "$ac_pwd"; then
++  srcdir=.
++fi
++# Remove unnecessary trailing slashes from srcdir.
++# Double slashes in file names in object file debugging info
++# mess up M-x gdb in Emacs.
++case $srcdir in
++*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
++esac
++for ac_var in $ac_precious_vars; do
++  eval ac_env_${ac_var}_set=\${${ac_var}+set}
++  eval ac_env_${ac_var}_value=\$${ac_var}
++  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
++  eval ac_cv_env_${ac_var}_value=\$${ac_var}
++done
++
++#
++# Report the --help message.
++#
++if test "$ac_init_help" = "long"; then
++  # Omit some internal or obsolete options to make the list less imposing.
++  # This message is too long to be a string in the A/UX 3.1 sh.
++  cat <<_ACEOF
++\`configure' configures click 1.6.0 to adapt to many kinds of systems.
++
++Usage: $0 [OPTION]... [VAR=VALUE]...
++
++To assign environment variables (e.g., CC, CFLAGS...), specify them as
++VAR=VALUE.  See below for descriptions of some of the useful variables.
++
++Defaults for the options are specified in brackets.
++
++Configuration:
++  -h, --help              display this help and exit
++      --help=short        display options specific to this package
++      --help=recursive    display the short help of all the included packages
++  -V, --version           display version information and exit
++  -q, --quiet, --silent   do not print \`checking...' messages
++      --cache-file=FILE   cache test results in FILE [disabled]
++  -C, --config-cache      alias for \`--cache-file=config.cache'
++  -n, --no-create         do not create output files
++      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
++
++Installation directories:
++  --prefix=PREFIX         install architecture-independent files in PREFIX
++                        [$ac_default_prefix]
++  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
++                        [PREFIX]
++
++By default, \`make install' will install all the files in
++\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
++an installation prefix other than \`$ac_default_prefix' using \`--prefix',
++for instance \`--prefix=\$HOME'.
++
++For better control, use the options below.
++
++Fine tuning of the installation directories:
++  --bindir=DIR           user executables [EPREFIX/bin]
++  --sbindir=DIR          system admin executables [EPREFIX/sbin]
++  --libexecdir=DIR       program executables [EPREFIX/libexec]
++  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
++  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
++  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
++  --libdir=DIR           object code libraries [EPREFIX/lib]
++  --includedir=DIR       C header files [PREFIX/include]
++  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
++  --datarootdir=DIR      read-only arch.-independent data root [PREFIX/share]
++  --datadir=DIR          read-only architecture-independent data [DATAROOTDIR]
++  --infodir=DIR          info documentation [DATAROOTDIR/info]
++  --localedir=DIR        locale-dependent data [DATAROOTDIR/locale]
++  --mandir=DIR           man documentation [DATAROOTDIR/man]
++  --docdir=DIR           documentation root @<:@DATAROOTDIR/doc/click@:>@
++  --htmldir=DIR          html documentation [DOCDIR]
++  --dvidir=DIR           dvi documentation [DOCDIR]
++  --pdfdir=DIR           pdf documentation [DOCDIR]
++  --psdir=DIR            ps documentation [DOCDIR]
++_ACEOF
++
++  cat <<\_ACEOF
++
++System types:
++  --build=BUILD     configure for building on BUILD [guessed]
++  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
++  --target=TARGET   configure for building compilers for TARGET [HOST]
++_ACEOF
++fi
++
++if test -n "$ac_init_help"; then
++  case $ac_init_help in
++     short | recursive ) echo "Configuration of click 1.6.0:";;
++   esac
++  cat <<\_ACEOF
++
++Optional Features:
++  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
++  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
++  --disable-userlevel     disable user-level driver
++    --enable-user-multithread support userlevel multithreading (EXPERIMENTAL)
++  --disable-linuxmodule   disable Linux kernel driver
++    --enable-multithread[=N]  support kernel multithreading, N threads max
++    --enable-warp9            reduce PollDevice functionality for speed
++    --enable-kassert          enable kernel assertions
++    --enable-adaptive         use adaptive scheduler to flexibly arbitrate
++                              between Click and the kernel (EXPERIMENTAL)
++  --enable-bsdmodule      enable FreeBSD kernel driver (EXPERIMENTAL)
++  --enable-nsclick        enable NS simulator driver (EXPERIMENTAL)
++  --enable-all-elements   include all provided element groups
++  --enable-analysis       include elements for network analysis
++  --disable-app           do not include application-level elements
++  --disable-aqm           do not include active queue management elements
++  --disable-ethernet      do not include Ethernet elements
++  --enable-etherswitch    include Ethernet switch elements (EXPERIMENTAL)
++  --enable-grid           include Grid elements (see FAQ)
++  --disable-icmp          do not include ICMP elements
++  --disable-ip            do not include IP elements
++  --enable-ip6            include IPv6 elements (EXPERIMENTAL)
++  --enable-ipsec          include IP security elements
++  --enable-local          include local elements
++  --enable-radio          include radio elements (EXPERIMENTAL)
++  --enable-simple         include simple versions of other elements
++  --disable-standard      do not include standard elements
++  --disable-tcpudp        do not include TCP and UDP elements
++  --enable-test           include regression test elements
++  --enable-wifi           include wifi elements and support
++  --enable-experimental   enable experimental elements in normal groups
++  --disable-int64         disable 64-bit integer support
++  --enable-nanotimestamp  enable nanosecond timestamps
++  --enable-tools=WHERE    enable tools (host/build/mixed/no) [mixed]
++  --disable-dynamic-linking disable dynamic linking
++  --disable-stride        disable stride scheduler
++  --enable-task-heap      use heap for task list
++  --enable-dmalloc        enable debugging malloc
++  --enable-intel-cpu      enable Intel-specific machine instructions
++
++Optional Packages:
++  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
++  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
++  --with-linux[=DIR]      Linux source code is in DIR
++  --with-linux-map[=FILE] filename for Linux System.map [LINUXDIR/System.map]
++  --with-freebsd[=SRC,INC] FreeBSD source code is in SRC [/usr/src/sys],
++                          include directory is INC [/usr/include]
++  --with-proper[=PREFIX]  use PlanetLab Proper library (optional)
++  --with-expat[=PREFIX]   locate expat XML library (optional)
++
++Some influential environment variables:
++  CC          C compiler command
++  CFLAGS      C compiler flags
++  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
++              nonstandard directory <lib dir>
++  LIBS        libraries to pass to the linker, e.g. -l<library>
++  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
++              you have headers in a nonstandard directory <include dir>
++  CPP         C preprocessor
++  CXX         C++ compiler command
++  CXXFLAGS    C++ compiler flags
++  CXXCPP      C++ preprocessor
++
++Use these variables to override the choices made by `configure' or to help
++it to find libraries and programs with nonstandard names/locations.
++
++_ACEOF
++ac_status=$?
++fi
++
++if test "$ac_init_help" = "recursive"; then
++  # If there are subdirs, report their specific --help.
++  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
++    test -d "$ac_dir" || continue
++    ac_builddir=.
++
++case "$ac_dir" in
++.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
++*)
++  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
++  # A ".." for each directory in $ac_dir_suffix.
++  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
++  case $ac_top_builddir_sub in
++  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
++  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
++  esac ;;
++esac
++ac_abs_top_builddir=$ac_pwd
++ac_abs_builddir=$ac_pwd$ac_dir_suffix
++# for backward compatibility:
++ac_top_builddir=$ac_top_build_prefix
++
++case $srcdir in
++  .)  # We are building in place.
++    ac_srcdir=.
++    ac_top_srcdir=$ac_top_builddir_sub
++    ac_abs_top_srcdir=$ac_pwd ;;
++  [\\/]* | ?:[\\/]* )  # Absolute name.
++    ac_srcdir=$srcdir$ac_dir_suffix;
++    ac_top_srcdir=$srcdir
++    ac_abs_top_srcdir=$srcdir ;;
++  *) # Relative name.
++    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
++    ac_top_srcdir=$ac_top_build_prefix$srcdir
++    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
++esac
++ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
++
++    cd "$ac_dir" || { ac_status=$?; continue; }
++    # Check for guested configure.
++    if test -f "$ac_srcdir/configure.gnu"; then
++      echo &&
++      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
++    elif test -f "$ac_srcdir/configure"; then
++      echo &&
++      $SHELL "$ac_srcdir/configure" --help=recursive
++    else
++      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
++    fi || ac_status=$?
++    cd "$ac_pwd" || { ac_status=$?; break; }
++  done
++fi
++
++test -n "$ac_init_help" && exit $ac_status
++if $ac_init_version; then
++  cat <<\_ACEOF
++click configure 1.6.0
++generated by GNU Autoconf 2.61
++
++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
++2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
++This configure script is free software; the Free Software Foundation
++gives unlimited permission to copy, distribute and modify it.
++_ACEOF
++  exit
++fi
++cat >config.log <<_ACEOF
++This file contains any messages produced by compilers while
++running configure, to aid debugging if configure makes a mistake.
++
++It was created by click $as_me 1.6.0, which was
++generated by GNU Autoconf 2.61.  Invocation command line was
++
++  $ $0 $@
++
++_ACEOF
++exec 5>>config.log
++{
++cat <<_ASUNAME
++@%:@@%:@ --------- @%:@@%:@
++@%:@@%:@ Platform. @%:@@%:@
++@%:@@%:@ --------- @%:@@%:@
++
++hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
++uname -m = `(uname -m) 2>/dev/null || echo unknown`
++uname -r = `(uname -r) 2>/dev/null || echo unknown`
++uname -s = `(uname -s) 2>/dev/null || echo unknown`
++uname -v = `(uname -v) 2>/dev/null || echo unknown`
++
++/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
++/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
++
++/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
++/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
++/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
++/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
++/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
++/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
++/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
++
++_ASUNAME
++
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  echo "PATH: $as_dir"
++done
++IFS=$as_save_IFS
++
++} >&5
++
++cat >&5 <<_ACEOF
++
++
++@%:@@%:@ ----------- @%:@@%:@
++@%:@@%:@ Core tests. @%:@@%:@
++@%:@@%:@ ----------- @%:@@%:@
++
++_ACEOF
++
++
++# Keep a trace of the command line.
++# Strip out --no-create and --no-recursion so they do not pile up.
++# Strip out --silent because we don't want to record it for future runs.
++# Also quote any args containing shell meta-characters.
++# Make two passes to allow for proper duplicate-argument suppression.
++ac_configure_args=
++ac_configure_args0=
++ac_configure_args1=
++ac_must_keep_next=false
++for ac_pass in 1 2
++do
++  for ac_arg
++  do
++    case $ac_arg in
++    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
++    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
++    | -silent | --silent | --silen | --sile | --sil)
++      continue ;;
++    *\'*)
++      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
++    esac
++    case $ac_pass in
++    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
++    2)
++      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
++      if test $ac_must_keep_next = true; then
++      ac_must_keep_next=false # Got value, back to normal.
++      else
++      case $ac_arg in
++        *=* | --config-cache | -C | -disable-* | --disable-* \
++        | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
++        | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
++        | -with-* | --with-* | -without-* | --without-* | --x)
++          case "$ac_configure_args0 " in
++            "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
++          esac
++          ;;
++        -* ) ac_must_keep_next=true ;;
++      esac
++      fi
++      ac_configure_args="$ac_configure_args '$ac_arg'"
++      ;;
++    esac
++  done
++done
++$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
++$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
++
++# When interrupted or exit'd, cleanup temporary files, and complete
++# config.log.  We remove comments because anyway the quotes in there
++# would cause problems or look ugly.
++# WARNING: Use '\'' to represent an apostrophe within the trap.
++# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
++trap 'exit_status=$?
++  # Save into config.log some information that might help in debugging.
++  {
++    echo
++
++    cat <<\_ASBOX
++@%:@@%:@ ---------------- @%:@@%:@
++@%:@@%:@ Cache variables. @%:@@%:@
++@%:@@%:@ ---------------- @%:@@%:@
++_ASBOX
++    echo
++    # The following way of writing the cache mishandles newlines in values,
++(
++  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
++    eval ac_val=\$$ac_var
++    case $ac_val in #(
++    *${as_nl}*)
++      case $ac_var in #(
++      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
++echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
++      esac
++      case $ac_var in #(
++      _ | IFS | as_nl) ;; #(
++      *) $as_unset $ac_var ;;
++      esac ;;
++    esac
++  done
++  (set) 2>&1 |
++    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
++    *${as_nl}ac_space=\ *)
++      sed -n \
++      "s/'\''/'\''\\\\'\'''\''/g;
++        s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
++      ;; #(
++    *)
++      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
++      ;;
++    esac |
++    sort
++)
++    echo
++
++    cat <<\_ASBOX
++@%:@@%:@ ----------------- @%:@@%:@
++@%:@@%:@ Output variables. @%:@@%:@
++@%:@@%:@ ----------------- @%:@@%:@
++_ASBOX
++    echo
++    for ac_var in $ac_subst_vars
++    do
++      eval ac_val=\$$ac_var
++      case $ac_val in
++      *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
++      esac
++      echo "$ac_var='\''$ac_val'\''"
++    done | sort
++    echo
++
++    if test -n "$ac_subst_files"; then
++      cat <<\_ASBOX
++@%:@@%:@ ------------------- @%:@@%:@
++@%:@@%:@ File substitutions. @%:@@%:@
++@%:@@%:@ ------------------- @%:@@%:@
++_ASBOX
++      echo
++      for ac_var in $ac_subst_files
++      do
++      eval ac_val=\$$ac_var
++      case $ac_val in
++      *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
++      esac
++      echo "$ac_var='\''$ac_val'\''"
++      done | sort
++      echo
++    fi
++
++    if test -s confdefs.h; then
++      cat <<\_ASBOX
++@%:@@%:@ ----------- @%:@@%:@
++@%:@@%:@ confdefs.h. @%:@@%:@
++@%:@@%:@ ----------- @%:@@%:@
++_ASBOX
++      echo
++      cat confdefs.h
++      echo
++    fi
++    test "$ac_signal" != 0 &&
++      echo "$as_me: caught signal $ac_signal"
++    echo "$as_me: exit $exit_status"
++  } >&5
++  rm -f core *.core core.conftest.* &&
++    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
++    exit $exit_status
++' 0
++for ac_signal in 1 2 13 15; do
++  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
++done
++ac_signal=0
++
++# confdefs.h avoids OS command line length limits that DEFS can exceed.
++rm -f -r conftest* confdefs.h
++
++# Predefined preprocessor variables.
++
++cat >>confdefs.h <<_ACEOF
++@%:@define PACKAGE_NAME "$PACKAGE_NAME"
++_ACEOF
++
++
++cat >>confdefs.h <<_ACEOF
++@%:@define PACKAGE_TARNAME "$PACKAGE_TARNAME"
++_ACEOF
++
++
++cat >>confdefs.h <<_ACEOF
++@%:@define PACKAGE_VERSION "$PACKAGE_VERSION"
++_ACEOF
++
++
++cat >>confdefs.h <<_ACEOF
++@%:@define PACKAGE_STRING "$PACKAGE_STRING"
++_ACEOF
++
++
++cat >>confdefs.h <<_ACEOF
++@%:@define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
++_ACEOF
++
++
++# Let the site file select an alternate cache file if it wants to.
++# Prefer explicitly selected file to automatically selected ones.
++if test -n "$CONFIG_SITE"; then
++  set x "$CONFIG_SITE"
++elif test "x$prefix" != xNONE; then
++  set x "$prefix/share/config.site" "$prefix/etc/config.site"
++else
++  set x "$ac_default_prefix/share/config.site" \
++      "$ac_default_prefix/etc/config.site"
++fi
++shift
++for ac_site_file
++do
++  if test -r "$ac_site_file"; then
++    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
++echo "$as_me: loading site script $ac_site_file" >&6;}
++    sed 's/^/| /' "$ac_site_file" >&5
++    . "$ac_site_file"
++  fi
++done
++
++if test -r "$cache_file"; then
++  # Some versions of bash will fail to source /dev/null (special
++  # files actually), so we avoid doing that.
++  if test -f "$cache_file"; then
++    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
++echo "$as_me: loading cache $cache_file" >&6;}
++    case $cache_file in
++      [\\/]* | ?:[\\/]* ) . "$cache_file";;
++      *)                      . "./$cache_file";;
++    esac
++  fi
++else
++  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
++echo "$as_me: creating cache $cache_file" >&6;}
++  >$cache_file
++fi
++
++# Check that the precious variables saved in the cache have kept the same
++# value.
++ac_cache_corrupted=false
++for ac_var in $ac_precious_vars; do
++  eval ac_old_set=\$ac_cv_env_${ac_var}_set
++  eval ac_new_set=\$ac_env_${ac_var}_set
++  eval ac_old_val=\$ac_cv_env_${ac_var}_value
++  eval ac_new_val=\$ac_env_${ac_var}_value
++  case $ac_old_set,$ac_new_set in
++    set,)
++      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
++echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
++      ac_cache_corrupted=: ;;
++    ,set)
++      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
++echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
++      ac_cache_corrupted=: ;;
++    ,);;
++    *)
++      if test "x$ac_old_val" != "x$ac_new_val"; then
++      { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
++echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
++      { echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
++echo "$as_me:   former value:  $ac_old_val" >&2;}
++      { echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
++echo "$as_me:   current value: $ac_new_val" >&2;}
++      ac_cache_corrupted=:
++      fi;;
++  esac
++  # Pass precious variables to config.status.
++  if test "$ac_new_set" = set; then
++    case $ac_new_val in
++    *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
++    *) ac_arg=$ac_var=$ac_new_val ;;
++    esac
++    case " $ac_configure_args " in
++      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
++      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
++    esac
++  fi
++done
++if $ac_cache_corrupted; then
++  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
++echo "$as_me: error: changes in the environment can compromise the build" >&2;}
++  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
++echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
++   { (exit 1); exit 1; }; }
++fi
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++
++set +x +v
++
++ac_config_headers="$ac_config_headers include/click/config.h:config.h.in include/click/pathvars.h:pathvars.h.in include/click/config-bsdmodule.h:config-bsdmodule.h.in include/click/config-linuxmodule.h:config-linuxmodule.h.in include/click/config-ns.h:config-ns.h.in include/click/config-userlevel.h:config-userlevel.h.in"
++
++
++CLICK_VERSION=$PACKAGE_VERSION
++
++
++cat >>confdefs.h <<_ACEOF
++@%:@define CLICK_VERSION "$CLICK_VERSION"
++_ACEOF
++
++
++
++
++    ac_user_cc=; test -n "$CC" && ac_user_cc=y
++    ac_user_kernel_cc=; test -n "$KERNEL_CC" && ac_user_kernel_cc=y
++    ac_user_cxx=; test -n "$CXX" && ac_user_cxx=y
++    ac_user_build_cxx=; test -n "$BUILD_CXX" && ac_user_build_cxx=y
++    ac_user_kernel_cxx=; test -n "$KERNEL_CXX" && ac_user_kernel_cxx=y
++    ac_user_depcflags=; test -n "$DEPCFLAGS" && ac_user_depcflags=y
++    ac_compile_with_warnings=y
++
++    conf_auxdir='$(top_srcdir)'
++    
++
++    
++
++
++ac_aux_dir=
++for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
++  if test -f "$ac_dir/install-sh"; then
++    ac_aux_dir=$ac_dir
++    ac_install_sh="$ac_aux_dir/install-sh -c"
++    break
++  elif test -f "$ac_dir/install.sh"; then
++    ac_aux_dir=$ac_dir
++    ac_install_sh="$ac_aux_dir/install.sh -c"
++    break
++  elif test -f "$ac_dir/shtool"; then
++    ac_aux_dir=$ac_dir
++    ac_install_sh="$ac_aux_dir/shtool install -c"
++    break
++  fi
++done
++if test -z "$ac_aux_dir"; then
++  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
++echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
++   { (exit 1); exit 1; }; }
++fi
++
++# These three variables are undocumented and unsupported,
++# and are intended to be withdrawn in a future Autoconf release.
++# They can cause serious problems if a builder's source tree is in a directory
++# whose full name contains unusual characters.
++ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
++ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
++ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
++
++
++# Make sure we can run config.sub.
++$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
++  { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
++echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
++   { (exit 1); exit 1; }; }
++
++{ echo "$as_me:$LINENO: checking build system type" >&5
++echo $ECHO_N "checking build system type... $ECHO_C" >&6; }
++if test "${ac_cv_build+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_build_alias=$build_alias
++test "x$ac_build_alias" = x &&
++  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
++test "x$ac_build_alias" = x &&
++  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
++echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
++   { (exit 1); exit 1; }; }
++ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
++  { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
++echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
++   { (exit 1); exit 1; }; }
++
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5
++echo "${ECHO_T}$ac_cv_build" >&6; }
++case $ac_cv_build in
++*-*-*) ;;
++*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
++echo "$as_me: error: invalid value of canonical build" >&2;}
++   { (exit 1); exit 1; }; };;
++esac
++build=$ac_cv_build
++ac_save_IFS=$IFS; IFS='-'
++set x $ac_cv_build
++shift
++build_cpu=$1
++build_vendor=$2
++shift; shift
++# Remember, the first character of IFS is used to create $*,
++# except with old shells:
++build_os=$*
++IFS=$ac_save_IFS
++case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
++
++
++{ echo "$as_me:$LINENO: checking host system type" >&5
++echo $ECHO_N "checking host system type... $ECHO_C" >&6; }
++if test "${ac_cv_host+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test "x$host_alias" = x; then
++  ac_cv_host=$ac_cv_build
++else
++  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
++    { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
++echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
++   { (exit 1); exit 1; }; }
++fi
++
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
++echo "${ECHO_T}$ac_cv_host" >&6; }
++case $ac_cv_host in
++*-*-*) ;;
++*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
++echo "$as_me: error: invalid value of canonical host" >&2;}
++   { (exit 1); exit 1; }; };;
++esac
++host=$ac_cv_host
++ac_save_IFS=$IFS; IFS='-'
++set x $ac_cv_host
++shift
++host_cpu=$1
++host_vendor=$2
++shift; shift
++# Remember, the first character of IFS is used to create $*,
++# except with old shells:
++host_os=$*
++IFS=$ac_save_IFS
++case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
++
++
++{ echo "$as_me:$LINENO: checking target system type" >&5
++echo $ECHO_N "checking target system type... $ECHO_C" >&6; }
++if test "${ac_cv_target+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test "x$target_alias" = x; then
++  ac_cv_target=$ac_cv_host
++else
++  ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
++    { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5
++echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;}
++   { (exit 1); exit 1; }; }
++fi
++
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5
++echo "${ECHO_T}$ac_cv_target" >&6; }
++case $ac_cv_target in
++*-*-*) ;;
++*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5
++echo "$as_me: error: invalid value of canonical target" >&2;}
++   { (exit 1); exit 1; }; };;
++esac
++target=$ac_cv_target
++ac_save_IFS=$IFS; IFS='-'
++set x $ac_cv_target
++shift
++target_cpu=$1
++target_vendor=$2
++shift; shift
++# Remember, the first character of IFS is used to create $*,
++# except with old shells:
++target_os=$*
++IFS=$ac_save_IFS
++case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
++
++
++# The aliases save the names the user supplied, while $host etc.
++# will get canonicalized.
++test -n "$target_alias" &&
++  test "$program_prefix$program_suffix$program_transform_name" = \
++    NONENONEs,x,x, &&
++  program_prefix=${target_alias}-
++
++if test -n "$ac_tool_prefix"; then
++  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
++set dummy ${ac_tool_prefix}gcc; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_CC+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$CC"; then
++  ac_cv_prog_CC="$CC" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_CC="${ac_tool_prefix}gcc"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++CC=$ac_cv_prog_CC
++if test -n "$CC"; then
++  { echo "$as_me:$LINENO: result: $CC" >&5
++echo "${ECHO_T}$CC" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_CC"; then
++  ac_ct_CC=$CC
++  # Extract the first word of "gcc", so it can be a program name with args.
++set dummy gcc; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$ac_ct_CC"; then
++  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_ac_ct_CC="gcc"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_CC=$ac_cv_prog_ac_ct_CC
++if test -n "$ac_ct_CC"; then
++  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
++echo "${ECHO_T}$ac_ct_CC" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++  if test "x$ac_ct_CC" = x; then
++    CC=""
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet.  If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&5
++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet.  If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&2;}
++ac_tool_warned=yes ;;
++esac
++    CC=$ac_ct_CC
++  fi
++else
++  CC="$ac_cv_prog_CC"
++fi
++
++if test -n "$ac_tool_prefix"; then
++  # Extract the first word of "${ac_tool_prefix}g++", so it can be a program name with args.
++set dummy ${ac_tool_prefix}g++; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_CXX+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$CXX"; then
++  ac_cv_prog_CXX="$CXX" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_CXX="${ac_tool_prefix}g++"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++CXX=$ac_cv_prog_CXX
++if test -n "$CXX"; then
++  { echo "$as_me:$LINENO: result: $CXX" >&5
++echo "${ECHO_T}$CXX" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_CXX"; then
++  ac_ct_CXX=$CXX
++  # Extract the first word of "g++", so it can be a program name with args.
++set dummy g++; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$ac_ct_CXX"; then
++  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_ac_ct_CXX="g++"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
++if test -n "$ac_ct_CXX"; then
++  { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
++echo "${ECHO_T}$ac_ct_CXX" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++  if test "x$ac_ct_CXX" = x; then
++    CXX=""
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet.  If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&5
++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet.  If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&2;}
++ac_tool_warned=yes ;;
++esac
++    CXX=$ac_ct_CXX
++  fi
++else
++  CXX="$ac_cv_prog_CXX"
++fi
++
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++if test -n "$ac_tool_prefix"; then
++  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
++set dummy ${ac_tool_prefix}gcc; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_CC+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$CC"; then
++  ac_cv_prog_CC="$CC" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_CC="${ac_tool_prefix}gcc"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++CC=$ac_cv_prog_CC
++if test -n "$CC"; then
++  { echo "$as_me:$LINENO: result: $CC" >&5
++echo "${ECHO_T}$CC" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_CC"; then
++  ac_ct_CC=$CC
++  # Extract the first word of "gcc", so it can be a program name with args.
++set dummy gcc; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$ac_ct_CC"; then
++  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_ac_ct_CC="gcc"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_CC=$ac_cv_prog_ac_ct_CC
++if test -n "$ac_ct_CC"; then
++  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
++echo "${ECHO_T}$ac_ct_CC" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++  if test "x$ac_ct_CC" = x; then
++    CC=""
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet.  If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&5
++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet.  If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&2;}
++ac_tool_warned=yes ;;
++esac
++    CC=$ac_ct_CC
++  fi
++else
++  CC="$ac_cv_prog_CC"
++fi
++
++if test -z "$CC"; then
++          if test -n "$ac_tool_prefix"; then
++    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
++set dummy ${ac_tool_prefix}cc; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_CC+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$CC"; then
++  ac_cv_prog_CC="$CC" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_CC="${ac_tool_prefix}cc"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++CC=$ac_cv_prog_CC
++if test -n "$CC"; then
++  { echo "$as_me:$LINENO: result: $CC" >&5
++echo "${ECHO_T}$CC" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++
++  fi
++fi
++if test -z "$CC"; then
++  # Extract the first word of "cc", so it can be a program name with args.
++set dummy cc; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_CC+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$CC"; then
++  ac_cv_prog_CC="$CC" # Let the user override the test.
++else
++  ac_prog_rejected=no
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
++       ac_prog_rejected=yes
++       continue
++     fi
++    ac_cv_prog_CC="cc"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++if test $ac_prog_rejected = yes; then
++  # We found a bogon in the path, so make sure we never use it.
++  set dummy $ac_cv_prog_CC
++  shift
++  if test $@%:@ != 0; then
++    # We chose a different compiler from the bogus one.
++    # However, it has the same basename, so the bogon will be chosen
++    # first if we set CC to just the basename; use the full file name.
++    shift
++    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
++  fi
++fi
++fi
++fi
++CC=$ac_cv_prog_CC
++if test -n "$CC"; then
++  { echo "$as_me:$LINENO: result: $CC" >&5
++echo "${ECHO_T}$CC" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++
++fi
++if test -z "$CC"; then
++  if test -n "$ac_tool_prefix"; then
++  for ac_prog in cl.exe
++  do
++    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
++set dummy $ac_tool_prefix$ac_prog; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_CC+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$CC"; then
++  ac_cv_prog_CC="$CC" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++CC=$ac_cv_prog_CC
++if test -n "$CC"; then
++  { echo "$as_me:$LINENO: result: $CC" >&5
++echo "${ECHO_T}$CC" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++
++    test -n "$CC" && break
++  done
++fi
++if test -z "$CC"; then
++  ac_ct_CC=$CC
++  for ac_prog in cl.exe
++do
++  # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$ac_ct_CC"; then
++  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_ac_ct_CC="$ac_prog"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_CC=$ac_cv_prog_ac_ct_CC
++if test -n "$ac_ct_CC"; then
++  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
++echo "${ECHO_T}$ac_ct_CC" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++
++  test -n "$ac_ct_CC" && break
++done
++
++  if test "x$ac_ct_CC" = x; then
++    CC=""
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet.  If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&5
++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet.  If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&2;}
++ac_tool_warned=yes ;;
++esac
++    CC=$ac_ct_CC
++  fi
++fi
++
++fi
++
++
++test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
++See \`config.log' for more details." >&5
++echo "$as_me: error: no acceptable C compiler found in \$PATH
++See \`config.log' for more details." >&2;}
++   { (exit 1); exit 1; }; }
++
++# Provide some information about the compiler.
++echo "$as_me:$LINENO: checking for C compiler version" >&5
++ac_compiler=`set X $ac_compile; echo $2`
++{ (ac_try="$ac_compiler --version >&5"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compiler --version >&5") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }
++{ (ac_try="$ac_compiler -v >&5"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compiler -v >&5") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }
++{ (ac_try="$ac_compiler -V >&5"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compiler -V >&5") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }
++
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++ac_clean_files_save=$ac_clean_files
++ac_clean_files="$ac_clean_files a.out a.exe b.out"
++# Try to create an executable without -o first, disregard a.out.
++# It will help us diagnose broken compilers, and finding out an intuition
++# of exeext.
++{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
++echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; }
++ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
++#
++# List of possible output files, starting from the most likely.
++# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
++# only as a last resort.  b.out is created by i960 compilers.
++ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
++#
++# The IRIX 6 linker writes into existing files which may not be
++# executable, retaining their permissions.  Remove them first so a
++# subsequent execution test works.
++ac_rmfiles=
++for ac_file in $ac_files
++do
++  case $ac_file in
++    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
++    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
++  esac
++done
++rm -f $ac_rmfiles
++
++if { (ac_try="$ac_link_default"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link_default") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; then
++  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
++# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
++# in a Makefile.  We should not override ac_cv_exeext if it was cached,
++# so that the user can short-circuit this test for compilers unknown to
++# Autoconf.
++for ac_file in $ac_files ''
++do
++  test -f "$ac_file" || continue
++  case $ac_file in
++    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj )
++      ;;
++    [ab].out )
++      # We found the default executable, but exeext='' is most
++      # certainly right.
++      break;;
++    *.* )
++        if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
++      then :; else
++         ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
++      fi
++      # We set ac_cv_exeext here because the later test for it is not
++      # safe: cross compilers may not add the suffix if given an `-o'
++      # argument, so we may need to know it at that point already.
++      # Even if this section looks crufty: it has the advantage of
++      # actually working.
++      break;;
++    * )
++      break;;
++  esac
++done
++test "$ac_cv_exeext" = no && ac_cv_exeext=
++
++else
++  ac_file=''
++fi
++
++{ echo "$as_me:$LINENO: result: $ac_file" >&5
++echo "${ECHO_T}$ac_file" >&6; }
++if test -z "$ac_file"; then
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
++See \`config.log' for more details." >&5
++echo "$as_me: error: C compiler cannot create executables
++See \`config.log' for more details." >&2;}
++   { (exit 77); exit 77; }; }
++fi
++
++ac_exeext=$ac_cv_exeext
++
++# Check that the compiler produces executables we can run.  If not, either
++# the compiler is broken, or we cross compile.
++{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
++echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; }
++# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
++# If not cross compiling, check that we can run a simple program.
++if test "$cross_compiling" != yes; then
++  if { ac_try='./$ac_file'
++  { (case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_try") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
++    cross_compiling=no
++  else
++    if test "$cross_compiling" = maybe; then
++      cross_compiling=yes
++    else
++      { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
++If you meant to cross compile, use \`--host'.
++See \`config.log' for more details." >&5
++echo "$as_me: error: cannot run C compiled programs.
++If you meant to cross compile, use \`--host'.
++See \`config.log' for more details." >&2;}
++   { (exit 1); exit 1; }; }
++    fi
++  fi
++fi
++{ echo "$as_me:$LINENO: result: yes" >&5
++echo "${ECHO_T}yes" >&6; }
++
++rm -f a.out a.exe conftest$ac_cv_exeext b.out
++ac_clean_files=$ac_clean_files_save
++# Check that the compiler produces executables we can run.  If not, either
++# the compiler is broken, or we cross compile.
++{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
++echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; }
++{ echo "$as_me:$LINENO: result: $cross_compiling" >&5
++echo "${ECHO_T}$cross_compiling" >&6; }
++
++{ echo "$as_me:$LINENO: checking for suffix of executables" >&5
++echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; }
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; then
++  # If both `conftest.exe' and `conftest' are `present' (well, observable)
++# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
++# work properly (i.e., refer to `conftest.exe'), while it won't with
++# `rm'.
++for ac_file in conftest.exe conftest conftest.*; do
++  test -f "$ac_file" || continue
++  case $ac_file in
++    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
++    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
++        break;;
++    * ) break;;
++  esac
++done
++else
++  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
++See \`config.log' for more details." >&5
++echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
++See \`config.log' for more details." >&2;}
++   { (exit 1); exit 1; }; }
++fi
++
++rm -f conftest$ac_cv_exeext
++{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
++echo "${ECHO_T}$ac_cv_exeext" >&6; }
++
++rm -f conftest.$ac_ext
++EXEEXT=$ac_cv_exeext
++ac_exeext=$EXEEXT
++{ echo "$as_me:$LINENO: checking for suffix of object files" >&5
++echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; }
++if test "${ac_cv_objext+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.o conftest.obj
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; then
++  for ac_file in conftest.o conftest.obj conftest.*; do
++  test -f "$ac_file" || continue;
++  case $ac_file in
++    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
++    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
++       break;;
++  esac
++done
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
++See \`config.log' for more details." >&5
++echo "$as_me: error: cannot compute suffix of object files: cannot compile
++See \`config.log' for more details." >&2;}
++   { (exit 1); exit 1; }; }
++fi
++
++rm -f conftest.$ac_cv_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
++echo "${ECHO_T}$ac_cv_objext" >&6; }
++OBJEXT=$ac_cv_objext
++ac_objext=$OBJEXT
++{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
++echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
++if test "${ac_cv_c_compiler_gnu+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++
++int
++main ()
++{
++#ifndef __GNUC__
++       choke me
++#endif
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_compiler_gnu=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_compiler_gnu=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ac_cv_c_compiler_gnu=$ac_compiler_gnu
++
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
++echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
++GCC=`test $ac_compiler_gnu = yes && echo yes`
++ac_test_CFLAGS=${CFLAGS+set}
++ac_save_CFLAGS=$CFLAGS
++{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
++echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
++if test "${ac_cv_prog_cc_g+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_save_c_werror_flag=$ac_c_werror_flag
++   ac_c_werror_flag=yes
++   ac_cv_prog_cc_g=no
++   CFLAGS="-g"
++   cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_prog_cc_g=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      CFLAGS=""
++      cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  :
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_c_werror_flag=$ac_save_c_werror_flag
++       CFLAGS="-g"
++       cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_prog_cc_g=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++   ac_c_werror_flag=$ac_save_c_werror_flag
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
++echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
++if test "$ac_test_CFLAGS" = set; then
++  CFLAGS=$ac_save_CFLAGS
++elif test $ac_cv_prog_cc_g = yes; then
++  if test "$GCC" = yes; then
++    CFLAGS="-g -O2"
++  else
++    CFLAGS="-g"
++  fi
++else
++  if test "$GCC" = yes; then
++    CFLAGS="-O2"
++  else
++    CFLAGS=
++  fi
++fi
++{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
++echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
++if test "${ac_cv_prog_cc_c89+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_cv_prog_cc_c89=no
++ac_save_CC=$CC
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <stdarg.h>
++#include <stdio.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
++struct buf { int x; };
++FILE * (*rcsopen) (struct buf *, struct stat *, int);
++static char *e (p, i)
++     char **p;
++     int i;
++{
++  return p[i];
++}
++static char *f (char * (*g) (char **, int), char **p, ...)
++{
++  char *s;
++  va_list v;
++  va_start (v,p);
++  s = g (p, va_arg (v,int));
++  va_end (v);
++  return s;
++}
++
++/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
++   function prototypes and stuff, but not '\xHH' hex character constants.
++   These don't provoke an error unfortunately, instead are silently treated
++   as 'x'.  The following induces an error, until -std is added to get
++   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
++   array size at least.  It's necessary to write '\x00'==0 to get something
++   that's true only with -std.  */
++int osf4_cc_array ['\x00' == 0 ? 1 : -1];
++
++/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
++   inside strings and character constants.  */
++#define FOO(x) 'x'
++int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
++
++int test (int i, double x);
++struct s1 {int (*f) (int a);};
++struct s2 {int (*f) (double a);};
++int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
++int argc;
++char **argv;
++int
++main ()
++{
++return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
++  ;
++  return 0;
++}
++_ACEOF
++for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
++      -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
++do
++  CC="$ac_save_CC $ac_arg"
++  rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_prog_cc_c89=$ac_arg
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      
++fi
++
++rm -f core conftest.err conftest.$ac_objext 
++  test "x$ac_cv_prog_cc_c89" != "xno" && break
++done
++rm -f conftest.$ac_ext
++CC=$ac_save_CC
++
++fi
++# AC_CACHE_VAL
++case "x$ac_cv_prog_cc_c89" in
++  x)
++    { echo "$as_me:$LINENO: result: none needed" >&5
++echo "${ECHO_T}none needed" >&6; } ;;
++  xno)
++    { echo "$as_me:$LINENO: result: unsupported" >&5
++echo "${ECHO_T}unsupported" >&6; } ;;
++  *)
++    CC="$CC $ac_cv_prog_cc_c89"
++    { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
++echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
++esac
++
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++
++    
++
++    ac_base_cc="$CC"
++    test -z "$ac_user_cc" -a -n "$GCC" -a -n "$ac_compile_with_warnings" && \
++      CC="$CC -W -Wall"
++
++    test -z "$ac_user_cc" -a -n "$GCC" -a -n "$ac_compile_with_warnings" -a -z "$ac_user_depcflags" && \
++      DEPCFLAGS="-MD"
++    
++
++    CFLAGS_NDEBUG=`echo "$CFLAGS" | sed 's/-g//'`
++    
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
++echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; }
++# On Suns, sometimes $CPP names a directory.
++if test -n "$CPP" && test -d "$CPP"; then
++  CPP=
++fi
++if test -z "$CPP"; then
++  if test "${ac_cv_prog_CPP+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++      # Double quotes because CPP needs to be expanded
++    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
++    do
++      ac_preproc_ok=false
++for ac_c_preproc_warn_flag in '' yes
++do
++  # Use a header file that comes with gcc, so configuring glibc
++  # with a fresh cross-compiler works.
++  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++  # <limits.h> exists even on freestanding compilers.
++  # On the NeXT, cc -E runs the code through the compiler's parser,
++  # not just through cpp. "Syntax error" is here to catch this case.
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++@%:@ifdef __STDC__
++@%:@ include <limits.h>
++@%:@else
++@%:@ include <assert.h>
++@%:@endif
++                   Syntax error
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  :
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  # Broken: fails on valid input.
++continue
++fi
++
++rm -f conftest.err conftest.$ac_ext
++
++  # OK, works on sane cases.  Now check whether nonexistent headers
++  # can be detected and how.
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++@%:@include <ac_nonexistent.h>
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  # Broken: success on invalid input.
++continue
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  # Passes both tests.
++ac_preproc_ok=:
++break
++fi
++
++rm -f conftest.err conftest.$ac_ext
++
++done
++# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
++rm -f conftest.err conftest.$ac_ext
++if $ac_preproc_ok; then
++  break
++fi
++
++    done
++    ac_cv_prog_CPP=$CPP
++  
++fi
++  CPP=$ac_cv_prog_CPP
++else
++  ac_cv_prog_CPP=$CPP
++fi
++{ echo "$as_me:$LINENO: result: $CPP" >&5
++echo "${ECHO_T}$CPP" >&6; }
++ac_preproc_ok=false
++for ac_c_preproc_warn_flag in '' yes
++do
++  # Use a header file that comes with gcc, so configuring glibc
++  # with a fresh cross-compiler works.
++  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++  # <limits.h> exists even on freestanding compilers.
++  # On the NeXT, cc -E runs the code through the compiler's parser,
++  # not just through cpp. "Syntax error" is here to catch this case.
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++@%:@ifdef __STDC__
++@%:@ include <limits.h>
++@%:@else
++@%:@ include <assert.h>
++@%:@endif
++                   Syntax error
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  :
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  # Broken: fails on valid input.
++continue
++fi
++
++rm -f conftest.err conftest.$ac_ext
++
++  # OK, works on sane cases.  Now check whether nonexistent headers
++  # can be detected and how.
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++@%:@include <ac_nonexistent.h>
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  # Broken: success on invalid input.
++continue
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  # Passes both tests.
++ac_preproc_ok=:
++break
++fi
++
++rm -f conftest.err conftest.$ac_ext
++
++done
++# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
++rm -f conftest.err conftest.$ac_ext
++if $ac_preproc_ok; then
++  :
++else
++  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
++See \`config.log' for more details." >&5
++echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
++See \`config.log' for more details." >&2;}
++   { (exit 1); exit 1; }; }
++fi
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++
++{ echo "$as_me:$LINENO: checking for inline" >&5
++echo $ECHO_N "checking for inline... $ECHO_C" >&6; }
++if test "${ac_cv_c_inline+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_cv_c_inline=no
++for ac_kw in inline __inline__ __inline; do
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#ifndef __cplusplus
++typedef int foo_t;
++static $ac_kw foo_t static_foo () {return 0; }
++$ac_kw foo_t foo () {return 0; }
++#endif
++
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_c_inline=$ac_kw
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++  test "$ac_cv_c_inline" != no && break
++done
++
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
++echo "${ECHO_T}$ac_cv_c_inline" >&6; }
++
++
++case $ac_cv_c_inline in
++  inline | yes) ;;
++  *)
++    case $ac_cv_c_inline in
++      no) ac_val=;;
++      *) ac_val=$ac_cv_c_inline;;
++    esac
++    cat >>confdefs.h <<_ACEOF
++#ifndef __cplusplus
++#define inline $ac_val
++#endif
++_ACEOF
++    ;;
++esac
++
++
++ac_ext=cpp
++ac_cpp='$CXXCPP $CPPFLAGS'
++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
++if test -z "$CXX"; then
++  if test -n "$CCC"; then
++    CXX=$CCC
++  else
++    if test -n "$ac_tool_prefix"; then
++  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
++  do
++    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
++set dummy $ac_tool_prefix$ac_prog; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_CXX+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$CXX"; then
++  ac_cv_prog_CXX="$CXX" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++CXX=$ac_cv_prog_CXX
++if test -n "$CXX"; then
++  { echo "$as_me:$LINENO: result: $CXX" >&5
++echo "${ECHO_T}$CXX" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++
++    test -n "$CXX" && break
++  done
++fi
++if test -z "$CXX"; then
++  ac_ct_CXX=$CXX
++  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
++do
++  # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$ac_ct_CXX"; then
++  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_ac_ct_CXX="$ac_prog"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
++if test -n "$ac_ct_CXX"; then
++  { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
++echo "${ECHO_T}$ac_ct_CXX" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++
++  test -n "$ac_ct_CXX" && break
++done
++
++  if test "x$ac_ct_CXX" = x; then
++    CXX="g++"
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet.  If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&5
++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet.  If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&2;}
++ac_tool_warned=yes ;;
++esac
++    CXX=$ac_ct_CXX
++  fi
++fi
++
++  fi
++fi
++# Provide some information about the compiler.
++echo "$as_me:$LINENO: checking for C++ compiler version" >&5
++ac_compiler=`set X $ac_compile; echo $2`
++{ (ac_try="$ac_compiler --version >&5"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compiler --version >&5") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }
++{ (ac_try="$ac_compiler -v >&5"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compiler -v >&5") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }
++{ (ac_try="$ac_compiler -V >&5"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compiler -V >&5") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }
++
++{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
++echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; }
++if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++
++int
++main ()
++{
++#ifndef __GNUC__
++       choke me
++#endif
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_compiler_gnu=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_compiler_gnu=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
++
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
++echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; }
++GXX=`test $ac_compiler_gnu = yes && echo yes`
++ac_test_CXXFLAGS=${CXXFLAGS+set}
++ac_save_CXXFLAGS=$CXXFLAGS
++{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
++echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; }
++if test "${ac_cv_prog_cxx_g+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
++   ac_cxx_werror_flag=yes
++   ac_cv_prog_cxx_g=no
++   CXXFLAGS="-g"
++   cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_prog_cxx_g=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      CXXFLAGS=""
++      cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  :
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cxx_werror_flag=$ac_save_cxx_werror_flag
++       CXXFLAGS="-g"
++       cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_prog_cxx_g=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
++echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; }
++if test "$ac_test_CXXFLAGS" = set; then
++  CXXFLAGS=$ac_save_CXXFLAGS
++elif test $ac_cv_prog_cxx_g = yes; then
++  if test "$GXX" = yes; then
++    CXXFLAGS="-g -O2"
++  else
++    CXXFLAGS="-g"
++  fi
++else
++  if test "$GXX" = yes; then
++    CXXFLAGS="-O2"
++  else
++    CXXFLAGS=
++  fi
++fi
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++
++
++    
++
++        if grep __cplusplus confdefs.h >/dev/null 2>&1; then
++      sed 's/#ifdef __cplusplus/#if defined(__cplusplus) \&\& !defined(__KERNEL__)/' < confdefs.h > confdefs.h~
++      mv confdefs.h~ confdefs.h
++    fi
++
++    if test -z "$GXX"; then
++      { echo "$as_me:$LINENO: WARNING: 
++=========================================
++
++Your C++ compiler ($CXX) is not a GNU C++ compiler!
++Either set the 'CXX' environment variable to tell me where
++a GNU C++ compiler is, or compile at your own risk.
++(This code uses a few GCC extensions and GCC-specific compiler options,
++and Linux header files are GCC-specific.)
++
++=========================================" >&5
++echo "$as_me: WARNING: 
++=========================================
++
++Your C++ compiler ($CXX) is not a GNU C++ compiler!
++Either set the 'CXX' environment variable to tell me where
++a GNU C++ compiler is, or compile at your own risk.
++(This code uses a few GCC extensions and GCC-specific compiler options,
++and Linux header files are GCC-specific.)
++
++=========================================" >&2;}
++    fi
++
++    ac_ext=cpp
++ac_cpp='$CXXCPP $CPPFLAGS'
++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
++
++    if test -n "$GXX"; then
++      GXX_VERSION=`$CXX --version | head -n 1 | sed 's/^[^0-9]*\([0-9.]*\).*/\1/'`
++      GXX_MAJOR=`echo $GXX_VERSION | sed 's/\..*//'`
++      GXX_MINOR=`echo $GXX_VERSION | sed 's/^[^.]*\.\([^.]*\).*/\1/'`
++
++      if test $GXX_MAJOR -lt 2 -o \( $GXX_MAJOR -eq 2 -a $GXX_MINOR -le 7 \); then
++          { { echo "$as_me:$LINENO: error: 
++=========================================
++
++Your GNU C++ compiler ($CXX) is too old!
++Either download a newer compiler, or tell me to use a different compiler
++by setting the 'CXX' environment variable and rerunning me.
++
++=========================================" >&5
++echo "$as_me: error: 
++=========================================
++
++Your GNU C++ compiler ($CXX) is too old!
++Either download a newer compiler, or tell me to use a different compiler
++by setting the 'CXX' environment variable and rerunning me.
++
++=========================================" >&2;}
++   { (exit 1); exit 1; }; }
++      fi
++    fi
++
++    
++    { echo "$as_me:$LINENO: checking whether <new> works" >&5
++echo $ECHO_N "checking whether <new> works... $ECHO_C" >&6; }
++if test "${ac_cv_good_new_hdr+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  
++      cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <new>
++int
++main ()
++{
++
++    int a;
++    int *b = new(&a) int;
++    return 0;
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  ac_cv_good_new_hdr=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_good_new_hdr=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_good_new_hdr" >&5
++echo "${ECHO_T}$ac_cv_good_new_hdr" >&6; }
++    if test "$ac_cv_good_new_hdr" = yes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_NEW_HDR 1
++_ACEOF
++
++    else
++      { echo "$as_me:$LINENO: checking whether <new.h> works" >&5
++echo $ECHO_N "checking whether <new.h> works... $ECHO_C" >&6; }
++if test "${ac_cv_good_new_h+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  
++          cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <new.h>
++int
++main ()
++{
++
++    int a;
++    int *b = new(&a) int;
++    return 0;
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  ac_cv_good_new_h=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_good_new_h=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_good_new_h" >&5
++echo "${ECHO_T}$ac_cv_good_new_h" >&6; }
++      if test "$ac_cv_good_new_h" = yes; then
++          
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_NEW_H 1
++_ACEOF
++
++      fi
++    fi
++
++    
++    VTABLE_THUNKS=
++    test -n "$GXX" && test "$GXX_MAJOR" -lt 3 && VTABLE_THUNKS=-fvtable-thunks
++
++    
++    CXX_WARNINGS=
++    test -z "$ac_user_cxx" -a -n "$GXX" -a -n "$ac_compile_with_warnings" && \
++      CXX_WARNINGS='-W -Wall'
++
++    ac_base_cxx="$CXX"
++    test -z "$ac_user_cxx" -a -n "$GXX" -a -n "$ac_compile_with_warnings" && \
++      CXX="$CXX $CXX_WARNINGS $VTABLE_THUNKS"
++
++    CXXFLAGS_NDEBUG=`echo "$CXXFLAGS" | sed 's/-g//'`
++    
++
++ac_ext=cpp
++ac_cpp='$CXXCPP $CPPFLAGS'
++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
++{ echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
++echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6; }
++if test -z "$CXXCPP"; then
++  if test "${ac_cv_prog_CXXCPP+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++      # Double quotes because CXXCPP needs to be expanded
++    for CXXCPP in "$CXX -E" "/lib/cpp"
++    do
++      ac_preproc_ok=false
++for ac_cxx_preproc_warn_flag in '' yes
++do
++  # Use a header file that comes with gcc, so configuring glibc
++  # with a fresh cross-compiler works.
++  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++  # <limits.h> exists even on freestanding compilers.
++  # On the NeXT, cc -E runs the code through the compiler's parser,
++  # not just through cpp. "Syntax error" is here to catch this case.
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++@%:@ifdef __STDC__
++@%:@ include <limits.h>
++@%:@else
++@%:@ include <assert.h>
++@%:@endif
++                   Syntax error
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  :
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  # Broken: fails on valid input.
++continue
++fi
++
++rm -f conftest.err conftest.$ac_ext
++
++  # OK, works on sane cases.  Now check whether nonexistent headers
++  # can be detected and how.
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++@%:@include <ac_nonexistent.h>
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  # Broken: success on invalid input.
++continue
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  # Passes both tests.
++ac_preproc_ok=:
++break
++fi
++
++rm -f conftest.err conftest.$ac_ext
++
++done
++# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
++rm -f conftest.err conftest.$ac_ext
++if $ac_preproc_ok; then
++  break
++fi
++
++    done
++    ac_cv_prog_CXXCPP=$CXXCPP
++  
++fi
++  CXXCPP=$ac_cv_prog_CXXCPP
++else
++  ac_cv_prog_CXXCPP=$CXXCPP
++fi
++{ echo "$as_me:$LINENO: result: $CXXCPP" >&5
++echo "${ECHO_T}$CXXCPP" >&6; }
++ac_preproc_ok=false
++for ac_cxx_preproc_warn_flag in '' yes
++do
++  # Use a header file that comes with gcc, so configuring glibc
++  # with a fresh cross-compiler works.
++  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++  # <limits.h> exists even on freestanding compilers.
++  # On the NeXT, cc -E runs the code through the compiler's parser,
++  # not just through cpp. "Syntax error" is here to catch this case.
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++@%:@ifdef __STDC__
++@%:@ include <limits.h>
++@%:@else
++@%:@ include <assert.h>
++@%:@endif
++                   Syntax error
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  :
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  # Broken: fails on valid input.
++continue
++fi
++
++rm -f conftest.err conftest.$ac_ext
++
++  # OK, works on sane cases.  Now check whether nonexistent headers
++  # can be detected and how.
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++@%:@include <ac_nonexistent.h>
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  # Broken: success on invalid input.
++continue
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  # Passes both tests.
++ac_preproc_ok=:
++break
++fi
++
++rm -f conftest.err conftest.$ac_ext
++
++done
++# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
++rm -f conftest.err conftest.$ac_ext
++if $ac_preproc_ok; then
++  :
++else
++  { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
++See \`config.log' for more details." >&5
++echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
++See \`config.log' for more details." >&2;}
++   { (exit 1); exit 1; }; }
++fi
++
++ac_ext=cpp
++ac_cpp='$CXXCPP $CPPFLAGS'
++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
++
++
++
++    
++    test -z "$ac_user_kernel_cc" && \
++      KERNEL_CC="$ac_base_cc"
++    test -z "$ac_user_kernel_cc" -a -n "$GCC" -a -n "$ac_compile_with_warnings" && \
++      KERNEL_CC="$ac_base_cc -w $CXX_WARNINGS"
++    
++
++
++    
++    test -z "$ac_user_kernel_cxx" && \
++      KERNEL_CXX="$ac_base_cxx"
++    test -z "$ac_user_kernel_cxx" -a -n "$GXX" -a -n "$ac_compile_with_warnings" && \
++      KERNEL_CXX="$ac_base_cxx -w $CXX_WARNINGS -fno-exceptions -fno-rtti $VTABLE_THUNKS"
++    
++
++
++ac_preset_ar="$AR"
++if test -n "$ac_tool_prefix"; then
++  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
++set dummy ${ac_tool_prefix}ar; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_AR+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$AR"; then
++  ac_cv_prog_AR="$AR" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_AR="${ac_tool_prefix}ar"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++AR=$ac_cv_prog_AR
++if test -n "$AR"; then
++  { echo "$as_me:$LINENO: result: $AR" >&5
++echo "${ECHO_T}$AR" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_AR"; then
++  ac_ct_AR=$AR
++  # Extract the first word of "ar", so it can be a program name with args.
++set dummy ar; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$ac_ct_AR"; then
++  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_ac_ct_AR="ar"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_AR=$ac_cv_prog_ac_ct_AR
++if test -n "$ac_ct_AR"; then
++  { echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
++echo "${ECHO_T}$ac_ct_AR" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++  if test "x$ac_ct_AR" = x; then
++    AR=""
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet.  If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&5
++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet.  If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&2;}
++ac_tool_warned=yes ;;
++esac
++    AR=$ac_ct_AR
++  fi
++else
++  AR="$ac_cv_prog_AR"
++fi
++
++if test -n "$ac_tool_prefix"; then
++  # Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args.
++set dummy ${ac_tool_prefix}ld; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_LD+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$LD"; then
++  ac_cv_prog_LD="$LD" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_LD="${ac_tool_prefix}ld"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++LD=$ac_cv_prog_LD
++if test -n "$LD"; then
++  { echo "$as_me:$LINENO: result: $LD" >&5
++echo "${ECHO_T}$LD" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_LD"; then
++  ac_ct_LD=$LD
++  # Extract the first word of "ld", so it can be a program name with args.
++set dummy ld; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_ac_ct_LD+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$ac_ct_LD"; then
++  ac_cv_prog_ac_ct_LD="$ac_ct_LD" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_ac_ct_LD="ld"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_LD=$ac_cv_prog_ac_ct_LD
++if test -n "$ac_ct_LD"; then
++  { echo "$as_me:$LINENO: result: $ac_ct_LD" >&5
++echo "${ECHO_T}$ac_ct_LD" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++  if test "x$ac_ct_LD" = x; then
++    LD=""
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet.  If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&5
++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet.  If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&2;}
++ac_tool_warned=yes ;;
++esac
++    LD=$ac_ct_LD
++  fi
++else
++  LD="$ac_cv_prog_LD"
++fi
++
++if test -n "$ac_tool_prefix"; then
++  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
++set dummy ${ac_tool_prefix}ranlib; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_RANLIB+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$RANLIB"; then
++  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++RANLIB=$ac_cv_prog_RANLIB
++if test -n "$RANLIB"; then
++  { echo "$as_me:$LINENO: result: $RANLIB" >&5
++echo "${ECHO_T}$RANLIB" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_RANLIB"; then
++  ac_ct_RANLIB=$RANLIB
++  # Extract the first word of "ranlib", so it can be a program name with args.
++set dummy ranlib; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$ac_ct_RANLIB"; then
++  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_ac_ct_RANLIB="ranlib"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
++if test -n "$ac_ct_RANLIB"; then
++  { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
++echo "${ECHO_T}$ac_ct_RANLIB" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++  if test "x$ac_ct_RANLIB" = x; then
++    RANLIB=":"
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet.  If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&5
++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet.  If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&2;}
++ac_tool_warned=yes ;;
++esac
++    RANLIB=$ac_ct_RANLIB
++  fi
++else
++  RANLIB="$ac_cv_prog_RANLIB"
++fi
++
++if test -n "$ac_tool_prefix"; then
++  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
++set dummy ${ac_tool_prefix}strip; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_STRIP+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$STRIP"; then
++  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++STRIP=$ac_cv_prog_STRIP
++if test -n "$STRIP"; then
++  { echo "$as_me:$LINENO: result: $STRIP" >&5
++echo "${ECHO_T}$STRIP" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_STRIP"; then
++  ac_ct_STRIP=$STRIP
++  # Extract the first word of "strip", so it can be a program name with args.
++set dummy strip; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$ac_ct_STRIP"; then
++  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_ac_ct_STRIP="strip"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
++if test -n "$ac_ct_STRIP"; then
++  { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
++echo "${ECHO_T}$ac_ct_STRIP" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++  if test "x$ac_ct_STRIP" = x; then
++    STRIP=":"
++  else
++    case $cross_compiling:$ac_tool_warned in
++yes:)
++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet.  If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&5
++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet.  If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&2;}
++ac_tool_warned=yes ;;
++esac
++    STRIP=$ac_ct_STRIP
++  fi
++else
++  STRIP="$ac_cv_prog_STRIP"
++fi
++
++
++conf_auxdir='$(top_srcdir)'
++
++
++test -z "$AR_CREATEFLAGS" && AR_CREATEFLAGS=cru
++
++
++
++
++
++# Check whether --enable-userlevel was given.
++if test "${enable_userlevel+set}" = set; then
++  enableval=$enable_userlevel; :
++else
++  enable_userlevel=yes
++fi
++
++
++# Check whether --enable-user-multithread was given.
++if test "${enable_user_multithread+set}" = set; then
++  enableval=$enable_user_multithread; :
++else
++  enable_user_multithread=no
++fi
++
++if test "x$enable_user_multithread" = xyes; then
++    cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_USER_MULTITHREAD 1
++_ACEOF
++
++fi
++
++
++
++# Check whether --enable-linuxmodule was given.
++if test "${enable_linuxmodule+set}" = set; then
++  enableval=$enable_linuxmodule; :
++else
++  enable_linuxmodule=yes; enable_linuxmodule_default=yes
++fi
++
++
++# Check whether --enable-multithread was given.
++if test "${enable_multithread+set}" = set; then
++  enableval=$enable_multithread; :
++else
++  enable_multithread=no
++fi
++
++
++test "$enable_multithread" = yes && enable_multithread=4
++test "$enable_multithread" = no && enable_multithread=1
++if test "$enable_multithread" -gt 1; then
++    cat >>confdefs.h <<_ACEOF
++@%:@define NUM_CLICK_CPUS $enable_multithread
++_ACEOF
++
++    cat >>confdefs.h <<_ACEOF
++@%:@define __MTCLICK__ 1
++_ACEOF
++
++    saveflags="$CPPFLAGS"
++    CPPFLAGS="$saveflags -D__MTCLICK__"
++else
++    cat >>confdefs.h <<_ACEOF
++@%:@define NUM_CLICK_CPUS 1
++_ACEOF
++
++fi
++
++# Check whether --enable-warp9 was given.
++if test "${enable_warp9+set}" = set; then
++  enableval=$enable_warp9; :
++else
++  enable_warp9=no
++fi
++
++if test "x$enable_warp9" = xyes; then
++    cat >>confdefs.h <<\_ACEOF
++@%:@define CLICK_WARP9 1
++_ACEOF
++
++fi
++
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_CLICKFS 1
++_ACEOF
++
++
++# Check whether --enable-kassert was given.
++if test "${enable_kassert+set}" = set; then
++  enableval=$enable_kassert; :
++else
++  enable_kassert=no
++fi
++
++if test $enable_kassert = yes; then
++    cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_KERNEL_ASSERT 1
++_ACEOF
++
++fi
++
++# Check whether --enable-adaptive was given.
++if test "${enable_adaptive+set}" = set; then
++  enableval=$enable_adaptive; :
++else
++  enable_adaptive=no
++fi
++
++if test "x$enable_adaptive" = xyes; then
++    cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_ADAPTIVE_SCHEDULER 1
++_ACEOF
++
++fi
++
++
++
++
++# Check whether --enable-bsdmodule was given.
++if test "${enable_bsdmodule+set}" = set; then
++  enableval=$enable_bsdmodule; :
++else
++  enable_bsdmodule=no
++fi
++
++
++
++# Check whether --enable-nsclick was given.
++if test "${enable_nsclick+set}" = set; then
++  enableval=$enable_nsclick; :
++else
++  enable_nsclick=no
++fi
++
++
++
++
++
++# Check whether --with-linux was given.
++if test "${with_linux+set}" = set; then
++  withval=$with_linux; linuxdir=$withval
++else
++  linuxdir=NONE
++fi
++
++test -z "$linuxdir" -o "$linuxdir" = yes && linuxdir=yes
++
++
++# Check whether --with-linux-map was given.
++if test "${with_linux_map+set}" = set; then
++  withval=$with_linux_map; linux_system_map=$withval; if test -z "$withval" -o "$withval" = yes; then linux_system_map=NONE; fi
++else
++  linux_system_map=NONE
++fi
++
++
++linux_system_map_boot=no
++
++if test "x$linuxdir" = xNONE -o "x$linuxdir" = xyes; then
++    if uname -r 2>/dev/null | grep '^2\.6' >/dev/null 2>&1; then
++      linuxdir=/lib/modules/"`uname -r`"/build
++      linux_system_map_boot="`uname -r`"
++    else
++      linuxdir=/usr/src/linux
++    fi
++    if test ! -d "$linuxdir" -a "x$enable_linuxmodule" = xyes; then
++      if test "x$enable_linuxmodule_default" = xyes; then
++          linuxdir=NONE; enable_linuxmodule=no
++      else
++          { { echo "$as_me:$LINENO: error: 
++=========================================
++
++Can't find $linuxdir, so I can't compile the linuxmodule driver!
++(You may need the --with-linux=DIR option.)
++
++=========================================" >&5
++echo "$as_me: error: 
++=========================================
++
++Can't find $linuxdir, so I can't compile the linuxmodule driver!
++(You may need the --with-linux=DIR option.)
++
++=========================================" >&2;}
++   { (exit 1); exit 1; }; }
++      fi
++    fi
++fi
++
++if test "x$linuxdir" = xNONE -o "x$linuxdir" = xno -o "x$enable_linuxmodule" != xyes; then
++    ac_have_linux_kernel=n
++    linuxdir=NONE
++elif expr "_$linuxdir" : '_[^/\\]' >/dev/null; then 
++    { { echo "$as_me:$LINENO: error: 
++=========================================
++
++The --with-linux directory $linuxdir is relative.
++You must supply an absolute path starting with /.
++
++=========================================" >&5
++echo "$as_me: error: 
++=========================================
++
++The --with-linux directory $linuxdir is relative.
++You must supply an absolute path starting with /.
++
++=========================================" >&2;}
++   { (exit 1); exit 1; }; }
++elif test -r $linuxdir/include/linux/skbuff.h; then
++    ac_have_linux_kernel=y
++else
++    { { echo "$as_me:$LINENO: error: 
++=========================================
++
++Can't find $linuxdir/include/linux/skbuff.h.
++Are you sure $linuxdir contains Linux kernel source?
++
++=========================================" >&5
++echo "$as_me: error: 
++=========================================
++
++Can't find $linuxdir/include/linux/skbuff.h.
++Are you sure $linuxdir contains Linux kernel source?
++
++=========================================" >&2;}
++   { (exit 1); exit 1; }; }
++fi
++
++cat >>confdefs.h <<_ACEOF
++@%:@define LINUX_SRCDIR "${linuxdir}"
++_ACEOF
++
++
++
++
++
++# Check whether --enable-all-elements was given.
++if test "${enable_all_elements+set}" = set; then
++  enableval=$enable_all_elements; 
++fi
++
++
++element_groups=""
++
++
++
++# Check whether --enable-analysis was given.
++if test "${enable_analysis+set}" = set; then
++  enableval=$enable_analysis; 
++else
++  enable_analysis=NO
++fi
++test "x$enable_all_elements" = xyes -a "x$enable_analysis" = xNO && enable_analysis=yes
++if test "x$enable_analysis" = xyes; then
++    :
++    
++fi
++# Check whether --enable-app was given.
++if test "${enable_app+set}" = set; then
++  enableval=$enable_app; 
++else
++  enable_app=yes
++fi
++test "x$enable_all_elements" = xyes -a "x$enable_app" = xNO && enable_app=yes
++if test "x$enable_app" = xyes; then
++    :
++    
++fi
++# Check whether --enable-aqm was given.
++if test "${enable_aqm+set}" = set; then
++  enableval=$enable_aqm; 
++else
++  enable_aqm=yes
++fi
++test "x$enable_all_elements" = xyes -a "x$enable_aqm" = xNO && enable_aqm=yes
++if test "x$enable_aqm" = xyes; then
++    :
++    
++fi
++# Check whether --enable-ethernet was given.
++if test "${enable_ethernet+set}" = set; then
++  enableval=$enable_ethernet; 
++else
++  enable_ethernet=yes
++fi
++test "x$enable_all_elements" = xyes -a "x$enable_ethernet" = xNO && enable_ethernet=yes
++if test "x$enable_ethernet" = xyes; then
++    :
++    
++fi
++# Check whether --enable-etherswitch was given.
++if test "${enable_etherswitch+set}" = set; then
++  enableval=$enable_etherswitch; 
++else
++  enable_etherswitch=NO
++fi
++test "x$enable_all_elements" = xyes -a "x$enable_etherswitch" = xNO && enable_etherswitch=yes
++if test "x$enable_etherswitch" = xyes; then
++    :
++    
++fi
++# Check whether --enable-grid was given.
++if test "${enable_grid+set}" = set; then
++  enableval=$enable_grid; 
++else
++  enable_grid=NO
++fi
++test "x$enable_all_elements" = xyes -a "x$enable_grid" = xNO && enable_grid=yes
++if test "x$enable_grid" = xyes; then
++    :
++    
++fi
++# Check whether --enable-icmp was given.
++if test "${enable_icmp+set}" = set; then
++  enableval=$enable_icmp; 
++else
++  enable_icmp=yes
++fi
++test "x$enable_all_elements" = xyes -a "x$enable_icmp" = xNO && enable_icmp=yes
++if test "x$enable_icmp" = xyes; then
++    :
++    
++fi
++# Check whether --enable-ip was given.
++if test "${enable_ip+set}" = set; then
++  enableval=$enable_ip; 
++else
++  enable_ip=yes
++fi
++test "x$enable_all_elements" = xyes -a "x$enable_ip" = xNO && enable_ip=yes
++if test "x$enable_ip" = xyes; then
++    :
++    
++fi
++# Check whether --enable-ip6 was given.
++if test "${enable_ip6+set}" = set; then
++  enableval=$enable_ip6; 
++else
++  enable_ip6=NO
++fi
++test "x$enable_all_elements" = xyes -a "x$enable_ip6" = xNO && enable_ip6=yes
++if test "x$enable_ip6" = xyes; then
++    :
++    cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_IP6 1
++_ACEOF
++
++fi
++# Check whether --enable-ipsec was given.
++if test "${enable_ipsec+set}" = set; then
++  enableval=$enable_ipsec; 
++else
++  enable_ipsec=NO
++fi
++test "x$enable_all_elements" = xyes -a "x$enable_ipsec" = xNO && enable_ipsec=yes
++if test "x$enable_ipsec" = xyes; then
++    :
++    cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_IPSEC 1
++_ACEOF
++
++fi
++# Check whether --enable-local was given.
++if test "${enable_local+set}" = set; then
++  enableval=$enable_local; 
++else
++  enable_local=NO
++fi
++test "x$enable_all_elements" = xyes -a "x$enable_local" = xNO && enable_local=yes
++if test "x$enable_local" = xyes; then
++    :
++    
++fi
++# Check whether --enable-radio was given.
++if test "${enable_radio+set}" = set; then
++  enableval=$enable_radio; 
++else
++  enable_radio=NO
++fi
++test "x$enable_all_elements" = xyes -a "x$enable_radio" = xNO && enable_radio=yes
++if test "x$enable_radio" = xyes; then
++    :
++    
++fi
++# Check whether --enable-simple was given.
++if test "${enable_simple+set}" = set; then
++  enableval=$enable_simple; 
++else
++  enable_simple=NO
++fi
++test "x$enable_all_elements" = xyes -a "x$enable_simple" = xNO && enable_simple=yes
++if test "x$enable_simple" = xyes; then
++    :
++    
++fi
++# Check whether --enable-standard was given.
++if test "${enable_standard+set}" = set; then
++  enableval=$enable_standard; 
++else
++  enable_standard=yes
++fi
++test "x$enable_all_elements" = xyes -a "x$enable_standard" = xNO && enable_standard=yes
++if test "x$enable_standard" = xyes; then
++    :
++    
++fi
++# Check whether --enable-tcpudp was given.
++if test "${enable_tcpudp+set}" = set; then
++  enableval=$enable_tcpudp; 
++else
++  enable_tcpudp=yes
++fi
++test "x$enable_all_elements" = xyes -a "x$enable_tcpudp" = xNO && enable_tcpudp=yes
++if test "x$enable_tcpudp" = xyes; then
++    :
++    
++fi
++# Check whether --enable-test was given.
++if test "${enable_test+set}" = set; then
++  enableval=$enable_test; 
++else
++  enable_test=NO
++fi
++test "x$enable_all_elements" = xyes -a "x$enable_test" = xNO && enable_test=yes
++if test "x$enable_test" = xyes; then
++    :
++    
++fi
++# Check whether --enable-wifi was given.
++if test "${enable_wifi+set}" = set; then
++  enableval=$enable_wifi; 
++else
++  enable_wifi=NO
++fi
++test "x$enable_all_elements" = xyes -a "x$enable_wifi" = xNO && enable_wifi=yes
++if test "x$enable_wifi" = xyes; then
++    :
++    
++fi
++# Check whether --enable-experimental was given.
++if test "${enable_experimental+set}" = set; then
++  enableval=$enable_experimental; :
++else
++  enable_experimental=no
++fi
++
++
++for i in `(cd $srcdir/elements; ls | sed '/^CVS$/d;/^bsdmodule$/d;/^exopc$/d;/^linuxmodule$/d;/^ns$/d;/^userlevel$/d')`; do
++    enableval=`eval 'echo $'"enable_$i"`
++    test "x$enable_all_elements" = xyes -a "x$enableval" '!=' 'no' && enableval=yes
++    test -d "$srcdir/elements/$i" -a "$enableval" = "yes" && element_groups="$element_groups $i"
++done
++
++
++
++
++
++# Check whether --with-freebsd was given.
++if test "${with_freebsd+set}" = set; then
++  withval=$with_freebsd; freebsddir=$withval; if test -z "$withval" -o "$withval" = yes; then freebsddir=/usr/src/sys,/usr/include; fi
++else
++  freebsddir=NONE
++fi
++
++
++if test "x$freebsddir" = xNONE; then
++  if test -d /usr/src/sys -a -d /usr/include; then
++    freebsddir=/usr/src/sys,/usr/include
++  elif test "x$enable_bsdmodule" = xyes; then
++    { echo "$as_me:$LINENO: WARNING: 
++=========================================
++
++Can't find /usr/src/sys and/or /usr/include, so I'm not compiling
++the bsdmodule driver.  (You may need the --with-freebsd=DIR option.)
++
++=========================================" >&5
++echo "$as_me: WARNING: 
++=========================================
++
++Can't find /usr/src/sys and/or /usr/include, so I'm not compiling
++the bsdmodule driver.  (You may need the --with-freebsd=DIR option.)
++
++=========================================" >&2;}
++  fi
++fi
++
++freebsd_srcdir=`echo "$freebsddir," | sed -e 's/,.*//'`
++freebsd_includedir=`echo "$freebsddir,/usr/include," | sed -e 's/^[^,]*,\([^,]*\),.*$/\1/'`
++
++if test "x$freebsddir" = xNONE -o "x$freebsddir" = xno -o "x$enable_bsdmodule" != xyes; then
++  ac_have_bsd_kernel=n
++  freebsddir=NONE
++elif expr '(' "_$freebsd_includedir" : '_[^/\\]' ')' '|' '(' "_$freebsd_srcdir" : '_[^/\\]' ')'; then 
++  { { echo "$as_me:$LINENO: error: 
++=========================================
++
++The --with-freebsd directories $freebsd_srcdir,$freebsd_includedir
++are relative.  You must supply absolute paths starting with /.
++
++=========================================" >&5
++echo "$as_me: error: 
++=========================================
++
++The --with-freebsd directories $freebsd_srcdir,$freebsd_includedir
++are relative.  You must supply absolute paths starting with /.
++
++=========================================" >&2;}
++   { (exit 1); exit 1; }; }
++elif test -r $freebsd_includedir/net/if_var.h -a -r $freebsd_srcdir/kern/vnode_if.src; then
++  ac_have_bsd_kernel=y
++else
++  { { echo "$as_me:$LINENO: error: 
++=========================================
++
++Can't find $freebsd_includedir/net/if_var.h and/or
++$freebsd_srcdir/kern/vnode_if.src.  Are you sure $freebsd_srcdir
++and $freebsd_includedir contain FreeBSD kernel source?
++
++=========================================" >&5
++echo "$as_me: error: 
++=========================================
++
++Can't find $freebsd_includedir/net/if_var.h and/or
++$freebsd_srcdir/kern/vnode_if.src.  Are you sure $freebsd_srcdir
++and $freebsd_includedir contain FreeBSD kernel source?
++
++=========================================" >&2;}
++   { (exit 1); exit 1; }; }
++fi
++
++
++
++cat >>confdefs.h <<_ACEOF
++@%:@define FREEBSD_INCLUDEDIR "${freebsd_includedir}"
++_ACEOF
++
++
++
++
++{ echo "$as_me:$LINENO: checking whether we are compiling for Linux" >&5
++echo $ECHO_N "checking whether we are compiling for Linux... $ECHO_C" >&6; }
++if test "${ac_cv_under_linux+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++
++int
++main ()
++{
++#ifndef __linux__
++#error "fuckers! fuckers!"
++#endif
++return 0;
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_under_linux=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_under_linux=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_under_linux" >&5
++echo "${ECHO_T}$ac_cv_under_linux" >&6; }
++
++
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++
++for ac_func in strerror
++do
++as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
++{ echo "$as_me:$LINENO: checking for $ac_func" >&5
++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
++   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
++#define $ac_func innocuous_$ac_func
++
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func (); below.
++    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++    <limits.h> exists even on freestanding compilers.  */
++
++#ifdef __STDC__
++# include <limits.h>
++#else
++# include <assert.h>
++#endif
++
++#undef $ac_func
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char $ac_func ();
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined __stub_$ac_func || defined __stub___$ac_func
++choke me
++#endif
++
++int
++main ()
++{
++return $ac_func ();
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  eval "$as_ac_var=yes"
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      eval "$as_ac_var=no"
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext conftest.$ac_ext
++fi
++ac_res=`eval echo '${'$as_ac_var'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++if test `eval echo '${'$as_ac_var'}'` = yes; then
++  cat >>confdefs.h <<_ACEOF
++@%:@define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
++_ACEOF
++ 
++else
++  case " $LIB@&t@OBJS " in
++  *" $ac_func.$ac_objext "* ) ;;
++  *) LIB@&t@OBJS="$LIB@&t@OBJS $ac_func.$ac_objext"
++ ;;
++esac
++
++fi
++done
++
++
++
++
++
++
++for ac_func in snprintf strtoul tcgetpgrp vsnprintf
++do
++as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
++{ echo "$as_me:$LINENO: checking for $ac_func" >&5
++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
++   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
++#define $ac_func innocuous_$ac_func
++
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func (); below.
++    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++    <limits.h> exists even on freestanding compilers.  */
++
++#ifdef __STDC__
++# include <limits.h>
++#else
++# include <assert.h>
++#endif
++
++#undef $ac_func
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char $ac_func ();
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined __stub_$ac_func || defined __stub___$ac_func
++choke me
++#endif
++
++int
++main ()
++{
++return $ac_func ();
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  eval "$as_ac_var=yes"
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      eval "$as_ac_var=no"
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext conftest.$ac_ext
++fi
++ac_res=`eval echo '${'$as_ac_var'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++if test `eval echo '${'$as_ac_var'}'` = yes; then
++  cat >>confdefs.h <<_ACEOF
++@%:@define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
++_ACEOF
++ 
++fi
++done
++
++ac_ext=cpp
++ac_cpp='$CXXCPP $CPPFLAGS'
++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
++
++
++
++
++# Check whether --enable-int64 was given.
++if test "${enable_int64+set}" = set; then
++  enableval=$enable_int64; :
++else
++  enable_int64=yes
++fi
++
++
++
++{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
++echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
++if test "${ac_cv_path_GREP+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  # Extract the first word of "grep ggrep" to use in msg output
++if test -z "$GREP"; then
++set dummy grep ggrep; ac_prog_name=$2
++if test "${ac_cv_path_GREP+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_path_GREP_found=false
++# Loop through the user's path and test for each of PROGNAME-LIST
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_prog in grep ggrep; do
++  for ac_exec_ext in '' $ac_executable_extensions; do
++    ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
++    { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
++    # Check for GNU ac_path_GREP and select it if it is found.
++  # Check for GNU $ac_path_GREP
++case `"$ac_path_GREP" --version 2>&1` in
++*GNU*)
++  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
++*)
++  ac_count=0
++  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
++  while :
++  do
++    cat "conftest.in" "conftest.in" >"conftest.tmp"
++    mv "conftest.tmp" "conftest.in"
++    cp "conftest.in" "conftest.nl"
++    echo 'GREP' >> "conftest.nl"
++    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
++    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
++    ac_count=`expr $ac_count + 1`
++    if test $ac_count -gt ${ac_path_GREP_max-0}; then
++      # Best one so far, save it but keep looking for a better one
++      ac_cv_path_GREP="$ac_path_GREP"
++      ac_path_GREP_max=$ac_count
++    fi
++    # 10*(2^10) chars as input seems more than enough
++    test $ac_count -gt 10 && break
++  done
++  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
++esac
++
++
++    $ac_path_GREP_found && break 3
++  done
++done
++
++done
++IFS=$as_save_IFS
++
++
++fi
++
++GREP="$ac_cv_path_GREP"
++if test -z "$GREP"; then
++  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
++echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
++   { (exit 1); exit 1; }; }
++fi
++
++else
++  ac_cv_path_GREP=$GREP
++fi
++
++
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
++echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
++ GREP="$ac_cv_path_GREP"
++ 
++
++{ echo "$as_me:$LINENO: checking for egrep" >&5
++echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
++if test "${ac_cv_path_EGREP+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
++   then ac_cv_path_EGREP="$GREP -E"
++   else
++     # Extract the first word of "egrep" to use in msg output
++if test -z "$EGREP"; then
++set dummy egrep; ac_prog_name=$2
++if test "${ac_cv_path_EGREP+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_path_EGREP_found=false
++# Loop through the user's path and test for each of PROGNAME-LIST
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_prog in egrep; do
++  for ac_exec_ext in '' $ac_executable_extensions; do
++    ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
++    { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
++    # Check for GNU ac_path_EGREP and select it if it is found.
++  # Check for GNU $ac_path_EGREP
++case `"$ac_path_EGREP" --version 2>&1` in
++*GNU*)
++  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
++*)
++  ac_count=0
++  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
++  while :
++  do
++    cat "conftest.in" "conftest.in" >"conftest.tmp"
++    mv "conftest.tmp" "conftest.in"
++    cp "conftest.in" "conftest.nl"
++    echo 'EGREP' >> "conftest.nl"
++    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
++    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
++    ac_count=`expr $ac_count + 1`
++    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
++      # Best one so far, save it but keep looking for a better one
++      ac_cv_path_EGREP="$ac_path_EGREP"
++      ac_path_EGREP_max=$ac_count
++    fi
++    # 10*(2^10) chars as input seems more than enough
++    test $ac_count -gt 10 && break
++  done
++  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
++esac
++
++
++    $ac_path_EGREP_found && break 3
++  done
++done
++
++done
++IFS=$as_save_IFS
++
++
++fi
++
++EGREP="$ac_cv_path_EGREP"
++if test -z "$EGREP"; then
++  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
++echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
++   { (exit 1); exit 1; }; }
++fi
++
++else
++  ac_cv_path_EGREP=$EGREP
++fi
++
++
++   fi
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
++echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
++ EGREP="$ac_cv_path_EGREP"
++ 
++
++{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
++echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
++if test "${ac_cv_header_stdc+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <stdlib.h>
++#include <stdarg.h>
++#include <string.h>
++#include <float.h>
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_header_stdc=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_header_stdc=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++
++if test $ac_cv_header_stdc = yes; then
++  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <string.h>
++
++_ACEOF
++if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
++  $EGREP "memchr" >/dev/null 2>&1; then
++  :
++else
++  ac_cv_header_stdc=no
++fi
++rm -f conftest*
++
++fi
++
++if test $ac_cv_header_stdc = yes; then
++  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <stdlib.h>
++
++_ACEOF
++if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
++  $EGREP "free" >/dev/null 2>&1; then
++  :
++else
++  ac_cv_header_stdc=no
++fi
++rm -f conftest*
++
++fi
++
++if test $ac_cv_header_stdc = yes; then
++  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
++  if test "$cross_compiling" = yes; then
++  :
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <ctype.h>
++#include <stdlib.h>
++#if ((' ' & 0x0FF) == 0x020)
++# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
++# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
++#else
++# define ISLOWER(c) \
++                 (('a' <= (c) && (c) <= 'i') \
++                   || ('j' <= (c) && (c) <= 'r') \
++                   || ('s' <= (c) && (c) <= 'z'))
++# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
++#endif
++
++#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
++int
++main ()
++{
++  int i;
++  for (i = 0; i < 256; i++)
++    if (XOR (islower (i), ISLOWER (i))
++      || toupper (i) != TOUPPER (i))
++      return 2;
++  return 0;
++}
++_ACEOF
++rm -f conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
++  { (case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_try") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
++  :
++else
++  echo "$as_me: program exited with status $ac_status" >&5
++echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++( exit $ac_status )
++ac_cv_header_stdc=no
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
++fi
++
++
++fi
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
++echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
++if test $ac_cv_header_stdc = yes; then
++  
++cat >>confdefs.h <<\_ACEOF
++@%:@define STDC_HEADERS 1
++_ACEOF
++
++fi
++
++# On IRIX 5.3, sys/types and inttypes.h are conflicting.
++
++
++
++
++
++
++
++
++
++for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
++                inttypes.h stdint.h unistd.h
++do
++as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
++{ echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++
++@%:@include <$ac_header>
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  eval "$as_ac_Header=yes"
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      eval "$as_ac_Header=no"
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++if test `eval echo '${'$as_ac_Header'}'` = yes; then
++  cat >>confdefs.h <<_ACEOF
++@%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
++_ACEOF
++ 
++fi
++
++done
++
++
++{ echo "$as_me:$LINENO: checking for int" >&5
++echo $ECHO_N "checking for int... $ECHO_C" >&6; }
++if test "${ac_cv_type_int+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++typedef int ac__type_new_;
++int
++main ()
++{
++if ((ac__type_new_ *) 0)
++  return 0;
++if (sizeof (ac__type_new_))
++  return 0;
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_type_int=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_type_int=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5
++echo "${ECHO_T}$ac_cv_type_int" >&6; }
++
++# The cast to long int works around a bug in the HP C Compiler
++# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
++# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
++# This bug is HP SR number 8606223364.
++{ echo "$as_me:$LINENO: checking size of int" >&5
++echo $ECHO_N "checking size of int... $ECHO_C" >&6; }
++if test "${ac_cv_sizeof_int+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test "$cross_compiling" = yes; then
++  # Depending upon the size, compute the lo and hi bounds.
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef int ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_lo=0 ac_mid=0
++  while :; do
++    cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef int ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_hi=$ac_mid; break
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_lo=`expr $ac_mid + 1`
++                      if test $ac_lo -le $ac_mid; then
++                        ac_lo= ac_hi=
++                        break
++                      fi
++                      ac_mid=`expr 2 '*' $ac_mid + 1`
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++  done
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef int ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_hi=-1 ac_mid=-1
++  while :; do
++    cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef int ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_lo=$ac_mid; break
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_hi=`expr '(' $ac_mid ')' - 1`
++                      if test $ac_mid -le $ac_hi; then
++                        ac_lo= ac_hi=
++                        break
++                      fi
++                      ac_mid=`expr 2 '*' $ac_mid`
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++  done
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_lo= ac_hi=
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++# Binary search between lo and hi bounds.
++while test "x$ac_lo" != "x$ac_hi"; do
++  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef int ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_hi=$ac_mid
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_lo=`expr '(' $ac_mid ')' + 1`
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++done
++case $ac_lo in
++?*) ac_cv_sizeof_int=$ac_lo;;
++'') if test "$ac_cv_type_int" = yes; then
++     { { echo "$as_me:$LINENO: error: cannot compute sizeof (int)
++See \`config.log' for more details." >&5
++echo "$as_me: error: cannot compute sizeof (int)
++See \`config.log' for more details." >&2;}
++   { (exit 77); exit 77; }; }
++   else
++     ac_cv_sizeof_int=0
++   fi ;;
++esac
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef int ac__type_sizeof_;
++static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
++static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
++@%:@include <stdio.h>
++@%:@include <stdlib.h>
++int
++main ()
++{
++
++  FILE *f = fopen ("conftest.val", "w");
++  if (! f)
++    return 1;
++  if (((long int) (sizeof (ac__type_sizeof_))) < 0)
++    {
++      long int i = longval ();
++      if (i != ((long int) (sizeof (ac__type_sizeof_))))
++      return 1;
++      fprintf (f, "%ld\n", i);
++    }
++  else
++    {
++      unsigned long int i = ulongval ();
++      if (i != ((long int) (sizeof (ac__type_sizeof_))))
++      return 1;
++      fprintf (f, "%lu\n", i);
++    }
++  return ferror (f) || fclose (f) != 0;
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
++  { (case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_try") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
++  ac_cv_sizeof_int=`cat conftest.val`
++else
++  echo "$as_me: program exited with status $ac_status" >&5
++echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++( exit $ac_status )
++if test "$ac_cv_type_int" = yes; then
++     { { echo "$as_me:$LINENO: error: cannot compute sizeof (int)
++See \`config.log' for more details." >&5
++echo "$as_me: error: cannot compute sizeof (int)
++See \`config.log' for more details." >&2;}
++   { (exit 77); exit 77; }; }
++   else
++     ac_cv_sizeof_int=0
++   fi
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
++fi
++rm -f conftest.val
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5
++echo "${ECHO_T}$ac_cv_sizeof_int" >&6; }
++
++
++
++cat >>confdefs.h <<_ACEOF
++@%:@define SIZEOF_INT $ac_cv_sizeof_int
++_ACEOF
++
++
++{ echo "$as_me:$LINENO: checking for long" >&5
++echo $ECHO_N "checking for long... $ECHO_C" >&6; }
++if test "${ac_cv_type_long+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++typedef long ac__type_new_;
++int
++main ()
++{
++if ((ac__type_new_ *) 0)
++  return 0;
++if (sizeof (ac__type_new_))
++  return 0;
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_type_long=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_type_long=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5
++echo "${ECHO_T}$ac_cv_type_long" >&6; }
++
++# The cast to long int works around a bug in the HP C Compiler
++# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
++# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
++# This bug is HP SR number 8606223364.
++{ echo "$as_me:$LINENO: checking size of long" >&5
++echo $ECHO_N "checking size of long... $ECHO_C" >&6; }
++if test "${ac_cv_sizeof_long+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test "$cross_compiling" = yes; then
++  # Depending upon the size, compute the lo and hi bounds.
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef long ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_lo=0 ac_mid=0
++  while :; do
++    cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef long ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_hi=$ac_mid; break
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_lo=`expr $ac_mid + 1`
++                      if test $ac_lo -le $ac_mid; then
++                        ac_lo= ac_hi=
++                        break
++                      fi
++                      ac_mid=`expr 2 '*' $ac_mid + 1`
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++  done
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef long ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_hi=-1 ac_mid=-1
++  while :; do
++    cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef long ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_lo=$ac_mid; break
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_hi=`expr '(' $ac_mid ')' - 1`
++                      if test $ac_mid -le $ac_hi; then
++                        ac_lo= ac_hi=
++                        break
++                      fi
++                      ac_mid=`expr 2 '*' $ac_mid`
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++  done
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_lo= ac_hi=
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++# Binary search between lo and hi bounds.
++while test "x$ac_lo" != "x$ac_hi"; do
++  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef long ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_hi=$ac_mid
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_lo=`expr '(' $ac_mid ')' + 1`
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++done
++case $ac_lo in
++?*) ac_cv_sizeof_long=$ac_lo;;
++'') if test "$ac_cv_type_long" = yes; then
++     { { echo "$as_me:$LINENO: error: cannot compute sizeof (long)
++See \`config.log' for more details." >&5
++echo "$as_me: error: cannot compute sizeof (long)
++See \`config.log' for more details." >&2;}
++   { (exit 77); exit 77; }; }
++   else
++     ac_cv_sizeof_long=0
++   fi ;;
++esac
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef long ac__type_sizeof_;
++static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
++static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
++@%:@include <stdio.h>
++@%:@include <stdlib.h>
++int
++main ()
++{
++
++  FILE *f = fopen ("conftest.val", "w");
++  if (! f)
++    return 1;
++  if (((long int) (sizeof (ac__type_sizeof_))) < 0)
++    {
++      long int i = longval ();
++      if (i != ((long int) (sizeof (ac__type_sizeof_))))
++      return 1;
++      fprintf (f, "%ld\n", i);
++    }
++  else
++    {
++      unsigned long int i = ulongval ();
++      if (i != ((long int) (sizeof (ac__type_sizeof_))))
++      return 1;
++      fprintf (f, "%lu\n", i);
++    }
++  return ferror (f) || fclose (f) != 0;
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
++  { (case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_try") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
++  ac_cv_sizeof_long=`cat conftest.val`
++else
++  echo "$as_me: program exited with status $ac_status" >&5
++echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++( exit $ac_status )
++if test "$ac_cv_type_long" = yes; then
++     { { echo "$as_me:$LINENO: error: cannot compute sizeof (long)
++See \`config.log' for more details." >&5
++echo "$as_me: error: cannot compute sizeof (long)
++See \`config.log' for more details." >&2;}
++   { (exit 77); exit 77; }; }
++   else
++     ac_cv_sizeof_long=0
++   fi
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
++fi
++rm -f conftest.val
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
++echo "${ECHO_T}$ac_cv_sizeof_long" >&6; }
++
++
++
++cat >>confdefs.h <<_ACEOF
++@%:@define SIZEOF_LONG $ac_cv_sizeof_long
++_ACEOF
++
++
++
++    
++for ac_header in inttypes.h
++do
++as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  { echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++else
++  # Is the header compilable?
++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++@%:@include <$ac_header>
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_header_compiler=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_header_compiler=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
++echo "${ECHO_T}$ac_header_compiler" >&6; }
++
++# Is the header present?
++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++@%:@include <$ac_header>
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  ac_header_preproc=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  ac_header_preproc=no
++fi
++
++rm -f conftest.err conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
++echo "${ECHO_T}$ac_header_preproc" >&6; }
++
++# So?  What about this header?
++case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
++  yes:no: )
++    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
++echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
++    ac_header_preproc=yes
++    ;;
++  no:yes:* )
++    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
++echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
++echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
++echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
++echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
++echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
++    
++    ;;
++esac
++{ echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  eval "$as_ac_Header=\$ac_header_preproc"
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++
++fi
++if test `eval echo '${'$as_ac_Header'}'` = yes; then
++  cat >>confdefs.h <<_ACEOF
++@%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
++_ACEOF
++ have_inttypes_h=yes
++else
++  have_inttypes_h=no
++fi
++
++done
++
++
++    if test $have_inttypes_h = no; then
++      { echo "$as_me:$LINENO: checking for uintXX_t typedefs" >&5
++echo $ECHO_N "checking for uintXX_t typedefs... $ECHO_C" >&6; }
++if test "${ac_cv_uint_t+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <sys/types.h>
++
++_ACEOF
++if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
++  $EGREP "(^|[^a-zA-Z_0-9])uint32_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
++  ac_cv_uint_t=yes
++else
++  ac_cv_uint_t=no
++fi
++rm -f conftest*
++
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_uint_t" >&5
++echo "${ECHO_T}$ac_cv_uint_t" >&6; }
++    fi
++    if test $have_inttypes_h = no -a "$ac_cv_uint_t" = no; then
++      { echo "$as_me:$LINENO: checking for u_intXX_t typedefs" >&5
++echo $ECHO_N "checking for u_intXX_t typedefs... $ECHO_C" >&6; }
++if test "${ac_cv_u_int_t+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <sys/types.h>
++
++_ACEOF
++if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
++  $EGREP "(^|[^a-zA-Z_0-9])u_int32_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
++  ac_cv_u_int_t=yes
++else
++  ac_cv_u_int_t=no
++fi
++rm -f conftest*
++
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_u_int_t" >&5
++echo "${ECHO_T}$ac_cv_u_int_t" >&6; }
++    fi
++    if test $have_inttypes_h = yes -o "$ac_cv_uint_t" = yes; then :
++    elif test "$ac_cv_u_int_t" = yes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_U_INT_TYPES 1
++_ACEOF
++
++    else
++      { { echo "$as_me:$LINENO: error: 
++=========================================
++
++Neither uint32_t nor u_int32_t defined by <inttypes.h> or <sys/types.h>!
++
++=========================================" >&5
++echo "$as_me: error: 
++=========================================
++
++Neither uint32_t nor u_int32_t defined by <inttypes.h> or <sys/types.h>!
++
++=========================================" >&2;}
++   { (exit 1); exit 1; }; }
++    fi
++
++    { echo "$as_me:$LINENO: checking whether machine is indifferent to alignment" >&5
++echo $ECHO_N "checking whether machine is indifferent to alignment... $ECHO_C" >&6; }
++if test "${ac_cv_alignment_indifferent+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test "x$have_inttypes_h" = xyes; then inttypes_hdr='inttypes.h'; else inttypes_hdr='sys/types.h'; fi
++
++    if test "$cross_compiling" = yes; then
++  ac_cv_alignment_indifferent=no
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <$inttypes_hdr>
++#include <stdlib.h>
++void get_value(char *buf, int offset, int32_t *value) {
++    int i;
++    for (i = 0; i < 4; i++)
++      buf[i + offset] = i;
++    *value = *((int32_t *)(buf + offset));
++}
++int main(int argc, char *argv[]) {
++    char buf[12];
++    int i;
++    int32_t value, try_value;
++    get_value(buf, 0, &value);
++    for (i = 1; i < 4; i++) {
++      get_value(buf, i, &try_value);
++      if (value != try_value)
++          exit(1);
++    }
++    exit(0);
++}
++_ACEOF
++rm -f conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
++  { (case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_try") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
++  ac_cv_alignment_indifferent=yes
++else
++  echo "$as_me: program exited with status $ac_status" >&5
++echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++( exit $ac_status )
++ac_cv_alignment_indifferent=no
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
++fi
++
++
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_alignment_indifferent" >&5
++echo "${ECHO_T}$ac_cv_alignment_indifferent" >&6; }
++    if test "x$ac_cv_alignment_indifferent" = xyes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_INDIFFERENT_ALIGNMENT 1
++_ACEOF
++
++    fi
++if test "x$enable_int64" = xyes; then
++    { echo "$as_me:$LINENO: checking for long long" >&5
++echo $ECHO_N "checking for long long... $ECHO_C" >&6; }
++if test "${ac_cv_type_long_long+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++typedef long long ac__type_new_;
++int
++main ()
++{
++if ((ac__type_new_ *) 0)
++  return 0;
++if (sizeof (ac__type_new_))
++  return 0;
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_type_long_long=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_type_long_long=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5
++echo "${ECHO_T}$ac_cv_type_long_long" >&6; }
++
++# The cast to long int works around a bug in the HP C Compiler
++# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
++# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
++# This bug is HP SR number 8606223364.
++{ echo "$as_me:$LINENO: checking size of long long" >&5
++echo $ECHO_N "checking size of long long... $ECHO_C" >&6; }
++if test "${ac_cv_sizeof_long_long+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test "$cross_compiling" = yes; then
++  # Depending upon the size, compute the lo and hi bounds.
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef long long ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_lo=0 ac_mid=0
++  while :; do
++    cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef long long ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_hi=$ac_mid; break
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_lo=`expr $ac_mid + 1`
++                      if test $ac_lo -le $ac_mid; then
++                        ac_lo= ac_hi=
++                        break
++                      fi
++                      ac_mid=`expr 2 '*' $ac_mid + 1`
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++  done
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef long long ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_hi=-1 ac_mid=-1
++  while :; do
++    cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef long long ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_lo=$ac_mid; break
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_hi=`expr '(' $ac_mid ')' - 1`
++                      if test $ac_mid -le $ac_hi; then
++                        ac_lo= ac_hi=
++                        break
++                      fi
++                      ac_mid=`expr 2 '*' $ac_mid`
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++  done
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_lo= ac_hi=
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++# Binary search between lo and hi bounds.
++while test "x$ac_lo" != "x$ac_hi"; do
++  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef long long ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_hi=$ac_mid
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_lo=`expr '(' $ac_mid ')' + 1`
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++done
++case $ac_lo in
++?*) ac_cv_sizeof_long_long=$ac_lo;;
++'') if test "$ac_cv_type_long_long" = yes; then
++     { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long)
++See \`config.log' for more details." >&5
++echo "$as_me: error: cannot compute sizeof (long long)
++See \`config.log' for more details." >&2;}
++   { (exit 77); exit 77; }; }
++   else
++     ac_cv_sizeof_long_long=0
++   fi ;;
++esac
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef long long ac__type_sizeof_;
++static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
++static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
++@%:@include <stdio.h>
++@%:@include <stdlib.h>
++int
++main ()
++{
++
++  FILE *f = fopen ("conftest.val", "w");
++  if (! f)
++    return 1;
++  if (((long int) (sizeof (ac__type_sizeof_))) < 0)
++    {
++      long int i = longval ();
++      if (i != ((long int) (sizeof (ac__type_sizeof_))))
++      return 1;
++      fprintf (f, "%ld\n", i);
++    }
++  else
++    {
++      unsigned long int i = ulongval ();
++      if (i != ((long int) (sizeof (ac__type_sizeof_))))
++      return 1;
++      fprintf (f, "%lu\n", i);
++    }
++  return ferror (f) || fclose (f) != 0;
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
++  { (case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_try") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
++  ac_cv_sizeof_long_long=`cat conftest.val`
++else
++  echo "$as_me: program exited with status $ac_status" >&5
++echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++( exit $ac_status )
++if test "$ac_cv_type_long_long" = yes; then
++     { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long)
++See \`config.log' for more details." >&5
++echo "$as_me: error: cannot compute sizeof (long long)
++See \`config.log' for more details." >&2;}
++   { (exit 77); exit 77; }; }
++   else
++     ac_cv_sizeof_long_long=0
++   fi
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
++fi
++rm -f conftest.val
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5
++echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6; }
++
++
++
++cat >>confdefs.h <<_ACEOF
++@%:@define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
++_ACEOF
++
++
++    
++    if test "x$have_inttypes_h" = xyes; then
++      inttypes_hdr='inttypes.h'
++    else
++      inttypes_hdr='sys/types.h'
++    fi
++
++    { echo "$as_me:$LINENO: checking for long long" >&5
++echo $ECHO_N "checking for long long... $ECHO_C" >&6; }
++if test "${ac_cv_type_long_long+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++typedef long long ac__type_new_;
++int
++main ()
++{
++if ((ac__type_new_ *) 0)
++  return 0;
++if (sizeof (ac__type_new_))
++  return 0;
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_type_long_long=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_type_long_long=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5
++echo "${ECHO_T}$ac_cv_type_long_long" >&6; }
++if test $ac_cv_type_long_long = yes; then
++  
++cat >>confdefs.h <<_ACEOF
++@%:@define HAVE_LONG_LONG 1
++_ACEOF
++
++
++fi
++
++    { echo "$as_me:$LINENO: checking for int64_t typedef" >&5
++echo $ECHO_N "checking for int64_t typedef... $ECHO_C" >&6; }
++if test "${ac_cv_int64_t+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <$inttypes_hdr>
++
++_ACEOF
++if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
++  $EGREP "(^|[^a-zA-Z_0-9])int64_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
++  ac_cv_int64_t=yes
++else
++  ac_cv_int64_t=no
++fi
++rm -f conftest*
++
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_int64_t" >&5
++echo "${ECHO_T}$ac_cv_int64_t" >&6; }
++    { echo "$as_me:$LINENO: checking for uint64_t typedef" >&5
++echo $ECHO_N "checking for uint64_t typedef... $ECHO_C" >&6; }
++if test "${ac_cv_uint64_t+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <$inttypes_hdr>
++
++_ACEOF
++if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
++  $EGREP "(^|[^a-zA-Z_0-9])u_?int64_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
++  ac_cv_uint64_t=yes
++else
++  ac_cv_uint64_t=no
++fi
++rm -f conftest*
++
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_uint64_t" >&5
++echo "${ECHO_T}$ac_cv_uint64_t" >&6; }
++
++    have_int64_types=
++    if test $ac_cv_int64_t = no -o $ac_cv_uint64_t = no; then
++      { { echo "$as_me:$LINENO: error: 
++=========================================
++
++int64_t types not defined by $inttypes_hdr!
++Compile with '--disable-int64'.
++
++=========================================" >&5
++echo "$as_me: error: 
++=========================================
++
++int64_t types not defined by $inttypes_hdr!
++Compile with '--disable-int64'.
++
++=========================================" >&2;}
++   { (exit 1); exit 1; }; }
++    else
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_INT64_TYPES 1
++_ACEOF
++
++      have_int64_types=yes
++
++      { echo "$as_me:$LINENO: checking whether long and int64_t are the same type" >&5
++echo $ECHO_N "checking whether long and int64_t are the same type... $ECHO_C" >&6; }
++if test "${ac_cv_long_64+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_ext=cpp
++ac_cpp='$CXXCPP $CPPFLAGS'
++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
++
++          cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <$inttypes_hdr>
++void f1(long) {
++}
++void f1(int64_t) { // will fail if long and int64_t are the same type
++}
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_long_64=no
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_long_64=yes
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_long_64" >&5
++echo "${ECHO_T}$ac_cv_long_64" >&6; }
++      if test $ac_cv_long_64 = yes; then
++          
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_INT64_IS_LONG_USERLEVEL 1
++_ACEOF
++
++      fi
++
++      { echo "$as_me:$LINENO: checking whether long long and int64_t are the same type" >&5
++echo $ECHO_N "checking whether long long and int64_t are the same type... $ECHO_C" >&6; }
++if test "${ac_cv_long_long_64+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_ext=cpp
++ac_cpp='$CXXCPP $CPPFLAGS'
++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
++
++          cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <$inttypes_hdr>
++void f1(long long) {
++}
++void f1(int64_t) { // will fail if long long and int64_t are the same type
++}
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_long_long_64=no
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_long_long_64=yes
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_long_long_64" >&5
++echo "${ECHO_T}$ac_cv_long_long_64" >&6; }
++      if test $ac_cv_long_long_64 = yes; then
++          
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++_ACEOF
++
++      fi
++    fi
++fi
++{ echo "$as_me:$LINENO: checking for struct timeval" >&5
++echo $ECHO_N "checking for struct timeval... $ECHO_C" >&6; }
++if test "${ac_cv_type_struct_timeval+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++typedef struct timeval ac__type_new_;
++int
++main ()
++{
++if ((ac__type_new_ *) 0)
++  return 0;
++if (sizeof (ac__type_new_))
++  return 0;
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_type_struct_timeval=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_type_struct_timeval=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_type_struct_timeval" >&5
++echo "${ECHO_T}$ac_cv_type_struct_timeval" >&6; }
++
++# The cast to long int works around a bug in the HP C Compiler
++# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
++# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
++# This bug is HP SR number 8606223364.
++{ echo "$as_me:$LINENO: checking size of struct timeval" >&5
++echo $ECHO_N "checking size of struct timeval... $ECHO_C" >&6; }
++if test "${ac_cv_sizeof_struct_timeval+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test "$cross_compiling" = yes; then
++  # Depending upon the size, compute the lo and hi bounds.
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef struct timeval ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_lo=0 ac_mid=0
++  while :; do
++    cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef struct timeval ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_hi=$ac_mid; break
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_lo=`expr $ac_mid + 1`
++                      if test $ac_lo -le $ac_mid; then
++                        ac_lo= ac_hi=
++                        break
++                      fi
++                      ac_mid=`expr 2 '*' $ac_mid + 1`
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++  done
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef struct timeval ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_hi=-1 ac_mid=-1
++  while :; do
++    cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef struct timeval ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_lo=$ac_mid; break
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_hi=`expr '(' $ac_mid ')' - 1`
++                      if test $ac_mid -le $ac_hi; then
++                        ac_lo= ac_hi=
++                        break
++                      fi
++                      ac_mid=`expr 2 '*' $ac_mid`
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++  done
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_lo= ac_hi=
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++# Binary search between lo and hi bounds.
++while test "x$ac_lo" != "x$ac_hi"; do
++  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef struct timeval ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_hi=$ac_mid
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_lo=`expr '(' $ac_mid ')' + 1`
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++done
++case $ac_lo in
++?*) ac_cv_sizeof_struct_timeval=$ac_lo;;
++'') if test "$ac_cv_type_struct_timeval" = yes; then
++     { { echo "$as_me:$LINENO: error: cannot compute sizeof (struct timeval)
++See \`config.log' for more details." >&5
++echo "$as_me: error: cannot compute sizeof (struct timeval)
++See \`config.log' for more details." >&2;}
++   { (exit 77); exit 77; }; }
++   else
++     ac_cv_sizeof_struct_timeval=0
++   fi ;;
++esac
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef struct timeval ac__type_sizeof_;
++static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
++static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
++@%:@include <stdio.h>
++@%:@include <stdlib.h>
++int
++main ()
++{
++
++  FILE *f = fopen ("conftest.val", "w");
++  if (! f)
++    return 1;
++  if (((long int) (sizeof (ac__type_sizeof_))) < 0)
++    {
++      long int i = longval ();
++      if (i != ((long int) (sizeof (ac__type_sizeof_))))
++      return 1;
++      fprintf (f, "%ld\n", i);
++    }
++  else
++    {
++      unsigned long int i = ulongval ();
++      if (i != ((long int) (sizeof (ac__type_sizeof_))))
++      return 1;
++      fprintf (f, "%lu\n", i);
++    }
++  return ferror (f) || fclose (f) != 0;
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
++  { (case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_try") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
++  ac_cv_sizeof_struct_timeval=`cat conftest.val`
++else
++  echo "$as_me: program exited with status $ac_status" >&5
++echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++( exit $ac_status )
++if test "$ac_cv_type_struct_timeval" = yes; then
++     { { echo "$as_me:$LINENO: error: cannot compute sizeof (struct timeval)
++See \`config.log' for more details." >&5
++echo "$as_me: error: cannot compute sizeof (struct timeval)
++See \`config.log' for more details." >&2;}
++   { (exit 77); exit 77; }; }
++   else
++     ac_cv_sizeof_struct_timeval=0
++   fi
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
++fi
++rm -f conftest.val
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_struct_timeval" >&5
++echo "${ECHO_T}$ac_cv_sizeof_struct_timeval" >&6; }
++
++
++
++cat >>confdefs.h <<_ACEOF
++@%:@define SIZEOF_STRUCT_TIMEVAL $ac_cv_sizeof_struct_timeval
++_ACEOF
++
++
++{ echo "$as_me:$LINENO: checking for struct timespec" >&5
++echo $ECHO_N "checking for struct timespec... $ECHO_C" >&6; }
++if test "${ac_cv_type_struct_timespec+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++typedef struct timespec ac__type_new_;
++int
++main ()
++{
++if ((ac__type_new_ *) 0)
++  return 0;
++if (sizeof (ac__type_new_))
++  return 0;
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_type_struct_timespec=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_type_struct_timespec=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_type_struct_timespec" >&5
++echo "${ECHO_T}$ac_cv_type_struct_timespec" >&6; }
++if test $ac_cv_type_struct_timespec = yes; then
++  
++cat >>confdefs.h <<_ACEOF
++@%:@define HAVE_STRUCT_TIMESPEC 1
++_ACEOF
++
++have_timespec=yes
++else
++  have_timespec=no
++fi
++
++if test "x$have_timespec" = xyes; then
++    { echo "$as_me:$LINENO: checking for struct timespec" >&5
++echo $ECHO_N "checking for struct timespec... $ECHO_C" >&6; }
++if test "${ac_cv_type_struct_timespec+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++typedef struct timespec ac__type_new_;
++int
++main ()
++{
++if ((ac__type_new_ *) 0)
++  return 0;
++if (sizeof (ac__type_new_))
++  return 0;
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_type_struct_timespec=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_type_struct_timespec=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_type_struct_timespec" >&5
++echo "${ECHO_T}$ac_cv_type_struct_timespec" >&6; }
++
++# The cast to long int works around a bug in the HP C Compiler
++# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
++# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
++# This bug is HP SR number 8606223364.
++{ echo "$as_me:$LINENO: checking size of struct timespec" >&5
++echo $ECHO_N "checking size of struct timespec... $ECHO_C" >&6; }
++if test "${ac_cv_sizeof_struct_timespec+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test "$cross_compiling" = yes; then
++  # Depending upon the size, compute the lo and hi bounds.
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef struct timespec ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_lo=0 ac_mid=0
++  while :; do
++    cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef struct timespec ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_hi=$ac_mid; break
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_lo=`expr $ac_mid + 1`
++                      if test $ac_lo -le $ac_mid; then
++                        ac_lo= ac_hi=
++                        break
++                      fi
++                      ac_mid=`expr 2 '*' $ac_mid + 1`
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++  done
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef struct timespec ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_hi=-1 ac_mid=-1
++  while :; do
++    cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef struct timespec ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_lo=$ac_mid; break
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_hi=`expr '(' $ac_mid ')' - 1`
++                      if test $ac_mid -le $ac_hi; then
++                        ac_lo= ac_hi=
++                        break
++                      fi
++                      ac_mid=`expr 2 '*' $ac_mid`
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++  done
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_lo= ac_hi=
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++# Binary search between lo and hi bounds.
++while test "x$ac_lo" != "x$ac_hi"; do
++  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef struct timespec ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_hi=$ac_mid
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_lo=`expr '(' $ac_mid ')' + 1`
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++done
++case $ac_lo in
++?*) ac_cv_sizeof_struct_timespec=$ac_lo;;
++'') if test "$ac_cv_type_struct_timespec" = yes; then
++     { { echo "$as_me:$LINENO: error: cannot compute sizeof (struct timespec)
++See \`config.log' for more details." >&5
++echo "$as_me: error: cannot compute sizeof (struct timespec)
++See \`config.log' for more details." >&2;}
++   { (exit 77); exit 77; }; }
++   else
++     ac_cv_sizeof_struct_timespec=0
++   fi ;;
++esac
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++   typedef struct timespec ac__type_sizeof_;
++static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
++static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
++@%:@include <stdio.h>
++@%:@include <stdlib.h>
++int
++main ()
++{
++
++  FILE *f = fopen ("conftest.val", "w");
++  if (! f)
++    return 1;
++  if (((long int) (sizeof (ac__type_sizeof_))) < 0)
++    {
++      long int i = longval ();
++      if (i != ((long int) (sizeof (ac__type_sizeof_))))
++      return 1;
++      fprintf (f, "%ld\n", i);
++    }
++  else
++    {
++      unsigned long int i = ulongval ();
++      if (i != ((long int) (sizeof (ac__type_sizeof_))))
++      return 1;
++      fprintf (f, "%lu\n", i);
++    }
++  return ferror (f) || fclose (f) != 0;
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
++  { (case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_try") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
++  ac_cv_sizeof_struct_timespec=`cat conftest.val`
++else
++  echo "$as_me: program exited with status $ac_status" >&5
++echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++( exit $ac_status )
++if test "$ac_cv_type_struct_timespec" = yes; then
++     { { echo "$as_me:$LINENO: error: cannot compute sizeof (struct timespec)
++See \`config.log' for more details." >&5
++echo "$as_me: error: cannot compute sizeof (struct timespec)
++See \`config.log' for more details." >&2;}
++   { (exit 77); exit 77; }; }
++   else
++     ac_cv_sizeof_struct_timespec=0
++   fi
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
++fi
++rm -f conftest.val
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_struct_timespec" >&5
++echo "${ECHO_T}$ac_cv_sizeof_struct_timespec" >&6; }
++
++
++
++cat >>confdefs.h <<_ACEOF
++@%:@define SIZEOF_STRUCT_TIMESPEC $ac_cv_sizeof_struct_timespec
++_ACEOF
++
++
++fi
++
++    
++
++for ac_header in endian.h machine/endian.h
++do
++as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  { echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++else
++  # Is the header compilable?
++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++@%:@include <$ac_header>
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_header_compiler=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_header_compiler=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
++echo "${ECHO_T}$ac_header_compiler" >&6; }
++
++# Is the header present?
++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++@%:@include <$ac_header>
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  ac_header_preproc=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  ac_header_preproc=no
++fi
++
++rm -f conftest.err conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
++echo "${ECHO_T}$ac_header_preproc" >&6; }
++
++# So?  What about this header?
++case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
++  yes:no: )
++    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
++echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
++    ac_header_preproc=yes
++    ;;
++  no:yes:* )
++    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
++echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
++echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
++echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
++echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
++echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
++    
++    ;;
++esac
++{ echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  eval "$as_ac_Header=\$ac_header_preproc"
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++
++fi
++if test `eval echo '${'$as_ac_Header'}'` = yes; then
++  cat >>confdefs.h <<_ACEOF
++@%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
++_ACEOF
++                  if test "x$ac_header" != x; then
++                      endian_hdr=$ac_header
++                  else
++                      endian_hdr=$ac_hdr
++                  fi
++                  break
++else
++  endian_hdr=no
++fi
++
++done
++
++    if test "x$endian_hdr" != xno; then
++      { echo "$as_me:$LINENO: checking endianness" >&5
++echo $ECHO_N "checking endianness... $ECHO_C" >&6; }
++if test "${ac_cv_endian+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  
++                  ac_cv_endian=0
++          cat > conftest.$ac_ext <<EOF
++#line __oline__ "configure"
++#include "confdefs.h"
++#include <$endian_hdr>
++#ifdef __BYTE_ORDER
++__BYTE_ORDER
++#elif defined(BYTE_ORDER)
++BYTE_ORDER
++#else
++0
++#endif
++EOF
++          ac_try="$ac_cpp conftest.$ac_ext >conftest.result 2>conftest.out"
++          { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }
++          ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
++          if test -z "$ac_err"; then
++              ac_cv_endian=`grep '^[1234]' conftest.result`
++              test -z "$ac_cv_endian" && ac_cv_endian=0
++          else
++              echo "$ac_err" >&5
++              echo "configure: failed program was:" >&5
++              cat conftest.$ac_ext >&5
++          fi
++          rm -f conftest*
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_endian" >&5
++echo "${ECHO_T}$ac_cv_endian" >&6; }
++    elif test "x$cross_compiling" != xyes ; then
++      { echo "$as_me:$LINENO: checking endianness" >&5
++echo $ECHO_N "checking endianness... $ECHO_C" >&6; }
++if test "${ac_cv_endian+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test "$cross_compiling" = yes; then
++  ac_cv_endian=0
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <stdlib.h>
++#include <stdio.h>
++int main(int argc, char *argv[]) {
++    union { int i; char c[4]; } u;
++    FILE *f = fopen("conftestdata", "w");
++    if (!f)
++      exit(1);
++    u.i = ('1') | ('2' << 8) | ('3' << 16) | ('4' << 24);
++    fprintf(f, "%4.4s\n", u.c);
++    exit(0);
++}
++_ACEOF
++rm -f conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
++  { (case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_try") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
++  ac_cv_endian=`cat conftestdata`
++else
++  echo "$as_me: program exited with status $ac_status" >&5
++echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++( exit $ac_status )
++ac_cv_endian=0
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
++fi
++
++
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_endian" >&5
++echo "${ECHO_T}$ac_cv_endian" >&6; }
++    else
++      ac_cv_endian=0
++    fi
++    
++cat >>confdefs.h <<_ACEOF
++@%:@define CLICK_BYTE_ORDER $ac_cv_endian
++_ACEOF
++
++    
++for ac_header in byteswap.h
++do
++as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  { echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++else
++  # Is the header compilable?
++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++@%:@include <$ac_header>
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_header_compiler=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_header_compiler=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
++echo "${ECHO_T}$ac_header_compiler" >&6; }
++
++# Is the header present?
++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++@%:@include <$ac_header>
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  ac_header_preproc=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  ac_header_preproc=no
++fi
++
++rm -f conftest.err conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
++echo "${ECHO_T}$ac_header_preproc" >&6; }
++
++# So?  What about this header?
++case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
++  yes:no: )
++    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
++echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
++    ac_header_preproc=yes
++    ;;
++  no:yes:* )
++    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
++echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
++echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
++echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
++echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
++echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
++    
++    ;;
++esac
++{ echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  eval "$as_ac_Header=\$ac_header_preproc"
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++
++fi
++if test `eval echo '${'$as_ac_Header'}'` = yes; then
++  cat >>confdefs.h <<_ACEOF
++@%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
++_ACEOF
++ 
++fi
++
++done
++
++
++
++    { echo "$as_me:$LINENO: checking whether signed right shift is arithmetic" >&5
++echo $ECHO_N "checking whether signed right shift is arithmetic... $ECHO_C" >&6; }
++if test "${ac_cv_arithmetic_right_shift+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++int f(int x[((int) -1) >> 15]) { return x[0]; }
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_arithmetic_right_shift=no
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_arithmetic_right_shift=yes
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_arithmetic_right_shift" >&5
++echo "${ECHO_T}$ac_cv_arithmetic_right_shift" >&6; }
++    if test $ac_cv_arithmetic_right_shift = yes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++_ACEOF
++
++    fi
++
++    ac_ext=cpp
++ac_cpp='$CXXCPP $CPPFLAGS'
++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
++
++    { echo "$as_me:$LINENO: checking for addressable va_list type" >&5
++echo $ECHO_N "checking for addressable va_list type... $ECHO_C" >&6; }
++if test "${ac_cv_va_list_addr+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <stdarg.h>
++void f(va_list *) {
++}
++void g(va_list val) {
++    f(&val);
++}
++void h(int a, ...) {
++    va_list val;
++    va_start(val, a);
++    g(val);
++    va_end(val);
++}
++int
++main ()
++{
++h(2, 3, 4);
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_va_list_addr=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_va_list_addr=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_va_list_addr" >&5
++echo "${ECHO_T}$ac_cv_va_list_addr" >&6; }
++    if test "x$ac_cv_va_list_addr" = xyes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_ADDRESSABLE_VA_LIST 1
++_ACEOF
++
++    fi
++
++
++    { echo "$as_me:$LINENO: checking for __builtin_clz" >&5
++echo $ECHO_N "checking for __builtin_clz... $ECHO_C" >&6; }
++if test "${ac_cv_have___builtin_clz+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++volatile int x = 11;
++int
++main ()
++{
++int y = __builtin_clz(x);
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_have___builtin_clz=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_have___builtin_clz=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_have___builtin_clz" >&5
++echo "${ECHO_T}$ac_cv_have___builtin_clz" >&6; }
++    if test $ac_cv_have___builtin_clz = yes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE___BUILTIN_CLZ 1
++_ACEOF
++
++    fi
++    { echo "$as_me:$LINENO: checking for __builtin_clzl" >&5
++echo $ECHO_N "checking for __builtin_clzl... $ECHO_C" >&6; }
++if test "${ac_cv_have___builtin_clzl+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++volatile long x = 11;
++int
++main ()
++{
++int y = __builtin_clzl(x);
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_have___builtin_clzl=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_have___builtin_clzl=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_have___builtin_clzl" >&5
++echo "${ECHO_T}$ac_cv_have___builtin_clzl" >&6; }
++    if test $ac_cv_have___builtin_clzl = yes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE___BUILTIN_CLZL 1
++_ACEOF
++
++    fi
++    { echo "$as_me:$LINENO: checking for __builtin_clzll" >&5
++echo $ECHO_N "checking for __builtin_clzll... $ECHO_C" >&6; }
++if test "${ac_cv_have___builtin_clzll+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++volatile long long x = 11;
++int
++main ()
++{
++int y = __builtin_clzll(x);
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_have___builtin_clzll=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_have___builtin_clzll=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_have___builtin_clzll" >&5
++echo "${ECHO_T}$ac_cv_have___builtin_clzll" >&6; }
++    if test $ac_cv_have___builtin_clzll = yes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE___BUILTIN_CLZLL 1
++_ACEOF
++
++    fi
++
++    { echo "$as_me:$LINENO: checking for __builtin_ffs" >&5
++echo $ECHO_N "checking for __builtin_ffs... $ECHO_C" >&6; }
++if test "${ac_cv_have___builtin_ffs+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++volatile int x = 11;
++int
++main ()
++{
++int y = __builtin_ffs(x);
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_have___builtin_ffs=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_have___builtin_ffs=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_have___builtin_ffs" >&5
++echo "${ECHO_T}$ac_cv_have___builtin_ffs" >&6; }
++    if test $ac_cv_have___builtin_ffs = yes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE___BUILTIN_FFS 1
++_ACEOF
++
++    fi
++    { echo "$as_me:$LINENO: checking for __builtin_ffsl" >&5
++echo $ECHO_N "checking for __builtin_ffsl... $ECHO_C" >&6; }
++if test "${ac_cv_have___builtin_ffsl+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++volatile long x = 11;
++int
++main ()
++{
++int y = __builtin_ffsl(x);
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_have___builtin_ffsl=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_have___builtin_ffsl=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_have___builtin_ffsl" >&5
++echo "${ECHO_T}$ac_cv_have___builtin_ffsl" >&6; }
++    if test $ac_cv_have___builtin_ffsl = yes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE___BUILTIN_FFSL 1
++_ACEOF
++
++    fi
++    { echo "$as_me:$LINENO: checking for __builtin_ffsll" >&5
++echo $ECHO_N "checking for __builtin_ffsll... $ECHO_C" >&6; }
++if test "${ac_cv_have___builtin_ffsll+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++volatile long long x = 11;
++int
++main ()
++{
++int y = __builtin_ffsll(x);
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_have___builtin_ffsll=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_have___builtin_ffsll=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_have___builtin_ffsll" >&5
++echo "${ECHO_T}$ac_cv_have___builtin_ffsll" >&6; }
++    if test $ac_cv_have___builtin_ffsll = yes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE___BUILTIN_FFSLL 1
++_ACEOF
++
++    fi
++
++    
++for ac_header in strings.h
++do
++as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  { echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++else
++  # Is the header compilable?
++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++@%:@include <$ac_header>
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_header_compiler=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_header_compiler=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
++echo "${ECHO_T}$ac_header_compiler" >&6; }
++
++# Is the header present?
++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++@%:@include <$ac_header>
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  ac_header_preproc=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  ac_header_preproc=no
++fi
++
++rm -f conftest.err conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
++echo "${ECHO_T}$ac_header_preproc" >&6; }
++
++# So?  What about this header?
++case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
++  yes:no: )
++    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
++echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
++    ac_header_preproc=yes
++    ;;
++  no:yes:* )
++    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
++echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
++echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
++echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
++echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
++echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
++    
++    ;;
++esac
++{ echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  eval "$as_ac_Header=\$ac_header_preproc"
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++
++fi
++if test `eval echo '${'$as_ac_Header'}'` = yes; then
++  cat >>confdefs.h <<_ACEOF
++@%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
++_ACEOF
++ 
++fi
++
++done
++
++    
++
++
++for ac_func in ffs ffsl ffsll
++do
++as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
++{ echo "$as_me:$LINENO: checking for $ac_func" >&5
++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
++   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
++#define $ac_func innocuous_$ac_func
++
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func (); below.
++    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++    <limits.h> exists even on freestanding compilers.  */
++
++#ifdef __STDC__
++# include <limits.h>
++#else
++# include <assert.h>
++#endif
++
++#undef $ac_func
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char $ac_func ();
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined __stub_$ac_func || defined __stub___$ac_func
++choke me
++#endif
++
++int
++main ()
++{
++return $ac_func ();
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  eval "$as_ac_var=yes"
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      eval "$as_ac_var=no"
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext conftest.$ac_ext
++fi
++ac_res=`eval echo '${'$as_ac_var'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++if test `eval echo '${'$as_ac_var'}'` = yes; then
++  cat >>confdefs.h <<_ACEOF
++@%:@define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
++_ACEOF
++ 
++fi
++done
++
++    
++
++
++
++# Check whether --enable-nanotimestamp was given.
++if test "${enable_nanotimestamp+set}" = set; then
++  enableval=$enable_nanotimestamp; 
++fi
++
++if test "x$enable_nanotimestamp" = xyes; then
++    cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_NANOTIMESTAMP_ENABLED 1
++_ACEOF
++
++fi
++
++
++
++# Check whether --enable-tools was given.
++if test "${enable_tools+set}" = set; then
++  enableval=$enable_tools; :
++else
++  enable_tools=mixed
++fi
++
++
++if test "$enable_tools" != mixed -a "$enable_tools" != host -a "$enable_tools" != build -a "$enable_tools" != no; then
++  { { echo "$as_me:$LINENO: error: 
++=========================================
++
++Bad value for --enable-tools.  Try 'host', 'build', 'mixed', or 'no'.
++
++=========================================" >&5
++echo "$as_me: error: 
++=========================================
++
++Bad value for --enable-tools.  Try 'host', 'build', 'mixed', or 'no'.
++
++=========================================" >&2;}
++   { (exit 1); exit 1; }; }
++elif test "$enable_tools" = no; then
++  HOST_TOOLS=host
++elif test "$cross_compiling" = no -o "$enable_tools" = host; then
++  HOST_TOOLS=host
++else
++    for ac_prog in gcc
++do
++  # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_BUILD_CC+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$BUILD_CC"; then
++  ac_cv_prog_BUILD_CC="$BUILD_CC" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_BUILD_CC="$ac_prog"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++BUILD_CC=$ac_cv_prog_BUILD_CC
++if test -n "$BUILD_CC"; then
++  { echo "$as_me:$LINENO: result: $BUILD_CC" >&5
++echo "${ECHO_T}$BUILD_CC" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++
++  test -n "$BUILD_CC" && break
++done
++
++  for ac_prog in g++
++do
++  # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_BUILD_CXX+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$BUILD_CXX"; then
++  ac_cv_prog_BUILD_CXX="$BUILD_CXX" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_BUILD_CXX="$ac_prog"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++BUILD_CXX=$ac_cv_prog_BUILD_CXX
++if test -n "$BUILD_CXX"; then
++  { echo "$as_me:$LINENO: result: $BUILD_CXX" >&5
++echo "${ECHO_T}$BUILD_CXX" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++
++  test -n "$BUILD_CXX" && break
++done
++
++  
++        ac_base_build_cxx="$CXX"
++    test -z "$ac_user_build_cxx" -a -n "$ac_compile_with_warnings" && \
++      BUILD_CXX="$BUILD_CXX $CXX_WARNINGS $VTABLE_THUNKS"
++
++  for ac_prog in ar
++do
++  # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_BUILD_AR+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$BUILD_AR"; then
++  ac_cv_prog_BUILD_AR="$BUILD_AR" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_BUILD_AR="$ac_prog"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++BUILD_AR=$ac_cv_prog_BUILD_AR
++if test -n "$BUILD_AR"; then
++  { echo "$as_me:$LINENO: result: $BUILD_AR" >&5
++echo "${ECHO_T}$BUILD_AR" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++
++  test -n "$BUILD_AR" && break
++done
++
++  for ac_prog in ranlib
++do
++  # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_BUILD_RANLIB+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$BUILD_RANLIB"; then
++  ac_cv_prog_BUILD_RANLIB="$BUILD_RANLIB" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_BUILD_RANLIB="$ac_prog"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++BUILD_RANLIB=$ac_cv_prog_BUILD_RANLIB
++if test -n "$BUILD_RANLIB"; then
++  { echo "$as_me:$LINENO: result: $BUILD_RANLIB" >&5
++echo "${ECHO_T}$BUILD_RANLIB" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++
++  test -n "$BUILD_RANLIB" && break
++done
++test -n "$BUILD_RANLIB" || BUILD_RANLIB=":"
++
++  HOST_TOOLS=$enable_tools
++fi
++
++
++
++
++
++
++
++
++
++
++for ac_header in unistd.h termio.h netdb.h sys/event.h pwd.h grp.h
++do
++as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  { echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++else
++  # Is the header compilable?
++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++@%:@include <$ac_header>
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_header_compiler=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_header_compiler=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
++echo "${ECHO_T}$ac_header_compiler" >&6; }
++
++# Is the header present?
++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++@%:@include <$ac_header>
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  ac_header_preproc=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  ac_header_preproc=no
++fi
++
++rm -f conftest.err conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
++echo "${ECHO_T}$ac_header_preproc" >&6; }
++
++# So?  What about this header?
++case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
++  yes:no: )
++    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
++echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
++    ac_header_preproc=yes
++    ;;
++  no:yes:* )
++    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
++echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
++echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
++echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
++echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
++echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
++    
++    ;;
++esac
++{ echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  eval "$as_ac_Header=\$ac_header_preproc"
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++
++fi
++if test `eval echo '${'$as_ac_Header'}'` = yes; then
++  cat >>confdefs.h <<_ACEOF
++@%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
++_ACEOF
++ 
++fi
++
++done
++
++
++    if test "${ac_cv_header_poll_h+set}" = set; then
++  { echo "$as_me:$LINENO: checking for poll.h" >&5
++echo $ECHO_N "checking for poll.h... $ECHO_C" >&6; }
++if test "${ac_cv_header_poll_h+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_header_poll_h" >&5
++echo "${ECHO_T}$ac_cv_header_poll_h" >&6; }
++else
++  # Is the header compilable?
++{ echo "$as_me:$LINENO: checking poll.h usability" >&5
++echo $ECHO_N "checking poll.h usability... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++@%:@include <poll.h>
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_header_compiler=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_header_compiler=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
++echo "${ECHO_T}$ac_header_compiler" >&6; }
++
++# Is the header present?
++{ echo "$as_me:$LINENO: checking poll.h presence" >&5
++echo $ECHO_N "checking poll.h presence... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++@%:@include <poll.h>
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  ac_header_preproc=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  ac_header_preproc=no
++fi
++
++rm -f conftest.err conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
++echo "${ECHO_T}$ac_header_preproc" >&6; }
++
++# So?  What about this header?
++case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
++  yes:no: )
++    { echo "$as_me:$LINENO: WARNING: poll.h: accepted by the compiler, rejected by the preprocessor!" >&5
++echo "$as_me: WARNING: poll.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
++    { echo "$as_me:$LINENO: WARNING: poll.h: proceeding with the compiler's result" >&5
++echo "$as_me: WARNING: poll.h: proceeding with the compiler's result" >&2;}
++    ac_header_preproc=yes
++    ;;
++  no:yes:* )
++    { echo "$as_me:$LINENO: WARNING: poll.h: present but cannot be compiled" >&5
++echo "$as_me: WARNING: poll.h: present but cannot be compiled" >&2;}
++    { echo "$as_me:$LINENO: WARNING: poll.h:     check for missing prerequisite headers?" >&5
++echo "$as_me: WARNING: poll.h:     check for missing prerequisite headers?" >&2;}
++    { echo "$as_me:$LINENO: WARNING: poll.h: see the Autoconf documentation" >&5
++echo "$as_me: WARNING: poll.h: see the Autoconf documentation" >&2;}
++    { echo "$as_me:$LINENO: WARNING: poll.h:     section \"Present But Cannot Be Compiled\"" >&5
++echo "$as_me: WARNING: poll.h:     section \"Present But Cannot Be Compiled\"" >&2;}
++    { echo "$as_me:$LINENO: WARNING: poll.h: proceeding with the preprocessor's result" >&5
++echo "$as_me: WARNING: poll.h: proceeding with the preprocessor's result" >&2;}
++    { echo "$as_me:$LINENO: WARNING: poll.h: in the future, the compiler will take precedence" >&5
++echo "$as_me: WARNING: poll.h: in the future, the compiler will take precedence" >&2;}
++    
++    ;;
++esac
++{ echo "$as_me:$LINENO: checking for poll.h" >&5
++echo $ECHO_N "checking for poll.h... $ECHO_C" >&6; }
++if test "${ac_cv_header_poll_h+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_cv_header_poll_h=$ac_header_preproc
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_header_poll_h" >&5
++echo "${ECHO_T}$ac_cv_header_poll_h" >&6; }
++
++fi
++if test $ac_cv_header_poll_h = yes; then
++  ac_cv_poll_h=yes
++else
++  ac_cv_poll_h=no
++fi
++
++
++    if test "$ac_cv_poll_h" = yes; then
++      { echo "$as_me:$LINENO: checking whether <poll.h> is emulated" >&5
++echo $ECHO_N "checking whether <poll.h> is emulated... $ECHO_C" >&6; }
++if test "${ac_cv_emulated_poll_h+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <poll.h>
++#ifdef _POLL_EMUL_H_
++# error "error"
++#endif
++
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_emulated_poll_h=no
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_emulated_poll_h=yes
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_emulated_poll_h" >&5
++echo "${ECHO_T}$ac_cv_emulated_poll_h" >&6; }
++      if test "x$ac_cv_emulated_poll_h" = xno; then
++          
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_POLL_H 1
++_ACEOF
++
++      fi
++    fi
++
++
++for ac_func in sigaction
++do
++as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
++{ echo "$as_me:$LINENO: checking for $ac_func" >&5
++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
++   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
++#define $ac_func innocuous_$ac_func
++
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func (); below.
++    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++    <limits.h> exists even on freestanding compilers.  */
++
++#ifdef __STDC__
++# include <limits.h>
++#else
++# include <assert.h>
++#endif
++
++#undef $ac_func
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char $ac_func ();
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined __stub_$ac_func || defined __stub___$ac_func
++choke me
++#endif
++
++int
++main ()
++{
++return $ac_func ();
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  eval "$as_ac_var=yes"
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      eval "$as_ac_var=no"
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext conftest.$ac_ext
++fi
++ac_res=`eval echo '${'$as_ac_var'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++if test `eval echo '${'$as_ac_var'}'` = yes; then
++  cat >>confdefs.h <<_ACEOF
++@%:@define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
++_ACEOF
++ 
++fi
++done
++
++
++
++for ac_func in kqueue
++do
++as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
++{ echo "$as_me:$LINENO: checking for $ac_func" >&5
++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
++   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
++#define $ac_func innocuous_$ac_func
++
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func (); below.
++    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++    <limits.h> exists even on freestanding compilers.  */
++
++#ifdef __STDC__
++# include <limits.h>
++#else
++# include <assert.h>
++#endif
++
++#undef $ac_func
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char $ac_func ();
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined __stub_$ac_func || defined __stub___$ac_func
++choke me
++#endif
++
++int
++main ()
++{
++return $ac_func ();
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  eval "$as_ac_var=yes"
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      eval "$as_ac_var=no"
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext conftest.$ac_ext
++fi
++ac_res=`eval echo '${'$as_ac_var'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++if test `eval echo '${'$as_ac_var'}'` = yes; then
++  cat >>confdefs.h <<_ACEOF
++@%:@define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
++_ACEOF
++ have_kqueue=yes
++fi
++done
++
++if test "x$have_kqueue" = xyes; then
++    { echo "$as_me:$LINENO: checking whether EV_SET last argument is void *" >&5
++echo $ECHO_N "checking whether EV_SET last argument is void *... $ECHO_C" >&6; }
++if test "${ac_cv_ev_set_udata_pointer+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <sys/types.h>
++#include <sys/event.h>
++#include <sys/time.h>
++int
++main ()
++{
++struct kevent kev; EV_SET(&kev, 1, EVFILT_WRITE, EV_ADD, 0, 0, (void *) &kev);
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_ev_set_udata_pointer=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_ev_set_udata_pointer=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_ev_set_udata_pointer" >&5
++echo "${ECHO_T}$ac_cv_ev_set_udata_pointer" >&6; }
++    if test $ac_cv_ev_set_udata_pointer = yes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_EV_SET_UDATA_POINTER 1
++_ACEOF
++
++    fi
++fi
++
++# Check whether --enable-dynamic-linking was given.
++if test "${enable_dynamic_linking+set}" = set; then
++  enableval=$enable_dynamic_linking; :
++else
++  enable_dynamic_linking=yes
++fi
++
++
++if test "x$enable_dynamic_linking" = xyes; then
++    
++    DL_LIBS=
++    
++for ac_header in dlfcn.h
++do
++as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  { echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++else
++  # Is the header compilable?
++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++@%:@include <$ac_header>
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_header_compiler=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_header_compiler=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
++echo "${ECHO_T}$ac_header_compiler" >&6; }
++
++# Is the header present?
++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++@%:@include <$ac_header>
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  ac_header_preproc=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  ac_header_preproc=no
++fi
++
++rm -f conftest.err conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
++echo "${ECHO_T}$ac_header_preproc" >&6; }
++
++# So?  What about this header?
++case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
++  yes:no: )
++    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
++echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
++    ac_header_preproc=yes
++    ;;
++  no:yes:* )
++    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
++echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
++echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
++echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
++echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
++echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
++    
++    ;;
++esac
++{ echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  eval "$as_ac_Header=\$ac_header_preproc"
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++
++fi
++if test `eval echo '${'$as_ac_Header'}'` = yes; then
++  cat >>confdefs.h <<_ACEOF
++@%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
++_ACEOF
++ ac_have_dlfcn_h=yes
++else
++  ac_have_dlfcn_h=no
++fi
++
++done
++
++    { echo "$as_me:$LINENO: checking for dlopen" >&5
++echo $ECHO_N "checking for dlopen... $ECHO_C" >&6; }
++if test "${ac_cv_func_dlopen+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
++   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
++#define dlopen innocuous_dlopen
++
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char dlopen (); below.
++    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++    <limits.h> exists even on freestanding compilers.  */
++
++#ifdef __STDC__
++# include <limits.h>
++#else
++# include <assert.h>
++#endif
++
++#undef dlopen
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char dlopen ();
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined __stub_dlopen || defined __stub___dlopen
++choke me
++#endif
++
++int
++main ()
++{
++return dlopen ();
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  ac_cv_func_dlopen=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_func_dlopen=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
++echo "${ECHO_T}$ac_cv_func_dlopen" >&6; }
++if test $ac_cv_func_dlopen = yes; then
++  ac_have_dlopen=yes
++else
++  { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
++echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; }
++if test "${ac_cv_lib_dl_dlopen+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_check_lib_save_LIBS=$LIBS
++LIBS="-ldl  $LIBS"
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char dlopen ();
++int
++main ()
++{
++return dlopen ();
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  ac_cv_lib_dl_dlopen=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_lib_dl_dlopen=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext conftest.$ac_ext
++LIBS=$ac_check_lib_save_LIBS
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
++echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; }
++if test $ac_cv_lib_dl_dlopen = yes; then
++  ac_have_dlopen=yes; DL_LIBS="-ldl"
++else
++  ac_have_dlopen=no
++fi
++
++fi
++
++    if test "x$ac_have_dlopen" = xyes -a "x$ac_have_dlfcn_h" = xyes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_DYNAMIC_LINKING 1
++_ACEOF
++
++      ac_have_dynamic_linking=yes
++    fi
++    
++
++    { echo "$as_me:$LINENO: checking compiler flags for building loadable modules" >&5
++echo $ECHO_N "checking compiler flags for building loadable modules... $ECHO_C" >&6; }
++    LDMODULEFLAGS=-shared
++    if test "x$ac_have_dynamic_linking" = xyes; then
++      if echo "$ac_cv_target" | grep apple-darwin >/dev/null 2>&1; then
++          LDMODULEFLAGS='-bundle -flat_namespace -undefined suppress'
++      fi
++    fi
++    { echo "$as_me:$LINENO: result: $LDMODULEFLAGS" >&5
++echo "${ECHO_T}$LDMODULEFLAGS" >&6; }
++    
++
++    if test "$HOST_TOOLS" != host -a "$enable_tools" != no; then
++      
++    saver="CXX='$CXX' CXXCPP='$CXXCPP' ac_cv_header_dlfcn_h='$ac_cv_header_dlfcn_h' ac_cv_func_dlopen='$ac_cv_func_dlopen' ac_cv_lib_dl_dlopen='$ac_cv_lib_dl_dlopen'"
++    CXX="$BUILD_CXX"; CXXCPP="$BUILD_CXX -E"
++    unset ac_cv_header_dlfcn_h ac_cv_func_dlopen ac_cv_lib_dl_dlopen
++    BUILD_DL_LIBS=
++    
++for ac_header in dlfcn.h
++do
++as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  { echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++else
++  # Is the header compilable?
++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++@%:@include <$ac_header>
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_header_compiler=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_header_compiler=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
++echo "${ECHO_T}$ac_header_compiler" >&6; }
++
++# Is the header present?
++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++@%:@include <$ac_header>
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  ac_header_preproc=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  ac_header_preproc=no
++fi
++
++rm -f conftest.err conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
++echo "${ECHO_T}$ac_header_preproc" >&6; }
++
++# So?  What about this header?
++case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
++  yes:no: )
++    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
++echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
++    ac_header_preproc=yes
++    ;;
++  no:yes:* )
++    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
++echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
++echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
++echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
++echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
++echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
++    
++    ;;
++esac
++{ echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  eval "$as_ac_Header=\$ac_header_preproc"
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++
++fi
++if test `eval echo '${'$as_ac_Header'}'` = yes; then
++  cat >>confdefs.h <<_ACEOF
++@%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
++_ACEOF
++ ac_build_have_dlfcn_h=yes
++else
++  ac_build_have_dlfcn_h=no
++fi
++
++done
++
++    { echo "$as_me:$LINENO: checking for dlopen" >&5
++echo $ECHO_N "checking for dlopen... $ECHO_C" >&6; }
++if test "${ac_cv_func_dlopen+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
++   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
++#define dlopen innocuous_dlopen
++
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char dlopen (); below.
++    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++    <limits.h> exists even on freestanding compilers.  */
++
++#ifdef __STDC__
++# include <limits.h>
++#else
++# include <assert.h>
++#endif
++
++#undef dlopen
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char dlopen ();
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined __stub_dlopen || defined __stub___dlopen
++choke me
++#endif
++
++int
++main ()
++{
++return dlopen ();
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  ac_cv_func_dlopen=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_func_dlopen=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
++echo "${ECHO_T}$ac_cv_func_dlopen" >&6; }
++if test $ac_cv_func_dlopen = yes; then
++  ac_build_have_dlopen=yes
++else
++  { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
++echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; }
++if test "${ac_cv_lib_dl_dlopen+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_check_lib_save_LIBS=$LIBS
++LIBS="-ldl  $LIBS"
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char dlopen ();
++int
++main ()
++{
++return dlopen ();
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  ac_cv_lib_dl_dlopen=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_lib_dl_dlopen=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext conftest.$ac_ext
++LIBS=$ac_check_lib_save_LIBS
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
++echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; }
++if test $ac_cv_lib_dl_dlopen = yes; then
++  ac_build_have_dlopen=yes; BUILD_DL_LIBS="-ldl"
++else
++  ac_have_dlopen=no
++fi
++
++fi
++
++    if test "x$ac_build_have_dlopen" = xyes -a "x$ac_build_have_dlfcn_h" = xyes; then
++      ac_build_have_dynamic_linking=yes
++    fi
++    if test "x$ac_build_have_dynamic_linking" != "x$ac_have_dynamic_linking"; then
++      { { echo "$as_me:$LINENO: error: 
++=========================================
++
++Build system and host system don't have the same dynamic linking state!
++
++=========================================" >&5
++echo "$as_me: error: 
++=========================================
++
++Build system and host system don't have the same dynamic linking state!
++
++=========================================" >&2;}
++   { (exit 1); exit 1; }; }
++    fi
++    
++    eval "$saver"
++
++    fi
++fi
++
++
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++SOCKET_LIBS=
++if test "$enable_userlevel" = yes; then
++    savelibs="$LIBS"; LIBS=
++    { echo "$as_me:$LINENO: checking for library containing gethostbyname" >&5
++echo $ECHO_N "checking for library containing gethostbyname... $ECHO_C" >&6; }
++if test "${ac_cv_search_gethostbyname+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_func_search_save_LIBS=$LIBS
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char gethostbyname ();
++int
++main ()
++{
++return gethostbyname ();
++  ;
++  return 0;
++}
++_ACEOF
++for ac_lib in '' nsl; do
++  if test -z "$ac_lib"; then
++    ac_res="none required"
++  else
++    ac_res=-l$ac_lib
++    LIBS="-l$ac_lib $savelibs $ac_func_search_save_LIBS"
++  fi
++  rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  ac_cv_search_gethostbyname=$ac_res
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext 
++  if test "${ac_cv_search_gethostbyname+set}" = set; then
++  break
++fi
++done
++if test "${ac_cv_search_gethostbyname+set}" = set; then
++  :
++else
++  ac_cv_search_gethostbyname=no
++fi
++rm conftest.$ac_ext
++LIBS=$ac_func_search_save_LIBS
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_search_gethostbyname" >&5
++echo "${ECHO_T}$ac_cv_search_gethostbyname" >&6; }
++ac_res=$ac_cv_search_gethostbyname
++if test "$ac_res" != no; then
++  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
++  
++fi
++
++    { echo "$as_me:$LINENO: checking for library containing connect" >&5
++echo $ECHO_N "checking for library containing connect... $ECHO_C" >&6; }
++if test "${ac_cv_search_connect+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_func_search_save_LIBS=$LIBS
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char connect ();
++int
++main ()
++{
++return connect ();
++  ;
++  return 0;
++}
++_ACEOF
++for ac_lib in '' socket; do
++  if test -z "$ac_lib"; then
++    ac_res="none required"
++  else
++    ac_res=-l$ac_lib
++    LIBS="-l$ac_lib $savelibs $ac_func_search_save_LIBS"
++  fi
++  rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  ac_cv_search_connect=$ac_res
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext 
++  if test "${ac_cv_search_connect+set}" = set; then
++  break
++fi
++done
++if test "${ac_cv_search_connect+set}" = set; then
++  :
++else
++  ac_cv_search_connect=no
++fi
++rm conftest.$ac_ext
++LIBS=$ac_func_search_save_LIBS
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_search_connect" >&5
++echo "${ECHO_T}$ac_cv_search_connect" >&6; }
++ac_res=$ac_cv_search_connect
++if test "$ac_res" != no; then
++  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
++  
++fi
++
++    SOCKET_LIBS="$LIBS"; LIBS="$savelibs"
++
++    { echo "$as_me:$LINENO: checking whether accept() uses socklen_t" >&5
++echo $ECHO_N "checking whether accept() uses socklen_t... $ECHO_C" >&6; }
++if test "${ac_cv_accept_socklen_t+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <sys/types.h>
++#include <sys/socket.h>
++
++int
++main ()
++{
++socklen_t sl; (void) accept(0, (struct sockaddr *) 0, &sl);
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_accept_socklen_t=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_accept_socklen_t=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_accept_socklen_t" >&5
++echo "${ECHO_T}$ac_cv_accept_socklen_t" >&6; }
++    if test "$ac_cv_accept_socklen_t" = yes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_ACCEPT_SOCKLEN_T 1
++_ACEOF
++
++    fi
++fi
++
++ac_ext=cpp
++ac_cpp='$CXXCPP $CPPFLAGS'
++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
++
++
++
++
++
++    ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++    { echo "$as_me:$LINENO: checking for large file support in C library" >&5
++echo $ECHO_N "checking for large file support in C library... $ECHO_C" >&6; }
++if test "${ac_cv_large_file_support+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#define _LARGEFILE_SOURCE 1
++#define _FILE_OFFSET_BITS 64
++#include <unistd.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++void h(off_t a) {
++    int fd = open("/tmp/whatever", 0);
++    lseek(fd, a, 0);
++}
++int
++main ()
++{
++h(15);
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_large_file_support=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_large_file_support=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_large_file_support" >&5
++echo "${ECHO_T}$ac_cv_large_file_support" >&6; }
++    if test "x$ac_cv_large_file_support" = xyes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_LARGE_FILE_SUPPORT 1
++_ACEOF
++
++    fi
++
++    { echo "$as_me:$LINENO: checking for off_t" >&5
++echo $ECHO_N "checking for off_t... $ECHO_C" >&6; }
++if test "${ac_cv_type_off_t+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#if HAVE_LARGE_FILE_SUPPORT && HAVE_INT64_TYPES
++# define _LARGEFILE_SOURCE 1
++# define _FILE_OFFSET_BITS 64
++#endif
++#include <stdio.h>
++#include <sys/types.h>
++
++typedef off_t ac__type_new_;
++int
++main ()
++{
++if ((ac__type_new_ *) 0)
++  return 0;
++if (sizeof (ac__type_new_))
++  return 0;
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_type_off_t=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_type_off_t=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
++echo "${ECHO_T}$ac_cv_type_off_t" >&6; }
++
++# The cast to long int works around a bug in the HP C Compiler
++# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
++# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
++# This bug is HP SR number 8606223364.
++{ echo "$as_me:$LINENO: checking size of off_t" >&5
++echo $ECHO_N "checking size of off_t... $ECHO_C" >&6; }
++if test "${ac_cv_sizeof_off_t+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test "$cross_compiling" = yes; then
++  # Depending upon the size, compute the lo and hi bounds.
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#if HAVE_LARGE_FILE_SUPPORT && HAVE_INT64_TYPES
++# define _LARGEFILE_SOURCE 1
++# define _FILE_OFFSET_BITS 64
++#endif
++#include <stdio.h>
++#include <sys/types.h>
++
++   typedef off_t ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_lo=0 ac_mid=0
++  while :; do
++    cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#if HAVE_LARGE_FILE_SUPPORT && HAVE_INT64_TYPES
++# define _LARGEFILE_SOURCE 1
++# define _FILE_OFFSET_BITS 64
++#endif
++#include <stdio.h>
++#include <sys/types.h>
++
++   typedef off_t ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_hi=$ac_mid; break
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_lo=`expr $ac_mid + 1`
++                      if test $ac_lo -le $ac_mid; then
++                        ac_lo= ac_hi=
++                        break
++                      fi
++                      ac_mid=`expr 2 '*' $ac_mid + 1`
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++  done
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#if HAVE_LARGE_FILE_SUPPORT && HAVE_INT64_TYPES
++# define _LARGEFILE_SOURCE 1
++# define _FILE_OFFSET_BITS 64
++#endif
++#include <stdio.h>
++#include <sys/types.h>
++
++   typedef off_t ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_hi=-1 ac_mid=-1
++  while :; do
++    cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#if HAVE_LARGE_FILE_SUPPORT && HAVE_INT64_TYPES
++# define _LARGEFILE_SOURCE 1
++# define _FILE_OFFSET_BITS 64
++#endif
++#include <stdio.h>
++#include <sys/types.h>
++
++   typedef off_t ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_lo=$ac_mid; break
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_hi=`expr '(' $ac_mid ')' - 1`
++                      if test $ac_mid -le $ac_hi; then
++                        ac_lo= ac_hi=
++                        break
++                      fi
++                      ac_mid=`expr 2 '*' $ac_mid`
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++  done
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_lo= ac_hi=
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++# Binary search between lo and hi bounds.
++while test "x$ac_lo" != "x$ac_hi"; do
++  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#if HAVE_LARGE_FILE_SUPPORT && HAVE_INT64_TYPES
++# define _LARGEFILE_SOURCE 1
++# define _FILE_OFFSET_BITS 64
++#endif
++#include <stdio.h>
++#include <sys/types.h>
++
++   typedef off_t ac__type_sizeof_;
++int
++main ()
++{
++static int test_array @<:@1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)@:>@;
++test_array @<:@0@:>@ = 0
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_hi=$ac_mid
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_lo=`expr '(' $ac_mid ')' + 1`
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++done
++case $ac_lo in
++?*) ac_cv_sizeof_off_t=$ac_lo;;
++'') if test "$ac_cv_type_off_t" = yes; then
++     { { echo "$as_me:$LINENO: error: cannot compute sizeof (off_t)
++See \`config.log' for more details." >&5
++echo "$as_me: error: cannot compute sizeof (off_t)
++See \`config.log' for more details." >&2;}
++   { (exit 77); exit 77; }; }
++   else
++     ac_cv_sizeof_off_t=0
++   fi ;;
++esac
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#if HAVE_LARGE_FILE_SUPPORT && HAVE_INT64_TYPES
++# define _LARGEFILE_SOURCE 1
++# define _FILE_OFFSET_BITS 64
++#endif
++#include <stdio.h>
++#include <sys/types.h>
++
++   typedef off_t ac__type_sizeof_;
++static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
++static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
++@%:@include <stdio.h>
++@%:@include <stdlib.h>
++int
++main ()
++{
++
++  FILE *f = fopen ("conftest.val", "w");
++  if (! f)
++    return 1;
++  if (((long int) (sizeof (ac__type_sizeof_))) < 0)
++    {
++      long int i = longval ();
++      if (i != ((long int) (sizeof (ac__type_sizeof_))))
++      return 1;
++      fprintf (f, "%ld\n", i);
++    }
++  else
++    {
++      unsigned long int i = ulongval ();
++      if (i != ((long int) (sizeof (ac__type_sizeof_))))
++      return 1;
++      fprintf (f, "%lu\n", i);
++    }
++  return ferror (f) || fclose (f) != 0;
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
++  { (case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_try") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
++  ac_cv_sizeof_off_t=`cat conftest.val`
++else
++  echo "$as_me: program exited with status $ac_status" >&5
++echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++( exit $ac_status )
++if test "$ac_cv_type_off_t" = yes; then
++     { { echo "$as_me:$LINENO: error: cannot compute sizeof (off_t)
++See \`config.log' for more details." >&5
++echo "$as_me: error: cannot compute sizeof (off_t)
++See \`config.log' for more details." >&2;}
++   { (exit 77); exit 77; }; }
++   else
++     ac_cv_sizeof_off_t=0
++   fi
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
++fi
++rm -f conftest.val
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_off_t" >&5
++echo "${ECHO_T}$ac_cv_sizeof_off_t" >&6; }
++
++
++
++cat >>confdefs.h <<_ACEOF
++@%:@define SIZEOF_OFF_T $ac_cv_sizeof_off_t
++_ACEOF
++
++
++
++
++
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++
++
++for ac_header in sys/mman.h
++do
++as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  { echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++else
++  # Is the header compilable?
++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++@%:@include <$ac_header>
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_header_compiler=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_header_compiler=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
++echo "${ECHO_T}$ac_header_compiler" >&6; }
++
++# Is the header present?
++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++@%:@include <$ac_header>
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  ac_header_preproc=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  ac_header_preproc=no
++fi
++
++rm -f conftest.err conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
++echo "${ECHO_T}$ac_header_preproc" >&6; }
++
++# So?  What about this header?
++case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
++  yes:no: )
++    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
++echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
++    ac_header_preproc=yes
++    ;;
++  no:yes:* )
++    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
++echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
++echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
++echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
++echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
++echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
++    
++    ;;
++esac
++{ echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  eval "$as_ac_Header=\$ac_header_preproc"
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++
++fi
++if test `eval echo '${'$as_ac_Header'}'` = yes; then
++  cat >>confdefs.h <<_ACEOF
++@%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
++_ACEOF
++ 
++fi
++
++done
++
++
++
++for ac_header in stdlib.h unistd.h
++do
++as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  { echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++else
++  # Is the header compilable?
++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++@%:@include <$ac_header>
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_header_compiler=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_header_compiler=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
++echo "${ECHO_T}$ac_header_compiler" >&6; }
++
++# Is the header present?
++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++@%:@include <$ac_header>
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  ac_header_preproc=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  ac_header_preproc=no
++fi
++
++rm -f conftest.err conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
++echo "${ECHO_T}$ac_header_preproc" >&6; }
++
++# So?  What about this header?
++case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
++  yes:no: )
++    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
++echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
++    ac_header_preproc=yes
++    ;;
++  no:yes:* )
++    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
++echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
++echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
++echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
++echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
++echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
++    
++    ;;
++esac
++{ echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  eval "$as_ac_Header=\$ac_header_preproc"
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++
++fi
++if test `eval echo '${'$as_ac_Header'}'` = yes; then
++  cat >>confdefs.h <<_ACEOF
++@%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
++_ACEOF
++ 
++fi
++
++done
++
++
++for ac_func in getpagesize
++do
++as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
++{ echo "$as_me:$LINENO: checking for $ac_func" >&5
++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
++   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
++#define $ac_func innocuous_$ac_func
++
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func (); below.
++    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++    <limits.h> exists even on freestanding compilers.  */
++
++#ifdef __STDC__
++# include <limits.h>
++#else
++# include <assert.h>
++#endif
++
++#undef $ac_func
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char $ac_func ();
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined __stub_$ac_func || defined __stub___$ac_func
++choke me
++#endif
++
++int
++main ()
++{
++return $ac_func ();
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  eval "$as_ac_var=yes"
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      eval "$as_ac_var=no"
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext conftest.$ac_ext
++fi
++ac_res=`eval echo '${'$as_ac_var'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++if test `eval echo '${'$as_ac_var'}'` = yes; then
++  cat >>confdefs.h <<_ACEOF
++@%:@define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
++_ACEOF
++ 
++fi
++done
++
++{ echo "$as_me:$LINENO: checking for working mmap" >&5
++echo $ECHO_N "checking for working mmap... $ECHO_C" >&6; }
++if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test "$cross_compiling" = yes; then
++  ac_cv_func_mmap_fixed_mapped=no
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++/* malloc might have been renamed as rpl_malloc. */
++#undef malloc
++
++/* Thanks to Mike Haertel and Jim Avera for this test.
++   Here is a matrix of mmap possibilities:
++      mmap private not fixed
++      mmap private fixed at somewhere currently unmapped
++      mmap private fixed at somewhere already mapped
++      mmap shared not fixed
++      mmap shared fixed at somewhere currently unmapped
++      mmap shared fixed at somewhere already mapped
++   For private mappings, we should verify that changes cannot be read()
++   back from the file, nor mmap's back from the file at a different
++   address.  (There have been systems where private was not correctly
++   implemented like the infamous i386 svr4.0, and systems where the
++   VM page cache was not coherent with the file system buffer cache
++   like early versions of FreeBSD and possibly contemporary NetBSD.)
++   For shared mappings, we should conversely verify that changes get
++   propagated back to all the places they're supposed to be.
++
++   Grep wants private fixed already mapped.
++   The main things grep needs to know about mmap are:
++   * does it exist and is it safe to write into the mmap'd area
++   * how to use it (BSD variants)  */
++
++#include <fcntl.h>
++#include <sys/mman.h>
++
++#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H
++char *malloc ();
++#endif
++
++/* This mess was copied from the GNU getpagesize.h.  */
++#ifndef HAVE_GETPAGESIZE
++/* Assume that all systems that can run configure have sys/param.h.  */
++# ifndef HAVE_SYS_PARAM_H
++#  define HAVE_SYS_PARAM_H 1
++# endif
++
++# ifdef _SC_PAGESIZE
++#  define getpagesize() sysconf(_SC_PAGESIZE)
++# else /* no _SC_PAGESIZE */
++#  ifdef HAVE_SYS_PARAM_H
++#   include <sys/param.h>
++#   ifdef EXEC_PAGESIZE
++#    define getpagesize() EXEC_PAGESIZE
++#   else /* no EXEC_PAGESIZE */
++#    ifdef NBPG
++#     define getpagesize() NBPG * CLSIZE
++#     ifndef CLSIZE
++#      define CLSIZE 1
++#     endif /* no CLSIZE */
++#    else /* no NBPG */
++#     ifdef NBPC
++#      define getpagesize() NBPC
++#     else /* no NBPC */
++#      ifdef PAGESIZE
++#       define getpagesize() PAGESIZE
++#      endif /* PAGESIZE */
++#     endif /* no NBPC */
++#    endif /* no NBPG */
++#   endif /* no EXEC_PAGESIZE */
++#  else /* no HAVE_SYS_PARAM_H */
++#   define getpagesize() 8192 /* punt totally */
++#  endif /* no HAVE_SYS_PARAM_H */
++# endif /* no _SC_PAGESIZE */
++
++#endif /* no HAVE_GETPAGESIZE */
++
++int
++main ()
++{
++  char *data, *data2, *data3;
++  int i, pagesize;
++  int fd;
++
++  pagesize = getpagesize ();
++
++  /* First, make a file with some known garbage in it. */
++  data = (char *) malloc (pagesize);
++  if (!data)
++    return 1;
++  for (i = 0; i < pagesize; ++i)
++    *(data + i) = rand ();
++  umask (0);
++  fd = creat ("conftest.mmap", 0600);
++  if (fd < 0)
++    return 1;
++  if (write (fd, data, pagesize) != pagesize)
++    return 1;
++  close (fd);
++
++  /* Next, try to mmap the file at a fixed address which already has
++     something else allocated at it.  If we can, also make sure that
++     we see the same garbage.  */
++  fd = open ("conftest.mmap", O_RDWR);
++  if (fd < 0)
++    return 1;
++  data2 = (char *) malloc (2 * pagesize);
++  if (!data2)
++    return 1;
++  data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1);
++  if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
++                   MAP_PRIVATE | MAP_FIXED, fd, 0L))
++    return 1;
++  for (i = 0; i < pagesize; ++i)
++    if (*(data + i) != *(data2 + i))
++      return 1;
++
++  /* Finally, make sure that changes to the mapped area do not
++     percolate back to the file as seen by read().  (This is a bug on
++     some variants of i386 svr4.0.)  */
++  for (i = 0; i < pagesize; ++i)
++    *(data2 + i) = *(data2 + i) + 1;
++  data3 = (char *) malloc (pagesize);
++  if (!data3)
++    return 1;
++  if (read (fd, data3, pagesize) != pagesize)
++    return 1;
++  for (i = 0; i < pagesize; ++i)
++    if (*(data + i) != *(data3 + i))
++      return 1;
++  close (fd);
++  return 0;
++}
++_ACEOF
++rm -f conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
++  { (case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_try") 2>&5
++  ac_status=$?
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); }; }; then
++  ac_cv_func_mmap_fixed_mapped=yes
++else
++  echo "$as_me: program exited with status $ac_status" >&5
++echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++( exit $ac_status )
++ac_cv_func_mmap_fixed_mapped=no
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
++fi
++
++
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5
++echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6; }
++if test $ac_cv_func_mmap_fixed_mapped = yes; then
++  
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_MMAP 1
++_ACEOF
++
++fi
++rm -f conftest.mmap
++
++ac_ext=cpp
++ac_cpp='$CXXCPP $CPPFLAGS'
++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
++
++
++for ac_func in madvise
++do
++as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
++{ echo "$as_me:$LINENO: checking for $ac_func" >&5
++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
++   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
++#define $ac_func innocuous_$ac_func
++
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func (); below.
++    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++    <limits.h> exists even on freestanding compilers.  */
++
++#ifdef __STDC__
++# include <limits.h>
++#else
++# include <assert.h>
++#endif
++
++#undef $ac_func
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char $ac_func ();
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined __stub_$ac_func || defined __stub___$ac_func
++choke me
++#endif
++
++int
++main ()
++{
++return $ac_func ();
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  eval "$as_ac_var=yes"
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      eval "$as_ac_var=no"
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext conftest.$ac_ext
++fi
++ac_res=`eval echo '${'$as_ac_var'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++if test `eval echo '${'$as_ac_var'}'` = yes; then
++  cat >>confdefs.h <<_ACEOF
++@%:@define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
++_ACEOF
++ 
++fi
++done
++
++{ echo "$as_me:$LINENO: checking whether madvise is declared" >&5
++echo $ECHO_N "checking whether madvise is declared... $ECHO_C" >&6; }
++if test "${ac_cv_have_decl_madvise+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#if HAVE_SYS_MMAN_H
++#include <sys/types.h>
++#include <sys/mman.h>
++#endif
++
++int
++main ()
++{
++#ifndef madvise
++  (void) madvise;
++#endif
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_have_decl_madvise=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_have_decl_madvise=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_madvise" >&5
++echo "${ECHO_T}$ac_cv_have_decl_madvise" >&6; }
++if test $ac_cv_have_decl_madvise = yes; then
++  
++cat >>confdefs.h <<_ACEOF
++@%:@define HAVE_DECL_MADVISE 1
++_ACEOF
++
++
++else
++  cat >>confdefs.h <<_ACEOF
++@%:@define HAVE_DECL_MADVISE 0
++_ACEOF
++
++
++fi
++
++
++
++
++
++EXTRA_DRIVER_OBJS=
++EXTRA_TOOL_OBJS=
++if test "x$enable_ip6" = xyes; then
++    EXTRA_DRIVER_OBJS="ip6address.o ip6flowid.o ip6table.o $EXTRA_DRIVER_OBJS"
++    EXTRA_TOOL_OBJS="ip6address.o $EXTRA_TOOL_OBJS"
++fi
++
++
++
++
++
++if test $ac_have_linux_kernel = y; then
++
++
++if test "$linux_system_map" = NONE; then
++    linux_system_map=$linuxdir/System.map
++    if test "x$linux_system_map_boot" != xno -a ! -f "$linux_system_map"; then
++      linux_system_map=/boot/System.map-"$linux_system_map_boot"
++    fi
++fi
++
++if test ! -f "$linux_system_map"; then
++    if test "x$enable_linuxmodule_default" = xyes; then
++      { echo "$as_me:$LINENO: WARNING: 
++=========================================
++
++Can't find Linux System.map file '$linux_system_map',
++so I won't compile the linuxmodule driver.
++(You may need the --with-linux=DIR and/or --with-linux-map=MAP options.)
++
++=========================================" >&5
++echo "$as_me: WARNING: 
++=========================================
++
++Can't find Linux System.map file '$linux_system_map',
++so I won't compile the linuxmodule driver.
++(You may need the --with-linux=DIR and/or --with-linux-map=MAP options.)
++
++=========================================" >&2;}
++      ac_have_linux_kernel=no
++    else
++      { { echo "$as_me:$LINENO: error: 
++=========================================
++
++Can't find Linux System.map file '$linux_system_map'.
++(You may need the --with-linux=DIR and/or --with-linux-map=MAP options.)
++
++=========================================" >&5
++echo "$as_me: error: 
++=========================================
++
++Can't find Linux System.map file '$linux_system_map'.
++(You may need the --with-linux=DIR and/or --with-linux-map=MAP options.)
++
++=========================================" >&2;}
++   { (exit 1); exit 1; }; }
++    fi
++fi
++
++fi
++
++
++if test $ac_have_linux_kernel = y; then
++
++{ echo "$as_me:$LINENO: checking for Linux 2.6" >&5
++echo $ECHO_N "checking for Linux 2.6... $ECHO_C" >&6; }
++if test "${ac_cv_linux26+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if grep '^PATCHLEVEL        *=      *6' $linuxdir/Makefile >/dev/null 2>&1; then ac_cv_linux26=1; else ac_cv_linux26=0; fi
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_linux26" >&5
++echo "${ECHO_T}$ac_cv_linux26" >&6; }
++LINUXMODULE_2_6=$ac_cv_linux26
++
++if test $LINUXMODULE_2_6 = 1; then
++    
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_LINUXMODULE_2_6 1
++_ACEOF
++
++fi
++
++{ echo "$as_me:$LINENO: checking for Click Linux kernel extensions" >&5
++echo $ECHO_N "checking for Click Linux kernel extensions... $ECHO_C" >&6; }
++if test "${ac_cv_click_kernel+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if grep register_net_in $linux_system_map >/dev/null 2>&1; then
++    ac_cv_click_kernel=yes
++else ac_cv_click_kernel=no; fi
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_click_kernel" >&5
++echo "${ECHO_T}$ac_cv_click_kernel" >&6; }
++if test $ac_cv_click_kernel = yes; then
++    cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_CLICK_KERNEL 1
++_ACEOF
++
++fi
++
++{ echo "$as_me:$LINENO: checking for Click Linux kernel extensions for transmit notification" >&5
++echo $ECHO_N "checking for Click Linux kernel extensions for transmit notification... $ECHO_C" >&6; }
++if test "${ac_cv_click_kernel_tx_notify+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if grep register_net_tx $linux_system_map >/dev/null 2>&1; then
++    ac_cv_click_kernel_tx_notify=yes
++else ac_cv_click_kernel_tx_notify=no; fi
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_click_kernel_tx_notify" >&5
++echo "${ECHO_T}$ac_cv_click_kernel_tx_notify" >&6; }
++if test $ac_cv_click_kernel_tx_notify = yes; then
++    cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_CLICK_KERNEL_TX_NOTIFY 1
++_ACEOF
++
++fi
++
++{ echo "$as_me:$LINENO: checking for read_net_skbcount kernel extension" >&5
++echo $ECHO_N "checking for read_net_skbcount kernel extension... $ECHO_C" >&6; }
++if test "${ac_cv_linux_read_net_skbcount+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if grep read_net_skbcount $linux_system_map >/dev/null 2>&1; then
++  ac_cv_linux_read_net_skbcount=yes
++else ac_cv_linux_read_net_skbcount=no; fi
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_linux_read_net_skbcount" >&5
++echo "${ECHO_T}$ac_cv_linux_read_net_skbcount" >&6; }
++if test $ac_cv_linux_read_net_skbcount = yes; then
++    cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_LINUX_READ_NET_SKBCOUNT 1
++_ACEOF
++
++fi
++
++{ echo "$as_me:$LINENO: checking for strlen kernel symbol" >&5
++echo $ECHO_N "checking for strlen kernel symbol... $ECHO_C" >&6; }
++if test "${ac_cv_linux_strlen_exposed+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if grep ' strlen' $linux_system_map >/dev/null 2>&1; then
++  ac_cv_linux_strlen_exposed=yes
++else ac_cv_linux_strlen_exposed=no; fi
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_linux_strlen_exposed" >&5
++echo "${ECHO_T}$ac_cv_linux_strlen_exposed" >&6; }
++if test $ac_cv_linux_strlen_exposed = yes; then
++    cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_LINUX_STRLEN_EXPOSED 1
++_ACEOF
++
++fi
++
++{ echo "$as_me:$LINENO: checking for tulip_interrupt_hook kernel symbol" >&5
++echo $ECHO_N "checking for tulip_interrupt_hook kernel symbol... $ECHO_C" >&6; }
++if test "${ac_cv_linux_tulip_intr_hook+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if grep ' tulip_interrupt_hook' $linux_system_map >/dev/null 2>&1; then
++  ac_cv_linux_tulip_intr_hook=yes
++else ac_cv_linux_tulip_intr_hook=no; fi
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_linux_tulip_intr_hook" >&5
++echo "${ECHO_T}$ac_cv_linux_tulip_intr_hook" >&6; }
++if test $ac_cv_linux_tulip_intr_hook = yes; then
++    cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_LINUX_TULIP_INTERRUPT_HOOK 1
++_ACEOF
++
++fi
++
++{ echo "$as_me:$LINENO: checking for device polling kernel extension" >&5
++echo $ECHO_N "checking for device polling kernel extension... $ECHO_C" >&6; }
++if test "${ac_cv_linux_poll_extension+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if grep polling $linuxdir/include/linux/netdevice.h >/dev/null 2>&1; then
++  ac_cv_linux_poll_extension=yes
++else ac_cv_linux_poll_extension=no; fi
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_linux_poll_extension" >&5
++echo "${ECHO_T}$ac_cv_linux_poll_extension" >&6; }
++if test $ac_cv_linux_poll_extension = yes; then
++    cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_LINUX_POLLING 1
++_ACEOF
++
++fi
++
++{ echo "$as_me:$LINENO: checking for atomic_set_mask" >&5
++echo $ECHO_N "checking for atomic_set_mask... $ECHO_C" >&6; }
++if test "${ac_cv_linux_atomic_set_mask+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if grep atomic_set_mask $linuxdir/include/asm/atomic.h >/dev/null 2>&1; then
++  ac_cv_linux_atomic_set_mask=yes
++else ac_cv_linux_atomic_set_mask=no; fi
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_linux_atomic_set_mask" >&5
++echo "${ECHO_T}$ac_cv_linux_atomic_set_mask" >&6; }
++if test $ac_cv_linux_atomic_set_mask = yes; then
++    cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_LINUX_ATOMIC_SET_MASK 1
++_ACEOF
++
++fi
++
++{ echo "$as_me:$LINENO: checking for SMP" >&5
++echo $ECHO_N "checking for SMP... $ECHO_C" >&6; }
++if test "${ac_cv_smp+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if grep "#define CONFIG_SMP 1" $linuxdir/include/linux/autoconf.h >/dev/null 2>&1; then
++  ac_cv_smp=yes
++else ac_cv_smp=no; fi
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_smp" >&5
++echo "${ECHO_T}$ac_cv_smp" >&6; }
++if test $ac_cv_smp = yes; then
++    cat >>confdefs.h <<\_ACEOF
++@%:@define __SMP__ 1
++_ACEOF
++
++    KERNEL_CXX="$KERNEL_CXX -D__SMP__"
++fi
++
++{ echo "$as_me:$LINENO: checking for <asm/alternative.h>" >&5
++echo $ECHO_N "checking for <asm/alternative.h>... $ECHO_C" >&6; }
++if test "${ac_cv_linux_asm_alternative_h+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -r $linuxdir/include/asm/alternative.h >/dev/null 2>&1; then
++  ac_cv_linux_asm_alternative_h=yes
++else ac_cv_linux_asm_alternative_h=no; fi
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_linux_asm_alternative_h" >&5
++echo "${ECHO_T}$ac_cv_linux_asm_alternative_h" >&6; }
++if test $ac_cv_linux_asm_alternative_h = yes; then
++    cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_LINUX_ASM_ALTERNATIVE_H 1
++_ACEOF
++
++fi
++
++fi
++
++
++
++if test $ac_have_bsd_kernel = y; then
++    KERNEL_CXX="$KERNEL_CXX -fpermissive"
++    { echo "$as_me:$LINENO: checking FreeBSD version" >&5
++echo $ECHO_N "checking FreeBSD version... $ECHO_C" >&6; }
++if test "${ac_cv_freebsd_version+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  
++      save_flags="$CPPFLAGS"
++      CPPFLAGS="$CPPFLAGS -I$freebsd_includedir"
++      cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <sys/param.h>
++#if __FreeBSD_version < 500000
++#include <NONEXISTENT_FILE>
++#endif
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_freebsd_version=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_freebsd_version=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++      CPPFLAGS="$save_flags"
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_freebsd_version" >&5
++echo "${ECHO_T}$ac_cv_freebsd_version" >&6; }
++    if test $ac_cv_freebsd_version = yes; then
++      cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_CLICK_BSD_KERNEL 1
++_ACEOF
++
++      cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_BSD_POLLING 1
++_ACEOF
++
++    else
++      { echo "$as_me:$LINENO: WARNING: 
++=========================================
++
++Your version of FreeBSD is old.  Click works with FreeBSD 5.x and later.
++
++=========================================" >&5
++echo "$as_me: WARNING: 
++=========================================
++
++Your version of FreeBSD is old.  Click works with FreeBSD 5.x and later.
++
++=========================================" >&2;}
++    fi
++fi
++
++
++
++# Check whether --enable-stride was given.
++if test "${enable_stride+set}" = set; then
++  enableval=$enable_stride; :
++else
++  enable_stride=yes
++fi
++
++if test $enable_stride = yes; then
++    cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_STRIDE_SCHED 1
++_ACEOF
++
++fi
++
++# Check whether --enable-task-heap was given.
++if test "${enable_task_heap+set}" = set; then
++  enableval=$enable_task_heap; :
++else
++  enable_task_heap=no
++fi
++
++if test $enable_task_heap = yes; then
++    cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_TASK_HEAP 1
++_ACEOF
++
++fi
++
++
++
++# Check whether --enable-dmalloc was given.
++if test "${enable_dmalloc+set}" = set; then
++  enableval=$enable_dmalloc; :
++else
++  enable_dmalloc=no
++fi
++
++if test $enable_dmalloc = yes; then
++    cat >>confdefs.h <<\_ACEOF
++@%:@define CLICK_DMALLOC 1
++_ACEOF
++
++fi
++
++
++
++# Check whether --enable-intel-cpu was given.
++if test "${enable_intel_cpu+set}" = set; then
++  enableval=$enable_intel_cpu; :
++else
++  enable_intel_cpu=no
++fi
++
++if test $enable_intel_cpu = yes; then
++    cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_INTEL_CPU 1
++_ACEOF
++
++fi
++
++
++
++
++
++
++
++for ac_header in linux/if_tun.h net/if_tun.h net/if_tap.h net/bpf.h
++do
++as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  { echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++else
++  # Is the header compilable?
++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++@%:@include <$ac_header>
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_header_compiler=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_header_compiler=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
++echo "${ECHO_T}$ac_header_compiler" >&6; }
++
++# Is the header present?
++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++@%:@include <$ac_header>
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  ac_header_preproc=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  ac_header_preproc=no
++fi
++
++rm -f conftest.err conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
++echo "${ECHO_T}$ac_header_preproc" >&6; }
++
++# So?  What about this header?
++case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
++  yes:no: )
++    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
++echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
++    ac_header_preproc=yes
++    ;;
++  no:yes:* )
++    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
++echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
++echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
++echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
++echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
++echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
++    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
++echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
++    
++    ;;
++esac
++{ echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  eval "$as_ac_Header=\$ac_header_preproc"
++fi
++ac_res=`eval echo '${'$as_ac_Header'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++
++fi
++if test `eval echo '${'$as_ac_Header'}'` = yes; then
++  cat >>confdefs.h <<_ACEOF
++@%:@define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
++_ACEOF
++ 
++fi
++
++done
++
++
++
++
++POSSIBLE_DRIVERS=
++for i in bsdmodule exopc linuxmodule ns userlevel; do
++    test -f $srcdir/$i/Makefile.in && POSSIBLE_DRIVERS="$POSSIBLE_DRIVERS $i"
++done
++
++
++
++
++DRIVERS=
++
++
++HAVE_USERLEVEL_DRIVER=0
++
++HAVE_LINUXMODULE_DRIVER=0
++
++HAVE_BSDMODULE_DRIVER=0
++
++
++OTHER_TARGETS=
++
++
++for i in click-align click-check click-combine click-devirtualize click-fastclassifier click-flatten click-ipopt click-mkmindriver click-pretty click-undead click-xform click2xml; do
++    test -d $srcdir/tools/$i &&       \
++      TOOLDIRS="$TOOLDIRS $i" TOOL_TARGETS="$TOOL_TARGETS $i"
++done
++for i in click-install; do
++    test -d $srcdir/tools/$i && TOOLDIRS="$TOOLDIRS $i"
++done
++
++
++
++
++
++if test "$enable_userlevel" = yes; then
++    
++
++    
++    HAVE_PCAP=yes
++    if test "${PCAP_INCLUDES-NO}" = NO; then
++      { echo "$as_me:$LINENO: checking for pcap.h" >&5
++echo $ECHO_N "checking for pcap.h... $ECHO_C" >&6; }
++if test "${ac_cv_pcap_header_path+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  
++          cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <pcap.h>
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  ac_cv_pcap_header_path="found"
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  ac_cv_pcap_header_path='not found'
++          test -r /usr/local/include/pcap/pcap.h && \
++              ac_cv_pcap_header_path='-I/usr/local/include/pcap'
++          test -r /usr/include/pcap/pcap.h && \
++              ac_cv_pcap_header_path='-I/usr/include/pcap'
++fi
++
++rm -f conftest.err conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_pcap_header_path" >&5
++echo "${ECHO_T}$ac_cv_pcap_header_path" >&6; }
++      if test "$ac_cv_pcap_header_path" = 'not found'; then
++          HAVE_PCAP=
++      elif test "$ac_cv_pcap_header_path" != 'found'; then
++          PCAP_INCLUDES="$ac_cv_pcap_header_path"
++        fi
++    fi
++
++    if test "$HAVE_PCAP" = yes; then
++      { echo "$as_me:$LINENO: checking whether pcap.h works" >&5
++echo $ECHO_N "checking whether pcap.h works... $ECHO_C" >&6; }
++if test "${ac_cv_working_pcap_h+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  
++          saveflags="$CPPFLAGS"
++          CPPFLAGS="$saveflags $PCAP_INCLUDES"
++          cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <pcap.h>
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  ac_cv_working_pcap_h=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  ac_cv_working_pcap_h=no
++fi
++
++rm -f conftest.err conftest.$ac_ext
++          CPPFLAGS="$saveflags"
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_working_pcap_h" >&5
++echo "${ECHO_T}$ac_cv_working_pcap_h" >&6; }
++      test "$ac_cv_working_pcap_h" != yes && HAVE_PCAP=
++    fi
++
++    if test "$HAVE_PCAP" = yes; then
++      saveflags="$CPPFLAGS"
++      CPPFLAGS="$saveflags $PCAP_INCLUDES"
++      { echo "$as_me:$LINENO: checking for bpf_timeval in pcap.h" >&5
++echo $ECHO_N "checking for bpf_timeval in pcap.h... $ECHO_C" >&6; }
++if test "${ac_cv_bpf_timeval+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <pcap.h>
++
++_ACEOF
++if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
++  $EGREP "bpf_timeval" >/dev/null 2>&1; then
++  ac_cv_bpf_timeval=yes
++else
++  ac_cv_bpf_timeval=no
++fi
++rm -f conftest*
++
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_bpf_timeval" >&5
++echo "${ECHO_T}$ac_cv_bpf_timeval" >&6; }
++      if test "$ac_cv_bpf_timeval" = yes; then
++          
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_BPF_TIMEVAL 1
++_ACEOF
++
++      fi
++      { echo "$as_me:$LINENO: checking whether pcap_setnonblock is declared" >&5
++echo $ECHO_N "checking whether pcap_setnonblock is declared... $ECHO_C" >&6; }
++if test "${ac_cv_have_decl_pcap_setnonblock+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <pcap.h>
++
++int
++main ()
++{
++#ifndef pcap_setnonblock
++  (void) pcap_setnonblock;
++#endif
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_have_decl_pcap_setnonblock=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_have_decl_pcap_setnonblock=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_pcap_setnonblock" >&5
++echo "${ECHO_T}$ac_cv_have_decl_pcap_setnonblock" >&6; }
++if test $ac_cv_have_decl_pcap_setnonblock = yes; then
++  
++cat >>confdefs.h <<_ACEOF
++@%:@define HAVE_DECL_PCAP_SETNONBLOCK 1
++_ACEOF
++
++
++else
++  cat >>confdefs.h <<_ACEOF
++@%:@define HAVE_DECL_PCAP_SETNONBLOCK 0
++_ACEOF
++
++
++fi
++
++
++      CPPFLAGS="$saveflags"
++    fi
++
++    test "$HAVE_PCAP" != yes && PCAP_INCLUDES=
++    
++
++
++    
++    if test "$HAVE_PCAP" = yes; then
++      if test "${PCAP_LIBS-NO}" = NO; then
++          { echo "$as_me:$LINENO: checking for -lpcap" >&5
++echo $ECHO_N "checking for -lpcap... $ECHO_C" >&6; }
++if test "${ac_cv_pcap_library_path+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  
++              saveflags="$LDFLAGS"
++              savelibs="$LIBS"
++              LIBS="$savelibs -lpcap $SOCKET_LIBS"
++              ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++              cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char pcap_open_live ();
++int
++main ()
++{
++return pcap_open_live ();
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  ac_cv_pcap_library_path="found"
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      LDFLAGS="$saveflags -L/usr/local/lib"
++                              cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char pcap_open_live ();
++int
++main ()
++{
++return pcap_open_live ();
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  ac_cv_pcap_library_path="-L/usr/local/lib"
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_pcap_library_path="not found"
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext conftest.$ac_ext
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext conftest.$ac_ext
++              LDFLAGS="$saveflags"
++              LIBS="$savelibs"
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_pcap_library_path" >&5
++echo "${ECHO_T}$ac_cv_pcap_library_path" >&6; }
++      else
++          { echo "$as_me:$LINENO: checking for -lpcap in \"$PCAP_LIBS\"" >&5
++echo $ECHO_N "checking for -lpcap in \"$PCAP_LIBS\"... $ECHO_C" >&6; }
++if test "${ac_cv_pcap_library_path+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  
++              saveflags="$LDFLAGS"
++              LDFLAGS="$saveflags $PCAP_LIBS"
++              savelibs="$LIBS"
++              LIBS="$savelibs -lpcap $SOCKET_LIBS"
++              ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++              cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char pcap_open_live ();
++int
++main ()
++{
++return pcap_open_live ();
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  ac_cv_pcap_library_path="$PCAP_LIBS"
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_pcap_library_path="not found"
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext conftest.$ac_ext
++              LDFLAGS="$saveflags"
++              LIBS="$savelibs"
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_pcap_library_path" >&5
++echo "${ECHO_T}$ac_cv_pcap_library_path" >&6; }
++      fi
++        if test "$ac_cv_pcap_library_path" = "found"; then
++          PCAP_LIBS='-lpcap'
++      elif test "$ac_cv_pcap_library_path" != "not found"; then
++          PCAP_LIBS="$ac_cv_pcap_library_path -lpcap"
++      else
++          HAVE_PCAP=
++      fi
++    fi
++
++    test "$HAVE_PCAP" != yes && PCAP_LIBS=
++    
++
++    if test "$HAVE_PCAP" = yes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_PCAP 1
++_ACEOF
++
++
++      saveflags="$LDFLAGS"
++      LDFLAGS="$saveflags $PCAP_LIBS"
++      
++for ac_func in pcap_setnonblock
++do
++as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
++{ echo "$as_me:$LINENO: checking for $ac_func" >&5
++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
++   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
++#define $ac_func innocuous_$ac_func
++
++/* System header to define __stub macros and hopefully few prototypes,
++    which can conflict with char $ac_func (); below.
++    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++    <limits.h> exists even on freestanding compilers.  */
++
++#ifdef __STDC__
++# include <limits.h>
++#else
++# include <assert.h>
++#endif
++
++#undef $ac_func
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char $ac_func ();
++/* The GNU C library defines this for functions which it implements
++    to always fail with ENOSYS.  Some functions are actually named
++    something starting with __ and the normal name is an alias.  */
++#if defined __stub_$ac_func || defined __stub___$ac_func
++choke me
++#endif
++
++int
++main ()
++{
++return $ac_func ();
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  eval "$as_ac_var=yes"
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      eval "$as_ac_var=no"
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext conftest.$ac_ext
++fi
++ac_res=`eval echo '${'$as_ac_var'}'`
++             { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
++if test `eval echo '${'$as_ac_var'}'` = yes; then
++  cat >>confdefs.h <<_ACEOF
++@%:@define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
++_ACEOF
++ 
++fi
++done
++
++      LDFLAGS="$saveflags"
++    fi
++
++    if test "$HAVE_PCAP" != yes -a "$ac_cv_under_linux" != yes; then
++      { echo "$as_me:$LINENO: WARNING: 
++=========================================
++
++pcap.h and/or -lpcap not found; user-level driver can't steal packets.
++
++=========================================" >&5
++echo "$as_me: WARNING: 
++=========================================
++
++pcap.h and/or -lpcap not found; user-level driver can't steal packets.
++
++=========================================" >&2;}
++    fi
++    DRIVERS="$DRIVERS userlevel"
++    cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_USERLEVEL_DRIVER 1
++_ACEOF
++
++    HAVE_USERLEVEL_DRIVER=1
++fi
++
++
++
++{ echo "$as_me:$LINENO: checking whether struct if_data has ifi_datalen" >&5
++echo $ECHO_N "checking whether struct if_data has ifi_datalen... $ECHO_C" >&6; }
++if test "${ac_cv_if_data_ifi_datalen+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <net/if.h>
++#include <net/if_var.h>
++
++int
++main ()
++{
++struct if_msghdr ifm; ifm.ifm_data.ifi_datalen = 0;
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_if_data_ifi_datalen=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_if_data_ifi_datalen=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_if_data_ifi_datalen" >&5
++echo "${ECHO_T}$ac_cv_if_data_ifi_datalen" >&6; }
++if test "x$ac_cv_if_data_ifi_datalen" = xyes; then
++    
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_IF_DATA_IFI_DATALEN 1
++_ACEOF
++
++fi
++
++{ echo "$as_me:$LINENO: checking whether struct sockaddr_in has sin_len" >&5
++echo $ECHO_N "checking whether struct sockaddr_in has sin_len... $ECHO_C" >&6; }
++if test "${ac_cv_sockaddr_in_sin_len+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#include <sys/socket.h>
++#include <netinet/in.h>
++
++int
++main ()
++{
++struct sockaddr_in sin; sin.sin_len = 0;
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_sockaddr_in_sin_len=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_sockaddr_in_sin_len=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_sockaddr_in_sin_len" >&5
++echo "${ECHO_T}$ac_cv_sockaddr_in_sin_len" >&6; }
++if test "x$ac_cv_sockaddr_in_sin_len" = xyes; then
++    
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_SOCKADDR_IN_SIN_LEN 1
++_ACEOF
++
++fi
++
++
++
++explicit_proper=yes
++
++# Check whether --with-proper was given.
++if test "${with_proper+set}" = set; then
++  withval=$with_proper; properprefix=$withval; if test -z "$withval" -o "$withval" = yes; then properprefix=; fi
++else
++  properprefix=no; explicit_proper=no
++fi
++
++if test "$properprefix" != no; then
++            
++    saveflags="$CPPFLAGS"; test -n "$properprefix" && CPPFLAGS="$CPPFLAGS -I$properprefix/include"
++    if test "${ac_cv_header_prop_h+set}" = set; then
++  { echo "$as_me:$LINENO: checking for prop.h" >&5
++echo $ECHO_N "checking for prop.h... $ECHO_C" >&6; }
++if test "${ac_cv_header_prop_h+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_header_prop_h" >&5
++echo "${ECHO_T}$ac_cv_header_prop_h" >&6; }
++else
++  # Is the header compilable?
++{ echo "$as_me:$LINENO: checking prop.h usability" >&5
++echo $ECHO_N "checking prop.h usability... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++@%:@include <prop.h>
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_header_compiler=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_header_compiler=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
++echo "${ECHO_T}$ac_header_compiler" >&6; }
++
++# Is the header present?
++{ echo "$as_me:$LINENO: checking prop.h presence" >&5
++echo $ECHO_N "checking prop.h presence... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++@%:@include <prop.h>
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  ac_header_preproc=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  ac_header_preproc=no
++fi
++
++rm -f conftest.err conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
++echo "${ECHO_T}$ac_header_preproc" >&6; }
++
++# So?  What about this header?
++case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
++  yes:no: )
++    { echo "$as_me:$LINENO: WARNING: prop.h: accepted by the compiler, rejected by the preprocessor!" >&5
++echo "$as_me: WARNING: prop.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
++    { echo "$as_me:$LINENO: WARNING: prop.h: proceeding with the compiler's result" >&5
++echo "$as_me: WARNING: prop.h: proceeding with the compiler's result" >&2;}
++    ac_header_preproc=yes
++    ;;
++  no:yes:* )
++    { echo "$as_me:$LINENO: WARNING: prop.h: present but cannot be compiled" >&5
++echo "$as_me: WARNING: prop.h: present but cannot be compiled" >&2;}
++    { echo "$as_me:$LINENO: WARNING: prop.h:     check for missing prerequisite headers?" >&5
++echo "$as_me: WARNING: prop.h:     check for missing prerequisite headers?" >&2;}
++    { echo "$as_me:$LINENO: WARNING: prop.h: see the Autoconf documentation" >&5
++echo "$as_me: WARNING: prop.h: see the Autoconf documentation" >&2;}
++    { echo "$as_me:$LINENO: WARNING: prop.h:     section \"Present But Cannot Be Compiled\"" >&5
++echo "$as_me: WARNING: prop.h:     section \"Present But Cannot Be Compiled\"" >&2;}
++    { echo "$as_me:$LINENO: WARNING: prop.h: proceeding with the preprocessor's result" >&5
++echo "$as_me: WARNING: prop.h: proceeding with the preprocessor's result" >&2;}
++    { echo "$as_me:$LINENO: WARNING: prop.h: in the future, the compiler will take precedence" >&5
++echo "$as_me: WARNING: prop.h: in the future, the compiler will take precedence" >&2;}
++    
++    ;;
++esac
++{ echo "$as_me:$LINENO: checking for prop.h" >&5
++echo $ECHO_N "checking for prop.h... $ECHO_C" >&6; }
++if test "${ac_cv_header_prop_h+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_cv_header_prop_h=$ac_header_preproc
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_header_prop_h" >&5
++echo "${ECHO_T}$ac_cv_header_prop_h" >&6; }
++
++fi
++if test $ac_cv_header_prop_h = yes; then
++  have_prop_h=yes
++else
++  have_prop_h=no
++fi
++
++
++    CPPFLAGS="$saveflags"
++    
++    ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++    saveflags="$LDFLAGS"; test -n "$properprefix" && LDFLAGS="$LDFLAGS -L$properprefix/lib"
++    { echo "$as_me:$LINENO: checking for prop_open in -lproper" >&5
++echo $ECHO_N "checking for prop_open in -lproper... $ECHO_C" >&6; }
++if test "${ac_cv_lib_proper_prop_open+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_check_lib_save_LIBS=$LIBS
++LIBS="-lproper  $LIBS"
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char prop_open ();
++int
++main ()
++{
++return prop_open ();
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  ac_cv_lib_proper_prop_open=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_lib_proper_prop_open=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext conftest.$ac_ext
++LIBS=$ac_check_lib_save_LIBS
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_lib_proper_prop_open" >&5
++echo "${ECHO_T}$ac_cv_lib_proper_prop_open" >&6; }
++if test $ac_cv_lib_proper_prop_open = yes; then
++  have_libproper=yes
++else
++  have_libproper=no
++fi
++
++    LDFLAGS="$saveflags"
++    ac_ext=cpp
++ac_cpp='$CXXCPP $CPPFLAGS'
++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
++
++
++    if test $have_prop_h = yes -a $have_libproper = yes; then
++      cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_PROPER 1
++_ACEOF
++
++      test -n "$properprefix" && PROPER_INCLUDES="-I$properprefix/include" && PROPER_LIBS="-L$properprefix/lib"
++      PROPER_LIBS="$PROPER_LIBS -lproper"
++    elif test $explicit_proper = yes; then
++      PROPER_INCLUDES= PROPER_LIBS=
++      { { echo "$as_me:$LINENO: error: 
++=========================================
++
++You explicitly specified --with-proper, but I can't find the proper headers
++and/or libraries where you said they would be.  Run again supplying
++--without-proper or --with-proper=PREFIX.
++
++=========================================" >&5
++echo "$as_me: error: 
++=========================================
++
++You explicitly specified --with-proper, but I can't find the proper headers
++and/or libraries where you said they would be.  Run again supplying
++--without-proper or --with-proper=PREFIX.
++
++=========================================" >&2;}
++   { (exit 1); exit 1; }; }
++    fi
++fi
++
++
++
++
++
++explicit_expat=yes
++
++# Check whether --with-expat was given.
++if test "${with_expat+set}" = set; then
++  withval=$with_expat; expatprefix=$withval; if test -z "$withval" -o "$withval" = yes; then expatprefix=; fi
++else
++  expatprefix=; explicit_expat=no
++fi
++
++
++XML2CLICK=
++if test "$expatprefix" != no; then
++    saveflags="$CPPFLAGS"; test -n "$expatprefix" && CPPFLAGS="$CPPFLAGS -I$expatprefix/include"
++    if test "${ac_cv_header_expat_h+set}" = set; then
++  { echo "$as_me:$LINENO: checking for expat.h" >&5
++echo $ECHO_N "checking for expat.h... $ECHO_C" >&6; }
++if test "${ac_cv_header_expat_h+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_header_expat_h" >&5
++echo "${ECHO_T}$ac_cv_header_expat_h" >&6; }
++else
++  # Is the header compilable?
++{ echo "$as_me:$LINENO: checking expat.h usability" >&5
++echo $ECHO_N "checking expat.h usability... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++$ac_includes_default
++@%:@include <expat.h>
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_header_compiler=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_header_compiler=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
++echo "${ECHO_T}$ac_header_compiler" >&6; }
++
++# Is the header present?
++{ echo "$as_me:$LINENO: checking expat.h presence" >&5
++echo $ECHO_N "checking expat.h presence... $ECHO_C" >&6; }
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++@%:@include <expat.h>
++_ACEOF
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } >/dev/null && {
++       test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       }; then
++  ac_header_preproc=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++  ac_header_preproc=no
++fi
++
++rm -f conftest.err conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
++echo "${ECHO_T}$ac_header_preproc" >&6; }
++
++# So?  What about this header?
++case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
++  yes:no: )
++    { echo "$as_me:$LINENO: WARNING: expat.h: accepted by the compiler, rejected by the preprocessor!" >&5
++echo "$as_me: WARNING: expat.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
++    { echo "$as_me:$LINENO: WARNING: expat.h: proceeding with the compiler's result" >&5
++echo "$as_me: WARNING: expat.h: proceeding with the compiler's result" >&2;}
++    ac_header_preproc=yes
++    ;;
++  no:yes:* )
++    { echo "$as_me:$LINENO: WARNING: expat.h: present but cannot be compiled" >&5
++echo "$as_me: WARNING: expat.h: present but cannot be compiled" >&2;}
++    { echo "$as_me:$LINENO: WARNING: expat.h:     check for missing prerequisite headers?" >&5
++echo "$as_me: WARNING: expat.h:     check for missing prerequisite headers?" >&2;}
++    { echo "$as_me:$LINENO: WARNING: expat.h: see the Autoconf documentation" >&5
++echo "$as_me: WARNING: expat.h: see the Autoconf documentation" >&2;}
++    { echo "$as_me:$LINENO: WARNING: expat.h:     section \"Present But Cannot Be Compiled\"" >&5
++echo "$as_me: WARNING: expat.h:     section \"Present But Cannot Be Compiled\"" >&2;}
++    { echo "$as_me:$LINENO: WARNING: expat.h: proceeding with the preprocessor's result" >&5
++echo "$as_me: WARNING: expat.h: proceeding with the preprocessor's result" >&2;}
++    { echo "$as_me:$LINENO: WARNING: expat.h: in the future, the compiler will take precedence" >&5
++echo "$as_me: WARNING: expat.h: in the future, the compiler will take precedence" >&2;}
++    
++    ;;
++esac
++{ echo "$as_me:$LINENO: checking for expat.h" >&5
++echo $ECHO_N "checking for expat.h... $ECHO_C" >&6; }
++if test "${ac_cv_header_expat_h+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_cv_header_expat_h=$ac_header_preproc
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_header_expat_h" >&5
++echo "${ECHO_T}$ac_cv_header_expat_h" >&6; }
++
++fi
++if test $ac_cv_header_expat_h = yes; then
++  have_expat_h=yes
++else
++  have_expat_h=no
++fi
++
++
++    CPPFLAGS="$saveflags"
++    
++    ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++    saveflags="$LDFLAGS"; test -n "$expatprefix" && LDFLAGS="$LDFLAGS -L$expatprefix/lib"
++    { echo "$as_me:$LINENO: checking for XML_ParserCreateNS in -lexpat" >&5
++echo $ECHO_N "checking for XML_ParserCreateNS in -lexpat... $ECHO_C" >&6; }
++if test "${ac_cv_lib_expat_XML_ParserCreateNS+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_check_lib_save_LIBS=$LIBS
++LIBS="-lexpat  $LIBS"
++cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char XML_ParserCreateNS ();
++int
++main ()
++{
++return XML_ParserCreateNS ();
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  ac_cv_lib_expat_XML_ParserCreateNS=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_lib_expat_XML_ParserCreateNS=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext conftest.$ac_ext
++LIBS=$ac_check_lib_save_LIBS
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_lib_expat_XML_ParserCreateNS" >&5
++echo "${ECHO_T}$ac_cv_lib_expat_XML_ParserCreateNS" >&6; }
++if test $ac_cv_lib_expat_XML_ParserCreateNS = yes; then
++  have_libexpat=yes
++else
++  have_libexpat=no
++fi
++
++    LDFLAGS="$saveflags"
++
++    if test $have_expat_h = yes -a $have_libexpat = yes; then
++      cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_EXPAT 1
++_ACEOF
++
++      XML2CLICK=xml2click
++      test -n "$expatprefix" && EXPAT_INCLUDES="-I$expatprefix/include" && EXPAT_LIBS="-L$expatprefix/lib"
++      EXPAT_LIBS="$EXPAT_LIBS -lexpat"
++    elif test $explicit_expat = yes; then
++      EXPAT_INCLUDES= EXPAT_LIBS=
++      { { echo "$as_me:$LINENO: error: 
++=========================================
++
++You explicitly specified --with-expat, but I can't find the expat headers
++and/or libraries where you said they would be.  Run again supplying
++--without-expat or --with-expat=PREFIX.
++
++=========================================" >&5
++echo "$as_me: error: 
++=========================================
++
++You explicitly specified --with-expat, but I can't find the expat headers
++and/or libraries where you said they would be.  Run again supplying
++--without-expat or --with-expat=PREFIX.
++
++=========================================" >&2;}
++   { (exit 1); exit 1; }; }
++    fi
++fi
++
++
++
++
++
++
++if test $ac_have_linux_kernel = y; then
++
++        if test $LINUXMODULE_2_6 = 1; then
++      { echo "$as_me:$LINENO: checking for Linux 2.6 compilation flags" >&5
++echo $ECHO_N "checking for Linux 2.6 compilation flags... $ECHO_C" >&6; }
++      echo "include $linuxdir/Makefile
++fwablongie:
++      @echo \$(CFLAGS)" >conftest.mk
++      make -C "${linuxdir}" M="`pwd`" -f "`pwd`/conftest.mk" --no-print-directory fwablongie >conftest.dat
++      if test $? != 0; then
++          { echo "$as_me:$LINENO: result: not found" >&5
++echo "${ECHO_T}not found" >&6; }
++          { { echo "$as_me:$LINENO: error: 
++==============================================
++
++Can't find Linux 2.6 compilation flags.
++
++==============================================" >&5
++echo "$as_me: error: 
++==============================================
++
++Can't find Linux 2.6 compilation flags.
++
++==============================================" >&2;}
++   { (exit 1); exit 1; }; }
++      fi
++      LINUX_CFLAGS="`sed -e s,-Iinclude,-I$linuxdir/include,g \
++          -e 's,-W^ *,,g' \
++          -e 's,-Wno-pointer-sign,,g' \
++          -e s,-fno-unit-at-a-time,,g \
++          -e s,-Wstrict-prototypes,,g \
++          -e s,-Wdeclaration-after-statement,,g \
++          -e s,-fno-common,,g <conftest.dat`"
++      { echo "$as_me:$LINENO: result: $LINUX_CFLAGS" >&5
++echo "${ECHO_T}$LINUX_CFLAGS" >&6; }
++    else
++      LINUX_CFLAGS=""
++    fi
++    
++
++
++    SAVE_CXX="$CXX"
++    CXX="$KERNEL_CXX"
++    saveflags="$CPPFLAGS"
++    CPPFLAGS="$saveflags -D__KERNEL__ -I$linuxdir/include -I$linuxdir/include/asm/mach-default $LINUX_CFLAGS" 
++
++    # CLICK_LINUXMODULE_PROLOGUE()
++    
++
++
++    { echo "$as_me:$LINENO: checking for C++-includable kernel header files" >&5
++echo $ECHO_N "checking for C++-includable kernel header files... $ECHO_C" >&6; }
++if test "${ac_cv_cxx_aware_system+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_ext=cpp
++ac_cpp='$CXXCPP $CPPFLAGS'
++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
++
++      cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#if HAVE_LINUXMODULE_2_6
++# define KBUILD_STR(s)                #s
++# define KBUILD_BASENAME      KBUILD_STR(click)
++# define KBUILD_MODNAME               KBUILD_STR(click)
++#endif
++#define new xxx_new
++#define this xxx_this
++#define delete xxx_delete
++#define class xxx_class
++#define virtual xxx_virtual
++#define typename xxx_typename
++#define private xxx_private
++#define protected xxx_protected
++#define public xxx_public
++#define namespace xxx_namespace
++#include <linux/autoconf.h>
++#include <linux/signal.h>
++int
++main ()
++{
++return 0
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_cxx_aware_system=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_cxx_aware_system=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++      
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_cxx_aware_system" >&5
++echo "${ECHO_T}$ac_cv_cxx_aware_system" >&6; }
++
++
++        if test $ac_cv_cxx_aware_system = yes; then
++
++      { echo "$as_me:$LINENO: checking whether -fpermissive is required" >&5
++echo $ECHO_N "checking whether -fpermissive is required... $ECHO_C" >&6; }
++if test "${ac_cv_f_permissive+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_ext=cpp
++ac_cpp='$CXXCPP $CPPFLAGS'
++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
++
++          cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#if HAVE_LINUXMODULE_2_6
++# define KBUILD_STR(s)                #s
++# define KBUILD_BASENAME      KBUILD_STR(click)
++# define KBUILD_MODNAME               KBUILD_STR(click)
++#endif
++#define new xxx_new
++#define this xxx_this
++#define delete xxx_delete
++#define class xxx_class
++#define virtual xxx_virtual
++#define typename xxx_typename
++#define private xxx_private
++#define protected xxx_protected
++#define public xxx_public
++#define namespace xxx_namespace
++#include <linux/autoconf.h>
++#include <linux/skbuff.h>
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  ac_cv_f_permissive=no
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_f_permissive=yes
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_f_permissive" >&5
++echo "${ECHO_T}$ac_cv_f_permissive" >&6; }
++
++      if test $ac_cv_f_permissive = yes; then
++          CXX="$KERNEL_CXX -fpermissive"
++          { echo "$as_me:$LINENO: checking whether -fpermissive is allowed" >&5
++echo $ECHO_N "checking whether -fpermissive is allowed... $ECHO_C" >&6; }
++if test "${ac_cv_f_permissive_ok+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_ext=cpp
++ac_cpp='$CXXCPP $CPPFLAGS'
++ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
++
++              cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#if HAVE_LINUXMODULE_2_6
++# define KBUILD_STR(s)                #s
++# define KBUILD_BASENAME      KBUILD_STR(click)
++# define KBUILD_MODNAME               KBUILD_STR(click)
++#endif
++#define new xxx_new
++#define this xxx_this
++#define delete xxx_delete
++#define class xxx_class
++#define virtual xxx_virtual
++#define typename xxx_typename
++#define private xxx_private
++#define protected xxx_protected
++#define public xxx_public
++#define namespace xxx_namespace
++#include <linux/autoconf.h>
++#include <linux/skbuff.h>
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_link") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest$ac_exeext &&
++       $as_test_x conftest$ac_exeext; then
++  ac_cv_f_permissive_ok=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_f_permissive_ok=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++      conftest$ac_exeext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_f_permissive_ok" >&5
++echo "${ECHO_T}$ac_cv_f_permissive_ok" >&6; }
++
++          if test $ac_cv_f_permissive_ok = no; then
++              ac_cv_cxx_aware_system=no
++          else
++              KERNEL_CXX="$KERNEL_CXX -fpermissive"
++          fi
++      fi
++    fi
++
++
++    { echo "$as_me:$LINENO: checking whether long and int64_t are the same type in the Linux kernel" >&5
++echo $ECHO_N "checking whether long and int64_t are the same type in the Linux kernel... $ECHO_C" >&6; }
++if test "${ac_cv_long_64_linuxmodule+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#if HAVE_LINUXMODULE_2_6
++# define KBUILD_STR(s)                #s
++# define KBUILD_BASENAME      KBUILD_STR(click)
++# define KBUILD_MODNAME               KBUILD_STR(click)
++#endif
++#define new xxx_new
++#define this xxx_this
++#define delete xxx_delete
++#define class xxx_class
++#define virtual xxx_virtual
++#define typename xxx_typename
++#define private xxx_private
++#define protected xxx_protected
++#define public xxx_public
++#define namespace xxx_namespace
++#include <linux/autoconf.h>
++#include <linux/types.h>
++void f1(long) {
++}
++void f1(int64_t) { // will fail if long and int64_t are the same type
++}
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_long_64_linuxmodule=no
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_long_64_linuxmodule=yes
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_long_64_linuxmodule" >&5
++echo "${ECHO_T}$ac_cv_long_64_linuxmodule" >&6; }
++    if test $ac_cv_long_64_linuxmodule = yes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_INT64_IS_LONG_LINUXMODULE 1
++_ACEOF
++
++    fi
++
++
++    { echo "$as_me:$LINENO: checking whether long long and int64_t are the same type in the Linux kernel" >&5
++echo $ECHO_N "checking whether long long and int64_t are the same type in the Linux kernel... $ECHO_C" >&6; }
++if test "${ac_cv_long_long_64_linuxmodule+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#if HAVE_LINUXMODULE_2_6
++# define KBUILD_STR(s)                #s
++# define KBUILD_BASENAME      KBUILD_STR(click)
++# define KBUILD_MODNAME               KBUILD_STR(click)
++#endif
++#define new xxx_new
++#define this xxx_this
++#define delete xxx_delete
++#define class xxx_class
++#define virtual xxx_virtual
++#define typename xxx_typename
++#define private xxx_private
++#define protected xxx_protected
++#define public xxx_public
++#define namespace xxx_namespace
++#include <linux/autoconf.h>
++#include <linux/types.h>
++void f1(long long) {
++}
++void f1(int64_t) { // will fail if long long and int64_t are the same type
++}
++int
++main ()
++{
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_cxx_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_long_long_64_linuxmodule=no
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_long_long_64_linuxmodule=yes
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_long_long_64_linuxmodule" >&5
++echo "${ECHO_T}$ac_cv_long_long_64_linuxmodule" >&6; }
++    if test $ac_cv_long_long_64_linuxmodule = yes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_INT64_IS_LONG_LONG_LINUXMODULE 1
++_ACEOF
++
++    fi
++
++
++    { echo "$as_me:$LINENO: checking whether struct sk_buff has a security member" >&5
++echo $ECHO_N "checking whether struct sk_buff has a security member... $ECHO_C" >&6; }
++if test "${ac_cv_linuxmodule_skbuff_security+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++      cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#if HAVE_LINUXMODULE_2_6
++# define KBUILD_STR(s)                #s
++# define KBUILD_BASENAME      KBUILD_STR(click)
++# define KBUILD_MODNAME               KBUILD_STR(click)
++#endif
++#define new xxx_new
++#define this xxx_this
++#define delete xxx_delete
++#define class xxx_class
++#define virtual xxx_virtual
++#define typename xxx_typename
++#define private xxx_private
++#define protected xxx_protected
++#define public xxx_public
++#define namespace xxx_namespace
++#include <linux/autoconf.h>
++#include <linux/skbuff.h>
++int
++main ()
++{
++extern struct sk_buff *s; s->security = 0;
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_linuxmodule_skbuff_security=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_linuxmodule_skbuff_security=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_linuxmodule_skbuff_security" >&5
++echo "${ECHO_T}$ac_cv_linuxmodule_skbuff_security" >&6; }
++    if test $ac_cv_linuxmodule_skbuff_security = yes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_LINUX_SKBUFF_SECURITY 1
++_ACEOF
++
++    fi
++
++    { echo "$as_me:$LINENO: checking whether struct sk_buff has an fclone member" >&5
++echo $ECHO_N "checking whether struct sk_buff has an fclone member... $ECHO_C" >&6; }
++if test "${ac_cv_linuxmodule_skbuff_fclone+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++      cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#if HAVE_LINUXMODULE_2_6
++# define KBUILD_STR(s)                #s
++# define KBUILD_BASENAME      KBUILD_STR(click)
++# define KBUILD_MODNAME               KBUILD_STR(click)
++#endif
++#define new xxx_new
++#define this xxx_this
++#define delete xxx_delete
++#define class xxx_class
++#define virtual xxx_virtual
++#define typename xxx_typename
++#define private xxx_private
++#define protected xxx_protected
++#define public xxx_public
++#define namespace xxx_namespace
++#include <linux/autoconf.h>
++#include <linux/skbuff.h>
++int
++main ()
++{
++extern struct sk_buff *s; s->fclone = 0;
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_linuxmodule_skbuff_fclone=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_linuxmodule_skbuff_fclone=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_linuxmodule_skbuff_fclone" >&5
++echo "${ECHO_T}$ac_cv_linuxmodule_skbuff_fclone" >&6; }
++    if test $ac_cv_linuxmodule_skbuff_fclone = yes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_LINUX_SKBUFF_FCLONE 1
++_ACEOF
++
++    fi
++
++    { echo "$as_me:$LINENO: checking whether skb_shinfo has a tso_size member" >&5
++echo $ECHO_N "checking whether skb_shinfo has a tso_size member... $ECHO_C" >&6; }
++if test "${ac_cv_linuxmodule_skb_shinfo_tso_size+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++      cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#if HAVE_LINUXMODULE_2_6
++# define KBUILD_STR(s)                #s
++# define KBUILD_BASENAME      KBUILD_STR(click)
++# define KBUILD_MODNAME               KBUILD_STR(click)
++#endif
++#define new xxx_new
++#define this xxx_this
++#define delete xxx_delete
++#define class xxx_class
++#define virtual xxx_virtual
++#define typename xxx_typename
++#define private xxx_private
++#define protected xxx_protected
++#define public xxx_public
++#define namespace xxx_namespace
++#include <linux/autoconf.h>
++#include <linux/skbuff.h>
++int
++main ()
++{
++extern struct sk_buff *s; skb_shinfo(s)->tso_size = 0;
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_linuxmodule_skb_shinfo_tso_size=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_linuxmodule_skb_shinfo_tso_size=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_linuxmodule_skb_shinfo_tso_size" >&5
++echo "${ECHO_T}$ac_cv_linuxmodule_skb_shinfo_tso_size" >&6; }
++    if test $ac_cv_linuxmodule_skb_shinfo_tso_size = yes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_LINUX_SKB_SHINFO_TSO_SIZE 1
++_ACEOF
++
++    fi
++
++    { echo "$as_me:$LINENO: checking whether skb_shinfo has a gso_size member" >&5
++echo $ECHO_N "checking whether skb_shinfo has a gso_size member... $ECHO_C" >&6; }
++if test "${ac_cv_linuxmodule_skb_shinfo_gso_size+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++      cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#if HAVE_LINUXMODULE_2_6
++# define KBUILD_STR(s)                #s
++# define KBUILD_BASENAME      KBUILD_STR(click)
++# define KBUILD_MODNAME               KBUILD_STR(click)
++#endif
++#define new xxx_new
++#define this xxx_this
++#define delete xxx_delete
++#define class xxx_class
++#define virtual xxx_virtual
++#define typename xxx_typename
++#define private xxx_private
++#define protected xxx_protected
++#define public xxx_public
++#define namespace xxx_namespace
++#include <linux/autoconf.h>
++#include <linux/skbuff.h>
++int
++main ()
++{
++extern struct sk_buff *s; skb_shinfo(s)->gso_size = 0;
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_linuxmodule_skb_shinfo_gso_size=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_linuxmodule_skb_shinfo_gso_size=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_linuxmodule_skb_shinfo_gso_size" >&5
++echo "${ECHO_T}$ac_cv_linuxmodule_skb_shinfo_gso_size" >&6; }
++    if test $ac_cv_linuxmodule_skb_shinfo_gso_size = yes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_LINUX_SKB_SHINFO_GSO_SIZE 1
++_ACEOF
++
++    fi
++
++    { echo "$as_me:$LINENO: checking whether skb_shinfo has a ufo_size member" >&5
++echo $ECHO_N "checking whether skb_shinfo has a ufo_size member... $ECHO_C" >&6; }
++if test "${ac_cv_linuxmodule_skb_shinfo_ufo_size+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++      cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#if HAVE_LINUXMODULE_2_6
++# define KBUILD_STR(s)                #s
++# define KBUILD_BASENAME      KBUILD_STR(click)
++# define KBUILD_MODNAME               KBUILD_STR(click)
++#endif
++#define new xxx_new
++#define this xxx_this
++#define delete xxx_delete
++#define class xxx_class
++#define virtual xxx_virtual
++#define typename xxx_typename
++#define private xxx_private
++#define protected xxx_protected
++#define public xxx_public
++#define namespace xxx_namespace
++#include <linux/autoconf.h>
++#include <linux/skbuff.h>
++int
++main ()
++{
++extern struct sk_buff *s; skb_shinfo(s)->ufo_size = 0;
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_linuxmodule_skb_shinfo_ufo_size=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_linuxmodule_skb_shinfo_ufo_size=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_linuxmodule_skb_shinfo_ufo_size" >&5
++echo "${ECHO_T}$ac_cv_linuxmodule_skb_shinfo_ufo_size" >&6; }
++    if test $ac_cv_linuxmodule_skb_shinfo_ufo_size = yes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_LINUX_SKB_SHINFO_UFO_SIZE 1
++_ACEOF
++
++    fi
++
++    { echo "$as_me:$LINENO: checking whether skb_shinfo has an ip6_frag_id member" >&5
++echo $ECHO_N "checking whether skb_shinfo has an ip6_frag_id member... $ECHO_C" >&6; }
++if test "${ac_cv_linuxmodule_skb_shinfo_ip6_frag_id+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++      cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#if HAVE_LINUXMODULE_2_6
++# define KBUILD_STR(s)                #s
++# define KBUILD_BASENAME      KBUILD_STR(click)
++# define KBUILD_MODNAME               KBUILD_STR(click)
++#endif
++#define new xxx_new
++#define this xxx_this
++#define delete xxx_delete
++#define class xxx_class
++#define virtual xxx_virtual
++#define typename xxx_typename
++#define private xxx_private
++#define protected xxx_protected
++#define public xxx_public
++#define namespace xxx_namespace
++#include <linux/autoconf.h>
++#include <linux/skbuff.h>
++int
++main ()
++{
++extern struct sk_buff *s; skb_shinfo(s)->ip6_frag_id = 0;
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_linuxmodule_skb_shinfo_ip6_frag_id=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_linuxmodule_skb_shinfo_ip6_frag_id=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_linuxmodule_skb_shinfo_ip6_frag_id" >&5
++echo "${ECHO_T}$ac_cv_linuxmodule_skb_shinfo_ip6_frag_id" >&6; }
++    if test $ac_cv_linuxmodule_skb_shinfo_ip6_frag_id = yes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_LINUX_SKB_SHINFO_IP6_FRAG_ID 1
++_ACEOF
++
++    fi
++
++    ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++    { echo "$as_me:$LINENO: checking whether net_enable_timestamp is declared" >&5
++echo $ECHO_N "checking whether net_enable_timestamp is declared... $ECHO_C" >&6; }
++if test "${ac_cv_have_decl_net_enable_timestamp+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#if HAVE_LINUXMODULE_2_6
++# define KBUILD_STR(s)                #s
++# define KBUILD_BASENAME      KBUILD_STR(click)
++# define KBUILD_MODNAME               KBUILD_STR(click)
++#endif
++#define new xxx_new
++#define this xxx_this
++#define delete xxx_delete
++#define class xxx_class
++#define virtual xxx_virtual
++#define typename xxx_typename
++#define private xxx_private
++#define protected xxx_protected
++#define public xxx_public
++#define namespace xxx_namespace
++#include <linux/autoconf.h>
++#include <linux/skbuff.h>
++#include <linux/netdevice.h>
++
++int
++main ()
++{
++#ifndef net_enable_timestamp
++  (void) net_enable_timestamp;
++#endif
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_have_decl_net_enable_timestamp=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_have_decl_net_enable_timestamp=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_net_enable_timestamp" >&5
++echo "${ECHO_T}$ac_cv_have_decl_net_enable_timestamp" >&6; }
++if test $ac_cv_have_decl_net_enable_timestamp = yes; then
++  ac_cv_net_enable_timestamp=yes
++else
++  ac_cv_net_enable_timestamp=no
++fi
++
++    if test $ac_cv_net_enable_timestamp = yes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_NET_ENABLE_TIMESTAMP 1
++_ACEOF
++
++    fi
++
++    { echo "$as_me:$LINENO: checking whether netif_tx_lock is declared" >&5
++echo $ECHO_N "checking whether netif_tx_lock is declared... $ECHO_C" >&6; }
++if test "${ac_cv_have_decl_netif_tx_lock+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h.  */
++#if HAVE_LINUXMODULE_2_6
++# define KBUILD_STR(s)                #s
++# define KBUILD_BASENAME      KBUILD_STR(click)
++# define KBUILD_MODNAME               KBUILD_STR(click)
++#endif
++#define new xxx_new
++#define this xxx_this
++#define delete xxx_delete
++#define class xxx_class
++#define virtual xxx_virtual
++#define typename xxx_typename
++#define private xxx_private
++#define protected xxx_protected
++#define public xxx_public
++#define namespace xxx_namespace
++#include <linux/autoconf.h>
++#include <linux/skbuff.h>
++#include <linux/netdevice.h>
++
++int
++main ()
++{
++#ifndef netif_tx_lock
++  (void) netif_tx_lock;
++#endif
++
++  ;
++  return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++       test -z "$ac_c_werror_flag" ||
++       test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  ac_cv_have_decl_netif_tx_lock=yes
++else
++  echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++      ac_cv_have_decl_netif_tx_lock=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_netif_tx_lock" >&5
++echo "${ECHO_T}$ac_cv_have_decl_netif_tx_lock" >&6; }
++if test $ac_cv_have_decl_netif_tx_lock = yes; then
++  ac_cv_netif_tx_lock=yes
++else
++  ac_cv_netif_tx_lock=no
++fi
++
++    if test $ac_cv_netif_tx_lock = yes; then
++      
++cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_NETIF_TX_LOCK 1
++_ACEOF
++
++    fi
++
++
++    CXX="$SAVE_CXX"
++    CPPFLAGS="$saveflags"
++
++    if test $ac_cv_cxx_aware_system = yes; then
++      DRIVERS="$DRIVERS linuxmodule"
++      TOOL_TARGETS="$TOOL_TARGETS click-install"
++      cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_LINUXMODULE_DRIVER 1
++_ACEOF
++
++      HAVE_LINUXMODULE_DRIVER=1
++    elif test x$enable_linuxmodule_default = xyes; then
++      { echo "$as_me:$LINENO: WARNING: 
++=========================================
++
++Your Linux kernel header files cause errors when included by a C++ program,
++so I won't try to compile the linuxmodule driver.
++
++There are two common reasons for this error:
++1. You have not applied the Linux kernel patch that comes with this
++   distribution.  Apply the right patch and try again.  See the INSTALL
++   file for more information.
++2. Your Linux configuration enables some functionality that is not yet
++   covered by our patches.  Turn off this functionality and try again,
++   or fix the error and tell us how you did it.  See the config.log file
++   for more detailed information on the error.
++
++=========================================" >&5
++echo "$as_me: WARNING: 
++=========================================
++
++Your Linux kernel header files cause errors when included by a C++ program,
++so I won't try to compile the linuxmodule driver.
++
++There are two common reasons for this error:
++1. You have not applied the Linux kernel patch that comes with this
++   distribution.  Apply the right patch and try again.  See the INSTALL
++   file for more information.
++2. Your Linux configuration enables some functionality that is not yet
++   covered by our patches.  Turn off this functionality and try again,
++   or fix the error and tell us how you did it.  See the config.log file
++   for more detailed information on the error.
++
++=========================================" >&2;}
++    else
++      { { echo "$as_me:$LINENO: error: 
++=========================================
++
++Your Linux kernel header files cause errors when included by a C++ program.
++
++There are two common reasons for this error:
++1. You have not applied the Linux kernel patch that comes with this
++   distribution.  Apply the right patch and try again.  See the INSTALL
++   file for more information.
++2. Your Linux configuration enables some functionality that is not yet
++   covered by our patches.  Turn off this functionality and try again,
++   or fix the error and tell us how you did it.  See the config.log file
++   for more detailed information on the error.
++
++=========================================" >&5
++echo "$as_me: error: 
++=========================================
++
++Your Linux kernel header files cause errors when included by a C++ program.
++
++There are two common reasons for this error:
++1. You have not applied the Linux kernel patch that comes with this
++   distribution.  Apply the right patch and try again.  See the INSTALL
++   file for more information.
++2. Your Linux configuration enables some functionality that is not yet
++   covered by our patches.  Turn off this functionality and try again,
++   or fix the error and tell us how you did it.  See the config.log file
++   for more detailed information on the error.
++
++=========================================" >&2;}
++   { (exit 1); exit 1; }; }
++    fi
++fi
++
++
++
++if test $ac_have_bsd_kernel = y; then
++    DRIVERS="$DRIVERS bsdmodule"
++    if echo "$DRIVERS" | grep linuxmodule >/dev/null 2>&1; then :; else
++      TOOL_TARGETS="$TOOL_TARGETS click-install"
++    fi
++    cat >>confdefs.h <<\_ACEOF
++@%:@define HAVE_BSDMODULE_DRIVER 1
++_ACEOF
++
++    HAVE_BSDMODULE_DRIVER=1
++fi
++
++
++
++if test "x$enable_nsclick" = xyes; then
++    DRIVERS="$DRIVERS ns"
++fi
++
++
++
++if test "x$enable_tools" != xno; then
++    OTHER_TARGETS="$OTHER_TARGETS tools"
++fi
++
++
++
++# Find a good install program.  We prefer a C program (faster),
++# so one script is as good as another.  But avoid the broken or
++# incompatible versions:
++# SysV /etc/install, /usr/sbin/install
++# SunOS /usr/etc/install
++# IRIX /sbin/install
++# AIX /bin/install
++# AmigaOS /C/install, which installs bootblocks on floppy discs
++# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
++# AFS /usr/afsws/bin/install, which mishandles nonexistent args
++# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
++# OS/2's system install, which has a completely different semantic
++# ./install, which can be erroneously created by make from ./install.sh.
++{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
++echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; }
++if test -z "$INSTALL"; then
++if test "${ac_cv_path_install+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  # Account for people who put trailing slashes in PATH elements.
++case $as_dir/ in
++  ./ | .// | /cC/* | \
++  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
++  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
++  /usr/ucb/* ) ;;
++  *)
++    # OSF1 and SCO ODT 3.0 have their own names for install.
++    # Don't use installbsd from OSF since it installs stuff as root
++    # by default.
++    for ac_prog in ginstall scoinst install; do
++      for ac_exec_ext in '' $ac_executable_extensions; do
++      if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
++        if test $ac_prog = install &&
++          grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
++          # AIX install.  It has an incompatible calling convention.
++          :
++        elif test $ac_prog = install &&
++          grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
++          # program-specific install script used by HP pwplus--don't use.
++          :
++        else
++          ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
++          break 3
++        fi
++      fi
++      done
++    done
++    ;;
++esac
++done
++IFS=$as_save_IFS
++
++
++fi
++  if test "${ac_cv_path_install+set}" = set; then
++    INSTALL=$ac_cv_path_install
++  else
++    # As a last resort, use the slow shell script.  Don't cache a
++    # value for INSTALL within a source directory, because that will
++    # break other packages using the cache if that directory is
++    # removed, or if the value is a relative name.
++    INSTALL=$ac_install_sh
++  fi
++fi
++{ echo "$as_me:$LINENO: result: $INSTALL" >&5
++echo "${ECHO_T}$INSTALL" >&6; }
++
++# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
++# It thinks the first close brace ends the variable substitution.
++test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
++
++test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
++
++test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
++
++
++    
++    { echo "$as_me:$LINENO: checking whether install accepts -C" >&5
++echo $ECHO_N "checking whether install accepts -C... $ECHO_C" >&6; }
++    echo X > conftest.1
++    if $INSTALL -C conftest.1 conftest.2 >/dev/null 2>&1; then
++      INSTALL_IF_CHANGED='$(INSTALL) -C'
++      { echo "$as_me:$LINENO: result: yes" >&5
++echo "${ECHO_T}yes" >&6; }
++    else
++      INSTALL_IF_CHANGED='$(top_builddir)/installch'
++      { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++    fi
++    rm -f conftest.1 conftest.2
++    
++    CLICKINSTALL=`echo "$INSTALL" | sed 's|^\$(.*)/|\$(clickdatadir)/|'`
++    
++
++
++    if test "${GMAKE-NO}" = NO; then
++      { echo "$as_me:$LINENO: checking for GNU make" >&5
++echo $ECHO_N "checking for GNU make... $ECHO_C" >&6; }
++if test "${ac_cv_gnu_make+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if /bin/sh -c 'make -f /dev/null -n --version | grep GNU' >/dev/null 2>&1; then
++          ac_cv_gnu_make='make'
++      elif /bin/sh -c 'gmake -f /dev/null -n --version | grep GNU' >/dev/null 2>&1; then
++          ac_cv_gnu_make='gmake'
++      else
++          ac_cv_gnu_make='not found'
++      fi
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_gnu_make" >&5
++echo "${ECHO_T}$ac_cv_gnu_make" >&6; }
++      test "$ac_cv_gnu_make" != 'not found' && GMAKE="$ac_cv_gnu_make"
++    else
++      /bin/sh -c '$GMAKE -f /dev/null -n --version | grep GNU' >/dev/null 2>&1 || GMAKE=''
++    fi
++
++    SUBMAKE=''
++    test -n "$GMAKE" -a "$GMAKE" != make && SUBMAKE="MAKE = $GMAKE"
++    
++    
++
++
++    { echo "$as_me:$LINENO: checking for working autoconf" >&5
++echo $ECHO_N "checking for working autoconf... $ECHO_C" >&6; }
++    AUTOCONF="${AUTOCONF-autoconf}"
++    if ($AUTOCONF --version) < /dev/null > conftest.out 2>&1; then
++      if test `head -n 1 conftest.out | sed 's/.*2\.\([0-9]*\).*/\1/'` -ge 13 2>/dev/null; then
++          { echo "$as_me:$LINENO: result: found" >&5
++echo "${ECHO_T}found" >&6; }
++      else
++          AUTOCONF='$(conf_auxdir)/missing autoconf'
++          { echo "$as_me:$LINENO: result: old" >&5
++echo "${ECHO_T}old" >&6; }
++      fi
++    else
++      AUTOCONF='$(conf_auxdir)/missing autoconf'
++      { echo "$as_me:$LINENO: result: missing" >&5
++echo "${ECHO_T}missing" >&6; }
++    fi
++    
++
++
++        ac_foo=`echo 'exit($A<5);' | tr A \135`
++
++    if test "${PERL-NO}" = NO; then
++      for ac_prog in perl5 perl
++do
++  # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_perl5+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$perl5"; then
++  ac_cv_prog_perl5="$perl5" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_perl5="$ac_prog"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++perl5=$ac_cv_prog_perl5
++if test -n "$perl5"; then
++  { echo "$as_me:$LINENO: result: $perl5" >&5
++echo "${ECHO_T}$perl5" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++
++  test -n "$perl5" && break
++done
++test -n "$perl5" || perl5="missing"
++
++      test "$perl5" != missing && $perl5 -e "$ac_foo" && perl5=missing
++      if test "$perl5" = missing; then
++          for ac_prog in perl5 perl
++do
++  # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_prog_localperl5+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  if test -n "$localperl5"; then
++  ac_cv_prog_localperl5="$localperl5" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in /usr/local/bin
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_prog_localperl5="$ac_prog"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++fi
++fi
++localperl5=$ac_cv_prog_localperl5
++if test -n "$localperl5"; then
++  { echo "$as_me:$LINENO: result: $localperl5" >&5
++echo "${ECHO_T}$localperl5" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++
++  test -n "$localperl5" && break
++done
++test -n "$localperl5" || localperl5="missing"
++
++          test "$localperl5" != missing && \
++              perl5="/usr/local/bin/$localperl5"
++      fi
++    else
++      perl5="$PERL"
++    fi
++    
++    test "$perl5" != missing && $perl5 -e "$ac_foo" && perl5=missing
++
++    if test "$perl5" = "missing"; then
++      PERL='$(conf_auxdir)/missing perl'
++    else
++      PERL="$perl5"
++    fi
++    
++
++
++if test -z "$GMAKE"; then
++    { { echo "$as_me:$LINENO: error: 
++==============================================
++
++Can't find GNU make.  Either put 'gmake' on your PATH and
++rerun './configure', or set the GMAKE environment variable to
++GNU make's pathname.
++
++==============================================" >&5
++echo "$as_me: error: 
++==============================================
++
++Can't find GNU make.  Either put 'gmake' on your PATH and
++rerun './configure', or set the GMAKE environment variable to
++GNU make's pathname.
++
++==============================================" >&2;}
++   { (exit 1); exit 1; }; }
++fi
++
++
++
++{ echo "$as_me:$LINENO: checking for working makeinfo" >&5
++echo $ECHO_N "checking for working makeinfo... $ECHO_C" >&6; }
++MAKEINFO=${MAKEINFO-makeinfo}
++if ($MAKEINFO --version) < /dev/null > conftest.out 2>&1; then
++    if test `head -n 1 conftest.out | sed 's/^.* \([0-9][0-9]*\).*$/\1/'` -ge 4; then
++      { echo "$as_me:$LINENO: result: found" >&5
++echo "${ECHO_T}found" >&6; }
++    else
++      MAKEINFO='$(conf_auxdir)/missing makeinfo'
++      { echo "$as_me:$LINENO: result: old" >&5
++echo "${ECHO_T}old" >&6; }
++    fi
++else
++    MAKEINFO='$(conf_auxdir)/missing makeinfo'
++    { echo "$as_me:$LINENO: result: missing" >&5
++echo "${ECHO_T}missing" >&6; }
++fi
++
++{ echo "$as_me:$LINENO: checking for working texi2dvi" >&5
++echo $ECHO_N "checking for working texi2dvi... $ECHO_C" >&6; }
++TEXI2DVI=${TEXI2DVI-texi2dvi}
++if ($TEXI2DVI --version) < /dev/null > conftest.out 2>&1; then
++        if test `head -n 1 conftest.out | sed 's/.*Texinfo \([0-9][0-9]*\).*/\1/'` -ge 4; then
++      { echo "$as_me:$LINENO: result: found" >&5
++echo "${ECHO_T}found" >&6; }
++    else
++      TEXI2DVI='$(conf_auxdir)/missing texi2dvi'
++      { echo "$as_me:$LINENO: result: old" >&5
++echo "${ECHO_T}old" >&6; }
++    fi
++else
++    TEXI2DVI='$(conf_auxdir)/missing texi2dvi'
++    { echo "$as_me:$LINENO: result: missing" >&5
++echo "${ECHO_T}missing" >&6; }
++fi
++
++if test ${INSTALL_INFO-xxx} = xxx; then
++    # Extract the first word of "install-info", so it can be a program name with args.
++set dummy install-info; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_path_INSTALL_INFO+set}" = set; then
++  echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++  case $INSTALL_INFO in
++  [\\/]* | ?:[\\/]*)
++  ac_cv_path_INSTALL_INFO="$INSTALL_INFO" # Let the user override the test with a path.
++  ;;
++  *)
++  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++as_dummy="$PATH:/sbin:/usr/sbin:/usr/local/sbin"
++for as_dir in $as_dummy
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  for ac_exec_ext in '' $ac_executable_extensions; do
++  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++    ac_cv_path_INSTALL_INFO="$as_dir/$ac_word$ac_exec_ext"
++    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++    break 2
++  fi
++done
++done
++IFS=$as_save_IFS
++
++  test -z "$ac_cv_path_INSTALL_INFO" && ac_cv_path_INSTALL_INFO="'$(conf_auxdir)/missing install-info'"
++  ;;
++esac
++fi
++INSTALL_INFO=$ac_cv_path_INSTALL_INFO
++if test -n "$INSTALL_INFO"; then
++  { echo "$as_me:$LINENO: result: $INSTALL_INFO" >&5
++echo "${ECHO_T}$INSTALL_INFO" >&6; }
++else
++  { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++
++fi
++{ echo "$as_me:$LINENO: checking for working install-info" >&5
++echo $ECHO_N "checking for working install-info... $ECHO_C" >&6; }
++if ($INSTALL_INFO --version) < /dev/null > conftest.out 2>&1; then
++    { echo "$as_me:$LINENO: result: found" >&5
++echo "${ECHO_T}found" >&6; }
++else
++    INSTALL_INFO='$(conf_auxdir)/missing install-info'
++    { echo "$as_me:$LINENO: result: missing" >&5
++echo "${ECHO_T}missing" >&6; }
++fi
++
++{ echo "$as_me:$LINENO: checking for working pod2man" >&5
++echo $ECHO_N "checking for working pod2man... $ECHO_C" >&6; }
++POD2MAN=${POD2MAN-pod2man}
++if ($POD2MAN --help) < /dev/null > conftest.out 2>&1 && grep pod2man conftest.out >/dev/null 2>&1; then
++    { echo "$as_me:$LINENO: result: found" >&5
++echo "${ECHO_T}found" >&6; }
++else
++    POD2MAN='$(conf_auxdir)/missing pod2man'
++    { echo "$as_me:$LINENO: result: missing" >&5
++echo "${ECHO_T}missing" >&6; }
++fi
++
++
++
++
++
++
++
++
++
++shell_expand () {
++    val=`eval echo '$'"$1"`
++    while echo "x$val" | fgrep '$' >/dev/null 2>&1; do val=`eval echo "$val"`; done
++    eval "$1='$val'"
++}
++
++test "x$prefix" = xNONE && prefix=$ac_default_prefix
++test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
++
++if test x$infodir = 'x${prefix}/info'; then
++    test ! -d ${prefix}/info && test -d ${prefix}/share/info && infodir='${prefix}/share/info'
++fi
++
++shell_expand bindir
++shell_expand sbindir
++shell_expand libdir
++shell_expand datarootdir
++shell_expand datadir
++shell_expand includedir
++
++clickdatadir="$datadir/click"
++
++
++cat >>confdefs.h <<_ACEOF
++@%:@define CLICK_BINDIR "$bindir"
++_ACEOF
++
++cat >>confdefs.h <<_ACEOF
++@%:@define CLICK_LIBDIR "$libdir"
++_ACEOF
++
++cat >>confdefs.h <<_ACEOF
++@%:@define CLICK_DATADIR "$clickdatadir"
++_ACEOF
++
++
++
++
++provisions="$target_cpu"
++case "$target_cpu" in
++    i386) :;;
++    i486|i586) provisions="$provisions i386";;
++    i686|i786) provisions="$provisions i386 i586";;
++esac
++
++if test "x$enable_analysis" = xyes; then
++    provisions="$provisions analysis"
++fi
++
++if test "x$enable_experimental" = xyes; then
++    provisions="$provisions experimental"
++fi
++
++if test "x$have_int64_types" = xyes; then
++    provisions="$provisions int64"
++fi
++
++if test "x$enable_ip6" = xyes; then
++    provisions="$provisions ip6"
++fi
++
++if test "x$ac_cv_under_linux" = xyes; then
++    provisions="$provisions linux"
++fi
++
++if test $ac_have_linux_kernel = y; then
++    ac_linux_version_code=`grep LINUX_VERSION_CODE $linuxdir/include/linux/version.h | sed 's/^.*CODE //'`
++    if test $ac_linux_version_code -ge 131584 -a $ac_linux_version_code -lt 131840; then
++      provisions="$provisions linux_2_2"
++    elif test $ac_linux_version_code -ge 132096 -a $ac_linux_version_code -lt 132352; then
++      provisions="$provisions linux_2_4"
++    elif test $ac_linux_version_code -ge 132608 -a $ac_linux_version_code -lt 132864; then
++      provisions="$provisions linux_2_6"
++    fi
++fi
++
++if test "x$HAVE_PCAP" = xyes; then
++    provisions="$provisions pcap"
++fi
++
++if test "$enable_multithread" -gt 1; then
++    provisions="$provisions smpclick"
++fi
++
++if test "x$enable_user_multithread" = xyes; then
++    provisions="$provisions umultithread"
++fi
++
++if test "x$enable_wifi" = xyes; then
++    provisions="$provisions wifi"
++fi
++
++
++
++
++config_files="Makefile click-buildtool click-compile config.mk installch tools/Makefile tools/lib/Makefile doc/Makefile etc/libclick/Makefile etc/pkg-config.mk"
++for ac_dir in $POSSIBLE_DRIVERS; do
++    config_files="$config_files $ac_dir/Makefile"
++done
++for ac_dir in $TOOLDIRS; do
++    config_files="$config_files tools/$ac_dir/Makefile"
++done
++for ac_dir in etc include; do
++    test ! -d "$ac_dir" && mkdir "$ac_dir"
++done
++
++ac_config_commands="$ac_config_commands default-1"
++
++ac_config_files="$ac_config_files $config_files"
++
++cat >confcache <<\_ACEOF
++# This file is a shell script that caches the results of configure
++# tests run on this system so they can be shared between configure
++# scripts and configure runs, see configure's option --config-cache.
++# It is not useful on other systems.  If it contains results you don't
++# want to keep, you may remove or edit it.
++#
++# config.status only pays attention to the cache file if you give it
++# the --recheck option to rerun configure.
++#
++# `ac_cv_env_foo' variables (set or unset) will be overridden when
++# loading this file, other *unset* `ac_cv_foo' will be assigned the
++# following values.
++
++_ACEOF
++
++# The following way of writing the cache mishandles newlines in values,
++# but we know of no workaround that is simple, portable, and efficient.
++# So, we kill variables containing newlines.
++# Ultrix sh set writes to stderr and can't be redirected directly,
++# and sets the high bit in the cache file unless we assign to the vars.
++(
++  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
++    eval ac_val=\$$ac_var
++    case $ac_val in #(
++    *${as_nl}*)
++      case $ac_var in #(
++      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
++echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
++      esac
++      case $ac_var in #(
++      _ | IFS | as_nl) ;; #(
++      *) $as_unset $ac_var ;;
++      esac ;;
++    esac
++  done
++
++  (set) 2>&1 |
++    case $as_nl`(ac_space=' '; set) 2>&1` in #(
++    *${as_nl}ac_space=\ *)
++      # `set' does not quote correctly, so add quotes (double-quote
++      # substitution turns \\\\ into \\, and sed turns \\ into \).
++      sed -n \
++      "s/'/'\\\\''/g;
++        s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
++      ;; #(
++    *)
++      # `set' quotes correctly as required by POSIX, so do not add quotes.
++      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
++      ;;
++    esac |
++    sort
++) |
++  sed '
++     /^ac_cv_env_/b end
++     t clear
++     :clear
++     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
++     t end
++     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
++     :end' >>confcache
++if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
++  if test -w "$cache_file"; then
++    test "x$cache_file" != "x/dev/null" &&
++      { echo "$as_me:$LINENO: updating cache $cache_file" >&5
++echo "$as_me: updating cache $cache_file" >&6;}
++    cat confcache >$cache_file
++  else
++    { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
++echo "$as_me: not updating unwritable cache $cache_file" >&6;}
++  fi
++fi
++rm -f confcache
++
++test "x$prefix" = xNONE && prefix=$ac_default_prefix
++# Let make expand exec_prefix.
++test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
++
++DEFS=-DHAVE_CONFIG_H
++
++ac_libobjs=
++ac_ltlibobjs=
++for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue
++  # 1. Remove the extension, and $U if already installed.
++  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
++  ac_i=`echo "$ac_i" | sed "$ac_script"`
++  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
++  #    will be set to the directory where LIBOBJS objects are built.
++  ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
++  ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
++done
++LIB@&t@OBJS=$ac_libobjs
++
++LTLIBOBJS=$ac_ltlibobjs
++
++
++
++: ${CONFIG_STATUS=./config.status}
++ac_clean_files_save=$ac_clean_files
++ac_clean_files="$ac_clean_files $CONFIG_STATUS"
++{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
++echo "$as_me: creating $CONFIG_STATUS" >&6;}
++cat >$CONFIG_STATUS <<_ACEOF
++#! $SHELL
++# Generated by $as_me.
++# Run this file to recreate the current configuration.
++# Compiler output produced by configure, useful for debugging
++# configure, is in config.log if it exists.
++
++debug=false
++ac_cs_recheck=false
++ac_cs_silent=false
++SHELL=\${CONFIG_SHELL-$SHELL}
++_ACEOF
++
++cat >>$CONFIG_STATUS <<\_ACEOF
++## --------------------- ##
++## M4sh Initialization.  ##
++## --------------------- ##
++
++# Be more Bourne compatible
++DUALCASE=1; export DUALCASE # for MKS sh
++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
++  emulate sh
++  NULLCMD=:
++  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
++  # is contrary to our usage.  Disable this feature.
++  alias -g '${1+"$@"}'='"$@"'
++  setopt NO_GLOB_SUBST
++else
++  case `(set -o) 2>/dev/null` in
++  *posix*) set -o posix ;;
++esac
++
++fi
++
++
++
++
++# PATH needs CR
++# Avoid depending upon Character Ranges.
++as_cr_letters='abcdefghijklmnopqrstuvwxyz'
++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
++as_cr_Letters=$as_cr_letters$as_cr_LETTERS
++as_cr_digits='0123456789'
++as_cr_alnum=$as_cr_Letters$as_cr_digits
++
++# The user is always right.
++if test "${PATH_SEPARATOR+set}" != set; then
++  echo "#! /bin/sh" >conf$$.sh
++  echo  "exit 0"   >>conf$$.sh
++  chmod +x conf$$.sh
++  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
++    PATH_SEPARATOR=';'
++  else
++    PATH_SEPARATOR=:
++  fi
++  rm -f conf$$.sh
++fi
++
++# Support unset when possible.
++if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
++  as_unset=unset
++else
++  as_unset=false
++fi
++
++
++# IFS
++# We need space, tab and new line, in precisely that order.  Quoting is
++# there to prevent editors from complaining about space-tab.
++# (If _AS_PATH_WALK were called with IFS unset, it would disable word
++# splitting by setting IFS to empty value.)
++as_nl='
++'
++IFS=" ""      $as_nl"
++
++# Find who we are.  Look in the path if we contain no directory separator.
++case $0 in
++  *[\\/]* ) as_myself=$0 ;;
++  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
++done
++IFS=$as_save_IFS
++
++     ;;
++esac
++# We did not find ourselves, most probably we were run as `sh COMMAND'
++# in which case we are not to be found in the path.
++if test "x$as_myself" = x; then
++  as_myself=$0
++fi
++if test ! -f "$as_myself"; then
++  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
++  { (exit 1); exit 1; }
++fi
++
++# Work around bugs in pre-3.0 UWIN ksh.
++for as_var in ENV MAIL MAILPATH
++do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
++done
++PS1='$ '
++PS2='> '
++PS4='+ '
++
++# NLS nuisances.
++for as_var in \
++  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
++  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
++  LC_TELEPHONE LC_TIME
++do
++  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
++    eval $as_var=C; export $as_var
++  else
++    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
++  fi
++done
++
++# Required to use basename.
++if expr a : '\(a\)' >/dev/null 2>&1 &&
++   test "X`expr 00001 : '.*\(...\)'`" = X001; then
++  as_expr=expr
++else
++  as_expr=false
++fi
++
++if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
++  as_basename=basename
++else
++  as_basename=false
++fi
++
++
++# Name of the executable.
++as_me=`$as_basename -- "$0" ||
++$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
++       X"$0" : 'X\(//\)$' \| \
++       X"$0" : 'X\(/\)' \| . 2>/dev/null ||
++echo X/"$0" |
++    sed '/^.*\/\([^/][^/]*\)\/*$/{
++          s//\1/
++          q
++        }
++        /^X\/\(\/\/\)$/{
++          s//\1/
++          q
++        }
++        /^X\/\(\/\).*/{
++          s//\1/
++          q
++        }
++        s/.*/./; q'`
++
++# CDPATH.
++$as_unset CDPATH
++
++
++
++  as_lineno_1=$LINENO
++  as_lineno_2=$LINENO
++  test "x$as_lineno_1" != "x$as_lineno_2" &&
++  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
++
++  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
++  # uniformly replaced by the line number.  The first 'sed' inserts a
++  # line-number line after each line using $LINENO; the second 'sed'
++  # does the real work.  The second script uses 'N' to pair each
++  # line-number line with the line containing $LINENO, and appends
++  # trailing '-' during substitution so that $LINENO is not a special
++  # case at line end.
++  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
++  # scripts with optimization help from Paolo Bonzini.  Blame Lee
++  # E. McMahon (1931-1989) for sed's syntax.  :-)
++  sed -n '
++    p
++    /[$]LINENO/=
++  ' <$as_myself |
++    sed '
++      s/[$]LINENO.*/&-/
++      t lineno
++      b
++      :lineno
++      N
++      :loop
++      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
++      t loop
++      s/-\n.*//
++    ' >$as_me.lineno &&
++  chmod +x "$as_me.lineno" ||
++    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
++   { (exit 1); exit 1; }; }
++
++  # Don't try to exec as it changes $[0], causing all sort of problems
++  # (the dirname of $[0] is not the place where we might find the
++  # original and so on.  Autoconf is especially sensitive to this).
++  . "./$as_me.lineno"
++  # Exit status is that of the last command.
++  exit
++}
++
++
++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
++  as_dirname=dirname
++else
++  as_dirname=false
++fi
++
++ECHO_C= ECHO_N= ECHO_T=
++case `echo -n x` in
++-n*)
++  case `echo 'x\c'` in
++  *c*) ECHO_T='       ';;     # ECHO_T is single tab character.
++  *)   ECHO_C='\c';;
++  esac;;
++*)
++  ECHO_N='-n';;
++esac
++
++if expr a : '\(a\)' >/dev/null 2>&1 &&
++   test "X`expr 00001 : '.*\(...\)'`" = X001; then
++  as_expr=expr
++else
++  as_expr=false
++fi
++
++rm -f conf$$ conf$$.exe conf$$.file
++if test -d conf$$.dir; then
++  rm -f conf$$.dir/conf$$.file
++else
++  rm -f conf$$.dir
++  mkdir conf$$.dir
++fi
++echo >conf$$.file
++if ln -s conf$$.file conf$$ 2>/dev/null; then
++  as_ln_s='ln -s'
++  # ... but there are two gotchas:
++  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
++  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
++  # In both cases, we have to default to `cp -p'.
++  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
++    as_ln_s='cp -p'
++elif ln conf$$.file conf$$ 2>/dev/null; then
++  as_ln_s=ln
++else
++  as_ln_s='cp -p'
++fi
++rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
++rmdir conf$$.dir 2>/dev/null
++
++if mkdir -p . 2>/dev/null; then
++  as_mkdir_p=:
++else
++  test -d ./-p && rmdir ./-p
++  as_mkdir_p=false
++fi
++
++if test -x / >/dev/null 2>&1; then
++  as_test_x='test -x'
++else
++  if ls -dL / >/dev/null 2>&1; then
++    as_ls_L_option=L
++  else
++    as_ls_L_option=
++  fi
++  as_test_x='
++    eval sh -c '\''
++      if test -d "$1"; then
++        test -d "$1/.";
++      else
++      case $1 in
++        -*)set "./$1";;
++      esac;
++      case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
++      ???[sx]*):;;*)false;;esac;fi
++    '\'' sh
++  '
++fi
++as_executable_p=$as_test_x
++
++# Sed expression to map a string onto a valid CPP name.
++as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
++
++# Sed expression to map a string onto a valid variable name.
++as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
++
++
++exec 6>&1
++
++# Save the log message, to keep $[0] and so on meaningful, and to
++# report actual input values of CONFIG_FILES etc. instead of their
++# values after options handling.
++ac_log="
++This file was extended by click $as_me 1.6.0, which was
++generated by GNU Autoconf 2.61.  Invocation command line was
++
++  CONFIG_FILES    = $CONFIG_FILES
++  CONFIG_HEADERS  = $CONFIG_HEADERS
++  CONFIG_LINKS    = $CONFIG_LINKS
++  CONFIG_COMMANDS = $CONFIG_COMMANDS
++  $ $0 $@
++
++on `(hostname || uname -n) 2>/dev/null | sed 1q`
++"
++
++_ACEOF
++
++cat >>$CONFIG_STATUS <<_ACEOF
++# Files that config.status was made for.
++config_files="$ac_config_files"
++config_headers="$ac_config_headers"
++config_commands="$ac_config_commands"
++
++_ACEOF
++
++cat >>$CONFIG_STATUS <<\_ACEOF
++ac_cs_usage="\
++\`$as_me' instantiates files from templates according to the
++current configuration.
++
++Usage: $0 [OPTIONS] [FILE]...
++
++  -h, --help       print this help, then exit
++  -V, --version    print version number and configuration settings, then exit
++  -q, --quiet      do not print progress messages
++  -d, --debug      don't remove temporary files
++      --recheck    update $as_me by reconfiguring in the same conditions
++  --file=FILE[:TEMPLATE]
++                 instantiate the configuration file FILE
++  --header=FILE[:TEMPLATE]
++                 instantiate the configuration header FILE
++
++Configuration files:
++$config_files
++
++Configuration headers:
++$config_headers
++
++Configuration commands:
++$config_commands
++
++Report bugs to <bug-autoconf@gnu.org>."
++
++_ACEOF
++cat >>$CONFIG_STATUS <<_ACEOF
++ac_cs_version="\\
++click config.status 1.6.0
++configured by $0, generated by GNU Autoconf 2.61,
++  with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
++
++Copyright (C) 2006 Free Software Foundation, Inc.
++This config.status script is free software; the Free Software Foundation
++gives unlimited permission to copy, distribute and modify it."
++
++ac_pwd='$ac_pwd'
++srcdir='$srcdir'
++INSTALL='$INSTALL'
++_ACEOF
++
++cat >>$CONFIG_STATUS <<\_ACEOF
++# If no file are specified by the user, then we need to provide default
++# value.  By we need to know if files were specified by the user.
++ac_need_defaults=:
++while test $# != 0
++do
++  case $1 in
++  --*=*)
++    ac_option=`expr "X$1" : 'X\([^=]*\)='`
++    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
++    ac_shift=:
++    ;;
++  *)
++    ac_option=$1
++    ac_optarg=$2
++    ac_shift=shift
++    ;;
++  esac
++
++  case $ac_option in
++  # Handling of the options.
++  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
++    ac_cs_recheck=: ;;
++  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
++    echo "$ac_cs_version"; exit ;;
++  --debug | --debu | --deb | --de | --d | -d )
++    debug=: ;;
++  --file | --fil | --fi | --f )
++    $ac_shift
++    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
++    ac_need_defaults=false;;
++  --header | --heade | --head | --hea )
++    $ac_shift
++    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
++    ac_need_defaults=false;;
++  --he | --h)
++    # Conflict between --help and --header
++    { echo "$as_me: error: ambiguous option: $1
++Try \`$0 --help' for more information." >&2
++   { (exit 1); exit 1; }; };;
++  --help | --hel | -h )
++    echo "$ac_cs_usage"; exit ;;
++  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
++  | -silent | --silent | --silen | --sile | --sil | --si | --s)
++    ac_cs_silent=: ;;
++
++  # This is an error.
++  -*) { echo "$as_me: error: unrecognized option: $1
++Try \`$0 --help' for more information." >&2
++   { (exit 1); exit 1; }; } ;;
++
++  *) ac_config_targets="$ac_config_targets $1"
++     ac_need_defaults=false ;;
++
++  esac
++  shift
++done
++
++ac_configure_extra_args=
++
++if $ac_cs_silent; then
++  exec 6>/dev/null
++  ac_configure_extra_args="$ac_configure_extra_args --silent"
++fi
++
++_ACEOF
++cat >>$CONFIG_STATUS <<_ACEOF
++if \$ac_cs_recheck; then
++  echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
++  CONFIG_SHELL=$SHELL
++  export CONFIG_SHELL
++  exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
++fi
++
++_ACEOF
++cat >>$CONFIG_STATUS <<\_ACEOF
++exec 5>>config.log
++{
++  echo
++  sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX
++@%:@@%:@ Running $as_me. @%:@@%:@
++_ASBOX
++  echo "$ac_log"
++} >&5
++
++_ACEOF
++cat >>$CONFIG_STATUS <<_ACEOF
++#
++# INIT-COMMANDS
++#
++
++
++_ACEOF
++
++cat >>$CONFIG_STATUS <<\_ACEOF
++
++# Handling of arguments.
++for ac_config_target in $ac_config_targets
++do
++  case $ac_config_target in
++    "include/click/config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/click/config.h:config.h.in" ;;
++    "include/click/pathvars.h") CONFIG_HEADERS="$CONFIG_HEADERS include/click/pathvars.h:pathvars.h.in" ;;
++    "include/click/config-bsdmodule.h") CONFIG_HEADERS="$CONFIG_HEADERS include/click/config-bsdmodule.h:config-bsdmodule.h.in" ;;
++    "include/click/config-linuxmodule.h") CONFIG_HEADERS="$CONFIG_HEADERS include/click/config-linuxmodule.h:config-linuxmodule.h.in" ;;
++    "include/click/config-ns.h") CONFIG_HEADERS="$CONFIG_HEADERS include/click/config-ns.h:config-ns.h.in" ;;
++    "include/click/config-userlevel.h") CONFIG_HEADERS="$CONFIG_HEADERS include/click/config-userlevel.h:config-userlevel.h.in" ;;
++    "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
++    "$config_files") CONFIG_FILES="$CONFIG_FILES $config_files" ;;
++
++  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
++echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
++   { (exit 1); exit 1; }; };;
++  esac
++done
++
++
++# If the user did not use the arguments to specify the items to instantiate,
++# then the envvar interface is used.  Set only those that are not.
++# We use the long form for the default assignment because of an extremely
++# bizarre bug on SunOS 4.1.3.
++if $ac_need_defaults; then
++  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
++  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
++  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
++fi
++
++# Have a temporary directory for convenience.  Make it in the build tree
++# simply because there is no reason against having it here, and in addition,
++# creating and moving files from /tmp can sometimes cause problems.
++# Hook for its removal unless debugging.
++# Note that there is a small window in which the directory will not be cleaned:
++# after its creation but before its name has been assigned to `$tmp'.
++$debug ||
++{
++  tmp=
++  trap 'exit_status=$?
++  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
++' 0
++  trap '{ (exit 1); exit 1; }' 1 2 13 15
++}
++# Create a (secure) tmp directory for tmp files.
++
++{
++  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
++  test -n "$tmp" && test -d "$tmp"
++}  ||
++{
++  tmp=./conf$$-$RANDOM
++  (umask 077 && mkdir "$tmp")
++} ||
++{
++   echo "$me: cannot create a temporary directory in ." >&2
++   { (exit 1); exit 1; }
++}
++
++#
++# Set up the sed scripts for CONFIG_FILES section.
++#
++
++# No need to generate the scripts if there are no CONFIG_FILES.
++# This happens for instance when ./config.status config.h
++if test -n "$CONFIG_FILES"; then
++
++_ACEOF
++
++
++
++ac_delim='%!_!# '
++for ac_last_try in false false false false false :; do
++  cat >conf$$subs.sed <<_ACEOF
++SHELL!$SHELL$ac_delim
++PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
++PACKAGE_NAME!$PACKAGE_NAME$ac_delim
++PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
++PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
++PACKAGE_STRING!$PACKAGE_STRING$ac_delim
++PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
++exec_prefix!$exec_prefix$ac_delim
++prefix!$prefix$ac_delim
++program_transform_name!$program_transform_name$ac_delim
++bindir!$bindir$ac_delim
++sbindir!$sbindir$ac_delim
++libexecdir!$libexecdir$ac_delim
++datarootdir!$datarootdir$ac_delim
++datadir!$datadir$ac_delim
++sysconfdir!$sysconfdir$ac_delim
++sharedstatedir!$sharedstatedir$ac_delim
++localstatedir!$localstatedir$ac_delim
++includedir!$includedir$ac_delim
++oldincludedir!$oldincludedir$ac_delim
++docdir!$docdir$ac_delim
++infodir!$infodir$ac_delim
++htmldir!$htmldir$ac_delim
++dvidir!$dvidir$ac_delim
++pdfdir!$pdfdir$ac_delim
++psdir!$psdir$ac_delim
++libdir!$libdir$ac_delim
++localedir!$localedir$ac_delim
++mandir!$mandir$ac_delim
++DEFS!$DEFS$ac_delim
++ECHO_C!$ECHO_C$ac_delim
++ECHO_N!$ECHO_N$ac_delim
++ECHO_T!$ECHO_T$ac_delim
++LIBS!$LIBS$ac_delim
++build_alias!$build_alias$ac_delim
++host_alias!$host_alias$ac_delim
++target_alias!$target_alias$ac_delim
++ac_configure_args!$ac_configure_args$ac_delim
++CLICK_VERSION!$CLICK_VERSION$ac_delim
++conf_auxdir!$conf_auxdir$ac_delim
++build!$build$ac_delim
++build_cpu!$build_cpu$ac_delim
++build_vendor!$build_vendor$ac_delim
++build_os!$build_os$ac_delim
++host!$host$ac_delim
++host_cpu!$host_cpu$ac_delim
++host_vendor!$host_vendor$ac_delim
++host_os!$host_os$ac_delim
++target!$target$ac_delim
++target_cpu!$target_cpu$ac_delim
++target_vendor!$target_vendor$ac_delim
++target_os!$target_os$ac_delim
++CC!$CC$ac_delim
++CXX!$CXX$ac_delim
++CFLAGS!$CFLAGS$ac_delim
++LDFLAGS!$LDFLAGS$ac_delim
++CPPFLAGS!$CPPFLAGS$ac_delim
++ac_ct_CC!$ac_ct_CC$ac_delim
++EXEEXT!$EXEEXT$ac_delim
++OBJEXT!$OBJEXT$ac_delim
++DEPCFLAGS!$DEPCFLAGS$ac_delim
++CFLAGS_NDEBUG!$CFLAGS_NDEBUG$ac_delim
++CPP!$CPP$ac_delim
++CXXFLAGS!$CXXFLAGS$ac_delim
++ac_ct_CXX!$ac_ct_CXX$ac_delim
++CXXFLAGS_NDEBUG!$CXXFLAGS_NDEBUG$ac_delim
++CXXCPP!$CXXCPP$ac_delim
++KERNEL_CC!$KERNEL_CC$ac_delim
++KERNEL_CXX!$KERNEL_CXX$ac_delim
++AR!$AR$ac_delim
++LD!$LD$ac_delim
++RANLIB!$RANLIB$ac_delim
++STRIP!$STRIP$ac_delim
++AR_CREATEFLAGS!$AR_CREATEFLAGS$ac_delim
++linuxdir!$linuxdir$ac_delim
++element_groups!$element_groups$ac_delim
++freebsd_srcdir!$freebsd_srcdir$ac_delim
++freebsd_includedir!$freebsd_includedir$ac_delim
++LIB@&t@OBJS!$LIB@&t@OBJS$ac_delim
++GREP!$GREP$ac_delim
++EGREP!$EGREP$ac_delim
++BUILD_CC!$BUILD_CC$ac_delim
++BUILD_CXX!$BUILD_CXX$ac_delim
++BUILD_AR!$BUILD_AR$ac_delim
++BUILD_RANLIB!$BUILD_RANLIB$ac_delim
++HOST_TOOLS!$HOST_TOOLS$ac_delim
++DL_LIBS!$DL_LIBS$ac_delim
++LDMODULEFLAGS!$LDMODULEFLAGS$ac_delim
++BUILD_DL_LIBS!$BUILD_DL_LIBS$ac_delim
++SOCKET_LIBS!$SOCKET_LIBS$ac_delim
++EXTRA_DRIVER_OBJS!$EXTRA_DRIVER_OBJS$ac_delim
++EXTRA_TOOL_OBJS!$EXTRA_TOOL_OBJS$ac_delim
++LINUXMODULE_2_6!$LINUXMODULE_2_6$ac_delim
++POSSIBLE_DRIVERS!$POSSIBLE_DRIVERS$ac_delim
++DRIVERS!$DRIVERS$ac_delim
++HAVE_USERLEVEL_DRIVER!$HAVE_USERLEVEL_DRIVER$ac_delim
++HAVE_LINUXMODULE_DRIVER!$HAVE_LINUXMODULE_DRIVER$ac_delim
++_ACEOF
++
++  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
++    break
++  elif $ac_last_try; then
++    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
++echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
++   { (exit 1); exit 1; }; }
++  else
++    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
++  fi
++done
++
++ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
++if test -n "$ac_eof"; then
++  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
++  ac_eof=`expr $ac_eof + 1`
++fi
++
++cat >>$CONFIG_STATUS <<_ACEOF
++cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
++/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
++_ACEOF
++sed '
++s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
++s/^/s,@/; s/!/@,|#_!!_#|/
++:n
++t n
++s/'"$ac_delim"'$/,g/; t
++s/$/\\/; p
++N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
++' >>$CONFIG_STATUS <conf$$subs.sed
++rm -f conf$$subs.sed
++cat >>$CONFIG_STATUS <<_ACEOF
++CEOF$ac_eof
++_ACEOF
++
++
++ac_delim='%!_!# '
++for ac_last_try in false false false false false :; do
++  cat >conf$$subs.sed <<_ACEOF
++HAVE_BSDMODULE_DRIVER!$HAVE_BSDMODULE_DRIVER$ac_delim
++OTHER_TARGETS!$OTHER_TARGETS$ac_delim
++TOOLDIRS!$TOOLDIRS$ac_delim
++TOOL_TARGETS!$TOOL_TARGETS$ac_delim
++PCAP_INCLUDES!$PCAP_INCLUDES$ac_delim
++PCAP_LIBS!$PCAP_LIBS$ac_delim
++PROPER_INCLUDES!$PROPER_INCLUDES$ac_delim
++PROPER_LIBS!$PROPER_LIBS$ac_delim
++XML2CLICK!$XML2CLICK$ac_delim
++EXPAT_INCLUDES!$EXPAT_INCLUDES$ac_delim
++EXPAT_LIBS!$EXPAT_LIBS$ac_delim
++LINUX_CFLAGS!$LINUX_CFLAGS$ac_delim
++INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
++INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
++INSTALL_DATA!$INSTALL_DATA$ac_delim
++INSTALL_IF_CHANGED!$INSTALL_IF_CHANGED$ac_delim
++CLICKINSTALL!$CLICKINSTALL$ac_delim
++SUBMAKE!$SUBMAKE$ac_delim
++GMAKE!$GMAKE$ac_delim
++AUTOCONF!$AUTOCONF$ac_delim
++perl5!$perl5$ac_delim
++localperl5!$localperl5$ac_delim
++PERL!$PERL$ac_delim
++INSTALL_INFO!$INSTALL_INFO$ac_delim
++MAKEINFO!$MAKEINFO$ac_delim
++TEXI2DVI!$TEXI2DVI$ac_delim
++POD2MAN!$POD2MAN$ac_delim
++clickdatadir!$clickdatadir$ac_delim
++provisions!$provisions$ac_delim
++LTLIBOBJS!$LTLIBOBJS$ac_delim
++_ACEOF
++
++  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 30; then
++    break
++  elif $ac_last_try; then
++    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
++echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
++   { (exit 1); exit 1; }; }
++  else
++    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
++  fi
++done
++
++ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
++if test -n "$ac_eof"; then
++  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
++  ac_eof=`expr $ac_eof + 1`
++fi
++
++cat >>$CONFIG_STATUS <<_ACEOF
++cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof
++/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
++_ACEOF
++sed '
++s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
++s/^/s,@/; s/!/@,|#_!!_#|/
++:n
++t n
++s/'"$ac_delim"'$/,g/; t
++s/$/\\/; p
++N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
++' >>$CONFIG_STATUS <conf$$subs.sed
++rm -f conf$$subs.sed
++cat >>$CONFIG_STATUS <<_ACEOF
++:end
++s/|#_!!_#|//g
++CEOF$ac_eof
++_ACEOF
++
++
++# VPATH may cause trouble with some makes, so we remove $(srcdir),
++# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
++# trailing colons and then remove the whole line if VPATH becomes empty
++# (actually we leave an empty line to preserve line numbers).
++if test "x$srcdir" = x.; then
++  ac_vpsub='/^[        ]*VPATH[        ]*=/{
++s/:*\$(srcdir):*/:/
++s/:*\${srcdir}:*/:/
++s/:*@srcdir@:*/:/
++s/^\([^=]*=[   ]*\):*/\1/
++s/:*$//
++s/^[^=]*=[     ]*$//
++}'
++fi
++
++cat >>$CONFIG_STATUS <<\_ACEOF
++fi # test -n "$CONFIG_FILES"
++
++
++for ac_tag in  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS
++do
++  case $ac_tag in
++  :[FHLC]) ac_mode=$ac_tag; continue;;
++  esac
++  case $ac_mode$ac_tag in
++  :[FHL]*:*);;
++  :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
++echo "$as_me: error: Invalid tag $ac_tag." >&2;}
++   { (exit 1); exit 1; }; };;
++  :[FH]-) ac_tag=-:-;;
++  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
++  esac
++  ac_save_IFS=$IFS
++  IFS=:
++  set x $ac_tag
++  IFS=$ac_save_IFS
++  shift
++  ac_file=$1
++  shift
++
++  case $ac_mode in
++  :L) ac_source=$1;;
++  :[FH])
++    ac_file_inputs=
++    for ac_f
++    do
++      case $ac_f in
++      -) ac_f="$tmp/stdin";;
++      *) # Look for the file first in the build tree, then in the source tree
++       # (if the path is not absolute).  The absolute path cannot be DOS-style,
++       # because $ac_f cannot contain `:'.
++       test -f "$ac_f" ||
++         case $ac_f in
++         [\\/$]*) false;;
++         *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
++         esac ||
++         { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
++echo "$as_me: error: cannot find input file: $ac_f" >&2;}
++   { (exit 1); exit 1; }; };;
++      esac
++      ac_file_inputs="$ac_file_inputs $ac_f"
++    done
++
++    # Let's still pretend it is `configure' which instantiates (i.e., don't
++    # use $as_me), people would be surprised to read:
++    #    /* config.h.  Generated by config.status.  */
++    configure_input="Generated from "`IFS=:
++        echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
++    if test x"$ac_file" != x-; then
++      configure_input="$ac_file.  $configure_input"
++      { echo "$as_me:$LINENO: creating $ac_file" >&5
++echo "$as_me: creating $ac_file" >&6;}
++    fi
++
++    case $ac_tag in
++    *:-:* | *:-) cat >"$tmp/stdin";;
++    esac
++    ;;
++  esac
++
++  ac_dir=`$as_dirname -- "$ac_file" ||
++$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++       X"$ac_file" : 'X\(//\)[^/]' \| \
++       X"$ac_file" : 'X\(//\)$' \| \
++       X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
++echo X"$ac_file" |
++    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++          s//\1/
++          q
++        }
++        /^X\(\/\/\)[^/].*/{
++          s//\1/
++          q
++        }
++        /^X\(\/\/\)$/{
++          s//\1/
++          q
++        }
++        /^X\(\/\).*/{
++          s//\1/
++          q
++        }
++        s/.*/./; q'`
++  { as_dir="$ac_dir"
++  case $as_dir in #(
++  -*) as_dir=./$as_dir;;
++  esac
++  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
++    as_dirs=
++    while :; do
++      case $as_dir in #(
++      *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
++      *) as_qdir=$as_dir;;
++      esac
++      as_dirs="'$as_qdir' $as_dirs"
++      as_dir=`$as_dirname -- "$as_dir" ||
++$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++       X"$as_dir" : 'X\(//\)[^/]' \| \
++       X"$as_dir" : 'X\(//\)$' \| \
++       X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
++echo X"$as_dir" |
++    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++          s//\1/
++          q
++        }
++        /^X\(\/\/\)[^/].*/{
++          s//\1/
++          q
++        }
++        /^X\(\/\/\)$/{
++          s//\1/
++          q
++        }
++        /^X\(\/\).*/{
++          s//\1/
++          q
++        }
++        s/.*/./; q'`
++      test -d "$as_dir" && break
++    done
++    test -z "$as_dirs" || eval "mkdir $as_dirs"
++  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
++echo "$as_me: error: cannot create directory $as_dir" >&2;}
++   { (exit 1); exit 1; }; }; }
++  ac_builddir=.
++
++case "$ac_dir" in
++.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
++*)
++  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
++  # A ".." for each directory in $ac_dir_suffix.
++  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
++  case $ac_top_builddir_sub in
++  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
++  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
++  esac ;;
++esac
++ac_abs_top_builddir=$ac_pwd
++ac_abs_builddir=$ac_pwd$ac_dir_suffix
++# for backward compatibility:
++ac_top_builddir=$ac_top_build_prefix
++
++case $srcdir in
++  .)  # We are building in place.
++    ac_srcdir=.
++    ac_top_srcdir=$ac_top_builddir_sub
++    ac_abs_top_srcdir=$ac_pwd ;;
++  [\\/]* | ?:[\\/]* )  # Absolute name.
++    ac_srcdir=$srcdir$ac_dir_suffix;
++    ac_top_srcdir=$srcdir
++    ac_abs_top_srcdir=$srcdir ;;
++  *) # Relative name.
++    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
++    ac_top_srcdir=$ac_top_build_prefix$srcdir
++    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
++esac
++ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
++
++
++  case $ac_mode in
++  :F)
++  #
++  # CONFIG_FILE
++  #
++
++  case $INSTALL in
++  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
++  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
++  esac
++_ACEOF
++
++cat >>$CONFIG_STATUS <<\_ACEOF
++# If the template does not know about datarootdir, expand it.
++# FIXME: This hack should be removed a few years after 2.60.
++ac_datarootdir_hack=; ac_datarootdir_seen=
++
++case `sed -n '/datarootdir/ {
++  p
++  q
++}
++/@datadir@/p
++/@docdir@/p
++/@infodir@/p
++/@localedir@/p
++/@mandir@/p
++' $ac_file_inputs` in
++*datarootdir*) ac_datarootdir_seen=yes;;
++*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
++  { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
++echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
++_ACEOF
++cat >>$CONFIG_STATUS <<_ACEOF
++  ac_datarootdir_hack='
++  s&@datadir@&$datadir&g
++  s&@docdir@&$docdir&g
++  s&@infodir@&$infodir&g
++  s&@localedir@&$localedir&g
++  s&@mandir@&$mandir&g
++    s&\\\${datarootdir}&$datarootdir&g' ;;
++esac
++_ACEOF
++
++# Neutralize VPATH when `$srcdir' = `.'.
++# Shell code in configure.ac might set extrasub.
++# FIXME: do we really want to maintain this feature?
++cat >>$CONFIG_STATUS <<_ACEOF
++  sed "$ac_vpsub
++$extrasub
++_ACEOF
++cat >>$CONFIG_STATUS <<\_ACEOF
++:t
++/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
++s&@configure_input@&$configure_input&;t t
++s&@top_builddir@&$ac_top_builddir_sub&;t t
++s&@srcdir@&$ac_srcdir&;t t
++s&@abs_srcdir@&$ac_abs_srcdir&;t t
++s&@top_srcdir@&$ac_top_srcdir&;t t
++s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
++s&@builddir@&$ac_builddir&;t t
++s&@abs_builddir@&$ac_abs_builddir&;t t
++s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
++s&@INSTALL@&$ac_INSTALL&;t t
++$ac_datarootdir_hack
++" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out
++
++test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
++  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
++  { ac_out=`sed -n '/^[        ]*datarootdir[  ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
++  { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
++which seems to be undefined.  Please make sure it is defined." >&5
++echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
++which seems to be undefined.  Please make sure it is defined." >&2;}
++
++  rm -f "$tmp/stdin"
++  case $ac_file in
++  -) cat "$tmp/out"; rm -f "$tmp/out";;
++  *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
++  esac
++ ;;
++  :H)
++  #
++  # CONFIG_HEADER
++  #
++_ACEOF
++
++# Transform confdefs.h into a sed script `conftest.defines', that
++# substitutes the proper values into config.h.in to produce config.h.
++rm -f conftest.defines conftest.tail
++# First, append a space to every undef/define line, to ease matching.
++echo 's/$/ /' >conftest.defines
++# Then, protect against being on the right side of a sed subst, or in
++# an unquoted here document, in config.status.  If some macros were
++# called several times there might be several #defines for the same
++# symbol, which is useless.  But do not sort them, since the last
++# AC_DEFINE must be honored.
++ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
++# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where
++# NAME is the cpp macro being defined, VALUE is the value it is being given.
++# PARAMS is the parameter list in the macro definition--in most cases, it's
++# just an empty string.
++ac_dA='s,^\\([         #]*\\)[^        ]*\\([  ]*'
++ac_dB='\\)[    (].*,\\1define\\2'
++ac_dC=' '
++ac_dD=' ,'
++
++uniq confdefs.h |
++  sed -n '
++      t rset
++      :rset
++      s/^[     ]*#[    ]*define[       ][      ]*//
++      t ok
++      d
++      :ok
++      s/[\\&,]/\\&/g
++      s/^\('"$ac_word_re"'\)\(([^()]*)\)[      ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p
++      s/^\('"$ac_word_re"'\)[  ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p
++  ' >>conftest.defines
++
++# Remove the space that was appended to ease matching.
++# Then replace #undef with comments.  This is necessary, for
++# example, in the case of _POSIX_SOURCE, which is predefined and required
++# on some systems where configure will not decide to define it.
++# (The regexp can be short, since the line contains either #define or #undef.)
++echo 's/ $//
++s,^[   #]*u.*,/* & */,' >>conftest.defines
++
++# Break up conftest.defines:
++ac_max_sed_lines=50
++
++# First sed command is:        sed -f defines.sed $ac_file_inputs >"$tmp/out1"
++# Second one is:       sed -f defines.sed "$tmp/out1" >"$tmp/out2"
++# Third one will be:   sed -f defines.sed "$tmp/out2" >"$tmp/out1"
++# et cetera.
++ac_in='$ac_file_inputs'
++ac_out='"$tmp/out1"'
++ac_nxt='"$tmp/out2"'
++
++while :
++do
++  # Write a here document:
++    cat >>$CONFIG_STATUS <<_ACEOF
++    # First, check the format of the line:
++    cat >"\$tmp/defines.sed" <<\\CEOF
++/^[    ]*#[    ]*undef[        ][      ]*$ac_word_re[  ]*\$/b def
++/^[    ]*#[    ]*define[       ][      ]*$ac_word_re[(         ]/b def
++b
++:def
++_ACEOF
++  sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS
++  echo 'CEOF
++    sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS
++  ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in
++  sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail
++  grep . conftest.tail >/dev/null || break
++  rm -f conftest.defines
++  mv conftest.tail conftest.defines
++done
++rm -f conftest.defines conftest.tail
++
++echo "ac_result=$ac_in" >>$CONFIG_STATUS
++cat >>$CONFIG_STATUS <<\_ACEOF
++  if test x"$ac_file" != x-; then
++    echo "/* $configure_input  */" >"$tmp/config.h"
++    cat "$ac_result" >>"$tmp/config.h"
++    if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then
++      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
++echo "$as_me: $ac_file is unchanged" >&6;}
++    else
++      rm -f $ac_file
++      mv "$tmp/config.h" $ac_file
++    fi
++  else
++    echo "/* $configure_input  */"
++    cat "$ac_result"
++  fi
++  rm -f "$tmp/out12"
++ ;;
++  
++  :C)  { echo "$as_me:$LINENO: executing $ac_file commands" >&5
++echo "$as_me: executing $ac_file commands" >&6;}
++ ;;
++  esac
++
++
++  case $ac_file$ac_mode in
++    "default-1":C) for ac_file in $CONFIG_HEADERS; do
++    test $ac_file = include/click/config.h:config.h.in && echo > stamp-h
++done
++for ac_file in $CONFIG_FILES; do
++    test $ac_file = click-buildtool && chmod +x click-buildtool
++    test $ac_file = click-compile && chmod +x click-compile
++    test $ac_file = installch && chmod +x installch
++done ;;
++
++  esac
++done # for ac_tag
++
++
++{ (exit 0); exit 0; }
++_ACEOF
++chmod +x $CONFIG_STATUS
++ac_clean_files=$ac_clean_files_save
++
++
++# configure is writing to config.log, and then calls config.status.
++# config.status does its own redirection, appending to config.log.
++# Unfortunately, on DOS this fails, as config.log is still kept open
++# by configure, so config.status won't be able to write to it; its
++# output is simply discarded.  So we exec the FD to /dev/null,
++# effectively closing config.log, so it can be properly (re)opened and
++# appended to by config.status.  When coming back to configure, we
++# need to make the FD available again.
++if test "$no_create" != yes; then
++  ac_cs_success=:
++  ac_config_status_args=
++  test "$silent" = yes &&
++    ac_config_status_args="$ac_config_status_args --quiet"
++  exec 5>/dev/null
++  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
++  exec 5>>config.log
++  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
++  # would make configure fail if this is the last instruction.
++  $ac_cs_success || { (exit 1); exit 1; }
++fi
++
+diff -Nurb click-1.6.0/autom4te.cache/requests click-1.6.0-27/autom4te.cache/requests
+--- click-1.6.0/autom4te.cache/requests        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/autom4te.cache/requests     2009-01-28 16:06:37.000000000 -0500
+@@ -0,0 +1,64 @@
++# This file was generated.
++# It contains the lists of macros which have been traced.
++# It can be safely removed.
++
++@request = (
++             bless( [
++                      '0',
++                      1,
++                      [
++                        '/usr/share/autoconf'
++                      ],
++                      [
++                        '/usr/share/autoconf/autoconf/autoconf.m4f',
++                        'aclocal.m4',
++                        'configure.in'
++                      ],
++                      {
++                        '_LT_AC_TAGCONFIG' => 1,
++                        'AM_PROG_F77_C_O' => 1,
++                        'AC_INIT' => 1,
++                        'm4_pattern_forbid' => 1,
++                        'AC_CANONICAL_TARGET' => 1,
++                        'AC_SUBST' => 1,
++                        'AC_CONFIG_LIBOBJ_DIR' => 1,
++                        'AC_FC_SRCEXT' => 1,
++                        'AC_CANONICAL_HOST' => 1,
++                        'AC_PROG_LIBTOOL' => 1,
++                        'AM_INIT_AUTOMAKE' => 1,
++                        'AC_CONFIG_SUBDIRS' => 1,
++                        'AM_AUTOMAKE_VERSION' => 1,
++                        'LT_CONFIG_LTDL_DIR' => 1,
++                        'AC_REQUIRE_AUX_FILE' => 1,
++                        'AC_CONFIG_LINKS' => 1,
++                        'm4_sinclude' => 1,
++                        'LT_SUPPORTED_TAG' => 1,
++                        'AM_MAINTAINER_MODE' => 1,
++                        'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
++                        '_m4_warn' => 1,
++                        'AM_PROG_CXX_C_O' => 1,
++                        'AM_ENABLE_MULTILIB' => 1,
++                        'AC_CONFIG_FILES' => 1,
++                        'include' => 1,
++                        'LT_INIT' => 1,
++                        'AM_GNU_GETTEXT' => 1,
++                        'AC_LIBSOURCE' => 1,
++                        'AM_PROG_FC_C_O' => 1,
++                        'AC_CANONICAL_BUILD' => 1,
++                        'AC_FC_FREEFORM' => 1,
++                        'AH_OUTPUT' => 1,
++                        '_AM_SUBST_NOTMAKE' => 1,
++                        'AC_CONFIG_AUX_DIR' => 1,
++                        'sinclude' => 1,
++                        'm4_pattern_allow' => 1,
++                        'AM_PROG_CC_C_O' => 1,
++                        'AC_CANONICAL_SYSTEM' => 1,
++                        'AM_CONDITIONAL' => 1,
++                        'AC_CONFIG_HEADERS' => 1,
++                        'AC_DEFINE_TRACE_LITERAL' => 1,
++                        'm4_include' => 1,
++                        'AC_SUBST_TRACE' => 1
++                      }
++                    ], 'Autom4te::Request' )
++           );
++
+diff -Nurb click-1.6.0/autom4te.cache/traces.0 click-1.6.0-27/autom4te.cache/traces.0
+--- click-1.6.0/autom4te.cache/traces.0        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/autom4te.cache/traces.0     2009-01-27 12:14:43.000000000 -0500
+@@ -0,0 +1,984 @@
++m4trace:aclocal.m4:14: -1- m4_include([m4/click.m4])
++m4trace:configure.in:14: -1- AC_INIT([click], [1.6.0])
++m4trace:configure.in:14: -1- m4_pattern_forbid([^_?A[CHUM]_])
++m4trace:configure.in:14: -1- m4_pattern_forbid([_AC_])
++m4trace:configure.in:14: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
++m4trace:configure.in:14: -1- m4_pattern_allow([^AS_FLAGS$])
++m4trace:configure.in:14: -1- m4_pattern_forbid([^_?m4_])
++m4trace:configure.in:14: -1- m4_pattern_forbid([^dnl$])
++m4trace:configure.in:14: -1- m4_pattern_forbid([^_?AS_])
++m4trace:configure.in:14: -1- AC_SUBST([SHELL], [${CONFIG_SHELL-/bin/sh}])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([SHELL])
++m4trace:configure.in:14: -1- m4_pattern_allow([^SHELL$])
++m4trace:configure.in:14: -1- AC_SUBST([PATH_SEPARATOR])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([PATH_SEPARATOR])
++m4trace:configure.in:14: -1- m4_pattern_allow([^PATH_SEPARATOR$])
++m4trace:configure.in:14: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME],      ['AC_PACKAGE_NAME'])])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([PACKAGE_NAME])
++m4trace:configure.in:14: -1- m4_pattern_allow([^PACKAGE_NAME$])
++m4trace:configure.in:14: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME],   ['AC_PACKAGE_TARNAME'])])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([PACKAGE_TARNAME])
++m4trace:configure.in:14: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
++m4trace:configure.in:14: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION],   ['AC_PACKAGE_VERSION'])])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([PACKAGE_VERSION])
++m4trace:configure.in:14: -1- m4_pattern_allow([^PACKAGE_VERSION$])
++m4trace:configure.in:14: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING],    ['AC_PACKAGE_STRING'])])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([PACKAGE_STRING])
++m4trace:configure.in:14: -1- m4_pattern_allow([^PACKAGE_STRING$])
++m4trace:configure.in:14: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT])
++m4trace:configure.in:14: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
++m4trace:configure.in:14: -1- AC_SUBST([exec_prefix], [NONE])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([exec_prefix])
++m4trace:configure.in:14: -1- m4_pattern_allow([^exec_prefix$])
++m4trace:configure.in:14: -1- AC_SUBST([prefix], [NONE])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([prefix])
++m4trace:configure.in:14: -1- m4_pattern_allow([^prefix$])
++m4trace:configure.in:14: -1- AC_SUBST([program_transform_name], [s,x,x,])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([program_transform_name])
++m4trace:configure.in:14: -1- m4_pattern_allow([^program_transform_name$])
++m4trace:configure.in:14: -1- AC_SUBST([bindir], ['${exec_prefix}/bin'])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([bindir])
++m4trace:configure.in:14: -1- m4_pattern_allow([^bindir$])
++m4trace:configure.in:14: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin'])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([sbindir])
++m4trace:configure.in:14: -1- m4_pattern_allow([^sbindir$])
++m4trace:configure.in:14: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec'])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([libexecdir])
++m4trace:configure.in:14: -1- m4_pattern_allow([^libexecdir$])
++m4trace:configure.in:14: -1- AC_SUBST([datarootdir], ['${prefix}/share'])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([datarootdir])
++m4trace:configure.in:14: -1- m4_pattern_allow([^datarootdir$])
++m4trace:configure.in:14: -1- AC_SUBST([datadir], ['${datarootdir}'])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([datadir])
++m4trace:configure.in:14: -1- m4_pattern_allow([^datadir$])
++m4trace:configure.in:14: -1- AC_SUBST([sysconfdir], ['${prefix}/etc'])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([sysconfdir])
++m4trace:configure.in:14: -1- m4_pattern_allow([^sysconfdir$])
++m4trace:configure.in:14: -1- AC_SUBST([sharedstatedir], ['${prefix}/com'])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([sharedstatedir])
++m4trace:configure.in:14: -1- m4_pattern_allow([^sharedstatedir$])
++m4trace:configure.in:14: -1- AC_SUBST([localstatedir], ['${prefix}/var'])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([localstatedir])
++m4trace:configure.in:14: -1- m4_pattern_allow([^localstatedir$])
++m4trace:configure.in:14: -1- AC_SUBST([includedir], ['${prefix}/include'])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([includedir])
++m4trace:configure.in:14: -1- m4_pattern_allow([^includedir$])
++m4trace:configure.in:14: -1- AC_SUBST([oldincludedir], ['/usr/include'])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([oldincludedir])
++m4trace:configure.in:14: -1- m4_pattern_allow([^oldincludedir$])
++m4trace:configure.in:14: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME],
++                                   ['${datarootdir}/doc/${PACKAGE_TARNAME}'],
++                                   ['${datarootdir}/doc/${PACKAGE}'])])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([docdir])
++m4trace:configure.in:14: -1- m4_pattern_allow([^docdir$])
++m4trace:configure.in:14: -1- AC_SUBST([infodir], ['${datarootdir}/info'])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([infodir])
++m4trace:configure.in:14: -1- m4_pattern_allow([^infodir$])
++m4trace:configure.in:14: -1- AC_SUBST([htmldir], ['${docdir}'])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([htmldir])
++m4trace:configure.in:14: -1- m4_pattern_allow([^htmldir$])
++m4trace:configure.in:14: -1- AC_SUBST([dvidir], ['${docdir}'])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([dvidir])
++m4trace:configure.in:14: -1- m4_pattern_allow([^dvidir$])
++m4trace:configure.in:14: -1- AC_SUBST([pdfdir], ['${docdir}'])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([pdfdir])
++m4trace:configure.in:14: -1- m4_pattern_allow([^pdfdir$])
++m4trace:configure.in:14: -1- AC_SUBST([psdir], ['${docdir}'])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([psdir])
++m4trace:configure.in:14: -1- m4_pattern_allow([^psdir$])
++m4trace:configure.in:14: -1- AC_SUBST([libdir], ['${exec_prefix}/lib'])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([libdir])
++m4trace:configure.in:14: -1- m4_pattern_allow([^libdir$])
++m4trace:configure.in:14: -1- AC_SUBST([localedir], ['${datarootdir}/locale'])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([localedir])
++m4trace:configure.in:14: -1- m4_pattern_allow([^localedir$])
++m4trace:configure.in:14: -1- AC_SUBST([mandir], ['${datarootdir}/man'])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([mandir])
++m4trace:configure.in:14: -1- m4_pattern_allow([^mandir$])
++m4trace:configure.in:14: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME])
++m4trace:configure.in:14: -1- m4_pattern_allow([^PACKAGE_NAME$])
++m4trace:configure.in:14: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */
++#undef PACKAGE_NAME])
++m4trace:configure.in:14: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME])
++m4trace:configure.in:14: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
++m4trace:configure.in:14: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */
++#undef PACKAGE_TARNAME])
++m4trace:configure.in:14: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION])
++m4trace:configure.in:14: -1- m4_pattern_allow([^PACKAGE_VERSION$])
++m4trace:configure.in:14: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */
++#undef PACKAGE_VERSION])
++m4trace:configure.in:14: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING])
++m4trace:configure.in:14: -1- m4_pattern_allow([^PACKAGE_STRING$])
++m4trace:configure.in:14: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */
++#undef PACKAGE_STRING])
++m4trace:configure.in:14: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT])
++m4trace:configure.in:14: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
++m4trace:configure.in:14: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */
++#undef PACKAGE_BUGREPORT])
++m4trace:configure.in:14: -1- AC_SUBST([DEFS])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([DEFS])
++m4trace:configure.in:14: -1- m4_pattern_allow([^DEFS$])
++m4trace:configure.in:14: -1- AC_SUBST([ECHO_C])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([ECHO_C])
++m4trace:configure.in:14: -1- m4_pattern_allow([^ECHO_C$])
++m4trace:configure.in:14: -1- AC_SUBST([ECHO_N])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([ECHO_N])
++m4trace:configure.in:14: -1- m4_pattern_allow([^ECHO_N$])
++m4trace:configure.in:14: -1- AC_SUBST([ECHO_T])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([ECHO_T])
++m4trace:configure.in:14: -1- m4_pattern_allow([^ECHO_T$])
++m4trace:configure.in:14: -1- AC_SUBST([LIBS])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([LIBS])
++m4trace:configure.in:14: -1- m4_pattern_allow([^LIBS$])
++m4trace:configure.in:14: -1- AC_SUBST([build_alias])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([build_alias])
++m4trace:configure.in:14: -1- m4_pattern_allow([^build_alias$])
++m4trace:configure.in:14: -1- AC_SUBST([host_alias])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([host_alias])
++m4trace:configure.in:14: -1- m4_pattern_allow([^host_alias$])
++m4trace:configure.in:14: -1- AC_SUBST([target_alias])
++m4trace:configure.in:14: -1- AC_SUBST_TRACE([target_alias])
++m4trace:configure.in:14: -1- m4_pattern_allow([^target_alias$])
++m4trace:configure.in:17: -1- AC_CONFIG_HEADERS([include/click/config.h:config.h.in include/click/pathvars.h:pathvars.h.in include/click/config-bsdmodule.h:config-bsdmodule.h.in include/click/config-linuxmodule.h:config-linuxmodule.h.in include/click/config-ns.h:config-ns.h.in include/click/config-userlevel.h:config-userlevel.h.in])
++m4trace:configure.in:21: -1- AC_SUBST([ac_configure_args])
++m4trace:configure.in:21: -1- AC_SUBST_TRACE([ac_configure_args])
++m4trace:configure.in:21: -1- m4_pattern_allow([^ac_configure_args$])
++m4trace:configure.in:22: -1- AC_DEFINE_TRACE_LITERAL([CLICK_VERSION])
++m4trace:configure.in:22: -1- m4_pattern_allow([^CLICK_VERSION$])
++m4trace:configure.in:23: -1- AC_SUBST([CLICK_VERSION])
++m4trace:configure.in:23: -1- AC_SUBST_TRACE([CLICK_VERSION])
++m4trace:configure.in:23: -1- m4_pattern_allow([^CLICK_VERSION$])
++m4trace:configure.in:25: -1- AC_SUBST([conf_auxdir])
++m4trace:configure.in:25: -1- AC_SUBST_TRACE([conf_auxdir])
++m4trace:configure.in:25: -1- m4_pattern_allow([^conf_auxdir$])
++m4trace:configure.in:28: -1- AC_CANONICAL_SYSTEM
++m4trace:configure.in:28: -1- _m4_warn([obsolete], [The macro `AC_CANONICAL_SYSTEM' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/general.m4:1747: AC_CANONICAL_SYSTEM is expanded from...
++configure.in:28: the top level])
++m4trace:configure.in:28: -1- AC_CANONICAL_TARGET
++m4trace:configure.in:28: -1- AC_CANONICAL_HOST
++m4trace:configure.in:28: -1- AC_CANONICAL_BUILD
++m4trace:configure.in:28: -1- AC_REQUIRE_AUX_FILE([config.sub])
++m4trace:configure.in:28: -1- AC_REQUIRE_AUX_FILE([config.guess])
++m4trace:configure.in:28: -1- AC_SUBST([build], [$ac_cv_build])
++m4trace:configure.in:28: -1- AC_SUBST_TRACE([build])
++m4trace:configure.in:28: -1- m4_pattern_allow([^build$])
++m4trace:configure.in:28: -1- AC_SUBST([build_cpu], [$[1]])
++m4trace:configure.in:28: -1- AC_SUBST_TRACE([build_cpu])
++m4trace:configure.in:28: -1- m4_pattern_allow([^build_cpu$])
++m4trace:configure.in:28: -1- AC_SUBST([build_vendor], [$[2]])
++m4trace:configure.in:28: -1- AC_SUBST_TRACE([build_vendor])
++m4trace:configure.in:28: -1- m4_pattern_allow([^build_vendor$])
++m4trace:configure.in:28: -1- AC_SUBST([build_os])
++m4trace:configure.in:28: -1- AC_SUBST_TRACE([build_os])
++m4trace:configure.in:28: -1- m4_pattern_allow([^build_os$])
++m4trace:configure.in:28: -1- AC_SUBST([host], [$ac_cv_host])
++m4trace:configure.in:28: -1- AC_SUBST_TRACE([host])
++m4trace:configure.in:28: -1- m4_pattern_allow([^host$])
++m4trace:configure.in:28: -1- AC_SUBST([host_cpu], [$[1]])
++m4trace:configure.in:28: -1- AC_SUBST_TRACE([host_cpu])
++m4trace:configure.in:28: -1- m4_pattern_allow([^host_cpu$])
++m4trace:configure.in:28: -1- AC_SUBST([host_vendor], [$[2]])
++m4trace:configure.in:28: -1- AC_SUBST_TRACE([host_vendor])
++m4trace:configure.in:28: -1- m4_pattern_allow([^host_vendor$])
++m4trace:configure.in:28: -1- AC_SUBST([host_os])
++m4trace:configure.in:28: -1- AC_SUBST_TRACE([host_os])
++m4trace:configure.in:28: -1- m4_pattern_allow([^host_os$])
++m4trace:configure.in:28: -1- AC_SUBST([target], [$ac_cv_target])
++m4trace:configure.in:28: -1- AC_SUBST_TRACE([target])
++m4trace:configure.in:28: -1- m4_pattern_allow([^target$])
++m4trace:configure.in:28: -1- AC_SUBST([target_cpu], [$[1]])
++m4trace:configure.in:28: -1- AC_SUBST_TRACE([target_cpu])
++m4trace:configure.in:28: -1- m4_pattern_allow([^target_cpu$])
++m4trace:configure.in:28: -1- AC_SUBST([target_vendor], [$[2]])
++m4trace:configure.in:28: -1- AC_SUBST_TRACE([target_vendor])
++m4trace:configure.in:28: -1- m4_pattern_allow([^target_vendor$])
++m4trace:configure.in:28: -1- AC_SUBST([target_os])
++m4trace:configure.in:28: -1- AC_SUBST_TRACE([target_os])
++m4trace:configure.in:28: -1- m4_pattern_allow([^target_os$])
++m4trace:configure.in:31: -1- AC_SUBST([CC])
++m4trace:configure.in:31: -1- AC_SUBST_TRACE([CC])
++m4trace:configure.in:31: -1- m4_pattern_allow([^CC$])
++m4trace:configure.in:32: -1- AC_SUBST([CXX])
++m4trace:configure.in:32: -1- AC_SUBST_TRACE([CXX])
++m4trace:configure.in:32: -1- m4_pattern_allow([^CXX$])
++m4trace:configure.in:34: -1- AC_SUBST([CC])
++m4trace:configure.in:34: -1- AC_SUBST_TRACE([CC])
++m4trace:configure.in:34: -1- m4_pattern_allow([^CC$])
++m4trace:configure.in:34: -1- AC_SUBST([CFLAGS])
++m4trace:configure.in:34: -1- AC_SUBST_TRACE([CFLAGS])
++m4trace:configure.in:34: -1- m4_pattern_allow([^CFLAGS$])
++m4trace:configure.in:34: -1- AC_SUBST([LDFLAGS])
++m4trace:configure.in:34: -1- AC_SUBST_TRACE([LDFLAGS])
++m4trace:configure.in:34: -1- m4_pattern_allow([^LDFLAGS$])
++m4trace:configure.in:34: -1- AC_SUBST([LIBS])
++m4trace:configure.in:34: -1- AC_SUBST_TRACE([LIBS])
++m4trace:configure.in:34: -1- m4_pattern_allow([^LIBS$])
++m4trace:configure.in:34: -1- AC_SUBST([CPPFLAGS])
++m4trace:configure.in:34: -1- AC_SUBST_TRACE([CPPFLAGS])
++m4trace:configure.in:34: -1- m4_pattern_allow([^CPPFLAGS$])
++m4trace:configure.in:34: -1- AC_SUBST([CC])
++m4trace:configure.in:34: -1- AC_SUBST_TRACE([CC])
++m4trace:configure.in:34: -1- m4_pattern_allow([^CC$])
++m4trace:configure.in:34: -1- AC_SUBST([CC])
++m4trace:configure.in:34: -1- AC_SUBST_TRACE([CC])
++m4trace:configure.in:34: -1- m4_pattern_allow([^CC$])
++m4trace:configure.in:34: -1- AC_SUBST([CC])
++m4trace:configure.in:34: -1- AC_SUBST_TRACE([CC])
++m4trace:configure.in:34: -1- m4_pattern_allow([^CC$])
++m4trace:configure.in:34: -1- AC_SUBST([CC])
++m4trace:configure.in:34: -1- AC_SUBST_TRACE([CC])
++m4trace:configure.in:34: -1- m4_pattern_allow([^CC$])
++m4trace:configure.in:34: -1- AC_SUBST([ac_ct_CC])
++m4trace:configure.in:34: -1- AC_SUBST_TRACE([ac_ct_CC])
++m4trace:configure.in:34: -1- m4_pattern_allow([^ac_ct_CC$])
++m4trace:configure.in:34: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext])
++m4trace:configure.in:34: -1- AC_SUBST_TRACE([EXEEXT])
++m4trace:configure.in:34: -1- m4_pattern_allow([^EXEEXT$])
++m4trace:configure.in:34: -1- AC_SUBST([OBJEXT], [$ac_cv_objext])
++m4trace:configure.in:34: -1- AC_SUBST_TRACE([OBJEXT])
++m4trace:configure.in:34: -1- m4_pattern_allow([^OBJEXT$])
++m4trace:configure.in:34: -1- AC_SUBST([DEPCFLAGS])
++m4trace:configure.in:34: -1- AC_SUBST_TRACE([DEPCFLAGS])
++m4trace:configure.in:34: -1- m4_pattern_allow([^DEPCFLAGS$])
++m4trace:configure.in:34: -1- AC_SUBST([CFLAGS_NDEBUG])
++m4trace:configure.in:34: -1- AC_SUBST_TRACE([CFLAGS_NDEBUG])
++m4trace:configure.in:34: -1- m4_pattern_allow([^CFLAGS_NDEBUG$])
++m4trace:configure.in:35: -1- AC_SUBST([CPP])
++m4trace:configure.in:35: -1- AC_SUBST_TRACE([CPP])
++m4trace:configure.in:35: -1- m4_pattern_allow([^CPP$])
++m4trace:configure.in:35: -1- AC_SUBST([CPPFLAGS])
++m4trace:configure.in:35: -1- AC_SUBST_TRACE([CPPFLAGS])
++m4trace:configure.in:35: -1- m4_pattern_allow([^CPPFLAGS$])
++m4trace:configure.in:35: -1- AC_SUBST([CPP])
++m4trace:configure.in:35: -1- AC_SUBST_TRACE([CPP])
++m4trace:configure.in:35: -1- m4_pattern_allow([^CPP$])
++m4trace:configure.in:36: -1- AH_OUTPUT([inline], [/* Define to `__inline__\' or `__inline\' if that\'s what the C compiler
++   calls it, or to nothing if \'inline\' is not supported under any name.  */
++#ifndef __cplusplus
++#undef inline
++#endif])
++m4trace:configure.in:38: -1- AC_SUBST([CXX])
++m4trace:configure.in:38: -1- AC_SUBST_TRACE([CXX])
++m4trace:configure.in:38: -1- m4_pattern_allow([^CXX$])
++m4trace:configure.in:38: -1- AC_SUBST([CXXFLAGS])
++m4trace:configure.in:38: -1- AC_SUBST_TRACE([CXXFLAGS])
++m4trace:configure.in:38: -1- m4_pattern_allow([^CXXFLAGS$])
++m4trace:configure.in:38: -1- AC_SUBST([LDFLAGS])
++m4trace:configure.in:38: -1- AC_SUBST_TRACE([LDFLAGS])
++m4trace:configure.in:38: -1- m4_pattern_allow([^LDFLAGS$])
++m4trace:configure.in:38: -1- AC_SUBST([LIBS])
++m4trace:configure.in:38: -1- AC_SUBST_TRACE([LIBS])
++m4trace:configure.in:38: -1- m4_pattern_allow([^LIBS$])
++m4trace:configure.in:38: -1- AC_SUBST([CPPFLAGS])
++m4trace:configure.in:38: -1- AC_SUBST_TRACE([CPPFLAGS])
++m4trace:configure.in:38: -1- m4_pattern_allow([^CPPFLAGS$])
++m4trace:configure.in:38: -1- AC_SUBST([CXX])
++m4trace:configure.in:38: -1- AC_SUBST_TRACE([CXX])
++m4trace:configure.in:38: -1- m4_pattern_allow([^CXX$])
++m4trace:configure.in:38: -1- AC_SUBST([ac_ct_CXX])
++m4trace:configure.in:38: -1- AC_SUBST_TRACE([ac_ct_CXX])
++m4trace:configure.in:38: -1- m4_pattern_allow([^ac_ct_CXX$])
++m4trace:configure.in:38: -1- _m4_warn([obsolete], [The macro `AC_LANG_CPLUSPLUS' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:105: AC_LANG_CPLUSPLUS is expanded from...
++m4/click.m4:140: CLICK_PROG_CXX is expanded from...
++configure.in:38: the top level])
++m4trace:configure.in:38: -1- AC_DEFINE_TRACE_LITERAL([HAVE_NEW_HDR])
++m4trace:configure.in:38: -1- m4_pattern_allow([^HAVE_NEW_HDR$])
++m4trace:configure.in:38: -1- AH_OUTPUT([HAVE_NEW_HDR], [/* Define if <new> exists and works. */
++#undef HAVE_NEW_HDR])
++m4trace:configure.in:38: -1- AC_DEFINE_TRACE_LITERAL([HAVE_NEW_H])
++m4trace:configure.in:38: -1- m4_pattern_allow([^HAVE_NEW_H$])
++m4trace:configure.in:38: -1- AH_OUTPUT([HAVE_NEW_H], [/* Define if <new.h> exists and works. */
++#undef HAVE_NEW_H])
++m4trace:configure.in:38: -1- AC_SUBST([CXXFLAGS_NDEBUG])
++m4trace:configure.in:38: -1- AC_SUBST_TRACE([CXXFLAGS_NDEBUG])
++m4trace:configure.in:38: -1- m4_pattern_allow([^CXXFLAGS_NDEBUG$])
++m4trace:configure.in:39: -1- AC_SUBST([CXXCPP])
++m4trace:configure.in:39: -1- AC_SUBST_TRACE([CXXCPP])
++m4trace:configure.in:39: -1- m4_pattern_allow([^CXXCPP$])
++m4trace:configure.in:39: -1- AC_SUBST([CPPFLAGS])
++m4trace:configure.in:39: -1- AC_SUBST_TRACE([CPPFLAGS])
++m4trace:configure.in:39: -1- m4_pattern_allow([^CPPFLAGS$])
++m4trace:configure.in:39: -1- AC_SUBST([CXXCPP])
++m4trace:configure.in:39: -1- AC_SUBST_TRACE([CXXCPP])
++m4trace:configure.in:39: -1- m4_pattern_allow([^CXXCPP$])
++m4trace:configure.in:41: -1- AC_SUBST([KERNEL_CC])
++m4trace:configure.in:41: -1- AC_SUBST_TRACE([KERNEL_CC])
++m4trace:configure.in:41: -1- m4_pattern_allow([^KERNEL_CC$])
++m4trace:configure.in:42: -1- AC_SUBST([KERNEL_CXX])
++m4trace:configure.in:42: -1- AC_SUBST_TRACE([KERNEL_CXX])
++m4trace:configure.in:42: -1- m4_pattern_allow([^KERNEL_CXX$])
++m4trace:configure.in:45: -1- AC_SUBST([AR])
++m4trace:configure.in:45: -1- AC_SUBST_TRACE([AR])
++m4trace:configure.in:45: -1- m4_pattern_allow([^AR$])
++m4trace:configure.in:46: -1- AC_SUBST([LD])
++m4trace:configure.in:46: -1- AC_SUBST_TRACE([LD])
++m4trace:configure.in:46: -1- m4_pattern_allow([^LD$])
++m4trace:configure.in:47: -1- AC_SUBST([RANLIB])
++m4trace:configure.in:47: -1- AC_SUBST_TRACE([RANLIB])
++m4trace:configure.in:47: -1- m4_pattern_allow([^RANLIB$])
++m4trace:configure.in:48: -1- AC_SUBST([STRIP])
++m4trace:configure.in:48: -1- AC_SUBST_TRACE([STRIP])
++m4trace:configure.in:48: -1- m4_pattern_allow([^STRIP$])
++m4trace:configure.in:51: -1- AC_SUBST([conf_auxdir])
++m4trace:configure.in:51: -1- AC_SUBST_TRACE([conf_auxdir])
++m4trace:configure.in:51: -1- m4_pattern_allow([^conf_auxdir$])
++m4trace:configure.in:54: -1- AC_SUBST([AR_CREATEFLAGS])
++m4trace:configure.in:54: -1- AC_SUBST_TRACE([AR_CREATEFLAGS])
++m4trace:configure.in:54: -1- m4_pattern_allow([^AR_CREATEFLAGS$])
++m4trace:configure.in:67: -1- AC_DEFINE_TRACE_LITERAL([HAVE_USER_MULTITHREAD])
++m4trace:configure.in:67: -1- m4_pattern_allow([^HAVE_USER_MULTITHREAD$])
++m4trace:configure.in:82: -1- AC_DEFINE_TRACE_LITERAL([NUM_CLICK_CPUS])
++m4trace:configure.in:82: -1- m4_pattern_allow([^NUM_CLICK_CPUS$])
++m4trace:configure.in:83: -1- AC_DEFINE_TRACE_LITERAL([__MTCLICK__])
++m4trace:configure.in:83: -1- m4_pattern_allow([^__MTCLICK__$])
++m4trace:configure.in:87: -1- AC_DEFINE_TRACE_LITERAL([NUM_CLICK_CPUS])
++m4trace:configure.in:87: -1- m4_pattern_allow([^NUM_CLICK_CPUS$])
++m4trace:configure.in:92: -1- AC_DEFINE_TRACE_LITERAL([CLICK_WARP9])
++m4trace:configure.in:92: -1- m4_pattern_allow([^CLICK_WARP9$])
++m4trace:configure.in:95: -1- AC_DEFINE_TRACE_LITERAL([HAVE_CLICKFS])
++m4trace:configure.in:95: -1- m4_pattern_allow([^HAVE_CLICKFS$])
++m4trace:configure.in:99: -1- AC_DEFINE_TRACE_LITERAL([HAVE_KERNEL_ASSERT])
++m4trace:configure.in:99: -1- m4_pattern_allow([^HAVE_KERNEL_ASSERT$])
++m4trace:configure.in:105: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ADAPTIVE_SCHEDULER])
++m4trace:configure.in:105: -1- m4_pattern_allow([^HAVE_ADAPTIVE_SCHEDULER$])
++m4trace:configure.in:177: -1- AC_SUBST([linuxdir])
++m4trace:configure.in:177: -1- AC_SUBST_TRACE([linuxdir])
++m4trace:configure.in:177: -1- m4_pattern_allow([^linuxdir$])
++m4trace:configure.in:178: -1- AC_DEFINE_TRACE_LITERAL([LINUX_SRCDIR])
++m4trace:configure.in:178: -1- m4_pattern_allow([^LINUX_SRCDIR$])
++m4trace:configure.in:190: -1- AC_SUBST([element_groups])
++m4trace:configure.in:190: -1- AC_SUBST_TRACE([element_groups])
++m4trace:configure.in:190: -1- m4_pattern_allow([^element_groups$])
++m4trace:configure.in:208: -2- AC_DEFINE_TRACE_LITERAL([HAVE_IP6])
++m4trace:configure.in:208: -2- m4_pattern_allow([^HAVE_IP6$])
++m4trace:configure.in:209: -2- AC_DEFINE_TRACE_LITERAL([HAVE_IPSEC])
++m4trace:configure.in:209: -2- m4_pattern_allow([^HAVE_IPSEC$])
++m4trace:configure.in:278: -1- AC_SUBST([freebsd_srcdir])
++m4trace:configure.in:278: -1- AC_SUBST_TRACE([freebsd_srcdir])
++m4trace:configure.in:278: -1- m4_pattern_allow([^freebsd_srcdir$])
++m4trace:configure.in:279: -1- AC_SUBST([freebsd_includedir])
++m4trace:configure.in:279: -1- AC_SUBST_TRACE([freebsd_includedir])
++m4trace:configure.in:279: -1- m4_pattern_allow([^freebsd_includedir$])
++m4trace:configure.in:280: -1- AC_DEFINE_TRACE_LITERAL([FREEBSD_INCLUDEDIR])
++m4trace:configure.in:280: -1- m4_pattern_allow([^FREEBSD_INCLUDEDIR$])
++m4trace:configure.in:298: -1- _m4_warn([obsolete], [The macro `AC_LANG_C' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:73: AC_LANG_C is expanded from...
++configure.in:298: the top level])
++m4trace:configure.in:299: -1- AC_LIBSOURCE([strerror.c])
++m4trace:configure.in:299: -1- AH_OUTPUT([HAVE_STRERROR], [/* Define to 1 if you have the `strerror\' function. */
++#undef HAVE_STRERROR])
++m4trace:configure.in:299: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS $ac_func.$ac_objext"])
++m4trace:configure.in:299: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
++m4trace:configure.in:299: -1- m4_pattern_allow([^LIB@&t@OBJS$])
++m4trace:configure.in:300: -1- AH_OUTPUT([HAVE_SNPRINTF], [/* Define to 1 if you have the `snprintf\' function. */
++#undef HAVE_SNPRINTF])
++m4trace:configure.in:300: -1- AH_OUTPUT([HAVE_STRTOUL], [/* Define to 1 if you have the `strtoul\' function. */
++#undef HAVE_STRTOUL])
++m4trace:configure.in:300: -1- AH_OUTPUT([HAVE_TCGETPGRP], [/* Define to 1 if you have the `tcgetpgrp\' function. */
++#undef HAVE_TCGETPGRP])
++m4trace:configure.in:300: -1- AH_OUTPUT([HAVE_VSNPRINTF], [/* Define to 1 if you have the `vsnprintf\' function. */
++#undef HAVE_VSNPRINTF])
++m4trace:configure.in:301: -1- _m4_warn([obsolete], [The macro `AC_LANG_CPLUSPLUS' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:105: AC_LANG_CPLUSPLUS is expanded from...
++configure.in:301: the top level])
++m4trace:configure.in:310: -1- AC_SUBST([GREP])
++m4trace:configure.in:310: -1- AC_SUBST_TRACE([GREP])
++m4trace:configure.in:310: -1- m4_pattern_allow([^GREP$])
++m4trace:configure.in:310: -1- AC_SUBST([GREP])
++m4trace:configure.in:310: -1- AC_SUBST_TRACE([GREP])
++m4trace:configure.in:310: -1- m4_pattern_allow([^GREP$])
++m4trace:configure.in:310: -1- AC_SUBST([EGREP])
++m4trace:configure.in:310: -1- AC_SUBST_TRACE([EGREP])
++m4trace:configure.in:310: -1- m4_pattern_allow([^EGREP$])
++m4trace:configure.in:310: -1- AC_SUBST([EGREP])
++m4trace:configure.in:310: -1- AC_SUBST_TRACE([EGREP])
++m4trace:configure.in:310: -1- m4_pattern_allow([^EGREP$])
++m4trace:configure.in:310: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS])
++m4trace:configure.in:310: -1- m4_pattern_allow([^STDC_HEADERS$])
++m4trace:configure.in:310: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */
++#undef STDC_HEADERS])
++m4trace:configure.in:310: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the <sys/types.h> header file. */
++#undef HAVE_SYS_TYPES_H])
++m4trace:configure.in:310: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the <sys/stat.h> header file. */
++#undef HAVE_SYS_STAT_H])
++m4trace:configure.in:310: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
++#undef HAVE_STDLIB_H])
++m4trace:configure.in:310: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
++#undef HAVE_STRING_H])
++m4trace:configure.in:310: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the <memory.h> header file. */
++#undef HAVE_MEMORY_H])
++m4trace:configure.in:310: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */
++#undef HAVE_STRINGS_H])
++m4trace:configure.in:310: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the <inttypes.h> header file. */
++#undef HAVE_INTTYPES_H])
++m4trace:configure.in:310: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the <stdint.h> header file. */
++#undef HAVE_STDINT_H])
++m4trace:configure.in:310: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
++#undef HAVE_UNISTD_H])
++m4trace:configure.in:310: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_INT])
++m4trace:configure.in:310: -1- m4_pattern_allow([^SIZEOF_INT$])
++m4trace:configure.in:310: -1- AH_OUTPUT([SIZEOF_INT], [/* The size of `int\', as computed by sizeof. */
++#undef SIZEOF_INT])
++m4trace:configure.in:311: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_LONG])
++m4trace:configure.in:311: -1- m4_pattern_allow([^SIZEOF_LONG$])
++m4trace:configure.in:311: -1- AH_OUTPUT([SIZEOF_LONG], [/* The size of `long\', as computed by sizeof. */
++#undef SIZEOF_LONG])
++m4trace:configure.in:312: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the <inttypes.h> header file. */
++#undef HAVE_INTTYPES_H])
++m4trace:configure.in:312: -1- AC_DEFINE_TRACE_LITERAL([HAVE_U_INT_TYPES])
++m4trace:configure.in:312: -1- m4_pattern_allow([^HAVE_U_INT_TYPES$])
++m4trace:configure.in:312: -1- AH_OUTPUT([HAVE_U_INT_TYPES], [/* Define if you have u_intXX_t types but not uintXX_t types. */
++#undef HAVE_U_INT_TYPES])
++m4trace:configure.in:313: -1- AC_DEFINE_TRACE_LITERAL([HAVE_INDIFFERENT_ALIGNMENT])
++m4trace:configure.in:313: -1- m4_pattern_allow([^HAVE_INDIFFERENT_ALIGNMENT$])
++m4trace:configure.in:313: -1- AH_OUTPUT([HAVE_INDIFFERENT_ALIGNMENT], [/* Define if the machine is indifferent to alignment. */
++#undef HAVE_INDIFFERENT_ALIGNMENT])
++m4trace:configure.in:315: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_LONG_LONG])
++m4trace:configure.in:315: -1- m4_pattern_allow([^SIZEOF_LONG_LONG$])
++m4trace:configure.in:315: -1- AH_OUTPUT([SIZEOF_LONG_LONG], [/* The size of `long long\', as computed by sizeof. */
++#undef SIZEOF_LONG_LONG])
++m4trace:configure.in:316: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LONG_LONG])
++m4trace:configure.in:316: -1- m4_pattern_allow([^HAVE_LONG_LONG$])
++m4trace:configure.in:316: -1- AH_OUTPUT([HAVE_LONG_LONG], [/* Define to 1 if the system has the type `long long\'. */
++#undef HAVE_LONG_LONG])
++m4trace:configure.in:316: -1- AC_DEFINE_TRACE_LITERAL([HAVE_INT64_TYPES])
++m4trace:configure.in:316: -1- m4_pattern_allow([^HAVE_INT64_TYPES$])
++m4trace:configure.in:316: -1- AH_OUTPUT([HAVE_INT64_TYPES], [/* Define if 64-bit integer types are enabled. */
++#undef HAVE_INT64_TYPES])
++m4trace:configure.in:316: -1- _m4_warn([obsolete], [The macro `AC_LANG_CPLUSPLUS' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:105: AC_LANG_CPLUSPLUS is expanded from...
++../../lib/m4sugar/m4sh.m4:523: AS_IF is expanded from...
++../../lib/autoconf/general.m4:1905: AC_CACHE_VAL is expanded from...
++../../lib/autoconf/general.m4:1918: AC_CACHE_CHECK is expanded from...
++m4/click.m4:580: CLICK_CHECK_INT64_TYPES is expanded from...
++configure.in:316: the top level])
++m4trace:configure.in:316: -1- AC_DEFINE_TRACE_LITERAL([HAVE_INT64_IS_LONG_USERLEVEL])
++m4trace:configure.in:316: -1- m4_pattern_allow([^HAVE_INT64_IS_LONG_USERLEVEL$])
++m4trace:configure.in:316: -1- AH_OUTPUT([HAVE_INT64_IS_LONG_USERLEVEL], [/* Define if \'int64_t\' is typedefed to \'long\' at user level. */
++#undef HAVE_INT64_IS_LONG_USERLEVEL])
++m4trace:configure.in:316: -1- _m4_warn([obsolete], [The macro `AC_LANG_CPLUSPLUS' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:105: AC_LANG_CPLUSPLUS is expanded from...
++../../lib/m4sugar/m4sh.m4:523: AS_IF is expanded from...
++../../lib/autoconf/general.m4:1905: AC_CACHE_VAL is expanded from...
++../../lib/autoconf/general.m4:1918: AC_CACHE_CHECK is expanded from...
++m4/click.m4:580: CLICK_CHECK_INT64_TYPES is expanded from...
++configure.in:316: the top level])
++m4trace:configure.in:316: -1- AC_DEFINE_TRACE_LITERAL([HAVE_INT64_IS_LONG_LONG_USERLEVEL])
++m4trace:configure.in:316: -1- m4_pattern_allow([^HAVE_INT64_IS_LONG_LONG_USERLEVEL$])
++m4trace:configure.in:316: -1- AH_OUTPUT([HAVE_INT64_IS_LONG_LONG_USERLEVEL], [/* Define if \'int64_t\' is typedefed to \'long long\' at user level. */
++#undef HAVE_INT64_IS_LONG_LONG_USERLEVEL])
++m4trace:configure.in:318: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_STRUCT_TIMEVAL])
++m4trace:configure.in:318: -1- m4_pattern_allow([^SIZEOF_STRUCT_TIMEVAL$])
++m4trace:configure.in:318: -1- AH_OUTPUT([SIZEOF_STRUCT_TIMEVAL], [/* The size of `struct timeval\', as computed by sizeof. */
++#undef SIZEOF_STRUCT_TIMEVAL])
++m4trace:configure.in:319: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_TIMESPEC])
++m4trace:configure.in:319: -1- m4_pattern_allow([^HAVE_STRUCT_TIMESPEC$])
++m4trace:configure.in:319: -1- AH_OUTPUT([HAVE_STRUCT_TIMESPEC], [/* Define to 1 if the system has the type `struct timespec\'. */
++#undef HAVE_STRUCT_TIMESPEC])
++m4trace:configure.in:321: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_STRUCT_TIMESPEC])
++m4trace:configure.in:321: -1- m4_pattern_allow([^SIZEOF_STRUCT_TIMESPEC$])
++m4trace:configure.in:321: -1- AH_OUTPUT([SIZEOF_STRUCT_TIMESPEC], [/* The size of `struct timespec\', as computed by sizeof. */
++#undef SIZEOF_STRUCT_TIMESPEC])
++m4trace:configure.in:323: -1- AH_OUTPUT([HAVE_ENDIAN_H], [/* Define to 1 if you have the <endian.h> header file. */
++#undef HAVE_ENDIAN_H])
++m4trace:configure.in:323: -1- AH_OUTPUT([HAVE_MACHINE_ENDIAN_H], [/* Define to 1 if you have the <machine/endian.h> header file. */
++#undef HAVE_MACHINE_ENDIAN_H])
++m4trace:configure.in:323: -1- AC_DEFINE_TRACE_LITERAL([CLICK_BYTE_ORDER])
++m4trace:configure.in:323: -1- m4_pattern_allow([^CLICK_BYTE_ORDER$])
++m4trace:configure.in:323: -1- AH_OUTPUT([CLICK_BYTE_ORDER], [/* Define to byte order of target machine. */
++#undef CLICK_BYTE_ORDER])
++m4trace:configure.in:323: -1- AH_OUTPUT([HAVE_BYTESWAP_H], [/* Define to 1 if you have the <byteswap.h> header file. */
++#undef HAVE_BYTESWAP_H])
++m4trace:configure.in:324: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ARITHMETIC_RIGHT_SHIFT])
++m4trace:configure.in:324: -1- m4_pattern_allow([^HAVE_ARITHMETIC_RIGHT_SHIFT$])
++m4trace:configure.in:324: -1- AH_OUTPUT([HAVE_ARITHMETIC_RIGHT_SHIFT], [/* Define if right shift of signed integers acts by sign extension. */
++#undef HAVE_ARITHMETIC_RIGHT_SHIFT])
++m4trace:configure.in:325: -1- _m4_warn([obsolete], [The macro `AC_LANG_CPLUSPLUS' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:105: AC_LANG_CPLUSPLUS is expanded from...
++m4/click.m4:725: CLICK_CHECK_ADDRESSABLE_VA_LIST is expanded from...
++configure.in:325: the top level])
++m4trace:configure.in:325: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ADDRESSABLE_VA_LIST])
++m4trace:configure.in:325: -1- m4_pattern_allow([^HAVE_ADDRESSABLE_VA_LIST$])
++m4trace:configure.in:325: -1- AH_OUTPUT([HAVE_ADDRESSABLE_VA_LIST], [/* Define if the va_list type is addressable. */
++#undef HAVE_ADDRESSABLE_VA_LIST])
++m4trace:configure.in:326: -1- AC_DEFINE_TRACE_LITERAL([HAVE___BUILTIN_CLZ])
++m4trace:configure.in:326: -1- m4_pattern_allow([^HAVE___BUILTIN_CLZ$])
++m4trace:configure.in:326: -1- AH_OUTPUT([HAVE___BUILTIN_CLZ], [/* Define if you have the __builtin_clz function. */
++#undef HAVE___BUILTIN_CLZ])
++m4trace:configure.in:326: -1- AC_DEFINE_TRACE_LITERAL([HAVE___BUILTIN_CLZL])
++m4trace:configure.in:326: -1- m4_pattern_allow([^HAVE___BUILTIN_CLZL$])
++m4trace:configure.in:326: -1- AH_OUTPUT([HAVE___BUILTIN_CLZL], [/* Define if you have the __builtin_clzl function. */
++#undef HAVE___BUILTIN_CLZL])
++m4trace:configure.in:326: -1- AC_DEFINE_TRACE_LITERAL([HAVE___BUILTIN_CLZLL])
++m4trace:configure.in:326: -1- m4_pattern_allow([^HAVE___BUILTIN_CLZLL$])
++m4trace:configure.in:326: -1- AH_OUTPUT([HAVE___BUILTIN_CLZLL], [/* Define if you have the __builtin_clzll function. */
++#undef HAVE___BUILTIN_CLZLL])
++m4trace:configure.in:326: -1- AC_DEFINE_TRACE_LITERAL([HAVE___BUILTIN_FFS])
++m4trace:configure.in:326: -1- m4_pattern_allow([^HAVE___BUILTIN_FFS$])
++m4trace:configure.in:326: -1- AH_OUTPUT([HAVE___BUILTIN_FFS], [/* Define if you have the __builtin_ffs function. */
++#undef HAVE___BUILTIN_FFS])
++m4trace:configure.in:326: -1- AC_DEFINE_TRACE_LITERAL([HAVE___BUILTIN_FFSL])
++m4trace:configure.in:326: -1- m4_pattern_allow([^HAVE___BUILTIN_FFSL$])
++m4trace:configure.in:326: -1- AH_OUTPUT([HAVE___BUILTIN_FFSL], [/* Define if you have the __builtin_ffsl function. */
++#undef HAVE___BUILTIN_FFSL])
++m4trace:configure.in:326: -1- AC_DEFINE_TRACE_LITERAL([HAVE___BUILTIN_FFSLL])
++m4trace:configure.in:326: -1- m4_pattern_allow([^HAVE___BUILTIN_FFSLL$])
++m4trace:configure.in:326: -1- AH_OUTPUT([HAVE___BUILTIN_FFSLL], [/* Define if you have the __builtin_ffsll function. */
++#undef HAVE___BUILTIN_FFSLL])
++m4trace:configure.in:326: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */
++#undef HAVE_STRINGS_H])
++m4trace:configure.in:326: -1- AH_OUTPUT([HAVE_FFS], [/* Define to 1 if you have the `ffs\' function. */
++#undef HAVE_FFS])
++m4trace:configure.in:326: -1- AH_OUTPUT([HAVE_FFSL], [/* Define to 1 if you have the `ffsl\' function. */
++#undef HAVE_FFSL])
++m4trace:configure.in:326: -1- AH_OUTPUT([HAVE_FFSLL], [/* Define to 1 if you have the `ffsll\' function. */
++#undef HAVE_FFSLL])
++m4trace:configure.in:335: -1- AC_DEFINE_TRACE_LITERAL([HAVE_NANOTIMESTAMP_ENABLED])
++m4trace:configure.in:335: -1- m4_pattern_allow([^HAVE_NANOTIMESTAMP_ENABLED$])
++m4trace:configure.in:360: -1- AC_SUBST([BUILD_CC])
++m4trace:configure.in:360: -1- AC_SUBST_TRACE([BUILD_CC])
++m4trace:configure.in:360: -1- m4_pattern_allow([^BUILD_CC$])
++m4trace:configure.in:361: -1- AC_SUBST([BUILD_CXX])
++m4trace:configure.in:361: -1- AC_SUBST_TRACE([BUILD_CXX])
++m4trace:configure.in:361: -1- m4_pattern_allow([^BUILD_CXX$])
++m4trace:configure.in:363: -1- AC_SUBST([BUILD_AR])
++m4trace:configure.in:363: -1- AC_SUBST_TRACE([BUILD_AR])
++m4trace:configure.in:363: -1- m4_pattern_allow([^BUILD_AR$])
++m4trace:configure.in:364: -1- AC_SUBST([BUILD_RANLIB])
++m4trace:configure.in:364: -1- AC_SUBST_TRACE([BUILD_RANLIB])
++m4trace:configure.in:364: -1- m4_pattern_allow([^BUILD_RANLIB$])
++m4trace:configure.in:367: -1- AC_SUBST([HOST_TOOLS])
++m4trace:configure.in:367: -1- AC_SUBST_TRACE([HOST_TOOLS])
++m4trace:configure.in:367: -1- m4_pattern_allow([^HOST_TOOLS$])
++m4trace:configure.in:374: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
++#undef HAVE_UNISTD_H])
++m4trace:configure.in:374: -1- AH_OUTPUT([HAVE_TERMIO_H], [/* Define to 1 if you have the <termio.h> header file. */
++#undef HAVE_TERMIO_H])
++m4trace:configure.in:374: -1- AH_OUTPUT([HAVE_NETDB_H], [/* Define to 1 if you have the <netdb.h> header file. */
++#undef HAVE_NETDB_H])
++m4trace:configure.in:374: -1- AH_OUTPUT([HAVE_SYS_EVENT_H], [/* Define to 1 if you have the <sys/event.h> header file. */
++#undef HAVE_SYS_EVENT_H])
++m4trace:configure.in:374: -1- AH_OUTPUT([HAVE_PWD_H], [/* Define to 1 if you have the <pwd.h> header file. */
++#undef HAVE_PWD_H])
++m4trace:configure.in:374: -1- AH_OUTPUT([HAVE_GRP_H], [/* Define to 1 if you have the <grp.h> header file. */
++#undef HAVE_GRP_H])
++m4trace:configure.in:375: -1- AC_DEFINE_TRACE_LITERAL([HAVE_POLL_H])
++m4trace:configure.in:375: -1- m4_pattern_allow([^HAVE_POLL_H$])
++m4trace:configure.in:375: -1- AH_OUTPUT([HAVE_POLL_H], [/* Define if you have a non-emulated <poll.h> header file. */
++#undef HAVE_POLL_H])
++m4trace:configure.in:376: -1- AH_OUTPUT([HAVE_SIGACTION], [/* Define to 1 if you have the `sigaction\' function. */
++#undef HAVE_SIGACTION])
++m4trace:configure.in:378: -1- AH_OUTPUT([HAVE_KQUEUE], [/* Define to 1 if you have the `kqueue\' function. */
++#undef HAVE_KQUEUE])
++m4trace:configure.in:385: -1- AC_DEFINE_TRACE_LITERAL([HAVE_EV_SET_UDATA_POINTER])
++m4trace:configure.in:385: -1- m4_pattern_allow([^HAVE_EV_SET_UDATA_POINTER$])
++m4trace:configure.in:385: -1- AH_OUTPUT([HAVE_EV_SET_UDATA_POINTER], [/* Define if the last argument to EV_SET has pointer type. */
++#undef HAVE_EV_SET_UDATA_POINTER])
++m4trace:configure.in:392: -1- AH_OUTPUT([HAVE_DLFCN_H], [/* Define to 1 if you have the <dlfcn.h> header file. */
++#undef HAVE_DLFCN_H])
++m4trace:configure.in:392: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DYNAMIC_LINKING])
++m4trace:configure.in:392: -1- m4_pattern_allow([^HAVE_DYNAMIC_LINKING$])
++m4trace:configure.in:392: -1- AH_OUTPUT([HAVE_DYNAMIC_LINKING], [/* Define if dynamic linking is possible. */
++#undef HAVE_DYNAMIC_LINKING])
++m4trace:configure.in:392: -1- AC_SUBST([DL_LIBS])
++m4trace:configure.in:392: -1- AC_SUBST_TRACE([DL_LIBS])
++m4trace:configure.in:392: -1- m4_pattern_allow([^DL_LIBS$])
++m4trace:configure.in:392: -1- AC_SUBST([LDMODULEFLAGS])
++m4trace:configure.in:392: -1- AC_SUBST_TRACE([LDMODULEFLAGS])
++m4trace:configure.in:392: -1- m4_pattern_allow([^LDMODULEFLAGS$])
++m4trace:configure.in:394: -1- AH_OUTPUT([HAVE_DLFCN_H], [/* Define to 1 if you have the <dlfcn.h> header file. */
++#undef HAVE_DLFCN_H])
++m4trace:configure.in:394: -1- AC_SUBST([BUILD_DL_LIBS])
++m4trace:configure.in:394: -1- AC_SUBST_TRACE([BUILD_DL_LIBS])
++m4trace:configure.in:394: -1- m4_pattern_allow([^BUILD_DL_LIBS$])
++m4trace:configure.in:403: -1- _m4_warn([obsolete], [The macro `AC_LANG_C' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:73: AC_LANG_C is expanded from...
++configure.in:403: the top level])
++m4trace:configure.in:417: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ACCEPT_SOCKLEN_T])
++m4trace:configure.in:417: -1- m4_pattern_allow([^HAVE_ACCEPT_SOCKLEN_T$])
++m4trace:configure.in:417: -1- AH_OUTPUT([HAVE_ACCEPT_SOCKLEN_T], [/* Define if accept() uses socklen_t. */
++#undef HAVE_ACCEPT_SOCKLEN_T])
++m4trace:configure.in:420: -1- AC_SUBST([SOCKET_LIBS])
++m4trace:configure.in:420: -1- AC_SUBST_TRACE([SOCKET_LIBS])
++m4trace:configure.in:420: -1- m4_pattern_allow([^SOCKET_LIBS$])
++m4trace:configure.in:421: -1- _m4_warn([obsolete], [The macro `AC_LANG_CPLUSPLUS' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:105: AC_LANG_CPLUSPLUS is expanded from...
++configure.in:421: the top level])
++m4trace:configure.in:428: -1- _m4_warn([obsolete], [The macro `AC_LANG_C' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:73: AC_LANG_C is expanded from...
++m4/click.m4:758: CLICK_CHECK_LARGE_FILE_SUPPORT is expanded from...
++configure.in:428: the top level])
++m4trace:configure.in:428: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LARGE_FILE_SUPPORT])
++m4trace:configure.in:428: -1- m4_pattern_allow([^HAVE_LARGE_FILE_SUPPORT$])
++m4trace:configure.in:428: -1- AH_OUTPUT([HAVE_LARGE_FILE_SUPPORT], [/* Define if your C library contains large file support. */
++#undef HAVE_LARGE_FILE_SUPPORT])
++m4trace:configure.in:428: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_OFF_T])
++m4trace:configure.in:428: -1- m4_pattern_allow([^SIZEOF_OFF_T$])
++m4trace:configure.in:428: -1- AH_OUTPUT([SIZEOF_OFF_T], [/* The size of `off_t\', as computed by sizeof. */
++#undef SIZEOF_OFF_T])
++m4trace:configure.in:435: -1- _m4_warn([obsolete], [The macro `AC_LANG_C' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:73: AC_LANG_C is expanded from...
++configure.in:435: the top level])
++m4trace:configure.in:436: -1- AH_OUTPUT([HAVE_SYS_MMAN_H], [/* Define to 1 if you have the <sys/mman.h> header file. */
++#undef HAVE_SYS_MMAN_H])
++m4trace:configure.in:437: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
++#undef HAVE_STDLIB_H])
++m4trace:configure.in:437: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
++#undef HAVE_UNISTD_H])
++m4trace:configure.in:437: -1- AH_OUTPUT([HAVE_GETPAGESIZE], [/* Define to 1 if you have the `getpagesize\' function. */
++#undef HAVE_GETPAGESIZE])
++m4trace:configure.in:437: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MMAP])
++m4trace:configure.in:437: -1- m4_pattern_allow([^HAVE_MMAP$])
++m4trace:configure.in:437: -1- AH_OUTPUT([HAVE_MMAP], [/* Define to 1 if you have a working `mmap\' system call. */
++#undef HAVE_MMAP])
++m4trace:configure.in:438: -1- _m4_warn([obsolete], [The macro `AC_LANG_CPLUSPLUS' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:105: AC_LANG_CPLUSPLUS is expanded from...
++configure.in:438: the top level])
++m4trace:configure.in:439: -1- AH_OUTPUT([HAVE_MADVISE], [/* Define to 1 if you have the `madvise\' function. */
++#undef HAVE_MADVISE])
++m4trace:configure.in:443: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_MADVISE])
++m4trace:configure.in:443: -1- m4_pattern_allow([^HAVE_DECL_MADVISE$])
++m4trace:configure.in:443: -1- AH_OUTPUT([HAVE_DECL_MADVISE], [/* Define to 1 if you have the declaration of `madvise\', and to 0 if you
++   don\'t. */
++#undef HAVE_DECL_MADVISE])
++m4trace:configure.in:443: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_MADVISE])
++m4trace:configure.in:443: -1- m4_pattern_allow([^HAVE_DECL_MADVISE$])
++m4trace:configure.in:456: -1- AC_SUBST([EXTRA_DRIVER_OBJS])
++m4trace:configure.in:456: -1- AC_SUBST_TRACE([EXTRA_DRIVER_OBJS])
++m4trace:configure.in:456: -1- m4_pattern_allow([^EXTRA_DRIVER_OBJS$])
++m4trace:configure.in:457: -1- AC_SUBST([EXTRA_TOOL_OBJS])
++m4trace:configure.in:457: -1- AC_SUBST_TRACE([EXTRA_TOOL_OBJS])
++m4trace:configure.in:457: -1- m4_pattern_allow([^EXTRA_TOOL_OBJS$])
++m4trace:configure.in:506: -1- AC_SUBST([LINUXMODULE_2_6])
++m4trace:configure.in:506: -1- AC_SUBST_TRACE([LINUXMODULE_2_6])
++m4trace:configure.in:506: -1- m4_pattern_allow([^LINUXMODULE_2_6$])
++m4trace:configure.in:508: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LINUXMODULE_2_6])
++m4trace:configure.in:508: -1- m4_pattern_allow([^HAVE_LINUXMODULE_2_6$])
++m4trace:configure.in:508: -1- AH_OUTPUT([HAVE_LINUXMODULE_2_6], [/* Define if the Click linuxmodule is compiled for a 2.6 kernel. */
++#undef HAVE_LINUXMODULE_2_6])
++m4trace:configure.in:516: -1- AC_DEFINE_TRACE_LITERAL([HAVE_CLICK_KERNEL])
++m4trace:configure.in:516: -1- m4_pattern_allow([^HAVE_CLICK_KERNEL$])
++m4trace:configure.in:524: -1- AC_DEFINE_TRACE_LITERAL([HAVE_CLICK_KERNEL_TX_NOTIFY])
++m4trace:configure.in:524: -1- m4_pattern_allow([^HAVE_CLICK_KERNEL_TX_NOTIFY$])
++m4trace:configure.in:532: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LINUX_READ_NET_SKBCOUNT])
++m4trace:configure.in:532: -1- m4_pattern_allow([^HAVE_LINUX_READ_NET_SKBCOUNT$])
++m4trace:configure.in:540: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LINUX_STRLEN_EXPOSED])
++m4trace:configure.in:540: -1- m4_pattern_allow([^HAVE_LINUX_STRLEN_EXPOSED$])
++m4trace:configure.in:548: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LINUX_TULIP_INTERRUPT_HOOK])
++m4trace:configure.in:548: -1- m4_pattern_allow([^HAVE_LINUX_TULIP_INTERRUPT_HOOK$])
++m4trace:configure.in:556: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LINUX_POLLING])
++m4trace:configure.in:556: -1- m4_pattern_allow([^HAVE_LINUX_POLLING$])
++m4trace:configure.in:564: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LINUX_ATOMIC_SET_MASK])
++m4trace:configure.in:564: -1- m4_pattern_allow([^HAVE_LINUX_ATOMIC_SET_MASK$])
++m4trace:configure.in:572: -1- AC_DEFINE_TRACE_LITERAL([__SMP__])
++m4trace:configure.in:572: -1- m4_pattern_allow([^__SMP__$])
++m4trace:configure.in:581: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LINUX_ASM_ALTERNATIVE_H])
++m4trace:configure.in:581: -1- m4_pattern_allow([^HAVE_LINUX_ASM_ALTERNATIVE_H$])
++m4trace:configure.in:602: -1- AC_DEFINE_TRACE_LITERAL([HAVE_CLICK_BSD_KERNEL])
++m4trace:configure.in:602: -1- m4_pattern_allow([^HAVE_CLICK_BSD_KERNEL$])
++m4trace:configure.in:603: -1- AC_DEFINE_TRACE_LITERAL([HAVE_BSD_POLLING])
++m4trace:configure.in:603: -1- m4_pattern_allow([^HAVE_BSD_POLLING$])
++m4trace:configure.in:621: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRIDE_SCHED])
++m4trace:configure.in:621: -1- m4_pattern_allow([^HAVE_STRIDE_SCHED$])
++m4trace:configure.in:626: -1- AC_DEFINE_TRACE_LITERAL([HAVE_TASK_HEAP])
++m4trace:configure.in:626: -1- m4_pattern_allow([^HAVE_TASK_HEAP$])
++m4trace:configure.in:636: -1- AC_DEFINE_TRACE_LITERAL([CLICK_DMALLOC])
++m4trace:configure.in:636: -1- m4_pattern_allow([^CLICK_DMALLOC$])
++m4trace:configure.in:646: -1- AC_DEFINE_TRACE_LITERAL([HAVE_INTEL_CPU])
++m4trace:configure.in:646: -1- m4_pattern_allow([^HAVE_INTEL_CPU$])
++m4trace:configure.in:654: -1- AH_OUTPUT([HAVE_LINUX_IF_TUN_H], [/* Define to 1 if you have the <linux/if_tun.h> header file. */
++#undef HAVE_LINUX_IF_TUN_H])
++m4trace:configure.in:654: -1- AH_OUTPUT([HAVE_NET_IF_TUN_H], [/* Define to 1 if you have the <net/if_tun.h> header file. */
++#undef HAVE_NET_IF_TUN_H])
++m4trace:configure.in:654: -1- AH_OUTPUT([HAVE_NET_IF_TAP_H], [/* Define to 1 if you have the <net/if_tap.h> header file. */
++#undef HAVE_NET_IF_TAP_H])
++m4trace:configure.in:654: -1- AH_OUTPUT([HAVE_NET_BPF_H], [/* Define to 1 if you have the <net/bpf.h> header file. */
++#undef HAVE_NET_BPF_H])
++m4trace:configure.in:665: -1- AC_SUBST([POSSIBLE_DRIVERS])
++m4trace:configure.in:665: -1- AC_SUBST_TRACE([POSSIBLE_DRIVERS])
++m4trace:configure.in:665: -1- m4_pattern_allow([^POSSIBLE_DRIVERS$])
++m4trace:configure.in:673: -1- AC_SUBST([DRIVERS])
++m4trace:configure.in:673: -1- AC_SUBST_TRACE([DRIVERS])
++m4trace:configure.in:673: -1- m4_pattern_allow([^DRIVERS$])
++m4trace:configure.in:676: -1- AC_SUBST([HAVE_USERLEVEL_DRIVER])
++m4trace:configure.in:676: -1- AC_SUBST_TRACE([HAVE_USERLEVEL_DRIVER])
++m4trace:configure.in:676: -1- m4_pattern_allow([^HAVE_USERLEVEL_DRIVER$])
++m4trace:configure.in:678: -1- AC_SUBST([HAVE_LINUXMODULE_DRIVER])
++m4trace:configure.in:678: -1- AC_SUBST_TRACE([HAVE_LINUXMODULE_DRIVER])
++m4trace:configure.in:678: -1- m4_pattern_allow([^HAVE_LINUXMODULE_DRIVER$])
++m4trace:configure.in:680: -1- AC_SUBST([HAVE_BSDMODULE_DRIVER])
++m4trace:configure.in:680: -1- AC_SUBST_TRACE([HAVE_BSDMODULE_DRIVER])
++m4trace:configure.in:680: -1- m4_pattern_allow([^HAVE_BSDMODULE_DRIVER$])
++m4trace:configure.in:683: -1- AC_SUBST([OTHER_TARGETS])
++m4trace:configure.in:683: -1- AC_SUBST_TRACE([OTHER_TARGETS])
++m4trace:configure.in:683: -1- m4_pattern_allow([^OTHER_TARGETS$])
++m4trace:configure.in:692: -1- AC_SUBST([TOOLDIRS])
++m4trace:configure.in:692: -1- AC_SUBST_TRACE([TOOLDIRS])
++m4trace:configure.in:692: -1- m4_pattern_allow([^TOOLDIRS$])
++m4trace:configure.in:693: -1- AC_SUBST([TOOL_TARGETS])
++m4trace:configure.in:693: -1- AC_SUBST_TRACE([TOOL_TARGETS])
++m4trace:configure.in:693: -1- m4_pattern_allow([^TOOL_TARGETS$])
++m4trace:configure.in:700: -1- AC_DEFINE_TRACE_LITERAL([HAVE_BPF_TIMEVAL])
++m4trace:configure.in:700: -1- m4_pattern_allow([^HAVE_BPF_TIMEVAL$])
++m4trace:configure.in:700: -1- AH_OUTPUT([HAVE_BPF_TIMEVAL], [/* Define if <pcap.h> uses bpf_timeval. */
++#undef HAVE_BPF_TIMEVAL])
++m4trace:configure.in:700: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_PCAP_SETNONBLOCK])
++m4trace:configure.in:700: -1- m4_pattern_allow([^HAVE_DECL_PCAP_SETNONBLOCK$])
++m4trace:configure.in:700: -1- AH_OUTPUT([HAVE_DECL_PCAP_SETNONBLOCK], [/* Define to 1 if you have the declaration of `pcap_setnonblock\', and to 0 if
++   you don\'t. */
++#undef HAVE_DECL_PCAP_SETNONBLOCK])
++m4trace:configure.in:700: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_PCAP_SETNONBLOCK])
++m4trace:configure.in:700: -1- m4_pattern_allow([^HAVE_DECL_PCAP_SETNONBLOCK$])
++m4trace:configure.in:700: -1- AC_SUBST([PCAP_INCLUDES])
++m4trace:configure.in:700: -1- AC_SUBST_TRACE([PCAP_INCLUDES])
++m4trace:configure.in:700: -1- m4_pattern_allow([^PCAP_INCLUDES$])
++m4trace:configure.in:700: -1- _m4_warn([obsolete], [The macro `AC_LANG_C' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:73: AC_LANG_C is expanded from...
++../../lib/m4sugar/m4sh.m4:523: AS_IF is expanded from...
++../../lib/autoconf/general.m4:1905: AC_CACHE_VAL is expanded from...
++../../lib/autoconf/general.m4:1918: AC_CACHE_CHECK is expanded from...
++m4/click.m4:343: CLICK_CHECK_LIBPCAP is expanded from...
++configure.in:700: the top level])
++m4trace:configure.in:700: -1- _m4_warn([obsolete], [The macro `AC_LANG_C' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:73: AC_LANG_C is expanded from...
++../../lib/m4sugar/m4sh.m4:523: AS_IF is expanded from...
++../../lib/autoconf/general.m4:1905: AC_CACHE_VAL is expanded from...
++../../lib/autoconf/general.m4:1918: AC_CACHE_CHECK is expanded from...
++m4/click.m4:343: CLICK_CHECK_LIBPCAP is expanded from...
++configure.in:700: the top level])
++m4trace:configure.in:700: -1- AC_SUBST([PCAP_LIBS])
++m4trace:configure.in:700: -1- AC_SUBST_TRACE([PCAP_LIBS])
++m4trace:configure.in:700: -1- m4_pattern_allow([^PCAP_LIBS$])
++m4trace:configure.in:700: -1- AC_DEFINE_TRACE_LITERAL([HAVE_PCAP])
++m4trace:configure.in:700: -1- m4_pattern_allow([^HAVE_PCAP$])
++m4trace:configure.in:700: -1- AH_OUTPUT([HAVE_PCAP], [/* Define if you have -lpcap and pcap.h. */
++#undef HAVE_PCAP])
++m4trace:configure.in:700: -1- AH_OUTPUT([HAVE_PCAP_SETNONBLOCK], [/* Define to 1 if you have the `pcap_setnonblock\' function. */
++#undef HAVE_PCAP_SETNONBLOCK])
++m4trace:configure.in:710: -1- AC_DEFINE_TRACE_LITERAL([HAVE_USERLEVEL_DRIVER])
++m4trace:configure.in:710: -1- m4_pattern_allow([^HAVE_USERLEVEL_DRIVER$])
++m4trace:configure.in:722: -1- AC_DEFINE_TRACE_LITERAL([HAVE_IF_DATA_IFI_DATALEN])
++m4trace:configure.in:722: -1- m4_pattern_allow([^HAVE_IF_DATA_IFI_DATALEN$])
++m4trace:configure.in:722: -1- AH_OUTPUT([HAVE_IF_DATA_IFI_DATALEN], [/* Define if \'struct if_data\' has an \'ifi_datalen\' member. */
++#undef HAVE_IF_DATA_IFI_DATALEN])
++m4trace:configure.in:730: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SOCKADDR_IN_SIN_LEN])
++m4trace:configure.in:730: -1- m4_pattern_allow([^HAVE_SOCKADDR_IN_SIN_LEN$])
++m4trace:configure.in:730: -1- AH_OUTPUT([HAVE_SOCKADDR_IN_SIN_LEN], [/* Define if \'struct sockaddr_in\' has a \'sin_len\' member. */
++#undef HAVE_SOCKADDR_IN_SIN_LEN])
++m4trace:configure.in:749: -1- _m4_warn([obsolete], [The macro `AC_LANG_C' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:73: AC_LANG_C is expanded from...
++configure.in:749: the top level])
++m4trace:configure.in:753: -1- _m4_warn([obsolete], [The macro `AC_LANG_CPLUSPLUS' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:105: AC_LANG_CPLUSPLUS is expanded from...
++configure.in:753: the top level])
++m4trace:configure.in:756: -1- AC_DEFINE_TRACE_LITERAL([HAVE_PROPER])
++m4trace:configure.in:756: -1- m4_pattern_allow([^HAVE_PROPER$])
++m4trace:configure.in:771: -1- AC_SUBST([PROPER_INCLUDES])
++m4trace:configure.in:771: -1- AC_SUBST_TRACE([PROPER_INCLUDES])
++m4trace:configure.in:771: -1- m4_pattern_allow([^PROPER_INCLUDES$])
++m4trace:configure.in:772: -1- AC_SUBST([PROPER_LIBS])
++m4trace:configure.in:772: -1- AC_SUBST_TRACE([PROPER_LIBS])
++m4trace:configure.in:772: -1- m4_pattern_allow([^PROPER_LIBS$])
++m4trace:configure.in:788: -1- _m4_warn([obsolete], [The macro `AC_LANG_C' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:73: AC_LANG_C is expanded from...
++configure.in:788: the top level])
++m4trace:configure.in:794: -1- AC_DEFINE_TRACE_LITERAL([HAVE_EXPAT])
++m4trace:configure.in:794: -1- m4_pattern_allow([^HAVE_EXPAT$])
++m4trace:configure.in:810: -1- AC_SUBST([XML2CLICK])
++m4trace:configure.in:810: -1- AC_SUBST_TRACE([XML2CLICK])
++m4trace:configure.in:810: -1- m4_pattern_allow([^XML2CLICK$])
++m4trace:configure.in:811: -1- AC_SUBST([EXPAT_INCLUDES])
++m4trace:configure.in:811: -1- AC_SUBST_TRACE([EXPAT_INCLUDES])
++m4trace:configure.in:811: -1- m4_pattern_allow([^EXPAT_INCLUDES$])
++m4trace:configure.in:812: -1- AC_SUBST([EXPAT_LIBS])
++m4trace:configure.in:812: -1- AC_SUBST_TRACE([EXPAT_LIBS])
++m4trace:configure.in:812: -1- m4_pattern_allow([^EXPAT_LIBS$])
++m4trace:configure.in:846: -1- AC_SUBST([LINUX_CFLAGS])
++m4trace:configure.in:846: -1- AC_SUBST_TRACE([LINUX_CFLAGS])
++m4trace:configure.in:846: -1- m4_pattern_allow([^LINUX_CFLAGS$])
++m4trace:configure.in:877: -1- _m4_warn([obsolete], [The macro `AC_LANG_CPLUSPLUS' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:105: AC_LANG_CPLUSPLUS is expanded from...
++../../lib/m4sugar/m4sh.m4:523: AS_IF is expanded from...
++../../lib/autoconf/general.m4:1905: AC_CACHE_VAL is expanded from...
++../../lib/autoconf/general.m4:1918: AC_CACHE_CHECK is expanded from...
++configure.in:877: the top level])
++m4trace:configure.in:886: -1- _m4_warn([obsolete], [The macro `AC_LANG_CPLUSPLUS' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:105: AC_LANG_CPLUSPLUS is expanded from...
++../../lib/m4sugar/m4sh.m4:523: AS_IF is expanded from...
++../../lib/autoconf/general.m4:1905: AC_CACHE_VAL is expanded from...
++../../lib/autoconf/general.m4:1918: AC_CACHE_CHECK is expanded from...
++configure.in:886: the top level])
++m4trace:configure.in:893: -1- _m4_warn([obsolete], [The macro `AC_LANG_CPLUSPLUS' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:105: AC_LANG_CPLUSPLUS is expanded from...
++../../lib/m4sugar/m4sh.m4:523: AS_IF is expanded from...
++../../lib/autoconf/general.m4:1905: AC_CACHE_VAL is expanded from...
++../../lib/autoconf/general.m4:1918: AC_CACHE_CHECK is expanded from...
++configure.in:893: the top level])
++m4trace:configure.in:912: -1- AC_DEFINE_TRACE_LITERAL([HAVE_INT64_IS_LONG_LINUXMODULE])
++m4trace:configure.in:912: -1- m4_pattern_allow([^HAVE_INT64_IS_LONG_LINUXMODULE$])
++m4trace:configure.in:912: -1- AH_OUTPUT([HAVE_INT64_IS_LONG_LINUXMODULE], [/* Define if \'int64_t\' is typedefed to \'long\' in linuxmodule. */
++#undef HAVE_INT64_IS_LONG_LINUXMODULE])
++m4trace:configure.in:924: -1- AC_DEFINE_TRACE_LITERAL([HAVE_INT64_IS_LONG_LONG_LINUXMODULE])
++m4trace:configure.in:924: -1- m4_pattern_allow([^HAVE_INT64_IS_LONG_LONG_LINUXMODULE$])
++m4trace:configure.in:924: -1- AH_OUTPUT([HAVE_INT64_IS_LONG_LONG_LINUXMODULE], [/* Define if \'int64_t\' is typedefed to \'long long\' in linuxmodule. */
++#undef HAVE_INT64_IS_LONG_LONG_LINUXMODULE])
++m4trace:configure.in:933: -1- _m4_warn([obsolete], [The macro `AC_LANG_C' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:73: AC_LANG_C is expanded from...
++../../lib/m4sugar/m4sh.m4:523: AS_IF is expanded from...
++../../lib/autoconf/general.m4:1905: AC_CACHE_VAL is expanded from...
++../../lib/autoconf/general.m4:1918: AC_CACHE_CHECK is expanded from...
++configure.in:933: the top level])
++m4trace:configure.in:935: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LINUX_SKBUFF_SECURITY])
++m4trace:configure.in:935: -1- m4_pattern_allow([^HAVE_LINUX_SKBUFF_SECURITY$])
++m4trace:configure.in:935: -1- AH_OUTPUT([HAVE_LINUX_SKBUFF_SECURITY], [/* Define if \'struct sk_buff\' has a \'security\' member. */
++#undef HAVE_LINUX_SKBUFF_SECURITY])
++m4trace:configure.in:943: -1- _m4_warn([obsolete], [The macro `AC_LANG_C' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:73: AC_LANG_C is expanded from...
++../../lib/m4sugar/m4sh.m4:523: AS_IF is expanded from...
++../../lib/autoconf/general.m4:1905: AC_CACHE_VAL is expanded from...
++../../lib/autoconf/general.m4:1918: AC_CACHE_CHECK is expanded from...
++configure.in:943: the top level])
++m4trace:configure.in:945: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LINUX_SKBUFF_FCLONE])
++m4trace:configure.in:945: -1- m4_pattern_allow([^HAVE_LINUX_SKBUFF_FCLONE$])
++m4trace:configure.in:945: -1- AH_OUTPUT([HAVE_LINUX_SKBUFF_FCLONE], [/* Define if \'struct sk_buff\' has an \'fclone\' member. */
++#undef HAVE_LINUX_SKBUFF_FCLONE])
++m4trace:configure.in:953: -1- _m4_warn([obsolete], [The macro `AC_LANG_C' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:73: AC_LANG_C is expanded from...
++../../lib/m4sugar/m4sh.m4:523: AS_IF is expanded from...
++../../lib/autoconf/general.m4:1905: AC_CACHE_VAL is expanded from...
++../../lib/autoconf/general.m4:1918: AC_CACHE_CHECK is expanded from...
++configure.in:953: the top level])
++m4trace:configure.in:955: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LINUX_SKB_SHINFO_TSO_SIZE])
++m4trace:configure.in:955: -1- m4_pattern_allow([^HAVE_LINUX_SKB_SHINFO_TSO_SIZE$])
++m4trace:configure.in:955: -1- AH_OUTPUT([HAVE_LINUX_SKB_SHINFO_TSO_SIZE], [/* Define if \'struct skb_shared_info\' has a \'tso_size\' member. */
++#undef HAVE_LINUX_SKB_SHINFO_TSO_SIZE])
++m4trace:configure.in:963: -1- _m4_warn([obsolete], [The macro `AC_LANG_C' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:73: AC_LANG_C is expanded from...
++../../lib/m4sugar/m4sh.m4:523: AS_IF is expanded from...
++../../lib/autoconf/general.m4:1905: AC_CACHE_VAL is expanded from...
++../../lib/autoconf/general.m4:1918: AC_CACHE_CHECK is expanded from...
++configure.in:963: the top level])
++m4trace:configure.in:965: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LINUX_SKB_SHINFO_GSO_SIZE])
++m4trace:configure.in:965: -1- m4_pattern_allow([^HAVE_LINUX_SKB_SHINFO_GSO_SIZE$])
++m4trace:configure.in:965: -1- AH_OUTPUT([HAVE_LINUX_SKB_SHINFO_GSO_SIZE], [/* Define if \'struct skb_shared_info\' has a \'gso_size\' member. */
++#undef HAVE_LINUX_SKB_SHINFO_GSO_SIZE])
++m4trace:configure.in:973: -1- _m4_warn([obsolete], [The macro `AC_LANG_C' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:73: AC_LANG_C is expanded from...
++../../lib/m4sugar/m4sh.m4:523: AS_IF is expanded from...
++../../lib/autoconf/general.m4:1905: AC_CACHE_VAL is expanded from...
++../../lib/autoconf/general.m4:1918: AC_CACHE_CHECK is expanded from...
++configure.in:973: the top level])
++m4trace:configure.in:975: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LINUX_SKB_SHINFO_UFO_SIZE])
++m4trace:configure.in:975: -1- m4_pattern_allow([^HAVE_LINUX_SKB_SHINFO_UFO_SIZE$])
++m4trace:configure.in:975: -1- AH_OUTPUT([HAVE_LINUX_SKB_SHINFO_UFO_SIZE], [/* Define if \'struct skb_shared_info\' has a \'ufo_size\' member. */
++#undef HAVE_LINUX_SKB_SHINFO_UFO_SIZE])
++m4trace:configure.in:983: -1- _m4_warn([obsolete], [The macro `AC_LANG_C' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:73: AC_LANG_C is expanded from...
++../../lib/m4sugar/m4sh.m4:523: AS_IF is expanded from...
++../../lib/autoconf/general.m4:1905: AC_CACHE_VAL is expanded from...
++../../lib/autoconf/general.m4:1918: AC_CACHE_CHECK is expanded from...
++configure.in:983: the top level])
++m4trace:configure.in:985: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LINUX_SKB_SHINFO_IP6_FRAG_ID])
++m4trace:configure.in:985: -1- m4_pattern_allow([^HAVE_LINUX_SKB_SHINFO_IP6_FRAG_ID$])
++m4trace:configure.in:985: -1- AH_OUTPUT([HAVE_LINUX_SKB_SHINFO_IP6_FRAG_ID], [/* Define if \'struct skb_shared_info\' has an \'ip6_frag_id\' member. */
++#undef HAVE_LINUX_SKB_SHINFO_IP6_FRAG_ID])
++m4trace:configure.in:988: -1- _m4_warn([obsolete], [The macro `AC_LANG_C' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/c.m4:73: AC_LANG_C is expanded from...
++configure.in:988: the top level])
++m4trace:configure.in:993: -1- AC_DEFINE_TRACE_LITERAL([HAVE_NET_ENABLE_TIMESTAMP])
++m4trace:configure.in:993: -1- m4_pattern_allow([^HAVE_NET_ENABLE_TIMESTAMP$])
++m4trace:configure.in:993: -1- AH_OUTPUT([HAVE_NET_ENABLE_TIMESTAMP], [/* Define if you have the \'net_enable_timestamp\' function. */
++#undef HAVE_NET_ENABLE_TIMESTAMP])
++m4trace:configure.in:1000: -1- AC_DEFINE_TRACE_LITERAL([HAVE_NETIF_TX_LOCK])
++m4trace:configure.in:1000: -1- m4_pattern_allow([^HAVE_NETIF_TX_LOCK$])
++m4trace:configure.in:1000: -1- AH_OUTPUT([HAVE_NETIF_TX_LOCK], [/* Define if you have the \'netif_tx_lock\' function. */
++#undef HAVE_NETIF_TX_LOCK])
++m4trace:configure.in:1010: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LINUXMODULE_DRIVER])
++m4trace:configure.in:1010: -1- m4_pattern_allow([^HAVE_LINUXMODULE_DRIVER$])
++m4trace:configure.in:1056: -1- AC_DEFINE_TRACE_LITERAL([HAVE_BSDMODULE_DRIVER])
++m4trace:configure.in:1056: -1- m4_pattern_allow([^HAVE_BSDMODULE_DRIVER$])
++m4trace:configure.in:1079: -1- AC_REQUIRE_AUX_FILE([install-sh])
++m4trace:configure.in:1079: -1- AC_SUBST([INSTALL_PROGRAM])
++m4trace:configure.in:1079: -1- AC_SUBST_TRACE([INSTALL_PROGRAM])
++m4trace:configure.in:1079: -1- m4_pattern_allow([^INSTALL_PROGRAM$])
++m4trace:configure.in:1079: -1- AC_SUBST([INSTALL_SCRIPT])
++m4trace:configure.in:1079: -1- AC_SUBST_TRACE([INSTALL_SCRIPT])
++m4trace:configure.in:1079: -1- m4_pattern_allow([^INSTALL_SCRIPT$])
++m4trace:configure.in:1079: -1- AC_SUBST([INSTALL_DATA])
++m4trace:configure.in:1079: -1- AC_SUBST_TRACE([INSTALL_DATA])
++m4trace:configure.in:1079: -1- m4_pattern_allow([^INSTALL_DATA$])
++m4trace:configure.in:1079: -1- AC_SUBST([INSTALL_IF_CHANGED])
++m4trace:configure.in:1079: -1- AC_SUBST_TRACE([INSTALL_IF_CHANGED])
++m4trace:configure.in:1079: -1- m4_pattern_allow([^INSTALL_IF_CHANGED$])
++m4trace:configure.in:1079: -1- AC_SUBST([CLICKINSTALL])
++m4trace:configure.in:1079: -1- AC_SUBST_TRACE([CLICKINSTALL])
++m4trace:configure.in:1079: -1- m4_pattern_allow([^CLICKINSTALL$])
++m4trace:configure.in:1080: -1- AC_SUBST([SUBMAKE])
++m4trace:configure.in:1080: -1- AC_SUBST_TRACE([SUBMAKE])
++m4trace:configure.in:1080: -1- m4_pattern_allow([^SUBMAKE$])
++m4trace:configure.in:1080: -1- AC_SUBST([GMAKE])
++m4trace:configure.in:1080: -1- AC_SUBST_TRACE([GMAKE])
++m4trace:configure.in:1080: -1- m4_pattern_allow([^GMAKE$])
++m4trace:configure.in:1081: -1- AC_SUBST([AUTOCONF])
++m4trace:configure.in:1081: -1- AC_SUBST_TRACE([AUTOCONF])
++m4trace:configure.in:1081: -1- m4_pattern_allow([^AUTOCONF$])
++m4trace:configure.in:1082: -1- AC_SUBST([perl5])
++m4trace:configure.in:1082: -1- AC_SUBST_TRACE([perl5])
++m4trace:configure.in:1082: -1- m4_pattern_allow([^perl5$])
++m4trace:configure.in:1082: -1- AC_SUBST([localperl5])
++m4trace:configure.in:1082: -1- AC_SUBST_TRACE([localperl5])
++m4trace:configure.in:1082: -1- m4_pattern_allow([^localperl5$])
++m4trace:configure.in:1082: -1- AC_SUBST([PERL])
++m4trace:configure.in:1082: -1- AC_SUBST_TRACE([PERL])
++m4trace:configure.in:1082: -1- m4_pattern_allow([^PERL$])
++m4trace:configure.in:1132: -1- AC_SUBST([INSTALL_INFO])
++m4trace:configure.in:1132: -1- AC_SUBST_TRACE([INSTALL_INFO])
++m4trace:configure.in:1132: -1- m4_pattern_allow([^INSTALL_INFO$])
++m4trace:configure.in:1152: -1- AC_SUBST([MAKEINFO])
++m4trace:configure.in:1152: -1- AC_SUBST_TRACE([MAKEINFO])
++m4trace:configure.in:1152: -1- m4_pattern_allow([^MAKEINFO$])
++m4trace:configure.in:1153: -1- AC_SUBST([TEXI2DVI])
++m4trace:configure.in:1153: -1- AC_SUBST_TRACE([TEXI2DVI])
++m4trace:configure.in:1153: -1- m4_pattern_allow([^TEXI2DVI$])
++m4trace:configure.in:1154: -1- AC_SUBST([INSTALL_INFO])
++m4trace:configure.in:1154: -1- AC_SUBST_TRACE([INSTALL_INFO])
++m4trace:configure.in:1154: -1- m4_pattern_allow([^INSTALL_INFO$])
++m4trace:configure.in:1155: -1- AC_SUBST([POD2MAN])
++m4trace:configure.in:1155: -1- AC_SUBST_TRACE([POD2MAN])
++m4trace:configure.in:1155: -1- m4_pattern_allow([^POD2MAN$])
++m4trace:configure.in:1185: -1- AC_SUBST([clickdatadir])
++m4trace:configure.in:1185: -1- AC_SUBST_TRACE([clickdatadir])
++m4trace:configure.in:1185: -1- m4_pattern_allow([^clickdatadir$])
++m4trace:configure.in:1187: -1- AC_DEFINE_TRACE_LITERAL([CLICK_BINDIR])
++m4trace:configure.in:1187: -1- m4_pattern_allow([^CLICK_BINDIR$])
++m4trace:configure.in:1188: -1- AC_DEFINE_TRACE_LITERAL([CLICK_LIBDIR])
++m4trace:configure.in:1188: -1- m4_pattern_allow([^CLICK_LIBDIR$])
++m4trace:configure.in:1189: -1- AC_DEFINE_TRACE_LITERAL([CLICK_DATADIR])
++m4trace:configure.in:1189: -1- m4_pattern_allow([^CLICK_DATADIR$])
++m4trace:configure.in:1261: -1- AC_SUBST([provisions])
++m4trace:configure.in:1261: -1- AC_SUBST_TRACE([provisions])
++m4trace:configure.in:1261: -1- m4_pattern_allow([^provisions$])
++m4trace:configure.in:1285: -1- _m4_warn([obsolete], [The macro `AC_OUTPUT_COMMANDS' is obsolete.
++You should run autoupdate.], [../../lib/autoconf/status.m4:853: AC_OUTPUT_COMMANDS is expanded from...
++configure.in:1285: the top level])
++m4trace:configure.in:1286: -1- AC_CONFIG_FILES([$config_files])
++m4trace:configure.in:1286: -1- _m4_warn([obsolete], [AC_OUTPUT should be used without arguments.
++You should run autoupdate.], [])
++m4trace:configure.in:1286: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs])
++m4trace:configure.in:1286: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
++m4trace:configure.in:1286: -1- m4_pattern_allow([^LIB@&t@OBJS$])
++m4trace:configure.in:1286: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs])
++m4trace:configure.in:1286: -1- AC_SUBST_TRACE([LTLIBOBJS])
++m4trace:configure.in:1286: -1- m4_pattern_allow([^LTLIBOBJS$])
++m4trace:configure.in:1286: -1- AC_SUBST_TRACE([top_builddir])
++m4trace:configure.in:1286: -1- AC_SUBST_TRACE([srcdir])
++m4trace:configure.in:1286: -1- AC_SUBST_TRACE([abs_srcdir])
++m4trace:configure.in:1286: -1- AC_SUBST_TRACE([top_srcdir])
++m4trace:configure.in:1286: -1- AC_SUBST_TRACE([abs_top_srcdir])
++m4trace:configure.in:1286: -1- AC_SUBST_TRACE([builddir])
++m4trace:configure.in:1286: -1- AC_SUBST_TRACE([abs_builddir])
++m4trace:configure.in:1286: -1- AC_SUBST_TRACE([abs_top_builddir])
++m4trace:configure.in:1286: -1- AC_SUBST_TRACE([INSTALL])
+diff -Nurb click-1.6.0/bsdmodule/Makefile click-1.6.0-27/bsdmodule/Makefile
+--- click-1.6.0/bsdmodule/Makefile     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/bsdmodule/Makefile  2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,152 @@
++## Click bsdmodule driver Makefile ##
++SHELL = /bin/sh
++
++srcdir := .
++top_srcdir := ..
++top_builddir := ..
++subdir := bsdmodule
++
++prefix = /d/click/click-1.6.0-27/inst
++exec_prefix = /d/click/click-1.6.0-27/inst
++bindir = /d/click/click-1.6.0-27/inst/bin
++sbindir = /d/click/click-1.6.0-27/inst/sbin
++libdir = /d/click/click-1.6.0-27/inst/lib
++freebsd_includedir = /usr/include
++freebsd_srcdir = NONE
++
++VPATH = .:$(top_srcdir)/lib:$(top_srcdir)/$(subdir)
++
++CC = gcc -W -Wall
++CPP = gcc -W -Wall -E
++CXX = g++ -w -W -Wall -fno-exceptions -fno-rtti  -D__SMP__
++CXXCPP = g++ -W -Wall  -E
++LD = ld
++STRIP = strip
++PERL = perl
++INSTALL = /usr/bin/install -c
++INSTALL_DATA = /usr/bin/install -c -m 644
++mkinstalldirs = ../mkinstalldirs
++
++ifeq ($(V),1)
++ccompile = $(COMPILE) $(1)
++cxxcompile = $(CXXCOMPILE) $(1)
++else
++ccompile = @/bin/echo ' ' $(2) $< && $(COMPILE) $(1)
++cxxcompile = @/bin/echo ' ' $(2) $< && $(CXXCOMPILE) $(1)
++endif
++
++quiet_cmd_cxxcompile = CXX $(quiet_modtag) $(subst $(obj)/,,$@)
++cmd_cxxcompile = $(CXXCOMPILE) -c -o $@ $<
++
++quiet_cmd_ccompile = CC $(quiet_modtag) $(subst $(obj)/,,$@)
++cmd_ccompile = $(COMPILE) -c -o $@ $<
++
++.SUFFIXES:
++.SUFFIXES: .S .c .cc .o .s .ii
++
++.c.o:
++      $(COMPILE) -c $<
++.s.o:
++      $(COMPILE) -c $<
++.S.o:
++      $(COMPILE) -c $<
++.cc.o:
++      $(CXXCOMPILE) -c $<
++.cc.s:
++      $(CXXCOMPILE) -S $<
++.cc.ii:
++      $(CXXCOMPILE) -E $< > $@
++
++
++ifndef INSTALLOBJS
++INSTALLOBJS = click.ko
++endif
++
++GENERIC_OBJS = string.o straccum.o nameinfo.o \
++      bitvector.o vectorv.o templatei.o bighashmap_arena.o \
++      ipaddress.o ipflowid.o etheraddress.o \
++      packet.o in_cksum.o \
++      error.o timestamp.o glue.o task.o timer.o atomic.o gaprate.o \
++      element.o \
++      confparse.o variableenv.o lexer.o elemfilter.o \
++      routerthread.o router.o master.o handlercall.o notifier.o \
++      integers.o crc32.o iptable.o \
++      driver.o \
++      $(EXTRA_DRIVER_OBJS)
++
++BSDMODULE_OBJS = config.o sched.o module.o module_c.o \
++      clickfs.o clickfs_vnops.o clickfs_tree.o clickfs_element.o
++
++EXTRA_DRIVER_OBJS = 
++
++OBJS = $(GENERIC_OBJS) $(ELEMENT_OBJS) $(BSDMODULE_OBJS) elements.o
++
++CPPFLAGS =  -DCLICK_BSDMODULE -DBSD_NETISRSCHED
++CFLAGS =  -O2 -g
++CXXFLAGS =  -O2 -g
++
++DEFS = -DHAVE_CONFIG_H 
++INCLUDES = -nostdinc -I$(top_builddir)/include -I$(top_srcdir)/include \
++      -I$(srcdir) -I$(top_srcdir) -I. -I$(freebsd_includedir)
++LDFLAGS = 
++LIBS = 
++
++CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS)
++CXXLD = $(CXX)
++CXXLINK = $(CXXLD) $(CXXFLAGS) $(LDFLAGS) -o $@
++COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(CFLAGS) $(LDFLAGS) -o $@
++
++all: $(INSTALLOBJS)
++
++ifneq ($(MAKECMDGOALS),clean)
++-include elements.mk
++endif
++
++click.ko: Makefile vnode_if.h vnode_if_newproto.h vnode_if_typedef.h $(OBJS)
++      $(LD) -Bshareable -o click.ko $(OBJS)
++
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++      cd $(top_builddir) \
++        && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
++
++elemlist:
++      @/bin/rm -f elements.conf
++      @$(MAKE) elements.conf
++elements.conf: $(top_builddir)/config.status $(top_builddir)/click-buildtool
++      echo "bsdmodule  app aqm ethernet icmp ip standard tcpudp" | $(top_builddir)/click-buildtool findelem -r bsdmodule -p $(top_srcdir) > elements.conf
++elements.mk: elements.conf $(top_builddir)/click-buildtool
++      $(top_builddir)/click-buildtool elem2make < elements.conf > elements.mk
++elements.cc: elements.conf $(top_builddir)/click-buildtool
++      $(top_builddir)/click-buildtool elem2export < elements.conf > elements.cc
++      @rm -f elements.d
++
++vnode_if.h: $(freebsd_srcdir)/kern/vnode_if.src
++      /usr/bin/awk -f $(freebsd_srcdir)/tools/vnode_if.awk $(freebsd_srcdir)/kern/vnode_if.src -h
++vnode_if_newproto.h: $(freebsd_srcdir)/kern/vnode_if.src
++      /usr/bin/awk -f $(freebsd_srcdir)/tools/vnode_if.awk $(freebsd_srcdir)/kern/vnode_if.src -p
++vnode_if_typedef.h: $(freebsd_srcdir)/kern/vnode_if.src
++      /usr/bin/awk -f $(freebsd_srcdir)/tools/vnode_if.awk $(freebsd_srcdir)/kern/vnode_if.src -q
++
++
++DEPFILES := $(wildcard *.d)
++ifneq ($(DEPFILES),)
++include $(DEPFILES)
++endif
++
++install: $(INSTALLOBJS)
++      $(mkinstalldirs) $(DESTDIR)$(libdir)
++      for i in $(INSTALLOBJS); do $(INSTALL_DATA) $$i $(DESTDIR)$(libdir)/$$i; done
++install-man:
++      :
++uninstall:
++      for i in $(INSTALLOBJS); do /bin/rm -f $(DESTDIR)$(libdir)/$$i; done
++
++clean:
++      -rm -f *.d *.o click.ko elements.mk elements.cc elements.conf \
++      vnode_if.h vnode_if_newproto.h vnode_if_typedef.h
++distclean: clean
++      -rm -f Makefile
++
++.PHONY: all clean distclean elemlist install uninstall
+diff -Nurb click-1.6.0/click-buildtool click-1.6.0-27/click-buildtool
+--- click-1.6.0/click-buildtool        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/click-buildtool     2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,1326 @@
++#! /bin/sh
++
++# click-buildtool -- build tools for Click
++# Eddie Kohler
++#
++# Copyright (c) 2000-2001 Massachusetts Institute of Technology
++# Copyright (c) 2000-2006 Mazu Networks, Inc.
++# Copyright (c) 2001-2003 International Computer Science Institute
++# Copyright (c) 2004-2007 Regents of the University of California
++#
++# Permission is hereby granted, free of charge, to any person obtaining a
++# copy of this software and associated documentation files (the "Software"),
++# to deal in the Software without restriction, subject to the conditions
++# listed in the Click LICENSE file. These conditions include: you must
++# preserve this copyright notice, and you cannot mention the copyright
++# holders in advertising related to the Software without their permission.
++# The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++# notice is a summary of the Click LICENSE file; the license in that file is
++# legally binding.
++
++prefix=/d/click/click-1.6.0-27/inst
++exec_prefix=/d/click/click-1.6.0-27/inst
++bindir=/d/click/click-1.6.0-27/inst/bin
++datarootdir=/d/click/click-1.6.0-27/inst/share
++datadir=/d/click/click-1.6.0-27/inst/share
++clickdatadir=/d/click/click-1.6.0-27/inst/share/click
++LINUXMODULE_2_6=1
++gmake=make
++
++verbose=""
++elem2=""
++default_provisions="i686 i386 i586 int64 linux linux_2_6 pcap"
++driver_provisions=" userlevel linuxmodule"
++
++trap "exit 1" HUP
++
++# find a good version of awk
++if test -x /usr/bin/gawk; then
++    awk=gawk
++elif test -x /usr/bin/nawk; then
++    awk=nawk
++else
++    awk=awk
++fi
++
++echo_n () {
++      # suns can't echo -n, and Mac OS X can't echo "x\c"
++      echo "$@" | tr -d '
++'
++}
++
++
++############
++# FINDELEM #
++############
++
++findelem_usage () {
++    echo "Usage: click-buildtool findelem [-a] [-V] [-p PREFIX] < [FILES AND DIRECTORIES]
++Try 'click-buildtool findelem --help' for more information." 1>&2
++    exit 1
++}
++
++elementmap_provisions () {
++    elementmap="$1"
++    grep "^<elementmap \|^<entry " <"$elementmap" | $awk '/ name="([^"]*)"/ {
++  sub(/.* name="/, "", $0);
++  sub(/".*/, "", $0);
++  prov[$0] = 1;
++}
++/ provides="([^"]*)"/ {
++  sub(/.* provides="/, "", $0);
++  sub(/".*/, "", $0);
++  split($0, d, / +/);
++  for (j in d) prov[d[j]] = 1;
++}
++END {
++  # delete references to drivers
++  delete prov["userlevel"]; delete prov["linuxmodule"]; 
++  delete prov["bsdmodule"]; delete prov["ns"];
++  for (j in prov) print j;
++}'
++}
++
++findelem () {
++    pfx=
++    all=
++    provisions=
++    filenames=
++    standards=
++    unprovisions='false 0'
++    while [ x"$1" != x ]; do
++    case $1 in
++    -S|--s|--st|--sta|--stan|--stand|--standa|--standar|--standard|--standards)
++      standards=1; shift 1;;
++    -p|--pre|--pref|--prefi|--prefix)
++      if test $# -lt 2; then findelem_usage; fi
++      shift 1; pfx="$1/"; shift 1;;
++    -p*)
++      pfx="`echo "$1" | sed 's/^-p//'`"/; shift 1;;
++    --pre=*|--pref=*|--prefi=*|--prefix=*)
++      pfx="`echo "$1" | sed 's/^[^=]*=//'`"/; shift 1;;
++    -f|--filenames)
++      filenames=f; shift 1;;
++    -F|--filename-|--filename-p|--filename-pa|--filename-pai|--filename-pair|--filename-pairs)
++      filenames=F; shift 1;;
++    -V|--verb|--verbo|--verbos|--verbose)
++      verbose=1; shift 1;;
++    -a|--a|--al|--all)
++      all=1; shift 1;;
++    -r|--pro|--prov|--provi|--provid|--provide)
++      if test $# -lt 2; then findelem_usage; fi
++      shift 1; provisions="$1
++$provisions"; shift 1;;
++    -r*)
++      provisions="`echo "$1" | sed 's/^-r//'`
++$provisions"; shift 1;;
++    --pro=*|--prov=*|--provi=*|--provid=*|--provide=*)
++      provisions="`echo "$1" | sed 's/^[^=]*=//'`
++$provisions"; shift 1;;
++    -x|--u|--un|--unp|--unpr|--unpro|--unprov|--unprovi|--unprovid|--unprovide)
++      if test $# -lt 2; then findelem_usage; fi
++      shift 1; unprovisions="$1
++$unprovisions"; shift 1;;
++    -x*)
++      unprovisions="`echo "$1" | sed 's/^-x//'`
++$unprovisions"; shift 1;;
++    --u=*|--un=*|--unp=*|--unpr=*|--unpro=*|--unprov=*|--unprovi=*|--unprovid=*|--unprovide=*)
++      unprovisions="`echo "$1" | sed 's/^[^=]*=//'`
++$unprovisions"; shift 1;;
++    -e|--e|--el|--ele|--elem|--eleme|--elemen|--element|--elementm|--elementma|--elementmap)
++      if test $# -lt 2; then findelem_usage; fi
++      shift 1; provisions="`elementmap_provisions "$1"`
++$provisions"; shift 1;;
++    -e*)
++      emap="`echo "$1" | sed 's/^-e//'`"
++      provisions="`elementmap_provisions "$emap"`
++$provisions"; shift 1;;
++    --e=*|--el=*|--ele=*|--elem=*|--eleme=*|--elemen=*|--element=*|--elementm=*|--elementma=*|--elementmap=*)
++      emap="`echo '$1' | sed 's/^[^=]*=//'`"
++      provisions="`elementmap_provisions "$emap"`
++$provisions"; shift 1;;
++    -P|--pa|--pac|--pack|--packa|--packag|--package)
++      provisions="`elementmap_provisions "${clickdatadir}/elementmap.xml"`
++$provisions"; shift 1;;
++    -h|--h|--he|--hel|--help)
++      cat <<'EOF' 1>&2
++'Click-buildtool findelem' locates valid Click element source code. It starts
++with a collection of source code, then eliminates files whose requirements
++are not available until reaching a stable set of sources. It expects a list of
++files and directories on standard input. Directories are searched for .cc/.c
++source files. Only files containing EXPORT_ELEMENT() or ELEMENT_PROVIDES() are
++considered. The initial list of available requirements is the list of
++requirements specified with '-r', plus the list of EXPORT_ELEMENT() and
++ELEMENT_PROVIDES() keywords.
++
++Usage: click-buildtool findelem [OPTIONS] < [FILES AND DIRECTORIES]
++
++Options:
++  -a, --all                  Include all subdirectories of 'elements' rather
++                             than reading standard input, and pretend all
++                             requirements are available (except for '-x').
++  -V, --verbose              Print more information about dependency checking.
++  -p, --prefix PREFIX        Prepend PREFIX to every file and/or directory.
++  -r, --provide REQ          Provide requirement(s) in REQ.
++  -e, --elementmap EMAP      Provide requirement(s) from EMAP.
++  -P, --package              Provide requirement(s) from default elementmap.
++  -S, --standards            Mark standard elements as available.
++  -x, --unprovide REQ        Mark requirement(s) REQ as unavailable.
++  -f, --filenames            Output filenames only.
++  -F, --filename-pairs       Output "sourcefile:headerfile" pairs for elements.
++  -h, --help                 Print this message and exit.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++      exit 0;;
++    *)
++      findelem_usage;;
++    esac
++    done
++
++    if test -n "$verbose" -a -n "$pfx"; then
++      echo "Prefix: $pfx" 1>&2
++    fi
++
++    # add defaults to provisions
++    provisions="$provisions $default_provisions"
++
++    # add standards to provisions if necessary
++    if test "x$standards" != x; then
++      provisions="$provisions AddressInfo AlignmentInfo ErrorElement PortInfo ScheduleInfo Storage"
++    fi
++
++    # expand provisions and unprovisions: require one per line
++    provisions=`echo "$provisions" | tr -s ' \011\015\014\013' '\012'`
++    unprovisions=`echo "$unprovisions" | tr -s ' \011\015\014\013' '\012'`
++    if test -n "$verbose" -a -n "$provisions"; then
++      echo 1>&2
++      echo "Provisions: $provisions" 1>&2
++    fi
++    if test -n "$verbose" -a -n "$unprovisions"; then
++      echo 1>&2
++      echo "Unprovisions: $unprovisions" 1>&2
++    fi
++
++    # expand list of files
++    if test -n "$all"; then
++      fdir=${pfx}
++      test -d ${pfx}elements && fdir=${pfx}elements
++      first_files=`cd $fdir >/dev/null && ls`
++      bad_first_files=`echo "$first_files
++$unprovisions" | sort | uniq -d`
++      first_files=`echo "$first_files
++$bad_first_files" | sort | uniq -u`
++    else
++      first_files=`cat`
++    fi
++
++    files=""
++    for i in $first_files; do
++      ppfx="$pfx"
++      if test -d "${pfx}elements/$i" && echo "$i" | grep -v '^\.' >/dev/null; then
++          ppfx="${pfx}elements/"
++      fi
++      if test -d "${ppfx}$i"; then
++          files="$files
++"`find ${ppfx}$i -follow \( -name \*.cc -o -name \*.c \) -print | grep -v '/[.,][^/]*$'`
++      elif test -r "${ppfx}$i"; then
++          files="$files
++${ppfx}$i"
++      fi
++    done
++    files=`echo "$files" | sort | uniq | grep .`
++
++    # die if no files
++    if test -z "$files"; then
++      echo "no files found" 1>&2
++      exit 1
++    fi
++
++    # if '$all', then accept all dependencies except the unprovisions
++    dep_test='<='
++    if test -n "$all"; then
++      dep_test='<'
++    fi
++
++    # check dependencies: generate a list of bad files, then remove those files
++    # from the list of good files
++
++    # first remove files that provide an unprovision
++    awk_exports=`echo "$unprovisions" | sed 's/\(..*\)/dep["\1"]=-1;/'`
++    bad_files=`egrep '^EXPORT_ELEMENT|^ELEMENT_PROVIDES' $files | sed 's/EXPORT_ELEMENT[      ]*(\(.*\)).*/\1/
++s/ELEMENT_PROVIDES[   ]*(\(.*\)).*/\1/' | $awk -F: 'BEGIN {OFS="";'"$awk_exports"'}
++{
++  split($2, deps, / +/);
++  for (j in deps) {
++    if (dep[deps[j]] < 0) {
++      print $1;
++      break;
++    }
++  }
++}' | sort | uniq`
++    if test -n "$verbose" -a -n "$bad_files"; then
++      echo 1>&2
++      echo "Files: $files" 1>&2
++      echo 1>&2
++      echo "Bad files: $bad_files" 1>&2
++    fi
++    if test -n "$bad_files"; then
++      files=`echo "$files
++$bad_files" | sort | uniq -u`
++    fi
++
++    # then cycle, removing files that require something not provided
++    while true; do
++      provides=`egrep '^EXPORT_ELEMENT|^ELEMENT_PROVIDES' $files | sed 's/.*(\(.*\)).*/\1/' | tr ' \011' '\012'`
++      awk_exports=`echo "$provides"'
++'"$provisions" | sed 's/\(..*\)/dep["\1"]=1;/'`"
++"`echo "$unprovisions" | sed 's/\(..*\)/dep["\1"]=-1;/'`
++      new_bad_files=`grep '^ELEMENT_REQUIRES' $files | sed 's/ELEMENT_REQUIRES[       ]*(\(.*\)).*/\1/' | $awk -F: 'BEGIN {OFS="";'"$awk_exports"'dep["true"]=1; dep["1"]=1;}
++{
++  split($2, deps, / +/);
++  for (j in deps) {
++    i = deps[j]
++    if (dep[i] <= 0) {
++      bad = 1;
++      split(i, or_deps, /\|+/);
++      for (k in or_deps) {
++      if (!(dep[or_deps[k]] '"$dep_test"' 0))
++        bad = 0;
++      }
++      if (bad) {
++      print $1;
++      break;
++      }
++    }
++  }
++}' | sort | uniq`
++      if test -n "$verbose"; then
++          echo 1>&2
++          echo "Files: $files" 1>&2
++          echo 1>&2
++          echo "Bad files: $new_bad_files" 1>&2
++      fi
++      if test -z "$new_bad_files"; then
++          break
++      else
++          files=`echo "$files
++$new_bad_files" | sort | uniq -u`
++          bad_files="$new_bad_files
++$bad_files"
++      fi
++    done
++
++    header_files=`echo "$files" | sed 's/\.cc/\.hh/'`
++
++    # generate output
++    if test "$filenames" = f; then
++      outscriptlet=i
++    elif test "$filenames" = F; then
++      outscriptlet='i, ":", header[i]'
++    else
++      echo "# Generated by 'click-buildtool findelem' on" `date`
++      outscriptlet='i, "\t", header[i], "\t", ex'
++    fi
++
++    egrep '^ELEMENT_PROVIDES|^EXPORT_ELEMENT|^ELEMENT_HEADER|^ELEMENT_LIBS|^class|^[  ]*const *char *\* *class_name|^[        ]*static *void *static_[ic]|^}' $files $header_files /dev/null 2>/dev/null | $awk -F: 'BEGIN {
++  OFS = ""; cur_class = ""; line_warned = 0; nexports = 0
++}
++/:class[      ]/ {
++  sub(/^class[        ]*/, "", $2);
++  sub(/[      ]*$/, "", $2);
++  cur_class = $2;
++  next
++}
++/:}/ {
++  cur_class = "";
++  next
++}
++/:EXPORT_ELEMENT/ {
++  sub(/.*EXPORT_ELEMENT[      ]*\([   ]*/, "", $2);
++  sub(/[      ]*\).*/, "", $2);
++  if (exports[$1] != "") {
++    exports[$1] = exports[$1] " " $2
++  } else {
++    exports[$1] = $2; nexports++
++  }
++  next
++}
++/:ELEMENT_PROVIDES/ {
++  if (!($1 in exports)) {
++    exports[$1] = ""; nexports++
++  }
++  next
++}
++/:ELEMENT_HEADER/ {
++  sub(/.*ELEMENT_HEADER[      ]*\(/, "", $2)
++  sub(/\).*/, "", $2)
++  header[$1] = $2
++  next
++}
++/:ELEMENT_LIBS/ {
++  sub(/.*ELEMENT_LIBS[        ]*\(\(?/, "", $2)
++  sub(/\)?\).*/, "", $2)
++  gsub(/[     ][      ]*/, ";", $2)
++  gsub(/-L;/, "-L", $2)
++  libs[$1] = $2
++  next
++}
++/class_name.*return[  ]"/ {
++  sub(/.*return[      ]*"/, "", $0);
++  sub(/".*/, "", $0);
++  class_name[cur_class] = $0
++  next
++}
++/class_name/ {
++  print $1, ": ", cur_class, "::class_name method malformed" | "cat 1>&2"
++  if (++line_warned == 1)
++    print "  (class_name methods must be written on a single line.)" | "cat 1>&2"
++}
++/static_initialize/ {
++  static_initialize[cur_class] = 1
++  next
++}
++/static_cleanup/ {
++  static_cleanup[cur_class] = 1
++  next
++}
++END {
++  if (nexports == 0)
++    print "click-buildtool: No elements found" | "cat 1>&2"
++  if (line_warned || nexports == 0)
++    system("kill -HUP '$$'")
++  for (i in exports) {
++    ex = exports[i]
++    if (ex == "") {
++      print i
++    } else {
++      if (header[i] == "") {
++      header[i] = "\"" i "\""; sub(/\.cc/, ".hh", header[i])
++      }
++      split(ex, exes, / /); ex = ""
++      for (j in exes) {
++        dash = index(exes[j], "-")
++      if (dash == 0) {
++        dash = length(exes[j]);
++          if (class_name[exes[j]] == "")
++            exes[j] = exes[j] "-" exes[j];
++          else
++            exes[j] = exes[j] "-" class_name[exes[j]];
++        }
++      ex = ex exes[j] " ";
++      klass = substr(exes[j], 1, dash)
++        if (static_initialize[klass]) {
++        ex = ex klass "-!si ";
++        static_initialize[klass] = 0
++      }
++        if (static_cleanup[klass]) {
++        ex = ex klass "-!sc ";
++        static_cleanup[klass] = 0
++      }
++      }
++      if (libs[i])
++      ex = ex "-!lib" libs[i] " ";
++      print '"$outscriptlet"'
++    }
++  }
++}' | sort
++
++  exit $?
++}
++
++
++
++##########################
++# ELEM2MAKE/ELEM2PACKAGE #
++##########################
++
++elem2xxx_usage () {
++    echo_n "Usage: click-buildtool elem2$elem2 [-p PREFIX] [-V]" 1>&2
++    if test "$elem2" = package; then echo_n " PKGNAME" 1>&2; fi
++    echo " < elements.conf
++Try 'click-buildtool elem2$elem2 --help' for more information." 1>&2
++    exit 1
++}
++
++elem2make () {
++    driver=""
++    makevar=""
++    date=`date`
++    linux26=x
++    while [ x"$1" != x ]; do
++    case $1 in
++    -t|--d|--dr|--dri|--driv|--drive|--driver)
++      if test $# -lt 2; then elem2xxx_usage; fi
++      shift 1; driver="$1"; shift 1;;
++    -t*)
++      driver=`echo "$1" | sed 's/^-D//'`; shift 1;;
++    --d=*|--dr=*|--dri=*|--driv=*|--drive=*|--driver=*)
++      driver=`echo "$1" | sed 's/^[^=]*=//'`; shift 1;;
++    --t|--ta|--tar|--targ|--targe|--target)
++      if test $# -lt 2; then elem2xxx_usage; fi
++      shift 1; driver="$1"; shift 1;;
++    --t=*|--ta=*|--tar=*|--targ=*|--targe=*|--target=*)
++      driver=`echo "$1" | sed 's/^[^=]*=//'`; shift 1;;
++    -v|--m|--ma|--mak|--make|--make-|--make-v|--make-va|--make-var|--make-vari|--make-varia|--make-variab|--make-variabl|--make-variable)
++      if test $# -lt 2; then elem2xxx_usage; fi
++      shift 1; makevar="$1"; shift 1;;
++    -v*)
++      makevar=`echo "$1" | sed 's/^-v//'`; shift 1;;
++    --m=*|--ma=*|--mak=*|--make=*|--make-=*|--make-v=*|--make-va=*|--make-var=*|--make-vari=*|--make-varia=*|--make-variab=*|--make-variabl=*|--make-variable=*)
++      makevar=`echo "$1" | sed 's/^[^=]*=//'`; shift 1;;
++    -x|--e|--ex|--exc|--excl|--exclu|--exclud|--exclude)
++        if test $# -lt 2; then elem2xxx_usage; fi
++      shift 1
++      for i in $1; do excludes=";/^$i"' \\$'"/d$excludes"; done
++      shift 1;;
++    -x*)
++      this_exclude=`echo "$1" | sed 's/^-p//'`
++      for i in $this_exclude; do excludes=";/^$i"' \\$'"/d$excludes"; done
++      shift 1;;
++    --e=*|--ex=*|--exc=*|--excl=*|--exclu=*|--exclud=*|--exclude=*)
++      this_exclude=`echo "$1" | sed 's/^[^=]*=//'`
++      for i in $this_exclude; do excludes=";/^$i"' \\$'"/d$excludes"; done
++      shift 1;;
++    --l|--li|--lin|--linu|--linux|--linux2|--linux26)
++      linux26=1; shift 1;;
++    --no-l|--no-li|--no-lin|--no-linu|--no-linux|--no-linux2|--no-linux26)
++      linux26=0; shift 1;;
++    -V|--verb|--verbo|--verbos|--verbose)
++      verbose=1; shift 1;;
++    -h|--h|--he|--hel|--help)
++      cat <<'EOF' 1>&2
++'Click-buildtool elem2make' reads an 'elements.conf' file generated by
++'click-buildtool findelem' on the standard input, and writes a Makefile
++fragment defining the ELEMENT_OBJS variable to the standard output.
++
++Usage: click-buildtool elem2make [-t DRIVER] [-V] < elements.conf
++
++Options:
++  -t, --driver DRIVER      Set target driver to DRIVER ('userlevel',
++                           'linuxmodule', 'bsdmodule', 'ns', or 'tool').
++  -v, --make-variable N    Use make variable N.
++      --linux26            Generate Linux 2.6-style makefile fragment.
++  -x, --exclude FILE       Do not include FILE.
++  -V, --verbose            Print more information.
++  -h, --help               Print this message and exit.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++      exit 0;;
++    *)
++      elem2xxx_usage;;
++    esac
++    done
++
++    L=
++    defmakevar="ELEMENT_OBJS"
++    if test -n "$driver"; then
++      if test "$driver" = 'user' -o "$driver" = 'userlevel'; then
++          L=u
++      elif test "$driver" = 'kernel' -o "$driver" = 'linuxmodule'; then
++          L=k
++          test "$linux26" = x && linux26="$LINUXMODULE_2_6"
++      elif test "$driver" = 'bsdmodule'; then
++          L=b
++      elif test "$driver" = 'ns' -o "$driver" = 'nsmodule'; then
++          L=n
++      elif test "$driver" = 'tool'; then
++          L=t
++      else
++          echo "Unknown driver $driver" 1>&2
++          exit 1
++      fi
++    fi
++    osuffix=".${L}o"
++    if test -z "$makevar"; then
++      makevar=$defmakevar
++    fi
++
++    # expand list of files
++    elemconf=`cat`
++    files=`echo "$elemconf" | grep -v '^#' | sed 's/[         ].*//'`
++
++    # find libraries
++    libs=`echo "$elemconf" | sed '/-!lib/!d;s/^.*-!lib//g;s/;/ /g' | grep .`
++    if test -n "$libs"; then
++      libs=`echo "$libs" | sed 's/^\([^ ][^ ]*\) *$/\1 \1/'`
++      while echo "$libs" | grep ' [^ ].* [^ ]' >/dev/null; do
++          libs=`echo "$libs" | sed '/ [^ ].* [^ ]/s/^\([^ ][^ ]*\)  *\([^ ][^ ]*\) /\1 \2\\
++\2 /'`
++      done
++    fi
++    test -n "$libs" && libs=`echo "$libs" | tsort`
++
++    # massage awk script based on Linux 2.6 or not
++    if test "$linux26" = 1; then
++      set_subdir_scriptlet='
++          if (dir != "" && substr(dir, 1, 1) == "/")
++              subdirs[dirid] = dir;
++          else
++              subdirs[dirid] = "$(obj)/" dir;
++        '
++      pattern_scriptlet='$(addprefix $(obj)/,$('"$makevar"'__", i, ")): $(obj)/%'"$osuffix"
++      ccaction='      $(call if_changed_dep,cxxcompile)'
++      caction='       $(call if_changed_dep,ccompile)'
++    else
++      set_subdir_scriptlet='subdirs[dirid] = dir;'
++      pattern_scriptlet='$('"$makevar"'__", i, "): %'"$osuffix"
++      ccaction='      $(call cxxcompile,-c $< -o $@,CXX)'
++      caction='       $(call ccompile,-c $< -o $@,CC)'
++      if test -n "$L"; then
++          ccaction="$ccaction"'\n     $(FIXDEP)'
++          caction="$caction"'\n       $(FIXDEP)'
++      fi
++    fi
++
++    # output
++    echo "# Generated by 'click-buildtool elem2make' on" `date`
++    echo "$files" | $awk '
++BEGIN { OFS = ""
++    action["c"] = "'"$caction"'";
++    action["cc"] = "'"$ccaction"'";
++}
++{   filetype = ($0 ~ /\.c$/ ? "c" : "cc");
++    sub(/\.cc*$/, "'"$osuffix"'");
++    i = match($0, /\/[^\/]*$/);
++    if (i == 0) {
++      dir = "";
++      file = $0;
++    } else {
++      dir = substr($0, 1, RSTART);
++      file = substr($0, RSTART + 1);
++    }
++    decdir = filetype dir;
++    if (decdir in subdirid)
++      dirid = subdirid[decdir];
++    else {
++      dirid = nsubdirs++;
++      subdirid[decdir] = dirid;
++      subdirtype[dirid] = filetype;
++      '"$set_subdir_scriptlet"'
++    }
++    elements[dirid] = elements[dirid] file " \\\n";
++}
++END {
++    for (i = 0; i < nsubdirs; i++) {
++      print "'"$makevar"'__", i, " = \\\n", elements[i];
++      allsubdirs = allsubdirs "$('"$makevar"'__" i ") \\\n";
++    }
++    print "'"$makevar"' = \\\n", allsubdirs;
++    for (i = 0; i < nsubdirs; i++) {
++      print "'"$pattern_scriptlet"': ", subdirs[i], "%.", subdirtype[i];
++      print action[subdirtype[i]];
++    }
++}' | sed "$excludes"
++    echo
++    
++    if test -n "$libs"; then
++      libvar=`echo $makevar | sed 's/OBJS$/LIBS/'`
++      echo $libvar = $libs
++    fi
++}
++
++elem2xxx () {
++    package=""
++    date=`date`
++    standards=''
++    includes=''
++    while [ x"$1" != x ]; do
++    case $1 in
++    -S|--s|--st|--sta|--stan|--stand|--standa|--standar|--standard|--standards)
++      standards=1; shift 1;;
++    -V|--verb|--verbo|--verbos|--verbose)
++      verbose=1; shift 1;;
++    -i|--i|--in|--inc|--incl|--inclu|--includ|--include)
++      if test $# -lt 2; then elem2xxx_usage; fi
++      includes="$includes print '#include $2';"; shift 2;;
++    -i*)
++      this_include=`echo "$1" | sed 's/^-i//'`
++      includes="$includes print '#include $this_include';"; shift 1;;
++    --i=*|--in=*|--inc=*|--incl=*|--inclu=*|--includ=*|--include=*)
++      this_include=`echo "$1" | sed 's/^[^=]*=//'`
++      includes="$includes print '#include $this_include';"; shift 1;;
++    -h|--h|--he|--hel|--help)
++      if test "$elem2" = export; then
++          cat <<'EOF' 1>&2
++'Click-buildtool elem2export' reads an 'elements.conf' file generated by
++'click-buildtool findelem' on the standard input, examines those files for
++exported elements, and writes a C++ source file defining the 
++click_export_elements() function to the standard output.
++
++Usage: click-buildtool elem2export [-V] < elements.conf
++EOF
++      elif test "$elem2" = package; then
++          cat <<'EOF' 1>&2
++'Click-buildtool elem2package' reads an 'elements.conf' file generated by
++'click-buildtool findelem' on the standard input, examines those files for
++exported elements, and writes a C++ source file suitable for creating a
++dynamically linked package with those elements to the standard output. PKGNAME
++is the name of the package.
++
++Usage: click-buildtool elem2package [-p PREFIX] [-V] PKGNAME < elements.conf
++EOF
++      fi
++      cat <<'EOF' 1>&2
++
++Options:
++  -S, --standards          Export standard required elements as well.
++  -i, --include HDR        Emit "#include HDR" at top of file.
++  -V, --verbose            Print more information.
++  -h, --help               Print this message and exit.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++      exit 0;;
++    -*)
++      elem2xxx_usage;;
++    *)
++      if test -z "$package" -a "$elem2" = package; then package="$1"; shift 1; else elem2xxx_usage; fi;;
++    esac
++    done
++
++    # set up awk program
++    if test -n "$package"; then
++      includes="  $includes "'print "#define WANT_MOD_USE_COUNT 1\n#include <click/config.h>\n#include <click/package.hh>\n#include <click/glue.hh>";
++  for (file in INCLUDES) {
++    if (file != "-") print "#include ", file;
++  }'
++      awk_program='BEGIN {
++  OFS = ""; nrebecca = 0; packname="'"$package"'";
++}
++/^#/ { next; }
++{
++  if (NF == 1)
++    next;
++  INCLUDES[$2] = 1;
++  for (i = 3; i <= NF; i++) {
++    split($i, ans, /-/);
++    if (ans[2] == "!si")
++      B = B "  " ans[1] "::static_initialize();\n";
++    else if (ans[2] == "!sc")
++      C = C "  " ans[1] "::static_cleanup();\n";
++    else if (ans[2] !~ /^!/) {
++      B = B "  hatred_of_rebecca[" nrebecca "] = click_add_element_type(\"" ans[2] "\", beetlemonkey, " nrebecca ");\n"
++      C = C "  click_remove_element_type(hatred_of_rebecca[" nrebecca "]);\n";
++      D = D "   case " nrebecca ": return new " ans[1] ";\n";
++      nrebecca++;
++    }
++  }
++}
++END {
++  print "/* Generated by \"click-buildtool elem2package\" on '"$date"' */";
++  print "/* Package name: ", packname, " */\n";
++'"$includes"'
++  print "\nCLICK_USING_DECLS";
++  print "static int hatred_of_rebecca[", nrebecca, "];";
++  print "static Element *\nbeetlemonkey(uintptr_t heywood)\n{\n  switch (heywood) {\n", D, "   default: return 0;\n  }\n}\n";
++  print "#ifdef CLICK_LINUXMODULE\n#define click_add_element_type(n, f, t) click_add_element_type((n), (f), (t), THIS_MODULE)\n#endif";
++  print "#ifdef CLICK_BSDMODULE\nstatic int\nmodevent(module_t, int t, void *)\n{\n  if (t == MOD_LOAD) {\n#else\nextern \"C\" int\ninit_module()\n{\n#endif";
++  print "  click_provide(\"", packname, "\");\n", B, "  CLICK_DMALLOC_REG(\"nXXX\");\n  return 0;";
++  print "#ifdef CLICK_BSDMODULE\n  } else if (t == MOD_UNLOAD) {\n#else\n}\nextern \"C\" void\ncleanup_module()\n{\n#endif";
++  print C, "  click_unprovide(\"", packname, "\");";
++  print "#ifdef CLICK_BSDMODULE\n  return 0;\n  } else\n    return 0;\n}\nstatic moduledata_t modinfo = {\n  \"", packname, "\", modevent, 0\n};\nDECLARE_MODULE(", packname, ", modinfo, SI_SUB_PSEUDO, SI_ORDER_ANY);\n#else\n}\n#endif";
++}
++'
++
++    else
++      includes="$includes"'  print "#include <click/config.h>\n#include <click/package.hh>";
++  for (file in INCLUDES) {
++    if (file != "-") print "#include ", file;
++  }'
++      awk_program='BEGIN {
++  OFS = ""; nrebecca = 0;
++}
++/^#/ { next; }
++{
++  if (NF == 1)
++    next;
++  INCLUDES[$2] = 1;
++  for (i = 3; i <= NF; i++) {
++    split($i, ans, /-/);
++    if (ans[2] == "!si")
++      B = B "  " ans[1] "::static_initialize();\n";
++    else if (ans[2] == "!sc")
++      C = C "  " ans[1] "::static_cleanup();\n";
++    else if (ans[2] !~ /^!/) {
++      B = B "  (void) click_add_element_type(\"" ans[2] "\", beetlemonkey, " nrebecca ");\n";
++      D = D "   case " nrebecca ": return new " ans[1] ";\n";
++    }
++    nrebecca++;
++  }
++}
++END {
++  print "/* Generated by \"click-buildtool elem2export\" on '"$date"' */\n";
++'"$includes"'
++  print "CLICK_USING_DECLS";
++  print "static Element *\nbeetlemonkey(uintptr_t heywood)\n{\n  switch (heywood) {\n", D, "   default: return 0;\n  }\n}\n";
++  print "#ifdef CLICK_LINUXMODULE\n#define click_add_element_type(n, f, t) click_add_element_type((n), (f), (t), 0)\n#endif";
++  print "void\nclick_export_elements()\n{\n", B, "  CLICK_DMALLOC_REG(\"nXXX\");\n}\n";
++  print "void\nclick_unexport_elements()\n{\n", C, "}";
++}
++'
++    fi
++
++    # Actually generate the command!
++    if test -z "$standards"; then
++      $awk "$awk_program"
++    else
++      cat <<EOF >/tmp/click-buildtool-standards.$$
++-     <click/standard/addressinfo.hh> AddressInfo-AddressInfo
++-     <click/standard/alignmentinfo.hh>       AlignmentInfo-AlignmentInfo
++-     <click/standard/errorelement.hh>        ErrorElement-ErrorElement
++-     <click/standard/portinfo.hh>    PortInfo-PortInfo
++-     <click/standard/scheduleinfo.hh>        ScheduleInfo-ScheduleInfo
++EOF
++      cat - /tmp/click-buildtool-standards.$$ | $awk "$awk_program"
++      /bin/rm -f /tmp/click-buildtool-standards.$$
++    fi
++}
++
++
++
++############
++# PROVIDES #
++############
++
++provides_usage () {
++    echo "Usage: click-buildtool provides [REQS]" 1>&2
++    echo "Try 'click-buildtool provides --help' for more information." 1>&2
++    exit 1
++}
++
++provides () {
++    provisions="$default_provisions
++$driver_provisions
++"`elementmap_provisions ${clickdatadir}/elementmap.xml`
++    requirements=""
++    stdin=n; query=n; print=n
++    while [ x"$1" != x ]; do
++    case $1 in
++    -q|--q|--qu|--que|--quer|--query)
++      query=y; shift 1;;
++    -l|--pri|--prin|--print)
++      print=y; shift 1;;
++    -r|--pro|--prov|--provi|--provid|--provide)
++      if test $# -lt 2; then provides_usage; fi
++      shift 1; provisions="$1
++$provisions"; shift 1;;
++    -r*)
++      provisions=`echo "$1" | sed 's/^-r//'`"
++$provisions"; shift 1;;
++    --p=*|--pr=*|--pro=*|--prov=*|--provi=*|--provid=*|--provide=*)
++      provisions=`echo "$1" | sed 's/^[^=]*=//'`"
++$provisions"; shift 1;;
++    -e|--e|--el|--ele|--elem|--eleme|--elemen|--element|--elementm|--elementma|--elementmap)
++      if test $# -lt 2; then provides_usage; fi
++      shift 1; provisions=`elementmap_provisions $1`"
++$provisions"; shift 1;;
++    -e*)
++      emap=`echo "$1" | sed 's/^-e//'`
++      provisions=`elementmap_provisions $emap`"
++$provisions"; shift 1;;
++    --e=*|--el=*|--ele=*|--elem=*|--eleme=*|--elemen=*|--element=*|--elementm=*|--elementma=*|--elementmap=*)
++      emap=`echo "$1" | sed 's/^[^=]*=//'`
++      provisions=`elementmap_provisions $emap`"
++$provisions"; shift 1;;
++    -h|--h|--he|--hel|--help)
++      cat <<'EOF' 1>&2
++'Click-buildtool provides' exits with status 0 if the Click installation
++provides all requirement(s) in REQ arguments, and status 1 otherwise.
++
++Usage: click-buildtool provides [OPTIONS] [REQ...]
++
++Options:
++  -q, --query              Print provisions to standard output.
++  -r, --provide REQ        Provide requirement(s) in REQ.
++  -e, --elementmap EMAP    Provide requirement(s) from EMAP.
++  -l, --print              Print 0 (REQs not provided) or 1 (REQs provided).
++  -h, --help               Print this message and exit.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++      exit 0;;
++    -)
++      stdin=y; shift 1;;
++    -*)
++      provides_usage;;
++    *)
++      requirements="$1
++$requirements"; shift 1;;
++    esac
++    done
++
++    [ $stdin = y ] && requirements="`cat` $requirements"
++    provisions="`echo "$provisions" | tr -s ' \011\015\014\013' '\012' | grep . | sort | uniq`"
++    [ $query = y ] && echo "$provisions"
++    requirements="`echo "$requirements" | tr -s ' \011\015\014\013' '\012' | grep . | sort | uniq`"
++    awk_provisions="`echo "$provisions" | sed 's/\(..*\)/dep["\1"]=1;/'`"
++    echo "$requirements" | $awk -F: 'BEGIN {
++'"$awk_provisions"'
++}
++/./ { if (!dep[$1]) exit 1; }' >/dev/null 2>&1
++    status=$?
++    [ $print = y ] && expr 1 - $status
++    exit $status
++}
++
++
++#############
++# QUIETLINK #
++#############
++
++quietlink_usage () {
++    echo "Usage: click-buildtool quietlink" 1>&2
++    echo "Try 'click-buildtool quietlink --help' for more information." 1>&2
++    exit 1
++}
++
++quietlink () {
++    while [ x"$1" != x ]; do
++    case $1 in
++    -h|--h|--he|--hel|--help)
++      cat <<'EOF' 1>&2
++'Click-buildtool quietlink' quiets the GNU linker when linking an element
++package. Specifically, it removes undefined reference complaints.
++
++Usage: ld ... 2>&1 | click-buildtool quietlink
++
++Options:
++  -h, --help                 Print this message and exit.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++      exit 0;;
++    *)
++      quietlink_usage;;
++    esac
++    done
++
++    $awk -F: 'BEGIN {
++  context = ""
++}
++/: In function/ {
++  context = $0
++  next
++}
++/: undefined reference to/ {
++  next
++}
++/: more undefined references to/ {
++  next
++}
++{
++  if (context != "") {
++    print context
++    context = ""
++  }
++  print $0
++}' 1>&2
++}
++
++
++
++##########
++# PREFIX #
++##########
++
++prefix_usage () {
++    echo "Usage: click-buildtool prefix" 1>&2
++    echo "Try 'click-buildtool prefix --help' for more information." 1>&2
++    exit 1
++}
++
++prefix () {
++    while [ x"$1" != x ]; do
++    case $1 in
++    -h|--h|--he|--hel|--help)
++      cat <<'EOF' 1>&2
++'Click-buildtool prefix' prints the Click prefix directory.
++
++Usage: click-buildtool prefix
++
++Options:
++  -h, --help                 Print this message and exit.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++      exit 0;;
++    *)
++      prefix_usage;;
++    esac
++    done
++    echo $prefix
++}
++
++
++
++############
++# KVERSION #
++############
++
++kversion_usage () {
++    echo_n "Usage: click-buildtool kversion [--gpl] > kversion.c" 1>&2
++    echo "Try 'click-buildtool kversion --help' for more information." 1>&2
++    exit 1
++}
++
++kversion () {
++    gpl=0
++    linux26=$LINUXMODULE_2_6
++    while [ x"$1" != x ]; do
++    case $1 in
++    --g|--gp|--gpl)
++      gpl=1; shift 1;;
++    -h|--h|--he|--hel|--help)
++      cat <<'EOF' 1>&2
++'Click-buildtool kversion' writes a kversion.c file, to be used for building
++a Click kernel package, on the standard output.
++
++Usage: click-buildtool kversion [--gpl] > kversion.c
++
++Options:
++      --gpl                The package is dual-licensed BSD/GPL (otherwise
++                           no license).
++  -h, --help               Print this message and exit.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++      exit 0;;
++    *)
++      kversion_usage;;
++    esac
++    done
++
++    cat <<EOF
++#include <click/config.h>
++#include <linux/version.h>
++#include <linux/module.h>
++
++/* a new version of EXPORT_NO_SYMBOLS that works */
++const int __ksymtab_nothing[0] __attribute__((section("__ksymtab"))) = { };
++EOF
++    test $gpl = 1 && cat <<EOF
++
++#ifdef MODULE_LICENSE
++MODULE_LICENSE("Dual BSD/GPL");
++#endif
++EOF
++}
++
++
++
++##########
++# KBUILD #
++##########
++
++kbuild_usage () {
++    echo_n "Usage: click-buildtool kbuild > Kbuild" 1>&2
++    echo "Try 'click-buildtool kbuild --help' for more information." 1>&2
++    exit 1
++}
++
++kbuild () {
++    while [ x"$1" != x ]; do
++    case $1 in
++    -h|--h|--he|--hel|--help)
++      cat <<'EOF' 1>&2
++'Click-buildtool kbuild' writes a Kbuild file, to be used for building
++a Click kernel package for Linux 2.6 kernels, on the standard output.
++
++Usage: click-buildtool kbuild > Kbuild
++
++Options:
++  -h, --help               Print this message and exit.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++      exit 0;;
++    *)
++      kversion_usage;;
++    esac
++    done
++
++    echo "include ${clickdatadir}/pkg-linuxmodule-26.mk"
++}
++
++
++
++###############
++# MAKEPACKAGE #
++###############
++
++makepackage_usage () {
++    echo "Usage: click-buildtool makepackage [-t DRIVER] PACKAGENAME SRCFILES..." 1>&2
++    echo "Try 'click-buildtool makepackage for more information." 1>&2
++    exit 1
++}
++
++makepackage () {
++    driver=""
++    date=`date`
++    dir=
++    pkg=
++    srcs=
++    quiet=
++    cflags=
++    while [ x"$1" != x ]; do
++    case $1 in
++    -t|--d|--dr|--dri|--driv|--drive|--driver)
++      test $# -lt 2 && makepackage_usage
++      shift 1; driver="$1"; shift 1;;
++    -t*)
++      driver=`echo "$1" | sed 's/^-D//'`; shift 1;;
++    --dr=*|--dri=*|--driv=*|--drive=*|--driver=*)
++      driver=`echo "$1" | sed 's/^[^=]*=//'`; shift 1;;
++    --t|--ta|--tar|--targ|--targe|--target)
++        test $# -lt 2 && makepackage_usage
++      shift 1; driver="$1"; shift 1;;
++    --t=*|--ta=*|--tar=*|--targ=*|--targe=*|--target=*)
++      driver=`echo "$1" | sed 's/^[^=]*=//'`; shift 1;;
++    -C|--di|--dir|--dire|--direc|--direct|--directo|--director|--directory)
++        test $# -lt 2 && makepackage_usage
++      shift 1; dir="$1"; shift 1;;
++    -C*)
++      dir="`echo "$1" | sed 's/^-C//'`"/; shift 1;;
++    --di=*|--dir=*|--dire=*|--direc=*|--direct=*|--directo=*|--director=*|--directory=*)
++      dir="`echo "$1" | sed 's/^[^=]*=//'`"/; shift 1;;
++    -q|--q|--qu|--qui|--quie|--quiet)
++      quiet="-s"; shift 1;;
++    -h|--h|--he|--hel|--help)
++      cat <<'EOF' 1>&2
++'Click-buildtool makepackage' builds a Click package for the specified
++driver from sources listed on the command line.
++
++Usage: click-buildtool makepackage [-t DRIVER] PACKAGENAME SRCFILES...
++
++Options:
++  -t, --driver DRIVER      Set target driver to DRIVER ('userlevel',
++                           'linuxmodule', 'bsdmodule', 'ns', or 'tool').
++  -q, --quiet              Build quietly (may be ignored).
++  -C, --directory DIR      Switch to DIR directory before building.
++  -h, --help               Print this message and exit.
++  -[other options]         Passed to the C/C++ compiler.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++      exit 0;;
++    -*)
++      cflags="$cflags $1"; shift 1;;
++    *)
++      if test -z "$pkg"; then
++          pkg="$1"; shift 1
++      else
++          srcs="$srcs
++$1"; shift 1
++      fi;;
++    esac
++    done
++
++    test -z "$srcs" && makepackage_usage
++
++    objs=
++    objsvar=OBJS
++    if test -z "$driver" -o "$driver" = 'user' -o "$driver" = 'userlevel'; then
++      L=u
++    elif test "$driver" = 'kernel' -o "$driver" = 'linuxmodule'; then
++      L=k
++    elif test "$driver" = 'bsdmodule'; then
++      L=b
++    elif test "$driver" = 'ns' -o "$driver" = 'nsmodule'; then
++      L=n
++    elif test "$driver" = 'tool'; then
++      L=t
++    else
++      echo "Unknown driver $driver" 1>&2
++      exit 1
++    fi
++    osuffix=".${L}o"
++
++    if test -n "$dir"; then cd "$dir"; fi
++    echo > ${L}elements.conf
++    echo "$srcs" | grep . | elem2make -t $driver > ${L}elements.mk
++    echo "PACKAGE_OBJS :=" >> ${L}elements.mk
++
++    echo "package = $pkg
++
++srcdir = .
++top_srcdir = .
++builddir = .
++top_builddir = .
++PACKAGE_CFLAGS = $cflags
++PACKAGE_CXXFLAGS = $cflags
++
++include ${clickdatadir}/config.mk
++include ${clickdatadir}/pkg-Makefile" > Makefile
++    
++    test -z "$quiet" && echo "+" $gmake $pkg$osuffix
++    $gmake $quiet $pkg$osuffix
++}
++
++
++
++#########
++# KSYMS #
++#########
++
++ksyms_usage () {
++    echo "Usage: click-buildtool ksyms OBJ... > KSYMS" 1>&2
++    echo "Try 'click-buildtool ksyms --help' for more information." 1>&2
++    exit 1
++}
++
++ksyms () {
++    driver=""
++    date=`date`
++    dir=
++    objs=
++    exclude=
++    while [ x"$1" != x ]; do
++    case $1 in
++    -C|--di|--dir|--dire|--direc|--direct|--directo|--director|--directory)
++        test $# -lt 2 && ksyms_usage
++      shift 1; dir="$1"; shift 1;;
++    -C*)
++      dir="`echo "$1" | sed 's/^-C//'`"/; shift 1;;
++    --di=*|--dir=*|--dire=*|--direc=*|--direct=*|--directo=*|--director=*|--directory=*)
++      dir="`echo "$1" | sed 's/^[^=]*=//'`"/; shift 1;;
++    -x|--e|--ex|--exc|--excl|--exclu|--exclud|--exclude)
++      test $# -lt 2 && ksyms_usage
++      shift 1; exclude="$exclude
++$1"; shift 1;;
++    -x*)
++      exclude="$exclude
++`echo "$1" | sed 's/^-x//'`"; shift 1;;
++    --e=*|--ex=*|--exc=*|--excl=*|--exclu=*|--exclud=*|--exclude=*)
++      exclude="$exclude
++`echo "$1" | sed 's/^[^=]*=//'`"; shift 1;;
++    -h|--h|--he|--hel|--help)
++      cat <<'EOF' 1>&2
++'Click-buildtool ksyms' creates a C file that exports all symbols for the
++Click objects listed on the command line.
++
++Usage: click-buildtool ksyms OBJ... > KSYMS
++
++Options:
++  -x, --exclude=FILE       Ignore OBJ even if it is supplied as an argument.
++  -C, --directory DIR      Switch to DIR directory before running.
++  -h, --help               Print this message and exit.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++      exit 0;;
++    *)
++      objs="$objs
++$1"; shift 1;;
++    esac
++    done
++
++    test -z "$objs" && ksyms_usage
++    objs=`echo "$objs" | sort | uniq`
++    test -n "$exclude" && objs=`echo "$objs
++$exclude" | sort | uniq -u`
++
++    if test -n "$dir"; then cd "$dir"; fi
++    echo "// Created by 'click-buildtool ksyms' on $date"
++    echo "#include <click/config.h>"
++    echo "#include <linux/version.h>"
++    echo "#include <linux/module.h>"
++    nm -g $objs | $awk '
++BEGIN {
++    printed["init_module"] = printed["cleanup_module"] = 1;
++}
++/^[   ]/ { 
++    next 
++}
++/........[    ][ABCDGRSTVW]/ {
++    x = $3;
++    if (x ~ /^[_A-Za-z][_A-Za-z0-9]*$/ && !printed[x]) {
++      printed[x] = 1;
++      if (x != "click_assert_failed")
++          print "extern char " x "[];";
++      print "EXPORT_SYMBOL(" x ");";
++    }
++}'
++}
++
++
++
++################
++# MAIN PROGRAM #
++################
++
++if test $# = 0; then
++    # force usage message
++    set crapfunc
++fi
++
++while [ x"$1" != x ]; do
++case $1 in
++  --vers|--versi|--versio|--version)
++     cat <<'EOF'
++click-buildtool (Click) 1.6.0
++Copyright (c) 2000-2001 Massachusetts Institute of Technology
++Copyright (c) 2000-2004 Mazu Networks, Inc.
++Copyright (c) 2001-2003 International Computer Science Institute
++Copyright (c) 2004-2007 Regents of the University of California
++This is free software; see the source for copying conditions.
++There is NO warranty, not even for merchantability or fitness for a
++particular purpose.
++EOF
++     exit 0;;
++  -V|--verb|--verbo|--verbos|--verbose)
++     verbose=1; shift 1;;
++  -h|--h|--he|--hel|--help)
++     cat <<'EOF' 1>&2
++'Click-buildtool' is a set of tools used when building Click. For information
++on a particular tool, run 'click-buildtool TOOLNAME --help'.
++
++Usage: click-buildtool elem2make [-V] [-p PREFIX] < [ELEMENTS]
++   or: click-buildtool elem2export [-V] [-p PREFIX] < [ELEMENTS]
++   or: click-buildtool elem2package [-V] [-p PREFIX] PACKAGENAME < [ELEMENTS]
++   or: click-buildtool findelem [-a] [-V] [-p PREFIX] < [FILES AND DIRECTORIES]
++   or: click-buildtool makepackage [-t DRIVER] PACKAGENAME SRCFILES...
++   or: click-buildtool prefix
++   or: click-buildtool provides [REQS]
++   or: click-buildtool quietlink
++   or: click-buildtool kbuild
++   or: click-buildtool kversion [--gpl]
++   or: click-buildtool ksyms OBJS > KSYMSFILE
++
++Options:
++  -V, --verbose            Print more information.
++  -h, --help               Print this message and exit.
++      --version            Print version number and exit.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++     exit 0;;
++  findelem)
++     shift 1; findelem "$@"; exit 0;;
++  elem2make)
++     elem2="make"; shift 1; elem2make "$@"; exit 0;;
++  elem2export)
++     elem2="export"; shift 1; elem2xxx "$@"; exit 0;;
++  elem2package)
++     elem2="package"; shift 1; elem2xxx "$@"; exit 0;;
++  makepackage)
++     shift 1; makepackage "$@"; exit 0;;
++  prefix)
++     shift 1; prefix "$@"; exit 0;;
++  provides)
++     shift 1; provides "$@"; exit 0;;
++  quietlink)
++     shift 1; quietlink "$@"; exit 0;;
++  kversion)
++     shift 1; kversion "$@"; exit 0;;
++  kbuild)
++     shift 1; kbuild "$@"; exit 0;;
++  ksyms)
++     shift 1; ksyms "$@"; exit 0;;
++  *)
++     echo "Usage: click-buildtool TOOLNAME [ARGUMENTS]
++Try 'click-buildtool --help' for more information." 1>&2
++     exit 1;;
++esac
++done
+diff -Nurb click-1.6.0/click-compile click-1.6.0-27/click-compile
+--- click-1.6.0/click-compile  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/click-compile       2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,302 @@
++#! /bin/sh
++
++# click-compile.in -- script compiles Click elements
++# Eddie Kohler
++#
++# Copyright (c) 1999 Massachusetts Institute of Technology
++# Copyright (c) 2001 International Computer Science Institute
++# Copyright (c) 2005 Regents of the University of California
++#
++# Permission is hereby granted, free of charge, to any person obtaining a
++# copy of this software and associated documentation files (the "Software"),
++# to deal in the Software without restriction, subject to the conditions
++# listed in the Click LICENSE file. These conditions include: you must
++# preserve this copyright notice, and you cannot mention the copyright
++# holders in advertising related to the Software without their permission.
++# The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++# notice is a summary of the Click LICENSE file; the license in that file is
++# legally binding.
++
++prefix=/d/click/click-1.6.0-27/inst
++exec_prefix=/d/click/click-1.6.0-27/inst
++includedir=/d/click/click-1.6.0-27/inst/include
++libdir=/d/click/click-1.6.0-27/inst/lib
++datarootdir=/d/click/click-1.6.0-27/inst/share
++datadir=/d/click/click-1.6.0-27/inst/share
++srcdir=${datadir}/click/src
++linuxdir=/d/kernels/linux-2.6.27.10-clickport
++freebsd_includedir=/usr/include
++CLICK_VERSION=1.6.0
++
++# determine mode
++directory=.
++driver=
++package=NONE
++cflags=
++compileflag=-c
++quiet=
++gpl=y
++while true; do
++    bad=x
++    case $1 in
++      -t|--dr|--dri|--driv|--drive|--driver)
++      driver=$2; shift 2;;
++      -t*)
++        driver=`echo "$1" | sed 's/^-t//'`; shift 1;;
++      --dr=*|--dri=*|--driv=*|--drive=*|--driver=*)
++      driver=`echo "$1" | sed 's/[-a-z]*=//'`; shift 1;;
++      --c|--cf|--cfl|--cfla|--cflag|--cflags|--de|--def|--defs)
++      echo   -I$includedir
++      exit 0;;
++      --l|--li|--lib|--libs)
++      echo -L$libdir -lclick  -lpcap -ldl 
++      exit 0;;
++      --toolc|--toolcf|--toolcfl|--toolcfla|--toolcflag|--toolcflags)
++      echo -DCLICK_TOOL -I$includedir
++      exit 0;;
++      --tooll|--toolli|--toollib|--toollibs)
++      echo -L$libdir -lclicktool -ldl 
++      exit 0;;
++      --o|--ot|--oth|--othe|--other|--otherl|--otherli|--otherlib|--otherlibs)
++      echo  -lpcap -ldl 
++      exit 0;;
++      -d|--di|--dir|--dire|--direc|--direct|--directo|--director|--directory)
++      directory=$2; shift 2;;
++      -d*)
++      directory=`echo "$1" | sed 's/^-d//'`; shift 1;;
++      --di=*|--dir=*|--dire=*|--direc=*|--direct=*|--directo=*|--director=*|--directory=*)
++      directory=`echo "$1" | sed 's/^[^=]*=//'`; shift 1;;
++      --t|--ta|--tar|--targ|--targe|--target)
++        echo "click-compile: '--target' is obsolete; change your script to use '--driver'" 1>&2
++      driver=$2; shift 2;;
++      --t=*|--ta=*|--tar=*|--targ=*|--targe=*|--target=*)
++        echo "click-compile: '--target' is obsolete; change your script to use '--driver'" 1>&2
++      driver=`echo "$1" | sed 's/[-a-z]*=//'`; shift 1;;
++      -p|--p|--pa|--pac|--pack|--packa|--packag|--package)
++      package=$2; shift 2;;
++      -p*)
++      package=`echo "$1" | sed 's/^-p//'`; shift 1;;
++      --p=*|--pa=*|--pac=*|--pack=*|--packa=*|--packag=*|--package=*)
++      package=`echo "$1" | sed 's/[-a-z]*=//'`; shift 1;;
++      -q|--q|--qu|--qui|--quie|--quiet)
++      quiet=y; shift 1;;
++      --no-g|--no-gp|--no-gpl)
++      gpl=n; shift 1;;
++      -h|--h|--he|--hel|--help)
++      cat <<'EOF'
++'Click-compile' compiles a Click source file, or outputs any compiler options
++relevant for userlevel Click drivers.
++
++Usage: click-compile -t DRIVER [OPTIONS] SOURCEFILE...
++
++Options:
++      --defs              Outputs preprocessor options for userlevel drivers.
++      --libs              Outputs link options for userlevel drivers.
++      --otherlibs         Like '--libs' minus the Click library.
++      --toolcflags        Outputs C/C++ flags options for tools.
++      --toollibs          Outputs link options for tools.
++  -t, --driver DRIVER     Sets target driver to 'bsdmodule', 'linuxmodule',
++                          'userlevel', 'ns', or 'tool'.
++  -p, --package PACKAGE   Build a dynamically loadable package named PACKAGE.
++  -d, --directory DIR     Change to directory DIR.
++  -q, --quiet             Be quiet (don't echo commands or print warnings).
++      --no-gpl            Omit "BSD/GPL" declaration from kernel package.
++  -h, --help              Print this message and exit.
++  -v, --version           Print version number and exit.
++  Other options are passed to the compiler unchanged.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++      exit 0;;
++      -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
++      echo click-compile '(Click)' $CLICK_VERSION
++      cat <<"EOF"
++Copyright (C) 1999-2001 Massachusetts Institute of Technology
++Copyright (C) 2002 International Computer Science Institute
++Copyright (C) 2004 Regents of the University of California
++This is free software; see the source for copying conditions.
++There is NO warranty, not even for merchantability or fitness for any
++particular purpose.
++EOF
++      exit 0;;
++      -*)
++      if test "$1" = -E -o "$1" = -c -o "$1" = -S; then
++          compileflag=$1
++      else
++          cflags="$cflags '$1'"
++      fi
++      shift 1;;
++      *)
++      bad=;;
++    esac
++    if test -z "$bad"; then break; fi
++done
++
++cd $directory
++
++# test directory function
++test_dir () {
++    test -d "$1" -a -d "$1/elements" -a -d "$1/lib"
++}
++
++# analyze CLICKPATH to find sources
++path=${CLICKPATH-:}
++tried_defaults=
++include_source=
++while true; do
++    case $path in
++      :*)
++      if test -z "$tried_defaults" && test_dir "$srcdir"; then
++          include_source="-I$srcdir"
++      else
++          tried_defaults=y
++      fi
++      path=`echo "$path" | sed 's/://'`
++      ;;
++      *:*)
++      dir=`echo "$path" | sed 's/:.*//'`
++      if test_dir "$dir"; then include_source="-I$dir"; fi
++      path=`echo "$path" | sed 's/[^:]*://'`
++      ;;
++      *:)
++      dir=`echo "$path" | sed 's/:.*//'`
++      if test_dir "$dir"; then include_source="-I$dir"; fi
++      path=":"
++      ;;
++      *)
++      if test_dir "$path"; then include_source="-I$path"; fi
++      path=""
++      ;;
++    esac
++    if test -z "$path" -o -n "$include_source"; then break; fi
++done
++
++if test ! -d "$includedir"; then
++    echo "click-compile: Cannot find Click include directory!" 1>&2
++    echo "  (Have you installed Click yet?)" 1>&2
++    exit 1
++elif test -z "$include_source"; then
++    if test -z "$quiet"; then
++      echo "click-compile: warning: cannot find full Click source" 1>&2
++    fi
++fi
++
++
++case $driver in
++  u|us|use|user|userl|userle|userlev|userleve|userlevel)
++    idefs="-DHAVE_CONFIG_H -DCLICK_USERLEVEL"
++    iincludes="${include_source} -I${includedir}"
++    icppflags=""
++    icxxflags="-fPIC -g -O2 -MD"
++    icflags="-fPIC -g -O2 -MD"
++    command="${CXX-g++ -W -Wall } ${DEFS-$idefs} ${INCLUDES-$iincludes} ${CPPFLAGS-$icppflags} ${CXXFLAGS-$icxxflags} $cflags $compileflag"
++    c_command="${CC-gcc -W -Wall} ${DEFS-$idefs} ${INCLUDES-$iincludes} ${CPPFLAGS-$icppflags} ${CFLAGS-$icflags} $cflags $compileflag"
++    driver=userlevel;;
++  k|ke|ker|kern|kerne|kernel|l|li|lin|linu|linux|linuxm|linuxmo|linuxmod|linuxmodu|linuxmodul|linuxmodule)
++    idefs="-DHAVE_CONFIG_H -DCLICK_LINUXMODULE"
++    iincludes="${include_source} -I${includedir} -I${linuxdir}/include"
++    icppflags=""
++    icxxflags=" -O2 -MD"
++    icflags=" -O2 -MD"
++    command="${CXX-g++ -w -W -Wall -fno-exceptions -fno-rtti  -D__SMP__} ${DEFS-$idefs} ${INCLUDES-$iincludes} ${CPPFLAGS-$icppflags} ${CXXFLAGS-$icxxflags} $cflags $compileflag"
++    c_command="${CC-gcc -W -Wall} ${DEFS-$idefs} ${INCLUDES-$iincludes} ${CPPFLAGS-$icppflags} ${CFLAGS-$icflags} $cflags $compileflag"
++    driver=linuxmodule;;
++  b|bs|bsd|bsdm|bsdmo|bsdmod|bsdmodu|bsdmodul|bsdmodule)
++    idefs="-DHAVE_CONFIG_H -DCLICK_BSDMODULE"
++    iincludes="-nostdinc ${include_source} -I${includedir}"
++    icppflags=""
++    icxxflags=" -O2 -MD"
++    icflags=" -O2 -MD"
++    command="${CXX-g++ -w -W -Wall -fno-exceptions -fno-rtti  -D__SMP__} ${DEFS-$idefs} ${INCLUDES-$iincludes} ${CPPFLAGS-$icppflags} ${CXXFLAGS-$icxxflags} $cflags $compileflag"
++    c_command="${CC-gcc -W -Wall} ${DEFS-$idefs} ${INCLUDES-$iincludes} ${CPPFLAGS-$icppflags} ${CFLAGS-$icflags} $cflags $compileflag"
++    driver=bsdmodule;;
++  ns|nsm|nsmo|nsmod|nsmodu|nsmodul|nsmodule)
++    idefs="-DHAVE_CONFIG_H -DCLICK_NS"
++    iincludes="${include_source} -I${includedir}"
++    icppflags=""
++    icxxflags="-fPIC -g -O2 -MD"
++    icflags="-fPIC -g -O2 -MD"
++    command="${CXX-g++ -W -Wall } ${DEFS-$idefs} ${INCLUDES-$iincludes} ${CPPFLAGS-$icppflags} ${CXXFLAGS-$icxxflags} $cflags $compileflag"
++    c_command="${CC-gcc -W -Wall} ${DEFS-$idefs} ${INCLUDES-$iincludes} ${CPPFLAGS-$icppflags} ${CFLAGS-$icflags} $cflags $compileflag"
++    driver=ns;;
++  t|to|too|tool)
++    idefs="-DHAVE_CONFIG_H -DCLICK_TOOL"
++    iincludes="${include_source} -I${includedir}"
++    icppflags=""
++    icxxflags="-fPIC -g -O2 -MD"
++    icflags="-fPIC -g -O2 -MD"
++    command="${CXX-g++ -W -Wall } ${DEFS-$idefs} ${INCLUDES-$iincludes} ${CPPFLAGS-$icppflags} ${CXXFLAGS-$icxxflags} $cflags $compileflag"
++    c_command="${CC-gcc -W -Wall} ${DEFS-$idefs} ${INCLUDES-$iincludes} ${CPPFLAGS-$icppflags} ${CFLAGS-$icflags} $cflags $compileflag"
++    driver=tool;;
++  "")
++    echo "click-compile: you must specify a driver" 1>&2; exit 1;;
++  *)
++    echo "click-compile: acceptable drivers are 'userlevel', 'linuxmodule'," 1>&2
++    echo "click-compile:   'bsdmodule', and 'tool'" 1>&2; exit 1;;
++esac
++
++exec_command () {
++    if test -z "$quiet"; then
++      echo "$@" 1>&2
++    fi
++    eval "$@" || exit 1
++}
++
++compile_file () {
++    option=
++    source="$1"; shift
++    if test -r "$source"; then
++      option=`head -n 5 $source | grep '^/\*\* click-compile:' | sed -e 's/\/\*\* click-compile://g' -e 's/\*\///g'`
++    fi
++    exec_command $command $option $source "$@"
++}
++
++# do stuff
++if test "x$package" != "xNONE"; then
++    command="$command -DCLICK_PACKAGE"
++    files=; rmfiles=
++    trap 'rm -f $rmfiles' 0
++    trap 'rm -f $rmfiles; exit 1' 1 2 15
++    for file; do
++      if echo "$file" | grep '\.cc*$' >/dev/null 2>&1; then
++          objfile=`echo "$file" | sed 's/\.c*$/'"$$"'\.o/;s/^.*\///'`
++          compile_file $file -o $objfile
++          rmfiles="$rmfiles $objfile "`echo $objfile | sed 's/\.o/\.d/'`
++      else
++          objfile="$file"
++      fi
++      files="$files $objfile"
++    done
++    if test $driver = linuxmodule; then
++      vfile=kernelversion$$
++      test -f $vfile.c && echo "click-compile: A file '$vfile.c' already exists in this directory!" 1>&2 && echo "click-compile: You must remove it, or run me somewhere else." 1>&2 && exit 1
++      files="$files $vfile.o"
++      rmfiles="$rmfiles $vfile.o $vfile.c $vfile.d"
++      cat > $vfile.c <<EOF
++#include <click/config.h>
++#include <linux/module.h>
++/* a new version of EXPORT_NO_SYMBOLS that works */
++const int __ksymtab_nothing[0] __attribute__((section("__ksymtab"))) = { };
++EOF
++      if test $gpl = y; then
++          cat >> $vfile.c <<EOF
++#ifdef MODULE_LICENSE
++MODULE_LICENSE("Dual BSD/GPL");
++#endif
++EOF
++      fi
++      c_command_nowarn=`echo $c_command | sed 's/-W[-a-z]*//g'`
++      exec_command $c_command_nowarn $vfile.c
++      exec_command "ld -r -o $package $cflags $files"
++      exit 0
++    elif test $driver = userlevel -o $driver = tool -o $driver = ns; then
++      exec_command "${CXX-g++ -W -Wall } ${CXXFLAGS-$icxxflags} -shared -o $package $cflags $files"
++      exit 0
++    elif test $driver = bsdmodule; then
++      exec_command "ld -Bshareable -o $package $cflags $files"
++      exit 0
++    fi
++else
++    exec_command "$command $@"
++    exit 0
++fi
+Files click-1.6.0/click-inst.tar.gz and click-1.6.0-27/click-inst.tar.gz differ
+diff -Nurb click-1.6.0/config-linuxmodule.h.in click-1.6.0-27/config-linuxmodule.h.in
+--- click-1.6.0/config-linuxmodule.h.in        2007-09-18 16:24:46.000000000 -0400
++++ click-1.6.0-27/config-linuxmodule.h.in     2009-01-28 16:06:28.000000000 -0500
+@@ -86,12 +86,10 @@
+ #endif
+ /* Include integer type definitions. */
+-#if !HAVE_LINUXMODULE_2_6
+ # include <linux/autoconf.h>
+-#endif
+ #include <linux/types.h>
+ typedef ptrdiff_t intptr_t;
+-typedef unsigned long uintptr_t; /* XXX? */
++//typedef unsigned long uintptr_t; /* XXX? */
+ /* Define HAVE_INT64_IS_LONG based on HAVE_INT64_IS_LONG_LINUXMODULE. */
+ #ifdef HAVE_INT64_IS_LONG_LINUXMODULE
+diff -Nurb click-1.6.0/config-linuxmodule.h.in.orig click-1.6.0-27/config-linuxmodule.h.in.orig
+--- click-1.6.0/config-linuxmodule.h.in.orig   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/config-linuxmodule.h.in.orig        2007-09-18 16:24:46.000000000 -0400
+@@ -0,0 +1,154 @@
++/* Process this file with configure to produce config-linuxmodule.h. -*- mode: c -*- */
++#ifndef CLICK_CONFIG_LINUXMODULE_H
++#define CLICK_CONFIG_LINUXMODULE_H
++
++/* Define stuff under a Linux module. */
++#ifndef __linux__
++# error "I must be compiled on a Linux machine"
++#endif
++#define __KERNEL__ 1
++#define MODULE 1
++
++/* Define if your Linux kernel is running in SMP mode. */
++#undef __SMP__
++
++/* Define if Click should use an adaptive scheduler to share the CPU(s) more
++   fairly with the kernel. */
++#undef HAVE_ADAPTIVE_SCHEDULER
++
++/* Define if your Linux kernel has Click extensions. */
++#undef HAVE_CLICK_KERNEL
++
++/* Define if your Linux kernel has Click transmit notification extensions. */
++#undef HAVE_CLICK_KERNEL_TX_NOTIFY
++
++/* Define if fast checksum functions available. */
++#define HAVE_FAST_CHECKSUM 1
++
++/* Define if 'int64_t' is typedefed to 'long' in linuxmodule. */
++#undef HAVE_INT64_IS_LONG_LINUXMODULE
++
++/* Define if 'int64_t' is typedefed to 'long long' in linuxmodule. */
++#undef HAVE_INT64_IS_LONG_LONG_LINUXMODULE
++
++/* Define to enable assertion checking. Failed assertions will print a message
++   and optionally stop the router. */
++#undef HAVE_KERNEL_ASSERT
++
++/* Define if you have the <asm/alternative.h> header file. */
++#undef HAVE_LINUX_ASM_ALTERNATIVE_H
++
++/* Define if your Linux kernel architecture defines atomic_set_mask. */
++#undef HAVE_LINUX_ATOMIC_SET_MASK
++
++/* Define if your Linux kernel has polling extensions. */
++#undef HAVE_LINUX_POLLING
++
++/* Define if your Linux kernel has read_net_skbcount. */
++#undef HAVE_LINUX_READ_NET_SKBCOUNT
++
++/* Define if 'struct skb_shared_info' has a 'gso_size' member. */
++#undef HAVE_LINUX_SKB_SHINFO_GSO_SIZE
++
++/* Define if 'struct skb_shared_info' has an 'ip6_frag_id' member. */
++#undef HAVE_LINUX_SKB_SHINFO_IP6_FRAG_ID
++
++/* Define if 'struct skb_shared_info' has a 'tso_size' member. */
++#undef HAVE_LINUX_SKB_SHINFO_TSO_SIZE
++
++/* Define if 'struct skb_shared_info' has a 'ufo_size' member. */
++#undef HAVE_LINUX_SKB_SHINFO_UFO_SIZE
++
++/* Define if 'struct sk_buff' has an 'fclone' member. */
++#undef HAVE_LINUX_SKBUFF_FCLONE
++
++/* Define if 'struct sk_buff' has a 'security' member. */
++#undef HAVE_LINUX_SKBUFF_SECURITY
++
++/* Define if your Linux kernel exposes strlen. */
++#undef HAVE_LINUX_STRLEN_EXPOSED
++
++/* Define if your Linux kernel has tulip_interrupt_hook. */
++#undef HAVE_LINUX_TULIP_INTERRUPT_HOOK
++
++/* Define if the Click linuxmodule is compiled for a 2.6 kernel. */
++#undef HAVE_LINUXMODULE_2_6
++
++/* Define if you have the net_enable_timestamp function. */
++#undef HAVE_NET_ENABLE_TIMESTAMP
++
++/* Define if you have the netif_tx_lock function. */
++#undef HAVE_NETIF_TX_LOCK
++
++/* Define if fast checksum functions require correct alignment. */
++#ifndef __i386__
++# define FAST_CHECKSUM_ALIGNED 1
++#endif
++
++/* Include integer type definitions. */
++#if !HAVE_LINUXMODULE_2_6
++# include <linux/autoconf.h>
++#endif
++#include <linux/types.h>
++typedef ptrdiff_t intptr_t;
++typedef unsigned long uintptr_t; /* XXX? */
++
++/* Define HAVE_INT64_IS_LONG based on HAVE_INT64_IS_LONG_LINUXMODULE. */
++#ifdef HAVE_INT64_IS_LONG_LINUXMODULE
++# define HAVE_INT64_IS_LONG HAVE_INT64_IS_LONG_LINUXMODULE
++#endif
++
++/* Define HAVE_INT64_IS_LONG_LONG based on HAVE_INT64_IS_LONG_LONG_LINUXMODULE. */
++#if HAVE_LONG_LONG && defined(HAVE_INT64_IS_LONG_LONG_LINUXMODULE)
++# define HAVE_INT64_IS_LONG_LONG HAVE_INT64_IS_LONG_LONG_LINUXMODULE
++#endif
++
++/* Define KBUILD symbols. */
++#if !defined(KBUILD_STR) && HAVE_LINUXMODULE_2_6
++# define KBUILD_STR(s)                #s
++# define KBUILD_BASENAME      KBUILD_STR(click)
++# define KBUILD_MODNAME               KBUILD_STR(click)
++#endif
++
++#ifdef __cplusplus
++
++/* Declare operator new. */
++void *operator new(size_t) throw ();
++void *operator new[](size_t) throw ();
++
++/* Provide placement new. */
++inline void *operator new(size_t, void *v) { return v; }
++#define HAVE_PLACEMENT_NEW 1
++
++/* Define macros that surround Click declarations. */
++#define CLICK_DECLS           /* */
++#define CLICK_ENDDECLS                /* */
++#define CLICK_USING_DECLS     /* */
++#define CLICK_NAME(name)      ::name
++
++/* Fix incompatibilities between some Linux versions and Click/C++. */
++#include <click/fixconfig.h>
++
++#endif /* __cplusplus */
++
++/* Define assert macro. */
++# ifdef __cplusplus
++extern "C" {
++# endif
++void click_assert_failed(const char *file, int line, const char *problem_text);
++# ifdef __cplusplus
++}
++# endif
++
++#ifdef HAVE_KERNEL_ASSERT
++# define assert(x)    ((x) ? (void)0 : click_assert_failed(__FILE__, __LINE__, #x))
++#else
++# define assert(x)    /* nada */
++#endif
++
++/* Some architectures do not have builtin integer functions in kernel. */
++#if defined(__MIPSEL__) || defined(__MIPSEB__)
++# define HAVE_NO_INTEGER_BUILTINS 1
++#endif
++
++#endif /* CLICK_CONFIG_LINUXMODULE_H */
+diff -Nurb click-1.6.0/config.log click-1.6.0-27/config.log
+--- click-1.6.0/config.log     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/config.log  2009-01-28 16:15:44.000000000 -0500
+@@ -0,0 +1,7069 @@
++This file contains any messages produced by compilers while
++running configure, to aid debugging if configure makes a mistake.
++
++It was created by click configure 1.6.0, which was
++generated by GNU Autoconf 2.61.  Invocation command line was
++
++  $ ./configure --prefix=/d/click/click-1.6.0-27/inst --exec-prefix=/d/click/click-1.6.0-27/inst --with-linux=/d/kernels/linux-2.6.27.10-clickport --with-linux-map=/d/uml/trelclickSystem.map
++
++## --------- ##
++## Platform. ##
++## --------- ##
++
++hostname = joyce
++uname -m = i686
++uname -r = 2.6.22.19
++uname -s = Linux
++uname -v = #1 SMP Sat Jan 10 15:48:51 EST 2009
++
++/usr/bin/uname -p = Intel(R) Core(TM)2 CPU          6400  @ 2.13GHz
++/bin/uname -X     = unknown
++
++/bin/arch              = i686
++/usr/bin/arch -k       = unknown
++/usr/convex/getsysinfo = unknown
++/usr/bin/hostinfo      = unknown
++/bin/machine           = unknown
++/usr/bin/oslevel       = unknown
++/bin/universe          = unknown
++
++PATH: /usr/local/bin
++PATH: /usr/bin
++PATH: /bin
++PATH: /opt/bin
++PATH: /usr/i686-pc-linux-gnu/gcc-bin/4.1.1
++PATH: /usr/i486-pc-linux-gnu/gcc-bin/4.1.1
++PATH: /usr/kde/3.5/bin
++PATH: /usr/qt/3/bin
++PATH: /usr/games/bin
++PATH: /home/sapan/downloads/google_appengine
++
++
++## ----------- ##
++## Core tests. ##
++## ----------- ##
++
++configure:1888: checking build system type
++configure:1906: result: i686-pc-linux-gnu
++configure:1928: checking host system type
++configure:1943: result: i686-pc-linux-gnu
++configure:1965: checking target system type
++configure:1980: result: i686-pc-linux-gnu
++configure:2052: checking for gcc
++configure:2068: found /usr/bin/gcc
++configure:2079: result: gcc
++configure:2148: checking for g++
++configure:2164: found /usr/bin/g++
++configure:2175: result: g++
++configure:2250: checking for gcc
++configure:2277: result: gcc
++configure:2515: checking for C compiler version
++configure:2522: gcc --version >&5
++gcc (GCC) 4.1.1 (Gentoo 4.1.1-r3)
++Copyright (C) 2006 Free Software Foundation, Inc.
++This is free software; see the source for copying conditions.  There is NO
++warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
++
++configure:2525: $? = 0
++configure:2532: gcc -v >&5
++Using built-in specs.
++Target: i686-pc-linux-gnu
++Configured with: /var/tmp/portage/sys-devel/gcc-4.1.1-r3/work/gcc-4.1.1/configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/4.1.1 --includedir=/usr/lib/gcc/i686-pc-linux-gnu/4.1.1/include --datadir=/usr/share/gcc-data/i686-pc-linux-gnu/4.1.1 --mandir=/usr/share/gcc-data/i686-pc-linux-gnu/4.1.1/man --infodir=/usr/share/gcc-data/i686-pc-linux-gnu/4.1.1/info --with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/4.1.1/include/g++-v4 --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-altivec --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --enable-secureplt --disable-libunwind-exceptions --disable-multilib --disable-libmudflap --disable-libssp --disable-libgcj --enable-languages=c,c++,fortran --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu
++Thread model: posix
++gcc version 4.1.1 (Gentoo 4.1.1-r3)
++configure:2535: $? = 0
++configure:2542: gcc -V >&5
++gcc: '-V' option must have argument
++configure:2545: $? = 1
++configure:2568: checking for C compiler default output file name
++configure:2595: gcc    conftest.c  >&5
++configure:2598: $? = 0
++configure:2636: result: a.out
++configure:2653: checking whether the C compiler works
++configure:2663: ./a.out
++configure:2666: $? = 0
++configure:2683: result: yes
++configure:2690: checking whether we are cross compiling
++configure:2692: result: no
++configure:2695: checking for suffix of executables
++configure:2702: gcc -o conftest    conftest.c  >&5
++configure:2705: $? = 0
++configure:2729: result: 
++configure:2735: checking for suffix of object files
++configure:2761: gcc -c   conftest.c >&5
++configure:2764: $? = 0
++configure:2787: result: o
++configure:2791: checking whether we are using the GNU C compiler
++configure:2820: gcc -c   conftest.c >&5
++configure:2826: $? = 0
++configure:2843: result: yes
++configure:2848: checking whether gcc accepts -g
++configure:2878: gcc -c -g  conftest.c >&5
++configure:2884: $? = 0
++configure:2983: result: yes
++configure:3000: checking for gcc option to accept ISO C89
++configure:3074: gcc  -c -g -O2  conftest.c >&5
++configure:3080: $? = 0
++configure:3103: result: none needed
++configure:3140: checking how to run the C preprocessor
++configure:3180: gcc -W -Wall -E  conftest.c
++configure:3186: $? = 0
++configure:3217: gcc -W -Wall -E  conftest.c
++conftest.c:9:28: error: ac_nonexistent.h: No such file or directory
++configure:3223: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| /* end confdefs.h.  */
++| #include <ac_nonexistent.h>
++configure:3256: result: gcc -W -Wall -E
++configure:3285: gcc -W -Wall -E  conftest.c
++configure:3291: $? = 0
++configure:3322: gcc -W -Wall -E  conftest.c
++conftest.c:9:28: error: ac_nonexistent.h: No such file or directory
++configure:3328: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| /* end confdefs.h.  */
++| #include <ac_nonexistent.h>
++configure:3366: checking for inline
++configure:3392: gcc -W -Wall -c -g -O2  conftest.c >&5
++configure:3398: $? = 0
++configure:3416: result: inline
++configure:3552: checking for C++ compiler version
++configure:3559: g++ --version >&5
++g++ (GCC) 4.1.1 (Gentoo 4.1.1-r3)
++Copyright (C) 2006 Free Software Foundation, Inc.
++This is free software; see the source for copying conditions.  There is NO
++warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
++
++configure:3562: $? = 0
++configure:3569: g++ -v >&5
++Using built-in specs.
++Target: i686-pc-linux-gnu
++Configured with: /var/tmp/portage/sys-devel/gcc-4.1.1-r3/work/gcc-4.1.1/configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/4.1.1 --includedir=/usr/lib/gcc/i686-pc-linux-gnu/4.1.1/include --datadir=/usr/share/gcc-data/i686-pc-linux-gnu/4.1.1 --mandir=/usr/share/gcc-data/i686-pc-linux-gnu/4.1.1/man --infodir=/usr/share/gcc-data/i686-pc-linux-gnu/4.1.1/info --with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/4.1.1/include/g++-v4 --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-altivec --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --enable-secureplt --disable-libunwind-exceptions --disable-multilib --disable-libmudflap --disable-libssp --disable-libgcj --enable-languages=c,c++,fortran --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu
++Thread model: posix
++gcc version 4.1.1 (Gentoo 4.1.1-r3)
++configure:3572: $? = 0
++configure:3579: g++ -V >&5
++g++: '-V' option must have argument
++configure:3582: $? = 1
++configure:3585: checking whether we are using the GNU C++ compiler
++configure:3614: g++ -c   conftest.cpp >&5
++configure:3620: $? = 0
++configure:3637: result: yes
++configure:3642: checking whether g++ accepts -g
++configure:3672: g++ -c -g  conftest.cpp >&5
++configure:3678: $? = 0
++configure:3777: result: yes
++configure:3865: checking whether <new> works
++configure:3896: g++ -o conftest -g -O2   conftest.cpp  >&5
++configure:3902: $? = 0
++configure:3919: result: yes
++configure:4014: checking how to run the C++ preprocessor
++configure:4050: g++ -W -Wall  -E  conftest.cpp
++configure:4056: $? = 0
++configure:4087: g++ -W -Wall  -E  conftest.cpp
++conftest.cpp:10:28: error: ac_nonexistent.h: No such file or directory
++configure:4093: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| /* end confdefs.h.  */
++| #include <ac_nonexistent.h>
++configure:4126: result: g++ -W -Wall  -E
++configure:4155: g++ -W -Wall  -E  conftest.cpp
++configure:4161: $? = 0
++configure:4192: g++ -W -Wall  -E  conftest.cpp
++conftest.cpp:10:28: error: ac_nonexistent.h: No such file or directory
++configure:4198: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| /* end confdefs.h.  */
++| #include <ac_nonexistent.h>
++configure:4297: checking for ar
++configure:4313: found /usr/bin/ar
++configure:4324: result: ar
++configure:4393: checking for ld
++configure:4409: found /usr/bin/ld
++configure:4420: result: ld
++configure:4489: checking for ranlib
++configure:4505: found /usr/bin/ranlib
++configure:4516: result: ranlib
++configure:4585: checking for strip
++configure:4601: found /usr/bin/strip
++configure:4612: result: strip
++configure:5178: checking whether we are compiling for Linux
++configure:5207: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:5213: $? = 0
++configure:5228: result: yes
++configure:5243: checking for strerror
++configure:5299: gcc -W -Wall -o conftest -g -O2   conftest.c  >&5
++configure:5305: $? = 0
++configure:5323: result: yes
++configure:5348: checking for snprintf
++configure:5404: gcc -W -Wall -o conftest -g -O2   conftest.c  >&5
++conftest.c:38: warning: conflicting types for built-in function 'snprintf'
++configure:5410: $? = 0
++configure:5428: result: yes
++configure:5348: checking for strtoul
++configure:5404: gcc -W -Wall -o conftest -g -O2   conftest.c  >&5
++configure:5410: $? = 0
++configure:5428: result: yes
++configure:5348: checking for tcgetpgrp
++configure:5404: gcc -W -Wall -o conftest -g -O2   conftest.c  >&5
++configure:5410: $? = 0
++configure:5428: result: yes
++configure:5348: checking for vsnprintf
++configure:5404: gcc -W -Wall -o conftest -g -O2   conftest.c  >&5
++conftest.c:41: warning: conflicting types for built-in function 'vsnprintf'
++configure:5410: $? = 0
++configure:5428: result: yes
++configure:5456: checking for grep that handles long lines and -e
++configure:5530: result: /bin/grep
++configure:5535: checking for egrep
++configure:5613: result: /bin/grep -E
++configure:5618: checking for ANSI C header files
++configure:5648: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:5654: $? = 0
++configure:5753: g++ -W -Wall  -o conftest -g -O2   conftest.cpp  >&5
++configure:5756: $? = 0
++configure:5762: ./conftest
++configure:5765: $? = 0
++configure:5782: result: yes
++configure:5806: checking for sys/types.h
++configure:5827: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:5833: $? = 0
++configure:5849: result: yes
++configure:5806: checking for sys/stat.h
++configure:5827: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:5833: $? = 0
++configure:5849: result: yes
++configure:5806: checking for stdlib.h
++configure:5827: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:5833: $? = 0
++configure:5849: result: yes
++configure:5806: checking for string.h
++configure:5827: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:5833: $? = 0
++configure:5849: result: yes
++configure:5806: checking for memory.h
++configure:5827: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:5833: $? = 0
++configure:5849: result: yes
++configure:5806: checking for strings.h
++configure:5827: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:5833: $? = 0
++configure:5849: result: yes
++configure:5806: checking for inttypes.h
++configure:5827: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:5833: $? = 0
++configure:5849: result: yes
++configure:5806: checking for stdint.h
++configure:5827: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:5833: $? = 0
++configure:5849: result: yes
++configure:5806: checking for unistd.h
++configure:5827: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:5833: $? = 0
++configure:5849: result: yes
++configure:5861: checking for int
++configure:5891: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:5897: $? = 0
++configure:5912: result: yes
++configure:5919: checking size of int
++configure:6221: g++ -W -Wall  -o conftest -g -O2   conftest.cpp  >&5
++configure:6224: $? = 0
++configure:6230: ./conftest
++configure:6233: $? = 0
++configure:6256: result: 4
++configure:6266: checking for long
++configure:6296: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:6302: $? = 0
++configure:6317: result: yes
++configure:6324: checking size of long
++configure:6626: g++ -W -Wall  -o conftest -g -O2   conftest.cpp  >&5
++configure:6629: $? = 0
++configure:6635: ./conftest
++configure:6638: $? = 0
++configure:6661: result: 4
++configure:6677: checking for inttypes.h
++configure:6683: result: yes
++configure:6892: checking whether machine is indifferent to alignment
++configure:6935: g++ -W -Wall  -o conftest -g -O2   conftest.cpp  >&5
++conftest.cpp:40: warning: unused parameter 'argc'
++conftest.cpp:40: warning: unused parameter 'argv'
++configure:6938: $? = 0
++configure:6944: ./conftest
++configure:6947: $? = 0
++configure:6963: result: yes
++configure:6973: checking for long long
++configure:7003: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:7009: $? = 0
++configure:7024: result: yes
++configure:7031: checking size of long long
++configure:7333: g++ -W -Wall  -o conftest -g -O2   conftest.cpp  >&5
++configure:7336: $? = 0
++configure:7342: ./conftest
++configure:7345: $? = 0
++configure:7368: result: 8
++configure:7385: checking for long long
++configure:7436: result: yes
++configure:7447: checking for int64_t typedef
++configure:7470: result: yes
++configure:7472: checking for uint64_t typedef
++configure:7495: result: yes
++configure:7523: checking whether long and int64_t are the same type
++configure:7559: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:7565: $? = 0
++configure:7580: result: no
++configure:7590: checking whether long long and int64_t are the same type
++configure:7626: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++conftest.cpp: In function 'void f1(int64_t)':
++conftest.cpp:39: error: redefinition of 'void f1(int64_t)'
++conftest.cpp:37: error: 'void f1(long long int)' previously defined here
++configure:7632: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| /* end confdefs.h.  */
++| #include <inttypes.h>
++| void f1(long long) {
++| }
++| void f1(int64_t) { // will fail if long long and int64_t are the same type
++| }
++| int
++| main ()
++| {
++| 
++|   ;
++|   return 0;
++| }
++configure:7647: result: yes
++configure:7658: checking for struct timeval
++configure:7688: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:7694: $? = 0
++configure:7709: result: yes
++configure:7716: checking size of struct timeval
++configure:8018: g++ -W -Wall  -o conftest -g -O2   conftest.cpp  >&5
++configure:8021: $? = 0
++configure:8027: ./conftest
++configure:8030: $? = 0
++configure:8053: result: 8
++configure:8063: checking for struct timespec
++configure:8093: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:8099: $? = 0
++configure:8114: result: yes
++configure:8128: checking for struct timespec
++configure:8179: result: yes
++configure:8186: checking size of struct timespec
++configure:8488: g++ -W -Wall  -o conftest -g -O2   conftest.cpp  >&5
++configure:8491: $? = 0
++configure:8497: ./conftest
++configure:8500: $? = 0
++configure:8523: result: 8
++configure:8551: checking endian.h usability
++configure:8568: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:8574: $? = 0
++configure:8588: result: yes
++configure:8592: checking endian.h presence
++configure:8607: g++ -W -Wall  -E  conftest.cpp
++configure:8613: $? = 0
++configure:8627: result: yes
++configure:8655: checking for endian.h
++configure:8663: result: yes
++configure:8684: checking endianness
++configure:8704: g++ -W -Wall  -E  conftest.cpp >conftest.result 2>conftest.out
++configure:8707: $? = 0
++configure:8720: result: 1234
++configure:8808: checking byteswap.h usability
++configure:8825: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:8831: $? = 0
++configure:8845: result: yes
++configure:8849: checking byteswap.h presence
++configure:8864: g++ -W -Wall  -E  conftest.cpp
++configure:8870: $? = 0
++configure:8884: result: yes
++configure:8912: checking for byteswap.h
++configure:8920: result: yes
++configure:8935: checking whether signed right shift is arithmetic
++configure:8961: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++conftest.cpp:43: error: size of array 'x' is negative
++configure:8967: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| #define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++| #define SIZEOF_STRUCT_TIMEVAL 8
++| #define HAVE_STRUCT_TIMESPEC 1
++| #define SIZEOF_STRUCT_TIMESPEC 8
++| #define HAVE_ENDIAN_H 1
++| #define CLICK_BYTE_ORDER 1234
++| #define HAVE_BYTESWAP_H 1
++| /* end confdefs.h.  */
++| int f(int x[((int) -1) >> 15]) { return x[0]; }
++| int
++| main ()
++| {
++| 
++|   ;
++|   return 0;
++| }
++configure:8982: result: yes
++configure:8998: checking for addressable va_list type
++configure:9035: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:9041: $? = 0
++configure:9056: result: yes
++configure:9067: checking for __builtin_clz
++configure:9093: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++conftest.cpp: In function 'int main()':
++conftest.cpp:49: warning: unused variable 'y'
++configure:9099: $? = 0
++configure:9114: result: yes
++configure:9123: checking for __builtin_clzl
++configure:9149: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++conftest.cpp: In function 'int main()':
++conftest.cpp:50: warning: unused variable 'y'
++configure:9155: $? = 0
++configure:9170: result: yes
++configure:9179: checking for __builtin_clzll
++configure:9205: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++conftest.cpp: In function 'int main()':
++conftest.cpp:51: warning: unused variable 'y'
++configure:9211: $? = 0
++configure:9226: result: yes
++configure:9236: checking for __builtin_ffs
++configure:9262: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++conftest.cpp: In function 'int main()':
++conftest.cpp:52: warning: unused variable 'y'
++configure:9268: $? = 0
++configure:9283: result: yes
++configure:9292: checking for __builtin_ffsl
++configure:9318: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++conftest.cpp: In function 'int main()':
++conftest.cpp:53: warning: unused variable 'y'
++configure:9324: $? = 0
++configure:9339: result: yes
++configure:9348: checking for __builtin_ffsll
++configure:9374: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++conftest.cpp: In function 'int main()':
++conftest.cpp:54: warning: unused variable 'y'
++configure:9380: $? = 0
++configure:9395: result: yes
++configure:9410: checking for strings.h
++configure:9416: result: yes
++configure:9551: checking for ffs
++configure:9607: g++ -W -Wall  -o conftest -g -O2   conftest.cpp  >&5
++configure:9613: $? = 0
++configure:9631: result: yes
++configure:9551: checking for ffsl
++configure:9607: g++ -W -Wall  -o conftest -g -O2   conftest.cpp  >&5
++configure:9613: $? = 0
++configure:9631: result: yes
++configure:9551: checking for ffsll
++configure:9607: g++ -W -Wall  -o conftest -g -O2   conftest.cpp  >&5
++configure:9613: $? = 0
++configure:9631: result: yes
++configure:9876: checking for unistd.h
++configure:9882: result: yes
++configure:9886: checking termio.h usability
++configure:9903: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:9909: $? = 0
++configure:9923: result: yes
++configure:9927: checking termio.h presence
++configure:9942: g++ -W -Wall  -E  conftest.cpp
++configure:9948: $? = 0
++configure:9962: result: yes
++configure:9990: checking for termio.h
++configure:9998: result: yes
++configure:9886: checking netdb.h usability
++configure:9903: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:9909: $? = 0
++configure:9923: result: yes
++configure:9927: checking netdb.h presence
++configure:9942: g++ -W -Wall  -E  conftest.cpp
++configure:9948: $? = 0
++configure:9962: result: yes
++configure:9990: checking for netdb.h
++configure:9998: result: yes
++configure:9886: checking sys/event.h usability
++configure:9903: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++conftest.cpp:91:23: error: sys/event.h: No such file or directory
++configure:9909: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| #define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++| #define SIZEOF_STRUCT_TIMEVAL 8
++| #define HAVE_STRUCT_TIMESPEC 1
++| #define SIZEOF_STRUCT_TIMESPEC 8
++| #define HAVE_ENDIAN_H 1
++| #define CLICK_BYTE_ORDER 1234
++| #define HAVE_BYTESWAP_H 1
++| #define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++| #define HAVE_ADDRESSABLE_VA_LIST 1
++| #define HAVE___BUILTIN_CLZ 1
++| #define HAVE___BUILTIN_CLZL 1
++| #define HAVE___BUILTIN_CLZLL 1
++| #define HAVE___BUILTIN_FFS 1
++| #define HAVE___BUILTIN_FFSL 1
++| #define HAVE___BUILTIN_FFSLL 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_FFS 1
++| #define HAVE_FFSL 1
++| #define HAVE_FFSLL 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_TERMIO_H 1
++| #define HAVE_NETDB_H 1
++| /* end confdefs.h.  */
++| #include <stdio.h>
++| #ifdef HAVE_SYS_TYPES_H
++| # include <sys/types.h>
++| #endif
++| #ifdef HAVE_SYS_STAT_H
++| # include <sys/stat.h>
++| #endif
++| #ifdef STDC_HEADERS
++| # include <stdlib.h>
++| # include <stddef.h>
++| #else
++| # ifdef HAVE_STDLIB_H
++| #  include <stdlib.h>
++| # endif
++| #endif
++| #ifdef HAVE_STRING_H
++| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
++| #  include <memory.h>
++| # endif
++| # include <string.h>
++| #endif
++| #ifdef HAVE_STRINGS_H
++| # include <strings.h>
++| #endif
++| #ifdef HAVE_INTTYPES_H
++| # include <inttypes.h>
++| #endif
++| #ifdef HAVE_STDINT_H
++| # include <stdint.h>
++| #endif
++| #ifdef HAVE_UNISTD_H
++| # include <unistd.h>
++| #endif
++| #include <sys/event.h>
++configure:9923: result: no
++configure:9927: checking sys/event.h presence
++configure:9942: g++ -W -Wall  -E  conftest.cpp
++conftest.cpp:58:23: error: sys/event.h: No such file or directory
++configure:9948: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| #define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++| #define SIZEOF_STRUCT_TIMEVAL 8
++| #define HAVE_STRUCT_TIMESPEC 1
++| #define SIZEOF_STRUCT_TIMESPEC 8
++| #define HAVE_ENDIAN_H 1
++| #define CLICK_BYTE_ORDER 1234
++| #define HAVE_BYTESWAP_H 1
++| #define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++| #define HAVE_ADDRESSABLE_VA_LIST 1
++| #define HAVE___BUILTIN_CLZ 1
++| #define HAVE___BUILTIN_CLZL 1
++| #define HAVE___BUILTIN_CLZLL 1
++| #define HAVE___BUILTIN_FFS 1
++| #define HAVE___BUILTIN_FFSL 1
++| #define HAVE___BUILTIN_FFSLL 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_FFS 1
++| #define HAVE_FFSL 1
++| #define HAVE_FFSLL 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_TERMIO_H 1
++| #define HAVE_NETDB_H 1
++| /* end confdefs.h.  */
++| #include <sys/event.h>
++configure:9962: result: no
++configure:9990: checking for sys/event.h
++configure:9998: result: no
++configure:9886: checking pwd.h usability
++configure:9903: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:9909: $? = 0
++configure:9923: result: yes
++configure:9927: checking pwd.h presence
++configure:9942: g++ -W -Wall  -E  conftest.cpp
++configure:9948: $? = 0
++configure:9962: result: yes
++configure:9990: checking for pwd.h
++configure:9998: result: yes
++configure:9886: checking grp.h usability
++configure:9903: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:9909: $? = 0
++configure:9923: result: yes
++configure:9927: checking grp.h presence
++configure:9942: g++ -W -Wall  -E  conftest.cpp
++configure:9948: $? = 0
++configure:9962: result: yes
++configure:9990: checking for grp.h
++configure:9998: result: yes
++configure:10022: checking poll.h usability
++configure:10039: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:10045: $? = 0
++configure:10059: result: yes
++configure:10063: checking poll.h presence
++configure:10078: g++ -W -Wall  -E  conftest.cpp
++configure:10084: $? = 0
++configure:10098: result: yes
++configure:10126: checking for poll.h
++configure:10133: result: yes
++configure:10145: checking whether <poll.h> is emulated
++configure:10175: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:10181: $? = 0
++configure:10196: result: no
++configure:10211: checking for sigaction
++configure:10267: g++ -W -Wall  -o conftest -g -O2   conftest.cpp  >&5
++configure:10273: $? = 0
++configure:10291: result: yes
++configure:10306: checking for kqueue
++configure:10362: g++ -W -Wall  -o conftest -g -O2   conftest.cpp  >&5
++/tmp/ccy7SvnE.o: In function `main':
++/d/click/click-1.6.0-27/conftest.cpp:96: undefined reference to `kqueue'
++collect2: ld returned 1 exit status
++configure:10368: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| #define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++| #define SIZEOF_STRUCT_TIMEVAL 8
++| #define HAVE_STRUCT_TIMESPEC 1
++| #define SIZEOF_STRUCT_TIMESPEC 8
++| #define HAVE_ENDIAN_H 1
++| #define CLICK_BYTE_ORDER 1234
++| #define HAVE_BYTESWAP_H 1
++| #define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++| #define HAVE_ADDRESSABLE_VA_LIST 1
++| #define HAVE___BUILTIN_CLZ 1
++| #define HAVE___BUILTIN_CLZL 1
++| #define HAVE___BUILTIN_CLZLL 1
++| #define HAVE___BUILTIN_FFS 1
++| #define HAVE___BUILTIN_FFSL 1
++| #define HAVE___BUILTIN_FFSLL 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_FFS 1
++| #define HAVE_FFSL 1
++| #define HAVE_FFSLL 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_TERMIO_H 1
++| #define HAVE_NETDB_H 1
++| #define HAVE_PWD_H 1
++| #define HAVE_GRP_H 1
++| #define HAVE_POLL_H 1
++| #define HAVE_SIGACTION 1
++| /* end confdefs.h.  */
++| /* Define kqueue to an innocuous variant, in case <limits.h> declares kqueue.
++|    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
++| #define kqueue innocuous_kqueue
++| 
++| /* System header to define __stub macros and hopefully few prototypes,
++|     which can conflict with char kqueue (); below.
++|     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++|     <limits.h> exists even on freestanding compilers.  */
++| 
++| #ifdef __STDC__
++| # include <limits.h>
++| #else
++| # include <assert.h>
++| #endif
++| 
++| #undef kqueue
++| 
++| /* Override any GCC internal prototype to avoid an error.
++|    Use char because int might match the return type of a GCC
++|    builtin and then its argument prototype would still apply.  */
++| #ifdef __cplusplus
++| extern "C"
++| #endif
++| char kqueue ();
++| /* The GNU C library defines this for functions which it implements
++|     to always fail with ENOSYS.  Some functions are actually named
++|     something starting with __ and the normal name is an alias.  */
++| #if defined __stub_kqueue || defined __stub___kqueue
++| choke me
++| #endif
++| 
++| int
++| main ()
++| {
++| return kqueue ();
++|   ;
++|   return 0;
++| }
++configure:10386: result: no
++configure:10483: checking dlfcn.h usability
++configure:10500: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:10506: $? = 0
++configure:10520: result: yes
++configure:10524: checking dlfcn.h presence
++configure:10539: g++ -W -Wall  -E  conftest.cpp
++configure:10545: $? = 0
++configure:10559: result: yes
++configure:10587: checking for dlfcn.h
++configure:10595: result: yes
++configure:10610: checking for dlopen
++configure:10666: g++ -W -Wall  -o conftest -g -O2   conftest.cpp  >&5
++/tmp/ccq7wPI0.o: In function `main':
++/d/click/click-1.6.0-27/conftest.cpp:97: undefined reference to `dlopen'
++collect2: ld returned 1 exit status
++configure:10672: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| #define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++| #define SIZEOF_STRUCT_TIMEVAL 8
++| #define HAVE_STRUCT_TIMESPEC 1
++| #define SIZEOF_STRUCT_TIMESPEC 8
++| #define HAVE_ENDIAN_H 1
++| #define CLICK_BYTE_ORDER 1234
++| #define HAVE_BYTESWAP_H 1
++| #define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++| #define HAVE_ADDRESSABLE_VA_LIST 1
++| #define HAVE___BUILTIN_CLZ 1
++| #define HAVE___BUILTIN_CLZL 1
++| #define HAVE___BUILTIN_CLZLL 1
++| #define HAVE___BUILTIN_FFS 1
++| #define HAVE___BUILTIN_FFSL 1
++| #define HAVE___BUILTIN_FFSLL 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_FFS 1
++| #define HAVE_FFSL 1
++| #define HAVE_FFSLL 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_TERMIO_H 1
++| #define HAVE_NETDB_H 1
++| #define HAVE_PWD_H 1
++| #define HAVE_GRP_H 1
++| #define HAVE_POLL_H 1
++| #define HAVE_SIGACTION 1
++| #define HAVE_DLFCN_H 1
++| /* end confdefs.h.  */
++| /* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
++|    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
++| #define dlopen innocuous_dlopen
++| 
++| /* System header to define __stub macros and hopefully few prototypes,
++|     which can conflict with char dlopen (); below.
++|     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++|     <limits.h> exists even on freestanding compilers.  */
++| 
++| #ifdef __STDC__
++| # include <limits.h>
++| #else
++| # include <assert.h>
++| #endif
++| 
++| #undef dlopen
++| 
++| /* Override any GCC internal prototype to avoid an error.
++|    Use char because int might match the return type of a GCC
++|    builtin and then its argument prototype would still apply.  */
++| #ifdef __cplusplus
++| extern "C"
++| #endif
++| char dlopen ();
++| /* The GNU C library defines this for functions which it implements
++|     to always fail with ENOSYS.  Some functions are actually named
++|     something starting with __ and the normal name is an alias.  */
++| #if defined __stub_dlopen || defined __stub___dlopen
++| choke me
++| #endif
++| 
++| int
++| main ()
++| {
++| return dlopen ();
++|   ;
++|   return 0;
++| }
++configure:10689: result: no
++configure:10694: checking for dlopen in -ldl
++configure:10729: g++ -W -Wall  -o conftest -g -O2   conftest.cpp -ldl   >&5
++configure:10735: $? = 0
++configure:10753: result: yes
++configure:10773: checking compiler flags for building loadable modules
++configure:10781: result: -shared
++configure:11121: checking for library containing gethostbyname
++configure:11162: gcc -W -Wall -o conftest -g -O2   conftest.c  >&5
++configure:11168: $? = 0
++configure:11196: result: none required
++configure:11204: checking for library containing connect
++configure:11245: gcc -W -Wall -o conftest -g -O2   conftest.c  >&5
++configure:11251: $? = 0
++configure:11279: result: none required
++configure:11289: checking whether accept() uses socklen_t
++configure:11317: gcc -W -Wall -c -g -O2  conftest.c >&5
++configure:11323: $? = 0
++configure:11338: result: yes
++configure:11365: checking for large file support in C library
++configure:11400: gcc -W -Wall -c -g -O2  conftest.c >&5
++configure:11406: $? = 0
++configure:11421: result: yes
++configure:11431: checking for off_t
++configure:11467: gcc -W -Wall -c -g -O2  conftest.c >&5
++configure:11473: $? = 0
++configure:11488: result: yes
++configure:11495: checking size of off_t
++configure:11833: gcc -W -Wall -o conftest -g -O2   conftest.c  >&5
++configure:11836: $? = 0
++configure:11842: ./conftest
++configure:11845: $? = 0
++configure:11868: result: 8
++configure:11904: checking sys/mman.h usability
++configure:11921: gcc -W -Wall -c -g -O2  conftest.c >&5
++configure:11927: $? = 0
++configure:11941: result: yes
++configure:11945: checking sys/mman.h presence
++configure:11960: gcc -W -Wall -E  conftest.c
++configure:11966: $? = 0
++configure:11980: result: yes
++configure:12008: checking for sys/mman.h
++configure:12016: result: yes
++configure:12035: checking for stdlib.h
++configure:12041: result: yes
++configure:12035: checking for unistd.h
++configure:12041: result: yes
++configure:12174: checking for getpagesize
++configure:12230: gcc -W -Wall -o conftest -g -O2   conftest.c  >&5
++configure:12236: $? = 0
++configure:12254: result: yes
++configure:12264: checking for working mmap
++configure:12411: gcc -W -Wall -o conftest -g -O2   conftest.c  >&5
++configure:12414: $? = 0
++configure:12420: ./conftest
++configure:12423: $? = 0
++configure:12439: result: yes
++configure:12460: checking for madvise
++configure:12516: g++ -W -Wall  -o conftest -g -O2   conftest.cpp  >&5
++configure:12522: $? = 0
++configure:12540: result: yes
++configure:12550: checking whether madvise is declared
++configure:12583: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:12589: $? = 0
++configure:12604: result: yes
++configure:12689: checking for Linux 2.6
++configure:12696: result: 1
++configure:12708: checking for Click Linux kernel extensions
++configure:12717: result: yes
++configure:12726: checking for Click Linux kernel extensions for transmit notification
++configure:12735: result: no
++configure:12744: checking for read_net_skbcount kernel extension
++configure:12753: result: no
++configure:12762: checking for strlen kernel symbol
++configure:12771: result: yes
++configure:12780: checking for tulip_interrupt_hook kernel symbol
++configure:12789: result: no
++configure:12798: checking for device polling kernel extension
++configure:12807: result: yes
++configure:12816: checking for atomic_set_mask
++configure:12825: result: no
++configure:12834: checking for SMP
++configure:12843: result: yes
++configure:12853: checking for <asm/alternative.h>
++configure:12862: result: yes
++configure:13033: checking linux/if_tun.h usability
++configure:13050: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++configure:13056: $? = 0
++configure:13070: result: yes
++configure:13074: checking linux/if_tun.h presence
++configure:13089: g++ -W -Wall  -E  conftest.cpp
++configure:13095: $? = 0
++configure:13109: result: yes
++configure:13137: checking for linux/if_tun.h
++configure:13145: result: yes
++configure:13033: checking net/if_tun.h usability
++configure:13050: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++conftest.cpp:115:24: error: net/if_tun.h: No such file or directory
++configure:13056: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| #define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++| #define SIZEOF_STRUCT_TIMEVAL 8
++| #define HAVE_STRUCT_TIMESPEC 1
++| #define SIZEOF_STRUCT_TIMESPEC 8
++| #define HAVE_ENDIAN_H 1
++| #define CLICK_BYTE_ORDER 1234
++| #define HAVE_BYTESWAP_H 1
++| #define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++| #define HAVE_ADDRESSABLE_VA_LIST 1
++| #define HAVE___BUILTIN_CLZ 1
++| #define HAVE___BUILTIN_CLZL 1
++| #define HAVE___BUILTIN_CLZLL 1
++| #define HAVE___BUILTIN_FFS 1
++| #define HAVE___BUILTIN_FFSL 1
++| #define HAVE___BUILTIN_FFSLL 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_FFS 1
++| #define HAVE_FFSL 1
++| #define HAVE_FFSLL 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_TERMIO_H 1
++| #define HAVE_NETDB_H 1
++| #define HAVE_PWD_H 1
++| #define HAVE_GRP_H 1
++| #define HAVE_POLL_H 1
++| #define HAVE_SIGACTION 1
++| #define HAVE_DLFCN_H 1
++| #define HAVE_DYNAMIC_LINKING 1
++| #define HAVE_ACCEPT_SOCKLEN_T 1
++| #define HAVE_LARGE_FILE_SUPPORT 1
++| #define SIZEOF_OFF_T 8
++| #define HAVE_SYS_MMAN_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_GETPAGESIZE 1
++| #define HAVE_MMAP 1
++| #define HAVE_MADVISE 1
++| #define HAVE_DECL_MADVISE 1
++| #define HAVE_LINUXMODULE_2_6 1
++| #define HAVE_CLICK_KERNEL 1
++| #define HAVE_LINUX_STRLEN_EXPOSED 1
++| #define HAVE_LINUX_POLLING 1
++| #define __SMP__ 1
++| #define HAVE_LINUX_ASM_ALTERNATIVE_H 1
++| #define HAVE_STRIDE_SCHED 1
++| #define HAVE_LINUX_IF_TUN_H 1
++| /* end confdefs.h.  */
++| #include <stdio.h>
++| #ifdef HAVE_SYS_TYPES_H
++| # include <sys/types.h>
++| #endif
++| #ifdef HAVE_SYS_STAT_H
++| # include <sys/stat.h>
++| #endif
++| #ifdef STDC_HEADERS
++| # include <stdlib.h>
++| # include <stddef.h>
++| #else
++| # ifdef HAVE_STDLIB_H
++| #  include <stdlib.h>
++| # endif
++| #endif
++| #ifdef HAVE_STRING_H
++| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
++| #  include <memory.h>
++| # endif
++| # include <string.h>
++| #endif
++| #ifdef HAVE_STRINGS_H
++| # include <strings.h>
++| #endif
++| #ifdef HAVE_INTTYPES_H
++| # include <inttypes.h>
++| #endif
++| #ifdef HAVE_STDINT_H
++| # include <stdint.h>
++| #endif
++| #ifdef HAVE_UNISTD_H
++| # include <unistd.h>
++| #endif
++| #include <net/if_tun.h>
++configure:13070: result: no
++configure:13074: checking net/if_tun.h presence
++configure:13089: g++ -W -Wall  -E  conftest.cpp
++conftest.cpp:82:24: error: net/if_tun.h: No such file or directory
++configure:13095: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| #define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++| #define SIZEOF_STRUCT_TIMEVAL 8
++| #define HAVE_STRUCT_TIMESPEC 1
++| #define SIZEOF_STRUCT_TIMESPEC 8
++| #define HAVE_ENDIAN_H 1
++| #define CLICK_BYTE_ORDER 1234
++| #define HAVE_BYTESWAP_H 1
++| #define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++| #define HAVE_ADDRESSABLE_VA_LIST 1
++| #define HAVE___BUILTIN_CLZ 1
++| #define HAVE___BUILTIN_CLZL 1
++| #define HAVE___BUILTIN_CLZLL 1
++| #define HAVE___BUILTIN_FFS 1
++| #define HAVE___BUILTIN_FFSL 1
++| #define HAVE___BUILTIN_FFSLL 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_FFS 1
++| #define HAVE_FFSL 1
++| #define HAVE_FFSLL 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_TERMIO_H 1
++| #define HAVE_NETDB_H 1
++| #define HAVE_PWD_H 1
++| #define HAVE_GRP_H 1
++| #define HAVE_POLL_H 1
++| #define HAVE_SIGACTION 1
++| #define HAVE_DLFCN_H 1
++| #define HAVE_DYNAMIC_LINKING 1
++| #define HAVE_ACCEPT_SOCKLEN_T 1
++| #define HAVE_LARGE_FILE_SUPPORT 1
++| #define SIZEOF_OFF_T 8
++| #define HAVE_SYS_MMAN_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_GETPAGESIZE 1
++| #define HAVE_MMAP 1
++| #define HAVE_MADVISE 1
++| #define HAVE_DECL_MADVISE 1
++| #define HAVE_LINUXMODULE_2_6 1
++| #define HAVE_CLICK_KERNEL 1
++| #define HAVE_LINUX_STRLEN_EXPOSED 1
++| #define HAVE_LINUX_POLLING 1
++| #define __SMP__ 1
++| #define HAVE_LINUX_ASM_ALTERNATIVE_H 1
++| #define HAVE_STRIDE_SCHED 1
++| #define HAVE_LINUX_IF_TUN_H 1
++| /* end confdefs.h.  */
++| #include <net/if_tun.h>
++configure:13109: result: no
++configure:13137: checking for net/if_tun.h
++configure:13145: result: no
++configure:13033: checking net/if_tap.h usability
++configure:13050: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++conftest.cpp:115:24: error: net/if_tap.h: No such file or directory
++configure:13056: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| #define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++| #define SIZEOF_STRUCT_TIMEVAL 8
++| #define HAVE_STRUCT_TIMESPEC 1
++| #define SIZEOF_STRUCT_TIMESPEC 8
++| #define HAVE_ENDIAN_H 1
++| #define CLICK_BYTE_ORDER 1234
++| #define HAVE_BYTESWAP_H 1
++| #define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++| #define HAVE_ADDRESSABLE_VA_LIST 1
++| #define HAVE___BUILTIN_CLZ 1
++| #define HAVE___BUILTIN_CLZL 1
++| #define HAVE___BUILTIN_CLZLL 1
++| #define HAVE___BUILTIN_FFS 1
++| #define HAVE___BUILTIN_FFSL 1
++| #define HAVE___BUILTIN_FFSLL 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_FFS 1
++| #define HAVE_FFSL 1
++| #define HAVE_FFSLL 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_TERMIO_H 1
++| #define HAVE_NETDB_H 1
++| #define HAVE_PWD_H 1
++| #define HAVE_GRP_H 1
++| #define HAVE_POLL_H 1
++| #define HAVE_SIGACTION 1
++| #define HAVE_DLFCN_H 1
++| #define HAVE_DYNAMIC_LINKING 1
++| #define HAVE_ACCEPT_SOCKLEN_T 1
++| #define HAVE_LARGE_FILE_SUPPORT 1
++| #define SIZEOF_OFF_T 8
++| #define HAVE_SYS_MMAN_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_GETPAGESIZE 1
++| #define HAVE_MMAP 1
++| #define HAVE_MADVISE 1
++| #define HAVE_DECL_MADVISE 1
++| #define HAVE_LINUXMODULE_2_6 1
++| #define HAVE_CLICK_KERNEL 1
++| #define HAVE_LINUX_STRLEN_EXPOSED 1
++| #define HAVE_LINUX_POLLING 1
++| #define __SMP__ 1
++| #define HAVE_LINUX_ASM_ALTERNATIVE_H 1
++| #define HAVE_STRIDE_SCHED 1
++| #define HAVE_LINUX_IF_TUN_H 1
++| /* end confdefs.h.  */
++| #include <stdio.h>
++| #ifdef HAVE_SYS_TYPES_H
++| # include <sys/types.h>
++| #endif
++| #ifdef HAVE_SYS_STAT_H
++| # include <sys/stat.h>
++| #endif
++| #ifdef STDC_HEADERS
++| # include <stdlib.h>
++| # include <stddef.h>
++| #else
++| # ifdef HAVE_STDLIB_H
++| #  include <stdlib.h>
++| # endif
++| #endif
++| #ifdef HAVE_STRING_H
++| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
++| #  include <memory.h>
++| # endif
++| # include <string.h>
++| #endif
++| #ifdef HAVE_STRINGS_H
++| # include <strings.h>
++| #endif
++| #ifdef HAVE_INTTYPES_H
++| # include <inttypes.h>
++| #endif
++| #ifdef HAVE_STDINT_H
++| # include <stdint.h>
++| #endif
++| #ifdef HAVE_UNISTD_H
++| # include <unistd.h>
++| #endif
++| #include <net/if_tap.h>
++configure:13070: result: no
++configure:13074: checking net/if_tap.h presence
++configure:13089: g++ -W -Wall  -E  conftest.cpp
++conftest.cpp:82:24: error: net/if_tap.h: No such file or directory
++configure:13095: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| #define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++| #define SIZEOF_STRUCT_TIMEVAL 8
++| #define HAVE_STRUCT_TIMESPEC 1
++| #define SIZEOF_STRUCT_TIMESPEC 8
++| #define HAVE_ENDIAN_H 1
++| #define CLICK_BYTE_ORDER 1234
++| #define HAVE_BYTESWAP_H 1
++| #define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++| #define HAVE_ADDRESSABLE_VA_LIST 1
++| #define HAVE___BUILTIN_CLZ 1
++| #define HAVE___BUILTIN_CLZL 1
++| #define HAVE___BUILTIN_CLZLL 1
++| #define HAVE___BUILTIN_FFS 1
++| #define HAVE___BUILTIN_FFSL 1
++| #define HAVE___BUILTIN_FFSLL 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_FFS 1
++| #define HAVE_FFSL 1
++| #define HAVE_FFSLL 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_TERMIO_H 1
++| #define HAVE_NETDB_H 1
++| #define HAVE_PWD_H 1
++| #define HAVE_GRP_H 1
++| #define HAVE_POLL_H 1
++| #define HAVE_SIGACTION 1
++| #define HAVE_DLFCN_H 1
++| #define HAVE_DYNAMIC_LINKING 1
++| #define HAVE_ACCEPT_SOCKLEN_T 1
++| #define HAVE_LARGE_FILE_SUPPORT 1
++| #define SIZEOF_OFF_T 8
++| #define HAVE_SYS_MMAN_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_GETPAGESIZE 1
++| #define HAVE_MMAP 1
++| #define HAVE_MADVISE 1
++| #define HAVE_DECL_MADVISE 1
++| #define HAVE_LINUXMODULE_2_6 1
++| #define HAVE_CLICK_KERNEL 1
++| #define HAVE_LINUX_STRLEN_EXPOSED 1
++| #define HAVE_LINUX_POLLING 1
++| #define __SMP__ 1
++| #define HAVE_LINUX_ASM_ALTERNATIVE_H 1
++| #define HAVE_STRIDE_SCHED 1
++| #define HAVE_LINUX_IF_TUN_H 1
++| /* end confdefs.h.  */
++| #include <net/if_tap.h>
++configure:13109: result: no
++configure:13137: checking for net/if_tap.h
++configure:13145: result: no
++configure:13033: checking net/bpf.h usability
++configure:13050: g++ -W -Wall  -c -g -O2  conftest.cpp >&5
++conftest.cpp:115:21: error: net/bpf.h: No such file or directory
++configure:13056: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| #define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++| #define SIZEOF_STRUCT_TIMEVAL 8
++| #define HAVE_STRUCT_TIMESPEC 1
++| #define SIZEOF_STRUCT_TIMESPEC 8
++| #define HAVE_ENDIAN_H 1
++| #define CLICK_BYTE_ORDER 1234
++| #define HAVE_BYTESWAP_H 1
++| #define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++| #define HAVE_ADDRESSABLE_VA_LIST 1
++| #define HAVE___BUILTIN_CLZ 1
++| #define HAVE___BUILTIN_CLZL 1
++| #define HAVE___BUILTIN_CLZLL 1
++| #define HAVE___BUILTIN_FFS 1
++| #define HAVE___BUILTIN_FFSL 1
++| #define HAVE___BUILTIN_FFSLL 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_FFS 1
++| #define HAVE_FFSL 1
++| #define HAVE_FFSLL 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_TERMIO_H 1
++| #define HAVE_NETDB_H 1
++| #define HAVE_PWD_H 1
++| #define HAVE_GRP_H 1
++| #define HAVE_POLL_H 1
++| #define HAVE_SIGACTION 1
++| #define HAVE_DLFCN_H 1
++| #define HAVE_DYNAMIC_LINKING 1
++| #define HAVE_ACCEPT_SOCKLEN_T 1
++| #define HAVE_LARGE_FILE_SUPPORT 1
++| #define SIZEOF_OFF_T 8
++| #define HAVE_SYS_MMAN_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_GETPAGESIZE 1
++| #define HAVE_MMAP 1
++| #define HAVE_MADVISE 1
++| #define HAVE_DECL_MADVISE 1
++| #define HAVE_LINUXMODULE_2_6 1
++| #define HAVE_CLICK_KERNEL 1
++| #define HAVE_LINUX_STRLEN_EXPOSED 1
++| #define HAVE_LINUX_POLLING 1
++| #define __SMP__ 1
++| #define HAVE_LINUX_ASM_ALTERNATIVE_H 1
++| #define HAVE_STRIDE_SCHED 1
++| #define HAVE_LINUX_IF_TUN_H 1
++| /* end confdefs.h.  */
++| #include <stdio.h>
++| #ifdef HAVE_SYS_TYPES_H
++| # include <sys/types.h>
++| #endif
++| #ifdef HAVE_SYS_STAT_H
++| # include <sys/stat.h>
++| #endif
++| #ifdef STDC_HEADERS
++| # include <stdlib.h>
++| # include <stddef.h>
++| #else
++| # ifdef HAVE_STDLIB_H
++| #  include <stdlib.h>
++| # endif
++| #endif
++| #ifdef HAVE_STRING_H
++| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
++| #  include <memory.h>
++| # endif
++| # include <string.h>
++| #endif
++| #ifdef HAVE_STRINGS_H
++| # include <strings.h>
++| #endif
++| #ifdef HAVE_INTTYPES_H
++| # include <inttypes.h>
++| #endif
++| #ifdef HAVE_STDINT_H
++| # include <stdint.h>
++| #endif
++| #ifdef HAVE_UNISTD_H
++| # include <unistd.h>
++| #endif
++| #include <net/bpf.h>
++configure:13070: result: no
++configure:13074: checking net/bpf.h presence
++configure:13089: g++ -W -Wall  -E  conftest.cpp
++conftest.cpp:82:21: error: net/bpf.h: No such file or directory
++configure:13095: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| #define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++| #define SIZEOF_STRUCT_TIMEVAL 8
++| #define HAVE_STRUCT_TIMESPEC 1
++| #define SIZEOF_STRUCT_TIMESPEC 8
++| #define HAVE_ENDIAN_H 1
++| #define CLICK_BYTE_ORDER 1234
++| #define HAVE_BYTESWAP_H 1
++| #define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++| #define HAVE_ADDRESSABLE_VA_LIST 1
++| #define HAVE___BUILTIN_CLZ 1
++| #define HAVE___BUILTIN_CLZL 1
++| #define HAVE___BUILTIN_CLZLL 1
++| #define HAVE___BUILTIN_FFS 1
++| #define HAVE___BUILTIN_FFSL 1
++| #define HAVE___BUILTIN_FFSLL 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_FFS 1
++| #define HAVE_FFSL 1
++| #define HAVE_FFSLL 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_TERMIO_H 1
++| #define HAVE_NETDB_H 1
++| #define HAVE_PWD_H 1
++| #define HAVE_GRP_H 1
++| #define HAVE_POLL_H 1
++| #define HAVE_SIGACTION 1
++| #define HAVE_DLFCN_H 1
++| #define HAVE_DYNAMIC_LINKING 1
++| #define HAVE_ACCEPT_SOCKLEN_T 1
++| #define HAVE_LARGE_FILE_SUPPORT 1
++| #define SIZEOF_OFF_T 8
++| #define HAVE_SYS_MMAN_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_GETPAGESIZE 1
++| #define HAVE_MMAP 1
++| #define HAVE_MADVISE 1
++| #define HAVE_DECL_MADVISE 1
++| #define HAVE_LINUXMODULE_2_6 1
++| #define HAVE_CLICK_KERNEL 1
++| #define HAVE_LINUX_STRLEN_EXPOSED 1
++| #define HAVE_LINUX_POLLING 1
++| #define __SMP__ 1
++| #define HAVE_LINUX_ASM_ALTERNATIVE_H 1
++| #define HAVE_STRIDE_SCHED 1
++| #define HAVE_LINUX_IF_TUN_H 1
++| /* end confdefs.h.  */
++| #include <net/bpf.h>
++configure:13109: result: no
++configure:13137: checking for net/bpf.h
++configure:13145: result: no
++configure:13200: checking for pcap.h
++configure:13219: g++ -W -Wall  -E  conftest.cpp
++configure:13225: $? = 0
++configure:13244: result: found
++configure:13254: checking whether pcap.h works
++configure:13275: g++ -W -Wall  -E   conftest.cpp
++configure:13281: $? = 0
++configure:13297: result: yes
++configure:13305: checking for bpf_timeval in pcap.h
++configure:13328: result: no
++configure:13337: checking whether pcap_setnonblock is declared
++configure:13367: g++ -W -Wall  -c -g -O2   conftest.cpp >&5
++configure:13373: $? = 0
++configure:13388: result: yes
++configure:13416: checking for -lpcap
++configure:13459: gcc -W -Wall -o conftest -g -O2   conftest.c  -lpcap  >&5
++configure:13465: $? = 0
++configure:13534: result: found
++configure:13634: checking for pcap_setnonblock
++configure:13690: gcc -W -Wall -o conftest -g -O2   -lpcap conftest.c  >&5
++configure:13696: $? = 0
++configure:13714: result: yes
++configure:13751: checking whether struct if_data has ifi_datalen
++configure:13779: gcc -W -Wall -c -g -O2  conftest.c >&5
++conftest.c:87:24: error: net/if_var.h: No such file or directory
++conftest.c: In function 'main':
++conftest.c:92: error: storage size of 'ifm' isn't known
++conftest.c:92: warning: unused variable 'ifm'
++configure:13785: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| #define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++| #define SIZEOF_STRUCT_TIMEVAL 8
++| #define HAVE_STRUCT_TIMESPEC 1
++| #define SIZEOF_STRUCT_TIMESPEC 8
++| #define HAVE_ENDIAN_H 1
++| #define CLICK_BYTE_ORDER 1234
++| #define HAVE_BYTESWAP_H 1
++| #define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++| #define HAVE_ADDRESSABLE_VA_LIST 1
++| #define HAVE___BUILTIN_CLZ 1
++| #define HAVE___BUILTIN_CLZL 1
++| #define HAVE___BUILTIN_CLZLL 1
++| #define HAVE___BUILTIN_FFS 1
++| #define HAVE___BUILTIN_FFSL 1
++| #define HAVE___BUILTIN_FFSLL 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_FFS 1
++| #define HAVE_FFSL 1
++| #define HAVE_FFSLL 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_TERMIO_H 1
++| #define HAVE_NETDB_H 1
++| #define HAVE_PWD_H 1
++| #define HAVE_GRP_H 1
++| #define HAVE_POLL_H 1
++| #define HAVE_SIGACTION 1
++| #define HAVE_DLFCN_H 1
++| #define HAVE_DYNAMIC_LINKING 1
++| #define HAVE_ACCEPT_SOCKLEN_T 1
++| #define HAVE_LARGE_FILE_SUPPORT 1
++| #define SIZEOF_OFF_T 8
++| #define HAVE_SYS_MMAN_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_GETPAGESIZE 1
++| #define HAVE_MMAP 1
++| #define HAVE_MADVISE 1
++| #define HAVE_DECL_MADVISE 1
++| #define HAVE_LINUXMODULE_2_6 1
++| #define HAVE_CLICK_KERNEL 1
++| #define HAVE_LINUX_STRLEN_EXPOSED 1
++| #define HAVE_LINUX_POLLING 1
++| #define __SMP__ 1
++| #define HAVE_LINUX_ASM_ALTERNATIVE_H 1
++| #define HAVE_STRIDE_SCHED 1
++| #define HAVE_LINUX_IF_TUN_H 1
++| #define HAVE_DECL_PCAP_SETNONBLOCK 1
++| #define HAVE_PCAP 1
++| #define HAVE_PCAP_SETNONBLOCK 1
++| #define HAVE_USERLEVEL_DRIVER 1
++| /* end confdefs.h.  */
++| #include <net/if.h>
++| #include <net/if_var.h>
++| 
++| int
++| main ()
++| {
++| struct if_msghdr ifm; ifm.ifm_data.ifi_datalen = 0;
++|   ;
++|   return 0;
++| }
++configure:13800: result: no
++configure:13810: checking whether struct sockaddr_in has sin_len
++configure:13838: gcc -W -Wall -c -g -O2  conftest.c >&5
++conftest.c: In function 'main':
++conftest.c:92: error: 'struct sockaddr_in' has no member named 'sin_len'
++configure:13844: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| #define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++| #define SIZEOF_STRUCT_TIMEVAL 8
++| #define HAVE_STRUCT_TIMESPEC 1
++| #define SIZEOF_STRUCT_TIMESPEC 8
++| #define HAVE_ENDIAN_H 1
++| #define CLICK_BYTE_ORDER 1234
++| #define HAVE_BYTESWAP_H 1
++| #define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++| #define HAVE_ADDRESSABLE_VA_LIST 1
++| #define HAVE___BUILTIN_CLZ 1
++| #define HAVE___BUILTIN_CLZL 1
++| #define HAVE___BUILTIN_CLZLL 1
++| #define HAVE___BUILTIN_FFS 1
++| #define HAVE___BUILTIN_FFSL 1
++| #define HAVE___BUILTIN_FFSLL 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_FFS 1
++| #define HAVE_FFSL 1
++| #define HAVE_FFSLL 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_TERMIO_H 1
++| #define HAVE_NETDB_H 1
++| #define HAVE_PWD_H 1
++| #define HAVE_GRP_H 1
++| #define HAVE_POLL_H 1
++| #define HAVE_SIGACTION 1
++| #define HAVE_DLFCN_H 1
++| #define HAVE_DYNAMIC_LINKING 1
++| #define HAVE_ACCEPT_SOCKLEN_T 1
++| #define HAVE_LARGE_FILE_SUPPORT 1
++| #define SIZEOF_OFF_T 8
++| #define HAVE_SYS_MMAN_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_GETPAGESIZE 1
++| #define HAVE_MMAP 1
++| #define HAVE_MADVISE 1
++| #define HAVE_DECL_MADVISE 1
++| #define HAVE_LINUXMODULE_2_6 1
++| #define HAVE_CLICK_KERNEL 1
++| #define HAVE_LINUX_STRLEN_EXPOSED 1
++| #define HAVE_LINUX_POLLING 1
++| #define __SMP__ 1
++| #define HAVE_LINUX_ASM_ALTERNATIVE_H 1
++| #define HAVE_STRIDE_SCHED 1
++| #define HAVE_LINUX_IF_TUN_H 1
++| #define HAVE_DECL_PCAP_SETNONBLOCK 1
++| #define HAVE_PCAP 1
++| #define HAVE_PCAP_SETNONBLOCK 1
++| #define HAVE_USERLEVEL_DRIVER 1
++| /* end confdefs.h.  */
++| #include <sys/socket.h>
++| #include <netinet/in.h>
++| 
++| int
++| main ()
++| {
++| struct sockaddr_in sin; sin.sin_len = 0;
++|   ;
++|   return 0;
++| }
++configure:13859: result: no
++configure:14155: checking expat.h usability
++configure:14172: gcc -W -Wall -c -g -O2  conftest.c >&5
++configure:14178: $? = 0
++configure:14192: result: yes
++configure:14196: checking expat.h presence
++configure:14211: gcc -W -Wall -E  conftest.c
++configure:14217: $? = 0
++configure:14231: result: yes
++configure:14259: checking for expat.h
++configure:14266: result: yes
++configure:14286: checking for XML_ParserCreateNS in -lexpat
++configure:14321: gcc -W -Wall -o conftest -g -O2   conftest.c -lexpat   >&5
++configure:14327: $? = 0
++configure:14345: result: yes
++configure:14393: checking for Linux 2.6 compilation flags
++configure:14423: result: 
++configure:14440: checking for C++-includable kernel header files
++configure:14488: g++ -w -W -Wall -fno-exceptions -fno-rtti  -D__SMP__ -c -g -O2  -D__KERNEL__ -I/d/kernels/linux-2.6.27.10-clickport/include -I/d/kernels/linux-2.6.27.10-clickport/include/asm/mach-default  conftest.cpp >&5
++configure:14494: $? = 0
++configure:14510: result: yes
++configure:14516: checking whether -fpermissive is required
++configure:14564: g++ -w -W -Wall -fno-exceptions -fno-rtti  -D__SMP__ -o conftest -g -O2  -D__KERNEL__ -I/d/kernels/linux-2.6.27.10-clickport/include -I/d/kernels/linux-2.6.27.10-clickport/include/asm/mach-default   conftest.cpp  >&5
++configure:14570: $? = 0
++configure:14587: result: no
++configure:14675: checking whether long and int64_t are the same type in the Linux kernel
++configure:14721: g++ -w -W -Wall -fno-exceptions -fno-rtti  -D__SMP__ -c -g -O2  -D__KERNEL__ -I/d/kernels/linux-2.6.27.10-clickport/include -I/d/kernels/linux-2.6.27.10-clickport/include/asm/mach-default  conftest.cpp >&5
++configure:14727: $? = 0
++configure:14742: result: no
++configure:14753: checking whether long long and int64_t are the same type in the Linux kernel
++configure:14799: g++ -w -W -Wall -fno-exceptions -fno-rtti  -D__SMP__ -c -g -O2  -D__KERNEL__ -I/d/kernels/linux-2.6.27.10-clickport/include -I/d/kernels/linux-2.6.27.10-clickport/include/asm/mach-default  conftest.cpp >&5
++conftest.cpp: In function 'void f1(int64_t)':
++conftest.cpp:106: error: redefinition of 'void f1(int64_t)'
++conftest.cpp:104: error: 'void f1(long long int)' previously defined here
++configure:14805: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| #define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++| #define SIZEOF_STRUCT_TIMEVAL 8
++| #define HAVE_STRUCT_TIMESPEC 1
++| #define SIZEOF_STRUCT_TIMESPEC 8
++| #define HAVE_ENDIAN_H 1
++| #define CLICK_BYTE_ORDER 1234
++| #define HAVE_BYTESWAP_H 1
++| #define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++| #define HAVE_ADDRESSABLE_VA_LIST 1
++| #define HAVE___BUILTIN_CLZ 1
++| #define HAVE___BUILTIN_CLZL 1
++| #define HAVE___BUILTIN_CLZLL 1
++| #define HAVE___BUILTIN_FFS 1
++| #define HAVE___BUILTIN_FFSL 1
++| #define HAVE___BUILTIN_FFSLL 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_FFS 1
++| #define HAVE_FFSL 1
++| #define HAVE_FFSLL 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_TERMIO_H 1
++| #define HAVE_NETDB_H 1
++| #define HAVE_PWD_H 1
++| #define HAVE_GRP_H 1
++| #define HAVE_POLL_H 1
++| #define HAVE_SIGACTION 1
++| #define HAVE_DLFCN_H 1
++| #define HAVE_DYNAMIC_LINKING 1
++| #define HAVE_ACCEPT_SOCKLEN_T 1
++| #define HAVE_LARGE_FILE_SUPPORT 1
++| #define SIZEOF_OFF_T 8
++| #define HAVE_SYS_MMAN_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_GETPAGESIZE 1
++| #define HAVE_MMAP 1
++| #define HAVE_MADVISE 1
++| #define HAVE_DECL_MADVISE 1
++| #define HAVE_LINUXMODULE_2_6 1
++| #define HAVE_CLICK_KERNEL 1
++| #define HAVE_LINUX_STRLEN_EXPOSED 1
++| #define HAVE_LINUX_POLLING 1
++| #define __SMP__ 1
++| #define HAVE_LINUX_ASM_ALTERNATIVE_H 1
++| #define HAVE_STRIDE_SCHED 1
++| #define HAVE_LINUX_IF_TUN_H 1
++| #define HAVE_DECL_PCAP_SETNONBLOCK 1
++| #define HAVE_PCAP 1
++| #define HAVE_PCAP_SETNONBLOCK 1
++| #define HAVE_USERLEVEL_DRIVER 1
++| #define HAVE_EXPAT 1
++| /* end confdefs.h.  */
++| #if HAVE_LINUXMODULE_2_6
++| # define KBUILD_STR(s)              #s
++| # define KBUILD_BASENAME    KBUILD_STR(click)
++| # define KBUILD_MODNAME             KBUILD_STR(click)
++| #endif
++| #define new xxx_new
++| #define this xxx_this
++| #define delete xxx_delete
++| #define class xxx_class
++| #define virtual xxx_virtual
++| #define typename xxx_typename
++| #define private xxx_private
++| #define protected xxx_protected
++| #define public xxx_public
++| #define namespace xxx_namespace
++| #include <linux/autoconf.h>
++| #include <linux/types.h>
++| void f1(long long) {
++| }
++| void f1(int64_t) { // will fail if long long and int64_t are the same type
++| }
++| int
++| main ()
++| {
++| 
++|   ;
++|   return 0;
++| }
++configure:14820: result: yes
++configure:14831: checking whether struct sk_buff has a security member
++configure:14879: gcc -W -Wall -c -g -O2  -D__KERNEL__ -I/d/kernels/linux-2.6.27.10-clickport/include -I/d/kernels/linux-2.6.27.10-clickport/include/asm/mach-default  conftest.c >&5
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:17,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h: In function 'ratelimit':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h:23: warning: missing initializer
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h:23: warning: (near initialization for 'rs.printed')
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h: In function 'clear_user_page':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:71: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:72: warning: unused parameter 'pg'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h: In function 'copy_user_page':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:77: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:78: warning: unused parameter 'topage'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:131,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_none':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:25: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_bad':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:26: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:27: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:28: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pud_offset':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:38: warning: unused parameter 'address'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:131,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_none':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:29: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_bad':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:30: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:31: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:32: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pmd_offset':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:43: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pmd_free':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:59: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:59: warning: unused parameter 'pmd'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:158,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h: In function 'set_pte_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h:1305: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h:1305: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg.h:2,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/system.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h:17,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h: In function '__set_64bit_var':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h:60: warning: dereferencing type-punned pointer will break strict-aliasing rules
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h:60: warning: dereferencing type-punned pointer will break strict-aliasing rules
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock_types.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:81,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/lockdep.h: In function 'print_irqtrace_events':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/lockdep.h:398: warning: unused parameter 'curr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/net.h:58,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:25,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h: In function '__remove_wait_queue':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h:138: warning: unused parameter 'head'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:16,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:413: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_set_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:418: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:418: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_clear_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:422: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:422: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'num_node_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:426: warning: unused parameter 'state'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/rwsem.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/notifier.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:560,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/rwsem.h: In function '__down_write_nested':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/rwsem.h:144: warning: unused parameter 'subclass'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:560,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_lock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:165: warning: unused parameter 'p'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:165: warning: unused parameter 'f'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_unlock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:166: warning: unused parameter 'p'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:166: warning: unused parameter 'f'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_init':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:167: warning: unused parameter 'pgdat'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_seqbegin':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:169: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_seqretry':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:173: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:173: warning: unused parameter 'iv'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_writelock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:177: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_writeunlock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:178: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_seqlock_init':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:179: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'register_page_bootmem_info_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:188: warning: unused parameter 'pgdat'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'is_mem_section_removable':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:207: warning: unused parameter 'pfn'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:208: warning: unused parameter 'nr_pages'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'memory_present':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'nid'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'start'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'end'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'is_dma32':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:645: warning: unused parameter 'zone'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap_32.h:28,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap.h:5,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/apic.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/smp.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/smp.h:28,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:33,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h: In function 'acpi_fake_nodes':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h:170: warning: unused parameter 'fake_nodes'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h:171: warning: unused parameter 'num_nodes'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:34,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function '_node_to_cpumask_ptr':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:189: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'node_to_cpumask':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:193: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'node_to_first_cpu':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:197: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:34,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'arch_fix_phys_package_id':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:233: warning: unused parameter 'num'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:233: warning: unused parameter 'slot'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'get_mp_bus_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:249: warning: unused parameter 'busnum'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'set_mp_bus_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:253: warning: unused parameter 'busnum'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:253: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'zonelist_node_idx':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:735: warning: unused parameter 'zoneref'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'node_zonelist':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:164: warning: unused parameter 'nid'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'arch_free_page':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:170: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:170: warning: unused parameter 'order'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'arch_alloc_page':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:173: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:173: warning: unused parameter 'order'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/elf.h:89,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h: In function 'pack_gate':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h:61: warning: unused parameter 'flags'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h: In function 'elf_coredump_extra_notes_write':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:400: warning: unused parameter 'file'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:401: warning: unused parameter 'foffset'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h: In function 'marker_update_probe_range':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:88: warning: unused parameter 'begin'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:89: warning: unused parameter 'end'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h: In function '___mark_check_format':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:125: warning: unused parameter 'fmt'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/percpu.h:5,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/local.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:19,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function 'kmalloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:200: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function '__kmalloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:205: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function 'kmem_cache_alloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:213: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:24,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h: In function 'dev_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:429: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h: In function 'set_dev_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:433: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:433: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function '__debug_show_held_locks':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:53: warning: unused parameter 'task'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_show_held_locks':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:57: warning: unused parameter 'task'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_check_no_locks_freed':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:62: warning: unused parameter 'from'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:62: warning: unused parameter 'len'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_check_no_locks_held':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:67: warning: unused parameter 'task'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h:98,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:364,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h: In function 'native_set_pte_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:29: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:30: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h: In function 'native_pte_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:43: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:44: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:364,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h: In function 'pud_large':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h:117: warning: unused parameter 'pud'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h: In function 'native_set_pte_at':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:426: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:426: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:220,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'PagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: (Each undeclared identifier is reported only once
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: for each function it appears in.)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'SetPagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'ClearPagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'PageUncached':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:219: warning: unused parameter 'page'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function 'zone_to_nid':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:513: warning: unused parameter 'zone'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function '__pud_alloc':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:882: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:882: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:883: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function '__pmd_alloc':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:892: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:892: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:893: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function 'kernel_map_pages':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'numpages'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'enable'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h: In function 'dma_mark_clean':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h:56: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h:56: warning: unused parameter 'size'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'get_dma_ops':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:62: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'dma_mapping_error':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:75: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:75: warning: unused parameter 'dma_addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'dma_cache_sync':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'size'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:238: warning: unused parameter 'dir'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:30,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h: In function 'destroy_hrtimer_on_stack':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h:291: warning: unused parameter 'timer'
++In file included from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h: In function 'skb_can_coalesce':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:1361: warning: comparison between signed and unsigned
++conftest.c: In function 'main':
++conftest.c:108: error: 'struct sk_buff' has no member named 'security'
++configure:14885: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| #define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++| #define SIZEOF_STRUCT_TIMEVAL 8
++| #define HAVE_STRUCT_TIMESPEC 1
++| #define SIZEOF_STRUCT_TIMESPEC 8
++| #define HAVE_ENDIAN_H 1
++| #define CLICK_BYTE_ORDER 1234
++| #define HAVE_BYTESWAP_H 1
++| #define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++| #define HAVE_ADDRESSABLE_VA_LIST 1
++| #define HAVE___BUILTIN_CLZ 1
++| #define HAVE___BUILTIN_CLZL 1
++| #define HAVE___BUILTIN_CLZLL 1
++| #define HAVE___BUILTIN_FFS 1
++| #define HAVE___BUILTIN_FFSL 1
++| #define HAVE___BUILTIN_FFSLL 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_FFS 1
++| #define HAVE_FFSL 1
++| #define HAVE_FFSLL 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_TERMIO_H 1
++| #define HAVE_NETDB_H 1
++| #define HAVE_PWD_H 1
++| #define HAVE_GRP_H 1
++| #define HAVE_POLL_H 1
++| #define HAVE_SIGACTION 1
++| #define HAVE_DLFCN_H 1
++| #define HAVE_DYNAMIC_LINKING 1
++| #define HAVE_ACCEPT_SOCKLEN_T 1
++| #define HAVE_LARGE_FILE_SUPPORT 1
++| #define SIZEOF_OFF_T 8
++| #define HAVE_SYS_MMAN_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_GETPAGESIZE 1
++| #define HAVE_MMAP 1
++| #define HAVE_MADVISE 1
++| #define HAVE_DECL_MADVISE 1
++| #define HAVE_LINUXMODULE_2_6 1
++| #define HAVE_CLICK_KERNEL 1
++| #define HAVE_LINUX_STRLEN_EXPOSED 1
++| #define HAVE_LINUX_POLLING 1
++| #define __SMP__ 1
++| #define HAVE_LINUX_ASM_ALTERNATIVE_H 1
++| #define HAVE_STRIDE_SCHED 1
++| #define HAVE_LINUX_IF_TUN_H 1
++| #define HAVE_DECL_PCAP_SETNONBLOCK 1
++| #define HAVE_PCAP 1
++| #define HAVE_PCAP_SETNONBLOCK 1
++| #define HAVE_USERLEVEL_DRIVER 1
++| #define HAVE_EXPAT 1
++| #define HAVE_INT64_IS_LONG_LONG_LINUXMODULE 1
++| /* end confdefs.h.  */
++| #if HAVE_LINUXMODULE_2_6
++| # define KBUILD_STR(s)              #s
++| # define KBUILD_BASENAME    KBUILD_STR(click)
++| # define KBUILD_MODNAME             KBUILD_STR(click)
++| #endif
++| #define new xxx_new
++| #define this xxx_this
++| #define delete xxx_delete
++| #define class xxx_class
++| #define virtual xxx_virtual
++| #define typename xxx_typename
++| #define private xxx_private
++| #define protected xxx_protected
++| #define public xxx_public
++| #define namespace xxx_namespace
++| #include <linux/autoconf.h>
++| #include <linux/skbuff.h>
++| int
++| main ()
++| {
++| extern struct sk_buff *s; s->security = 0;
++|   ;
++|   return 0;
++| }
++configure:14900: result: no
++configure:14910: checking whether struct sk_buff has an fclone member
++configure:14958: gcc -W -Wall -c -g -O2  -D__KERNEL__ -I/d/kernels/linux-2.6.27.10-clickport/include -I/d/kernels/linux-2.6.27.10-clickport/include/asm/mach-default  conftest.c >&5
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:17,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h: In function 'ratelimit':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h:23: warning: missing initializer
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h:23: warning: (near initialization for 'rs.printed')
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h: In function 'clear_user_page':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:71: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:72: warning: unused parameter 'pg'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h: In function 'copy_user_page':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:77: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:78: warning: unused parameter 'topage'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:131,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_none':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:25: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_bad':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:26: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:27: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:28: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pud_offset':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:38: warning: unused parameter 'address'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:131,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_none':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:29: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_bad':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:30: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:31: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:32: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pmd_offset':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:43: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pmd_free':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:59: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:59: warning: unused parameter 'pmd'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:158,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h: In function 'set_pte_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h:1305: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h:1305: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg.h:2,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/system.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h:17,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h: In function '__set_64bit_var':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h:60: warning: dereferencing type-punned pointer will break strict-aliasing rules
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h:60: warning: dereferencing type-punned pointer will break strict-aliasing rules
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock_types.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:81,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/lockdep.h: In function 'print_irqtrace_events':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/lockdep.h:398: warning: unused parameter 'curr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/net.h:58,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:25,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h: In function '__remove_wait_queue':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h:138: warning: unused parameter 'head'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:16,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:413: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_set_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:418: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:418: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_clear_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:422: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:422: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'num_node_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:426: warning: unused parameter 'state'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/rwsem.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/notifier.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:560,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/rwsem.h: In function '__down_write_nested':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/rwsem.h:144: warning: unused parameter 'subclass'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:560,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_lock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:165: warning: unused parameter 'p'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:165: warning: unused parameter 'f'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_unlock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:166: warning: unused parameter 'p'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:166: warning: unused parameter 'f'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_init':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:167: warning: unused parameter 'pgdat'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_seqbegin':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:169: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_seqretry':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:173: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:173: warning: unused parameter 'iv'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_writelock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:177: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_writeunlock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:178: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_seqlock_init':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:179: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'register_page_bootmem_info_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:188: warning: unused parameter 'pgdat'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'is_mem_section_removable':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:207: warning: unused parameter 'pfn'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:208: warning: unused parameter 'nr_pages'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'memory_present':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'nid'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'start'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'end'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'is_dma32':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:645: warning: unused parameter 'zone'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap_32.h:28,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap.h:5,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/apic.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/smp.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/smp.h:28,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:33,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h: In function 'acpi_fake_nodes':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h:170: warning: unused parameter 'fake_nodes'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h:171: warning: unused parameter 'num_nodes'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:34,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function '_node_to_cpumask_ptr':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:189: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'node_to_cpumask':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:193: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'node_to_first_cpu':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:197: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:34,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'arch_fix_phys_package_id':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:233: warning: unused parameter 'num'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:233: warning: unused parameter 'slot'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'get_mp_bus_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:249: warning: unused parameter 'busnum'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'set_mp_bus_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:253: warning: unused parameter 'busnum'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:253: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'zonelist_node_idx':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:735: warning: unused parameter 'zoneref'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'node_zonelist':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:164: warning: unused parameter 'nid'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'arch_free_page':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:170: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:170: warning: unused parameter 'order'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'arch_alloc_page':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:173: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:173: warning: unused parameter 'order'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/elf.h:89,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h: In function 'pack_gate':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h:61: warning: unused parameter 'flags'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h: In function 'elf_coredump_extra_notes_write':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:400: warning: unused parameter 'file'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:401: warning: unused parameter 'foffset'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h: In function 'marker_update_probe_range':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:88: warning: unused parameter 'begin'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:89: warning: unused parameter 'end'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h: In function '___mark_check_format':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:125: warning: unused parameter 'fmt'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/percpu.h:5,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/local.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:19,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function 'kmalloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:200: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function '__kmalloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:205: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function 'kmem_cache_alloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:213: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:24,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h: In function 'dev_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:429: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h: In function 'set_dev_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:433: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:433: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function '__debug_show_held_locks':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:53: warning: unused parameter 'task'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_show_held_locks':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:57: warning: unused parameter 'task'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_check_no_locks_freed':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:62: warning: unused parameter 'from'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:62: warning: unused parameter 'len'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_check_no_locks_held':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:67: warning: unused parameter 'task'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h:98,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:364,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h: In function 'native_set_pte_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:29: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:30: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h: In function 'native_pte_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:43: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:44: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:364,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h: In function 'pud_large':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h:117: warning: unused parameter 'pud'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h: In function 'native_set_pte_at':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:426: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:426: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:220,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'PagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: (Each undeclared identifier is reported only once
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: for each function it appears in.)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'SetPagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'ClearPagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'PageUncached':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:219: warning: unused parameter 'page'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function 'zone_to_nid':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:513: warning: unused parameter 'zone'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function '__pud_alloc':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:882: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:882: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:883: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function '__pmd_alloc':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:892: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:892: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:893: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function 'kernel_map_pages':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'numpages'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'enable'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h: In function 'dma_mark_clean':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h:56: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h:56: warning: unused parameter 'size'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'get_dma_ops':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:62: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'dma_mapping_error':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:75: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:75: warning: unused parameter 'dma_addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'dma_cache_sync':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'size'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:238: warning: unused parameter 'dir'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:30,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h: In function 'destroy_hrtimer_on_stack':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h:291: warning: unused parameter 'timer'
++In file included from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h: In function 'skb_can_coalesce':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:1361: warning: comparison between signed and unsigned
++configure:14964: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| #define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++| #define SIZEOF_STRUCT_TIMEVAL 8
++| #define HAVE_STRUCT_TIMESPEC 1
++| #define SIZEOF_STRUCT_TIMESPEC 8
++| #define HAVE_ENDIAN_H 1
++| #define CLICK_BYTE_ORDER 1234
++| #define HAVE_BYTESWAP_H 1
++| #define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++| #define HAVE_ADDRESSABLE_VA_LIST 1
++| #define HAVE___BUILTIN_CLZ 1
++| #define HAVE___BUILTIN_CLZL 1
++| #define HAVE___BUILTIN_CLZLL 1
++| #define HAVE___BUILTIN_FFS 1
++| #define HAVE___BUILTIN_FFSL 1
++| #define HAVE___BUILTIN_FFSLL 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_FFS 1
++| #define HAVE_FFSL 1
++| #define HAVE_FFSLL 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_TERMIO_H 1
++| #define HAVE_NETDB_H 1
++| #define HAVE_PWD_H 1
++| #define HAVE_GRP_H 1
++| #define HAVE_POLL_H 1
++| #define HAVE_SIGACTION 1
++| #define HAVE_DLFCN_H 1
++| #define HAVE_DYNAMIC_LINKING 1
++| #define HAVE_ACCEPT_SOCKLEN_T 1
++| #define HAVE_LARGE_FILE_SUPPORT 1
++| #define SIZEOF_OFF_T 8
++| #define HAVE_SYS_MMAN_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_GETPAGESIZE 1
++| #define HAVE_MMAP 1
++| #define HAVE_MADVISE 1
++| #define HAVE_DECL_MADVISE 1
++| #define HAVE_LINUXMODULE_2_6 1
++| #define HAVE_CLICK_KERNEL 1
++| #define HAVE_LINUX_STRLEN_EXPOSED 1
++| #define HAVE_LINUX_POLLING 1
++| #define __SMP__ 1
++| #define HAVE_LINUX_ASM_ALTERNATIVE_H 1
++| #define HAVE_STRIDE_SCHED 1
++| #define HAVE_LINUX_IF_TUN_H 1
++| #define HAVE_DECL_PCAP_SETNONBLOCK 1
++| #define HAVE_PCAP 1
++| #define HAVE_PCAP_SETNONBLOCK 1
++| #define HAVE_USERLEVEL_DRIVER 1
++| #define HAVE_EXPAT 1
++| #define HAVE_INT64_IS_LONG_LONG_LINUXMODULE 1
++| /* end confdefs.h.  */
++| #if HAVE_LINUXMODULE_2_6
++| # define KBUILD_STR(s)              #s
++| # define KBUILD_BASENAME    KBUILD_STR(click)
++| # define KBUILD_MODNAME             KBUILD_STR(click)
++| #endif
++| #define new xxx_new
++| #define this xxx_this
++| #define delete xxx_delete
++| #define class xxx_class
++| #define virtual xxx_virtual
++| #define typename xxx_typename
++| #define private xxx_private
++| #define protected xxx_protected
++| #define public xxx_public
++| #define namespace xxx_namespace
++| #include <linux/autoconf.h>
++| #include <linux/skbuff.h>
++| int
++| main ()
++| {
++| extern struct sk_buff *s; s->fclone = 0;
++|   ;
++|   return 0;
++| }
++configure:14979: result: no
++configure:14989: checking whether skb_shinfo has a tso_size member
++configure:15037: gcc -W -Wall -c -g -O2  -D__KERNEL__ -I/d/kernels/linux-2.6.27.10-clickport/include -I/d/kernels/linux-2.6.27.10-clickport/include/asm/mach-default  conftest.c >&5
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:17,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h: In function 'ratelimit':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h:23: warning: missing initializer
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h:23: warning: (near initialization for 'rs.printed')
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h: In function 'clear_user_page':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:71: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:72: warning: unused parameter 'pg'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h: In function 'copy_user_page':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:77: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:78: warning: unused parameter 'topage'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:131,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_none':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:25: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_bad':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:26: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:27: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:28: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pud_offset':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:38: warning: unused parameter 'address'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:131,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_none':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:29: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_bad':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:30: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:31: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:32: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pmd_offset':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:43: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pmd_free':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:59: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:59: warning: unused parameter 'pmd'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:158,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h: In function 'set_pte_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h:1305: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h:1305: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg.h:2,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/system.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h:17,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h: In function '__set_64bit_var':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h:60: warning: dereferencing type-punned pointer will break strict-aliasing rules
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h:60: warning: dereferencing type-punned pointer will break strict-aliasing rules
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock_types.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:81,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/lockdep.h: In function 'print_irqtrace_events':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/lockdep.h:398: warning: unused parameter 'curr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/net.h:58,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:25,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h: In function '__remove_wait_queue':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h:138: warning: unused parameter 'head'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:16,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:413: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_set_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:418: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:418: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_clear_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:422: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:422: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'num_node_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:426: warning: unused parameter 'state'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/rwsem.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/notifier.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:560,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/rwsem.h: In function '__down_write_nested':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/rwsem.h:144: warning: unused parameter 'subclass'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:560,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_lock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:165: warning: unused parameter 'p'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:165: warning: unused parameter 'f'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_unlock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:166: warning: unused parameter 'p'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:166: warning: unused parameter 'f'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_init':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:167: warning: unused parameter 'pgdat'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_seqbegin':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:169: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_seqretry':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:173: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:173: warning: unused parameter 'iv'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_writelock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:177: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_writeunlock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:178: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_seqlock_init':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:179: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'register_page_bootmem_info_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:188: warning: unused parameter 'pgdat'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'is_mem_section_removable':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:207: warning: unused parameter 'pfn'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:208: warning: unused parameter 'nr_pages'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'memory_present':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'nid'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'start'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'end'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'is_dma32':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:645: warning: unused parameter 'zone'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap_32.h:28,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap.h:5,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/apic.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/smp.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/smp.h:28,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:33,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h: In function 'acpi_fake_nodes':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h:170: warning: unused parameter 'fake_nodes'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h:171: warning: unused parameter 'num_nodes'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:34,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function '_node_to_cpumask_ptr':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:189: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'node_to_cpumask':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:193: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'node_to_first_cpu':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:197: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:34,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'arch_fix_phys_package_id':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:233: warning: unused parameter 'num'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:233: warning: unused parameter 'slot'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'get_mp_bus_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:249: warning: unused parameter 'busnum'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'set_mp_bus_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:253: warning: unused parameter 'busnum'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:253: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'zonelist_node_idx':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:735: warning: unused parameter 'zoneref'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'node_zonelist':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:164: warning: unused parameter 'nid'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'arch_free_page':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:170: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:170: warning: unused parameter 'order'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'arch_alloc_page':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:173: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:173: warning: unused parameter 'order'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/elf.h:89,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h: In function 'pack_gate':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h:61: warning: unused parameter 'flags'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h: In function 'elf_coredump_extra_notes_write':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:400: warning: unused parameter 'file'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:401: warning: unused parameter 'foffset'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h: In function 'marker_update_probe_range':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:88: warning: unused parameter 'begin'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:89: warning: unused parameter 'end'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h: In function '___mark_check_format':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:125: warning: unused parameter 'fmt'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/percpu.h:5,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/local.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:19,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function 'kmalloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:200: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function '__kmalloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:205: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function 'kmem_cache_alloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:213: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:24,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h: In function 'dev_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:429: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h: In function 'set_dev_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:433: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:433: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function '__debug_show_held_locks':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:53: warning: unused parameter 'task'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_show_held_locks':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:57: warning: unused parameter 'task'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_check_no_locks_freed':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:62: warning: unused parameter 'from'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:62: warning: unused parameter 'len'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_check_no_locks_held':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:67: warning: unused parameter 'task'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h:98,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:364,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h: In function 'native_set_pte_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:29: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:30: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h: In function 'native_pte_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:43: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:44: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:364,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h: In function 'pud_large':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h:117: warning: unused parameter 'pud'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h: In function 'native_set_pte_at':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:426: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:426: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:220,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'PagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: (Each undeclared identifier is reported only once
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: for each function it appears in.)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'SetPagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'ClearPagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'PageUncached':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:219: warning: unused parameter 'page'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function 'zone_to_nid':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:513: warning: unused parameter 'zone'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function '__pud_alloc':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:882: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:882: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:883: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function '__pmd_alloc':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:892: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:892: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:893: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function 'kernel_map_pages':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'numpages'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'enable'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h: In function 'dma_mark_clean':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h:56: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h:56: warning: unused parameter 'size'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'get_dma_ops':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:62: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'dma_mapping_error':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:75: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:75: warning: unused parameter 'dma_addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'dma_cache_sync':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'size'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:238: warning: unused parameter 'dir'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:30,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h: In function 'destroy_hrtimer_on_stack':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h:291: warning: unused parameter 'timer'
++In file included from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h: In function 'skb_can_coalesce':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:1361: warning: comparison between signed and unsigned
++conftest.c: In function 'main':
++conftest.c:108: error: 'struct skb_shared_info' has no member named 'tso_size'
++configure:15043: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| #define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++| #define SIZEOF_STRUCT_TIMEVAL 8
++| #define HAVE_STRUCT_TIMESPEC 1
++| #define SIZEOF_STRUCT_TIMESPEC 8
++| #define HAVE_ENDIAN_H 1
++| #define CLICK_BYTE_ORDER 1234
++| #define HAVE_BYTESWAP_H 1
++| #define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++| #define HAVE_ADDRESSABLE_VA_LIST 1
++| #define HAVE___BUILTIN_CLZ 1
++| #define HAVE___BUILTIN_CLZL 1
++| #define HAVE___BUILTIN_CLZLL 1
++| #define HAVE___BUILTIN_FFS 1
++| #define HAVE___BUILTIN_FFSL 1
++| #define HAVE___BUILTIN_FFSLL 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_FFS 1
++| #define HAVE_FFSL 1
++| #define HAVE_FFSLL 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_TERMIO_H 1
++| #define HAVE_NETDB_H 1
++| #define HAVE_PWD_H 1
++| #define HAVE_GRP_H 1
++| #define HAVE_POLL_H 1
++| #define HAVE_SIGACTION 1
++| #define HAVE_DLFCN_H 1
++| #define HAVE_DYNAMIC_LINKING 1
++| #define HAVE_ACCEPT_SOCKLEN_T 1
++| #define HAVE_LARGE_FILE_SUPPORT 1
++| #define SIZEOF_OFF_T 8
++| #define HAVE_SYS_MMAN_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_GETPAGESIZE 1
++| #define HAVE_MMAP 1
++| #define HAVE_MADVISE 1
++| #define HAVE_DECL_MADVISE 1
++| #define HAVE_LINUXMODULE_2_6 1
++| #define HAVE_CLICK_KERNEL 1
++| #define HAVE_LINUX_STRLEN_EXPOSED 1
++| #define HAVE_LINUX_POLLING 1
++| #define __SMP__ 1
++| #define HAVE_LINUX_ASM_ALTERNATIVE_H 1
++| #define HAVE_STRIDE_SCHED 1
++| #define HAVE_LINUX_IF_TUN_H 1
++| #define HAVE_DECL_PCAP_SETNONBLOCK 1
++| #define HAVE_PCAP 1
++| #define HAVE_PCAP_SETNONBLOCK 1
++| #define HAVE_USERLEVEL_DRIVER 1
++| #define HAVE_EXPAT 1
++| #define HAVE_INT64_IS_LONG_LONG_LINUXMODULE 1
++| /* end confdefs.h.  */
++| #if HAVE_LINUXMODULE_2_6
++| # define KBUILD_STR(s)              #s
++| # define KBUILD_BASENAME    KBUILD_STR(click)
++| # define KBUILD_MODNAME             KBUILD_STR(click)
++| #endif
++| #define new xxx_new
++| #define this xxx_this
++| #define delete xxx_delete
++| #define class xxx_class
++| #define virtual xxx_virtual
++| #define typename xxx_typename
++| #define private xxx_private
++| #define protected xxx_protected
++| #define public xxx_public
++| #define namespace xxx_namespace
++| #include <linux/autoconf.h>
++| #include <linux/skbuff.h>
++| int
++| main ()
++| {
++| extern struct sk_buff *s; skb_shinfo(s)->tso_size = 0;
++|   ;
++|   return 0;
++| }
++configure:15058: result: no
++configure:15068: checking whether skb_shinfo has a gso_size member
++configure:15116: gcc -W -Wall -c -g -O2  -D__KERNEL__ -I/d/kernels/linux-2.6.27.10-clickport/include -I/d/kernels/linux-2.6.27.10-clickport/include/asm/mach-default  conftest.c >&5
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:17,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h: In function 'ratelimit':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h:23: warning: missing initializer
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h:23: warning: (near initialization for 'rs.printed')
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h: In function 'clear_user_page':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:71: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:72: warning: unused parameter 'pg'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h: In function 'copy_user_page':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:77: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:78: warning: unused parameter 'topage'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:131,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_none':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:25: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_bad':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:26: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:27: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:28: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pud_offset':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:38: warning: unused parameter 'address'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:131,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_none':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:29: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_bad':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:30: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:31: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:32: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pmd_offset':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:43: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pmd_free':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:59: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:59: warning: unused parameter 'pmd'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:158,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h: In function 'set_pte_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h:1305: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h:1305: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg.h:2,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/system.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h:17,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h: In function '__set_64bit_var':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h:60: warning: dereferencing type-punned pointer will break strict-aliasing rules
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h:60: warning: dereferencing type-punned pointer will break strict-aliasing rules
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock_types.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:81,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/lockdep.h: In function 'print_irqtrace_events':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/lockdep.h:398: warning: unused parameter 'curr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/net.h:58,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:25,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h: In function '__remove_wait_queue':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h:138: warning: unused parameter 'head'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:16,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:413: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_set_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:418: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:418: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_clear_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:422: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:422: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'num_node_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:426: warning: unused parameter 'state'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/rwsem.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/notifier.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:560,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/rwsem.h: In function '__down_write_nested':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/rwsem.h:144: warning: unused parameter 'subclass'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:560,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_lock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:165: warning: unused parameter 'p'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:165: warning: unused parameter 'f'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_unlock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:166: warning: unused parameter 'p'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:166: warning: unused parameter 'f'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_init':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:167: warning: unused parameter 'pgdat'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_seqbegin':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:169: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_seqretry':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:173: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:173: warning: unused parameter 'iv'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_writelock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:177: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_writeunlock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:178: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_seqlock_init':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:179: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'register_page_bootmem_info_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:188: warning: unused parameter 'pgdat'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'is_mem_section_removable':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:207: warning: unused parameter 'pfn'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:208: warning: unused parameter 'nr_pages'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'memory_present':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'nid'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'start'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'end'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'is_dma32':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:645: warning: unused parameter 'zone'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap_32.h:28,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap.h:5,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/apic.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/smp.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/smp.h:28,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:33,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h: In function 'acpi_fake_nodes':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h:170: warning: unused parameter 'fake_nodes'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h:171: warning: unused parameter 'num_nodes'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:34,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function '_node_to_cpumask_ptr':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:189: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'node_to_cpumask':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:193: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'node_to_first_cpu':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:197: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:34,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'arch_fix_phys_package_id':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:233: warning: unused parameter 'num'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:233: warning: unused parameter 'slot'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'get_mp_bus_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:249: warning: unused parameter 'busnum'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'set_mp_bus_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:253: warning: unused parameter 'busnum'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:253: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'zonelist_node_idx':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:735: warning: unused parameter 'zoneref'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'node_zonelist':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:164: warning: unused parameter 'nid'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'arch_free_page':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:170: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:170: warning: unused parameter 'order'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'arch_alloc_page':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:173: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:173: warning: unused parameter 'order'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/elf.h:89,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h: In function 'pack_gate':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h:61: warning: unused parameter 'flags'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h: In function 'elf_coredump_extra_notes_write':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:400: warning: unused parameter 'file'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:401: warning: unused parameter 'foffset'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h: In function 'marker_update_probe_range':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:88: warning: unused parameter 'begin'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:89: warning: unused parameter 'end'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h: In function '___mark_check_format':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:125: warning: unused parameter 'fmt'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/percpu.h:5,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/local.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:19,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function 'kmalloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:200: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function '__kmalloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:205: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function 'kmem_cache_alloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:213: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:24,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h: In function 'dev_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:429: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h: In function 'set_dev_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:433: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:433: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function '__debug_show_held_locks':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:53: warning: unused parameter 'task'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_show_held_locks':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:57: warning: unused parameter 'task'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_check_no_locks_freed':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:62: warning: unused parameter 'from'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:62: warning: unused parameter 'len'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_check_no_locks_held':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:67: warning: unused parameter 'task'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h:98,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:364,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h: In function 'native_set_pte_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:29: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:30: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h: In function 'native_pte_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:43: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:44: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:364,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h: In function 'pud_large':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h:117: warning: unused parameter 'pud'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h: In function 'native_set_pte_at':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:426: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:426: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:220,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'PagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: (Each undeclared identifier is reported only once
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: for each function it appears in.)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'SetPagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'ClearPagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'PageUncached':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:219: warning: unused parameter 'page'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function 'zone_to_nid':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:513: warning: unused parameter 'zone'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function '__pud_alloc':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:882: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:882: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:883: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function '__pmd_alloc':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:892: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:892: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:893: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function 'kernel_map_pages':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'numpages'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'enable'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h: In function 'dma_mark_clean':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h:56: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h:56: warning: unused parameter 'size'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'get_dma_ops':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:62: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'dma_mapping_error':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:75: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:75: warning: unused parameter 'dma_addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'dma_cache_sync':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'size'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:238: warning: unused parameter 'dir'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:30,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h: In function 'destroy_hrtimer_on_stack':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h:291: warning: unused parameter 'timer'
++In file included from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h: In function 'skb_can_coalesce':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:1361: warning: comparison between signed and unsigned
++configure:15122: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| #define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++| #define SIZEOF_STRUCT_TIMEVAL 8
++| #define HAVE_STRUCT_TIMESPEC 1
++| #define SIZEOF_STRUCT_TIMESPEC 8
++| #define HAVE_ENDIAN_H 1
++| #define CLICK_BYTE_ORDER 1234
++| #define HAVE_BYTESWAP_H 1
++| #define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++| #define HAVE_ADDRESSABLE_VA_LIST 1
++| #define HAVE___BUILTIN_CLZ 1
++| #define HAVE___BUILTIN_CLZL 1
++| #define HAVE___BUILTIN_CLZLL 1
++| #define HAVE___BUILTIN_FFS 1
++| #define HAVE___BUILTIN_FFSL 1
++| #define HAVE___BUILTIN_FFSLL 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_FFS 1
++| #define HAVE_FFSL 1
++| #define HAVE_FFSLL 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_TERMIO_H 1
++| #define HAVE_NETDB_H 1
++| #define HAVE_PWD_H 1
++| #define HAVE_GRP_H 1
++| #define HAVE_POLL_H 1
++| #define HAVE_SIGACTION 1
++| #define HAVE_DLFCN_H 1
++| #define HAVE_DYNAMIC_LINKING 1
++| #define HAVE_ACCEPT_SOCKLEN_T 1
++| #define HAVE_LARGE_FILE_SUPPORT 1
++| #define SIZEOF_OFF_T 8
++| #define HAVE_SYS_MMAN_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_GETPAGESIZE 1
++| #define HAVE_MMAP 1
++| #define HAVE_MADVISE 1
++| #define HAVE_DECL_MADVISE 1
++| #define HAVE_LINUXMODULE_2_6 1
++| #define HAVE_CLICK_KERNEL 1
++| #define HAVE_LINUX_STRLEN_EXPOSED 1
++| #define HAVE_LINUX_POLLING 1
++| #define __SMP__ 1
++| #define HAVE_LINUX_ASM_ALTERNATIVE_H 1
++| #define HAVE_STRIDE_SCHED 1
++| #define HAVE_LINUX_IF_TUN_H 1
++| #define HAVE_DECL_PCAP_SETNONBLOCK 1
++| #define HAVE_PCAP 1
++| #define HAVE_PCAP_SETNONBLOCK 1
++| #define HAVE_USERLEVEL_DRIVER 1
++| #define HAVE_EXPAT 1
++| #define HAVE_INT64_IS_LONG_LONG_LINUXMODULE 1
++| /* end confdefs.h.  */
++| #if HAVE_LINUXMODULE_2_6
++| # define KBUILD_STR(s)              #s
++| # define KBUILD_BASENAME    KBUILD_STR(click)
++| # define KBUILD_MODNAME             KBUILD_STR(click)
++| #endif
++| #define new xxx_new
++| #define this xxx_this
++| #define delete xxx_delete
++| #define class xxx_class
++| #define virtual xxx_virtual
++| #define typename xxx_typename
++| #define private xxx_private
++| #define protected xxx_protected
++| #define public xxx_public
++| #define namespace xxx_namespace
++| #include <linux/autoconf.h>
++| #include <linux/skbuff.h>
++| int
++| main ()
++| {
++| extern struct sk_buff *s; skb_shinfo(s)->gso_size = 0;
++|   ;
++|   return 0;
++| }
++configure:15137: result: no
++configure:15147: checking whether skb_shinfo has a ufo_size member
++configure:15195: gcc -W -Wall -c -g -O2  -D__KERNEL__ -I/d/kernels/linux-2.6.27.10-clickport/include -I/d/kernels/linux-2.6.27.10-clickport/include/asm/mach-default  conftest.c >&5
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:17,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h: In function 'ratelimit':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h:23: warning: missing initializer
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h:23: warning: (near initialization for 'rs.printed')
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h: In function 'clear_user_page':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:71: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:72: warning: unused parameter 'pg'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h: In function 'copy_user_page':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:77: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:78: warning: unused parameter 'topage'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:131,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_none':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:25: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_bad':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:26: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:27: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:28: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pud_offset':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:38: warning: unused parameter 'address'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:131,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_none':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:29: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_bad':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:30: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:31: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:32: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pmd_offset':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:43: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pmd_free':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:59: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:59: warning: unused parameter 'pmd'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:158,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h: In function 'set_pte_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h:1305: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h:1305: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg.h:2,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/system.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h:17,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h: In function '__set_64bit_var':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h:60: warning: dereferencing type-punned pointer will break strict-aliasing rules
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h:60: warning: dereferencing type-punned pointer will break strict-aliasing rules
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock_types.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:81,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/lockdep.h: In function 'print_irqtrace_events':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/lockdep.h:398: warning: unused parameter 'curr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/net.h:58,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:25,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h: In function '__remove_wait_queue':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h:138: warning: unused parameter 'head'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:16,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:413: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_set_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:418: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:418: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_clear_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:422: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:422: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'num_node_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:426: warning: unused parameter 'state'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/rwsem.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/notifier.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:560,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/rwsem.h: In function '__down_write_nested':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/rwsem.h:144: warning: unused parameter 'subclass'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:560,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_lock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:165: warning: unused parameter 'p'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:165: warning: unused parameter 'f'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_unlock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:166: warning: unused parameter 'p'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:166: warning: unused parameter 'f'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_init':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:167: warning: unused parameter 'pgdat'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_seqbegin':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:169: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_seqretry':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:173: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:173: warning: unused parameter 'iv'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_writelock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:177: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_writeunlock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:178: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_seqlock_init':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:179: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'register_page_bootmem_info_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:188: warning: unused parameter 'pgdat'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'is_mem_section_removable':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:207: warning: unused parameter 'pfn'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:208: warning: unused parameter 'nr_pages'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'memory_present':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'nid'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'start'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'end'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'is_dma32':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:645: warning: unused parameter 'zone'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap_32.h:28,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap.h:5,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/apic.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/smp.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/smp.h:28,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:33,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h: In function 'acpi_fake_nodes':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h:170: warning: unused parameter 'fake_nodes'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h:171: warning: unused parameter 'num_nodes'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:34,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function '_node_to_cpumask_ptr':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:189: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'node_to_cpumask':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:193: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'node_to_first_cpu':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:197: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:34,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'arch_fix_phys_package_id':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:233: warning: unused parameter 'num'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:233: warning: unused parameter 'slot'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'get_mp_bus_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:249: warning: unused parameter 'busnum'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'set_mp_bus_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:253: warning: unused parameter 'busnum'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:253: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'zonelist_node_idx':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:735: warning: unused parameter 'zoneref'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'node_zonelist':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:164: warning: unused parameter 'nid'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'arch_free_page':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:170: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:170: warning: unused parameter 'order'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'arch_alloc_page':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:173: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:173: warning: unused parameter 'order'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/elf.h:89,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h: In function 'pack_gate':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h:61: warning: unused parameter 'flags'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h: In function 'elf_coredump_extra_notes_write':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:400: warning: unused parameter 'file'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:401: warning: unused parameter 'foffset'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h: In function 'marker_update_probe_range':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:88: warning: unused parameter 'begin'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:89: warning: unused parameter 'end'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h: In function '___mark_check_format':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:125: warning: unused parameter 'fmt'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/percpu.h:5,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/local.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:19,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function 'kmalloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:200: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function '__kmalloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:205: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function 'kmem_cache_alloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:213: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:24,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h: In function 'dev_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:429: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h: In function 'set_dev_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:433: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:433: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function '__debug_show_held_locks':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:53: warning: unused parameter 'task'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_show_held_locks':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:57: warning: unused parameter 'task'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_check_no_locks_freed':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:62: warning: unused parameter 'from'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:62: warning: unused parameter 'len'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_check_no_locks_held':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:67: warning: unused parameter 'task'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h:98,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:364,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h: In function 'native_set_pte_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:29: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:30: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h: In function 'native_pte_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:43: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:44: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:364,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h: In function 'pud_large':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h:117: warning: unused parameter 'pud'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h: In function 'native_set_pte_at':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:426: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:426: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:220,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'PagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: (Each undeclared identifier is reported only once
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: for each function it appears in.)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'SetPagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'ClearPagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'PageUncached':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:219: warning: unused parameter 'page'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function 'zone_to_nid':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:513: warning: unused parameter 'zone'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function '__pud_alloc':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:882: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:882: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:883: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function '__pmd_alloc':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:892: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:892: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:893: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function 'kernel_map_pages':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'numpages'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'enable'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h: In function 'dma_mark_clean':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h:56: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h:56: warning: unused parameter 'size'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'get_dma_ops':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:62: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'dma_mapping_error':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:75: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:75: warning: unused parameter 'dma_addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'dma_cache_sync':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'size'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:238: warning: unused parameter 'dir'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:30,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h: In function 'destroy_hrtimer_on_stack':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h:291: warning: unused parameter 'timer'
++In file included from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h: In function 'skb_can_coalesce':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:1361: warning: comparison between signed and unsigned
++conftest.c: In function 'main':
++conftest.c:108: error: 'struct skb_shared_info' has no member named 'ufo_size'
++configure:15201: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| #define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++| #define SIZEOF_STRUCT_TIMEVAL 8
++| #define HAVE_STRUCT_TIMESPEC 1
++| #define SIZEOF_STRUCT_TIMESPEC 8
++| #define HAVE_ENDIAN_H 1
++| #define CLICK_BYTE_ORDER 1234
++| #define HAVE_BYTESWAP_H 1
++| #define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++| #define HAVE_ADDRESSABLE_VA_LIST 1
++| #define HAVE___BUILTIN_CLZ 1
++| #define HAVE___BUILTIN_CLZL 1
++| #define HAVE___BUILTIN_CLZLL 1
++| #define HAVE___BUILTIN_FFS 1
++| #define HAVE___BUILTIN_FFSL 1
++| #define HAVE___BUILTIN_FFSLL 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_FFS 1
++| #define HAVE_FFSL 1
++| #define HAVE_FFSLL 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_TERMIO_H 1
++| #define HAVE_NETDB_H 1
++| #define HAVE_PWD_H 1
++| #define HAVE_GRP_H 1
++| #define HAVE_POLL_H 1
++| #define HAVE_SIGACTION 1
++| #define HAVE_DLFCN_H 1
++| #define HAVE_DYNAMIC_LINKING 1
++| #define HAVE_ACCEPT_SOCKLEN_T 1
++| #define HAVE_LARGE_FILE_SUPPORT 1
++| #define SIZEOF_OFF_T 8
++| #define HAVE_SYS_MMAN_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_GETPAGESIZE 1
++| #define HAVE_MMAP 1
++| #define HAVE_MADVISE 1
++| #define HAVE_DECL_MADVISE 1
++| #define HAVE_LINUXMODULE_2_6 1
++| #define HAVE_CLICK_KERNEL 1
++| #define HAVE_LINUX_STRLEN_EXPOSED 1
++| #define HAVE_LINUX_POLLING 1
++| #define __SMP__ 1
++| #define HAVE_LINUX_ASM_ALTERNATIVE_H 1
++| #define HAVE_STRIDE_SCHED 1
++| #define HAVE_LINUX_IF_TUN_H 1
++| #define HAVE_DECL_PCAP_SETNONBLOCK 1
++| #define HAVE_PCAP 1
++| #define HAVE_PCAP_SETNONBLOCK 1
++| #define HAVE_USERLEVEL_DRIVER 1
++| #define HAVE_EXPAT 1
++| #define HAVE_INT64_IS_LONG_LONG_LINUXMODULE 1
++| /* end confdefs.h.  */
++| #if HAVE_LINUXMODULE_2_6
++| # define KBUILD_STR(s)              #s
++| # define KBUILD_BASENAME    KBUILD_STR(click)
++| # define KBUILD_MODNAME             KBUILD_STR(click)
++| #endif
++| #define new xxx_new
++| #define this xxx_this
++| #define delete xxx_delete
++| #define class xxx_class
++| #define virtual xxx_virtual
++| #define typename xxx_typename
++| #define private xxx_private
++| #define protected xxx_protected
++| #define public xxx_public
++| #define namespace xxx_namespace
++| #include <linux/autoconf.h>
++| #include <linux/skbuff.h>
++| int
++| main ()
++| {
++| extern struct sk_buff *s; skb_shinfo(s)->ufo_size = 0;
++|   ;
++|   return 0;
++| }
++configure:15216: result: no
++configure:15226: checking whether skb_shinfo has an ip6_frag_id member
++configure:15274: gcc -W -Wall -c -g -O2  -D__KERNEL__ -I/d/kernels/linux-2.6.27.10-clickport/include -I/d/kernels/linux-2.6.27.10-clickport/include/asm/mach-default  conftest.c >&5
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:17,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h: In function 'ratelimit':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h:23: warning: missing initializer
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h:23: warning: (near initialization for 'rs.printed')
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h: In function 'clear_user_page':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:71: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:72: warning: unused parameter 'pg'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h: In function 'copy_user_page':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:77: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:78: warning: unused parameter 'topage'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:131,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_none':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:25: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_bad':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:26: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:27: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:28: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pud_offset':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:38: warning: unused parameter 'address'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:131,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_none':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:29: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_bad':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:30: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:31: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:32: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pmd_offset':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:43: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pmd_free':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:59: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:59: warning: unused parameter 'pmd'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:158,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h: In function 'set_pte_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h:1305: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h:1305: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg.h:2,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/system.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h:17,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h: In function '__set_64bit_var':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h:60: warning: dereferencing type-punned pointer will break strict-aliasing rules
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h:60: warning: dereferencing type-punned pointer will break strict-aliasing rules
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock_types.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:81,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/lockdep.h: In function 'print_irqtrace_events':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/lockdep.h:398: warning: unused parameter 'curr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/net.h:58,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:25,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h: In function '__remove_wait_queue':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h:138: warning: unused parameter 'head'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:16,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:413: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_set_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:418: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:418: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_clear_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:422: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:422: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'num_node_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:426: warning: unused parameter 'state'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/rwsem.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/notifier.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:560,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/rwsem.h: In function '__down_write_nested':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/rwsem.h:144: warning: unused parameter 'subclass'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:560,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_lock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:165: warning: unused parameter 'p'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:165: warning: unused parameter 'f'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_unlock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:166: warning: unused parameter 'p'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:166: warning: unused parameter 'f'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_init':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:167: warning: unused parameter 'pgdat'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_seqbegin':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:169: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_seqretry':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:173: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:173: warning: unused parameter 'iv'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_writelock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:177: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_writeunlock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:178: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_seqlock_init':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:179: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'register_page_bootmem_info_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:188: warning: unused parameter 'pgdat'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'is_mem_section_removable':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:207: warning: unused parameter 'pfn'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:208: warning: unused parameter 'nr_pages'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'memory_present':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'nid'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'start'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'end'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'is_dma32':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:645: warning: unused parameter 'zone'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap_32.h:28,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap.h:5,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/apic.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/smp.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/smp.h:28,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:33,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h: In function 'acpi_fake_nodes':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h:170: warning: unused parameter 'fake_nodes'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h:171: warning: unused parameter 'num_nodes'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:34,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function '_node_to_cpumask_ptr':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:189: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'node_to_cpumask':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:193: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'node_to_first_cpu':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:197: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:34,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'arch_fix_phys_package_id':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:233: warning: unused parameter 'num'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:233: warning: unused parameter 'slot'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'get_mp_bus_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:249: warning: unused parameter 'busnum'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'set_mp_bus_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:253: warning: unused parameter 'busnum'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:253: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'zonelist_node_idx':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:735: warning: unused parameter 'zoneref'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'node_zonelist':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:164: warning: unused parameter 'nid'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'arch_free_page':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:170: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:170: warning: unused parameter 'order'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'arch_alloc_page':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:173: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:173: warning: unused parameter 'order'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/elf.h:89,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h: In function 'pack_gate':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h:61: warning: unused parameter 'flags'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h: In function 'elf_coredump_extra_notes_write':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:400: warning: unused parameter 'file'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:401: warning: unused parameter 'foffset'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h: In function 'marker_update_probe_range':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:88: warning: unused parameter 'begin'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:89: warning: unused parameter 'end'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h: In function '___mark_check_format':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:125: warning: unused parameter 'fmt'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/percpu.h:5,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/local.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:19,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function 'kmalloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:200: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function '__kmalloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:205: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function 'kmem_cache_alloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:213: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:24,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h: In function 'dev_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:429: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h: In function 'set_dev_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:433: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:433: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function '__debug_show_held_locks':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:53: warning: unused parameter 'task'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_show_held_locks':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:57: warning: unused parameter 'task'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_check_no_locks_freed':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:62: warning: unused parameter 'from'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:62: warning: unused parameter 'len'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_check_no_locks_held':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:67: warning: unused parameter 'task'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h:98,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:364,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h: In function 'native_set_pte_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:29: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:30: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h: In function 'native_pte_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:43: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:44: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:364,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h: In function 'pud_large':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h:117: warning: unused parameter 'pud'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h: In function 'native_set_pte_at':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:426: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:426: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:220,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'PagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: (Each undeclared identifier is reported only once
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: for each function it appears in.)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'SetPagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'ClearPagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'PageUncached':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:219: warning: unused parameter 'page'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function 'zone_to_nid':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:513: warning: unused parameter 'zone'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function '__pud_alloc':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:882: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:882: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:883: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function '__pmd_alloc':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:892: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:892: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:893: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function 'kernel_map_pages':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'numpages'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'enable'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h: In function 'dma_mark_clean':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h:56: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h:56: warning: unused parameter 'size'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'get_dma_ops':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:62: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'dma_mapping_error':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:75: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:75: warning: unused parameter 'dma_addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'dma_cache_sync':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'size'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:238: warning: unused parameter 'dir'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:30,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h: In function 'destroy_hrtimer_on_stack':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h:291: warning: unused parameter 'timer'
++In file included from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h: In function 'skb_can_coalesce':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:1361: warning: comparison between signed and unsigned
++configure:15280: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| #define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++| #define SIZEOF_STRUCT_TIMEVAL 8
++| #define HAVE_STRUCT_TIMESPEC 1
++| #define SIZEOF_STRUCT_TIMESPEC 8
++| #define HAVE_ENDIAN_H 1
++| #define CLICK_BYTE_ORDER 1234
++| #define HAVE_BYTESWAP_H 1
++| #define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++| #define HAVE_ADDRESSABLE_VA_LIST 1
++| #define HAVE___BUILTIN_CLZ 1
++| #define HAVE___BUILTIN_CLZL 1
++| #define HAVE___BUILTIN_CLZLL 1
++| #define HAVE___BUILTIN_FFS 1
++| #define HAVE___BUILTIN_FFSL 1
++| #define HAVE___BUILTIN_FFSLL 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_FFS 1
++| #define HAVE_FFSL 1
++| #define HAVE_FFSLL 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_TERMIO_H 1
++| #define HAVE_NETDB_H 1
++| #define HAVE_PWD_H 1
++| #define HAVE_GRP_H 1
++| #define HAVE_POLL_H 1
++| #define HAVE_SIGACTION 1
++| #define HAVE_DLFCN_H 1
++| #define HAVE_DYNAMIC_LINKING 1
++| #define HAVE_ACCEPT_SOCKLEN_T 1
++| #define HAVE_LARGE_FILE_SUPPORT 1
++| #define SIZEOF_OFF_T 8
++| #define HAVE_SYS_MMAN_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_GETPAGESIZE 1
++| #define HAVE_MMAP 1
++| #define HAVE_MADVISE 1
++| #define HAVE_DECL_MADVISE 1
++| #define HAVE_LINUXMODULE_2_6 1
++| #define HAVE_CLICK_KERNEL 1
++| #define HAVE_LINUX_STRLEN_EXPOSED 1
++| #define HAVE_LINUX_POLLING 1
++| #define __SMP__ 1
++| #define HAVE_LINUX_ASM_ALTERNATIVE_H 1
++| #define HAVE_STRIDE_SCHED 1
++| #define HAVE_LINUX_IF_TUN_H 1
++| #define HAVE_DECL_PCAP_SETNONBLOCK 1
++| #define HAVE_PCAP 1
++| #define HAVE_PCAP_SETNONBLOCK 1
++| #define HAVE_USERLEVEL_DRIVER 1
++| #define HAVE_EXPAT 1
++| #define HAVE_INT64_IS_LONG_LONG_LINUXMODULE 1
++| /* end confdefs.h.  */
++| #if HAVE_LINUXMODULE_2_6
++| # define KBUILD_STR(s)              #s
++| # define KBUILD_BASENAME    KBUILD_STR(click)
++| # define KBUILD_MODNAME             KBUILD_STR(click)
++| #endif
++| #define new xxx_new
++| #define this xxx_this
++| #define delete xxx_delete
++| #define class xxx_class
++| #define virtual xxx_virtual
++| #define typename xxx_typename
++| #define private xxx_private
++| #define protected xxx_protected
++| #define public xxx_public
++| #define namespace xxx_namespace
++| #include <linux/autoconf.h>
++| #include <linux/skbuff.h>
++| int
++| main ()
++| {
++| extern struct sk_buff *s; skb_shinfo(s)->ip6_frag_id = 0;
++|   ;
++|   return 0;
++| }
++configure:15295: result: no
++configure:15311: checking whether net_enable_timestamp is declared
++configure:15358: gcc -W -Wall -c -g -O2  -D__KERNEL__ -I/d/kernels/linux-2.6.27.10-clickport/include -I/d/kernels/linux-2.6.27.10-clickport/include/asm/mach-default  conftest.c >&5
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:17,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h: In function 'ratelimit':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h:23: warning: missing initializer
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h:23: warning: (near initialization for 'rs.printed')
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h: In function 'clear_user_page':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:71: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:72: warning: unused parameter 'pg'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h: In function 'copy_user_page':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:77: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:78: warning: unused parameter 'topage'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:131,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_none':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:25: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_bad':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:26: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:27: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:28: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pud_offset':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:38: warning: unused parameter 'address'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:131,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_none':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:29: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_bad':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:30: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:31: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:32: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pmd_offset':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:43: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pmd_free':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:59: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:59: warning: unused parameter 'pmd'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:158,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h: In function 'set_pte_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h:1305: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h:1305: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg.h:2,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/system.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h:17,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h: In function '__set_64bit_var':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h:60: warning: dereferencing type-punned pointer will break strict-aliasing rules
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h:60: warning: dereferencing type-punned pointer will break strict-aliasing rules
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock_types.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:81,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/lockdep.h: In function 'print_irqtrace_events':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/lockdep.h:398: warning: unused parameter 'curr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/net.h:58,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:25,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h: In function '__remove_wait_queue':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h:138: warning: unused parameter 'head'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:16,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:413: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_set_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:418: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:418: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_clear_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:422: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:422: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'num_node_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:426: warning: unused parameter 'state'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/rwsem.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/notifier.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:560,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/rwsem.h: In function '__down_write_nested':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/rwsem.h:144: warning: unused parameter 'subclass'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:560,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_lock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:165: warning: unused parameter 'p'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:165: warning: unused parameter 'f'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_unlock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:166: warning: unused parameter 'p'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:166: warning: unused parameter 'f'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_init':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:167: warning: unused parameter 'pgdat'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_seqbegin':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:169: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_seqretry':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:173: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:173: warning: unused parameter 'iv'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_writelock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:177: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_writeunlock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:178: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_seqlock_init':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:179: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'register_page_bootmem_info_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:188: warning: unused parameter 'pgdat'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'is_mem_section_removable':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:207: warning: unused parameter 'pfn'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:208: warning: unused parameter 'nr_pages'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'memory_present':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'nid'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'start'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'end'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'is_dma32':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:645: warning: unused parameter 'zone'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap_32.h:28,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap.h:5,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/apic.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/smp.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/smp.h:28,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:33,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h: In function 'acpi_fake_nodes':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h:170: warning: unused parameter 'fake_nodes'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h:171: warning: unused parameter 'num_nodes'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:34,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function '_node_to_cpumask_ptr':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:189: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'node_to_cpumask':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:193: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'node_to_first_cpu':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:197: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:34,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'arch_fix_phys_package_id':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:233: warning: unused parameter 'num'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:233: warning: unused parameter 'slot'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'get_mp_bus_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:249: warning: unused parameter 'busnum'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'set_mp_bus_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:253: warning: unused parameter 'busnum'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:253: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'zonelist_node_idx':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:735: warning: unused parameter 'zoneref'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'node_zonelist':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:164: warning: unused parameter 'nid'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'arch_free_page':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:170: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:170: warning: unused parameter 'order'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'arch_alloc_page':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:173: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:173: warning: unused parameter 'order'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/elf.h:89,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h: In function 'pack_gate':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h:61: warning: unused parameter 'flags'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h: In function 'elf_coredump_extra_notes_write':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:400: warning: unused parameter 'file'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:401: warning: unused parameter 'foffset'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h: In function 'marker_update_probe_range':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:88: warning: unused parameter 'begin'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:89: warning: unused parameter 'end'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h: In function '___mark_check_format':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:125: warning: unused parameter 'fmt'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/percpu.h:5,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/local.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:19,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function 'kmalloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:200: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function '__kmalloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:205: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function 'kmem_cache_alloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:213: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:24,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h: In function 'dev_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:429: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h: In function 'set_dev_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:433: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:433: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function '__debug_show_held_locks':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:53: warning: unused parameter 'task'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_show_held_locks':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:57: warning: unused parameter 'task'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_check_no_locks_freed':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:62: warning: unused parameter 'from'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:62: warning: unused parameter 'len'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_check_no_locks_held':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:67: warning: unused parameter 'task'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h:98,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:364,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h: In function 'native_set_pte_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:29: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:30: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h: In function 'native_pte_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:43: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:44: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:364,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h: In function 'pud_large':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h:117: warning: unused parameter 'pud'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h: In function 'native_set_pte_at':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:426: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:426: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:220,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'PagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: (Each undeclared identifier is reported only once
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: for each function it appears in.)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'SetPagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'ClearPagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'PageUncached':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:219: warning: unused parameter 'page'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function 'zone_to_nid':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:513: warning: unused parameter 'zone'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function '__pud_alloc':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:882: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:882: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:883: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function '__pmd_alloc':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:892: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:892: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:893: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function 'kernel_map_pages':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'numpages'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'enable'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h: In function 'dma_mark_clean':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h:56: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h:56: warning: unused parameter 'size'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'get_dma_ops':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:62: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'dma_mapping_error':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:75: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:75: warning: unused parameter 'dma_addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'dma_cache_sync':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'size'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:238: warning: unused parameter 'dir'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:30,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h: In function 'destroy_hrtimer_on_stack':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h:291: warning: unused parameter 'timer'
++In file included from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h: In function 'skb_can_coalesce':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:1361: warning: comparison between signed and unsigned
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/timer.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:33,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h: In function 'debug_object_init':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:67: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:67: warning: unused parameter 'descr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h: In function 'debug_object_init_on_stack':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:69: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:69: warning: unused parameter 'descr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h: In function 'debug_object_activate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:71: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:71: warning: unused parameter 'descr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h: In function 'debug_object_deactivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:73: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:73: warning: unused parameter 'descr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h: In function 'debug_object_destroy':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:75: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:75: warning: unused parameter 'descr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h: In function 'debug_object_free':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:77: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:77: warning: unused parameter 'descr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h: In function 'debug_check_no_obj_freed':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:87: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:87: warning: unused parameter 'size'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:33,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/timer.h: In function 'destroy_timer_on_stack':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/timer.h:47: warning: unused parameter 'timer'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:42,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/workqueue.h: In function 'cancel_delayed_work':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/workqueue.h:220: warning: dereferencing type-punned pointer will break strict-aliasing rules
++/d/kernels/linux-2.6.27.10-clickport/include/linux/workqueue.h: In function 'cancel_rearming_delayed_workqueue':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/workqueue.h:228: warning: unused parameter 'wq'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:44,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/net/net_namespace.h: In function 'release_net':
++/d/kernels/linux-2.6.27.10-clickport/include/net/net_namespace.h:184: warning: unused parameter 'net'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:77,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/seccomp.h: In function 'prctl_set_seccomp':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/seccomp.h:33: warning: unused parameter 'arg2'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/rtmutex.h:16,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:79,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/plist.h: In function 'plist_head_init':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/plist.h:128: warning: unused parameter 'lock'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:79,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/rtmutex.h: In function 'rt_mutex_debug_check_no_locks_freed':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/rtmutex.h:46: warning: unused parameter 'from'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/rtmutex.h:47: warning: unused parameter 'len'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:88,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/latencytop.h: In function 'account_scheduler_latency':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/latencytop.h:34: warning: unused parameter 'task'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/latencytop.h:34: warning: unused parameter 'usecs'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/latencytop.h:34: warning: unused parameter 'inter'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/latencytop.h: In function 'clear_all_latency_tracing':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/latencytop.h:38: warning: unused parameter 'p'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h: In function 'select_nohz_load_balancer':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:260: warning: unused parameter 'cpu'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h: In function 'prefetch_stack':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:892: warning: unused parameter 't'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:1407,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/pid.h: In function '__vx_info_map_pid':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/pid.h:13: warning: unused parameter 'func'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/pid.h:13: warning: unused parameter 'file'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/pid.h:13: warning: unused parameter 'line'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/pid.h: In function '__vx_info_rmap_pid':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/pid.h:35: warning: unused parameter 'func'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/pid.h:35: warning: unused parameter 'file'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/pid.h:35: warning: unused parameter 'line'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h: In function 'wake_up_idle_cpu':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:1636: warning: unused parameter 'cpu'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h: In function 'spin_needbreak':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:2101: warning: unused parameter 'lock'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h: In function '__trace_special':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:2154: warning: unused parameter '__tr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:2154: warning: unused parameter '__data'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:2155: warning: unused parameter 'arg1'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:2155: warning: unused parameter 'arg2'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:2155: warning: unused parameter 'arg3'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h: In function 'mm_update_next_owner':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:2237: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h: In function 'mm_init_owner':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:2241: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:2241: warning: unused parameter 'p'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/irq.h:194,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/hardirq_32.h:5,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/hardirq.h:2,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/hardirq.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:12,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/hw_irq.h: In function '__setup_vector_irq':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/hw_irq.h:122: warning: unused parameter 'cpu'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/hardirq_32.h:5,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/hardirq.h:2,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/hardirq.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:12,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/irq.h: In function 'set_balance_irq_affinity':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/irq.h:242: warning: unused parameter 'irq'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/irq.h:242: warning: unused parameter 'mask'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:12,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/hardirq.h: In function 'account_system_vtime':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/hardirq.h:116: warning: unused parameter 'tsk'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h: In function 'disable_irq_nosync_lockdep_irqsave':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:149: warning: unused parameter 'flags'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h: In function 'enable_irq_lockdep_irqrestore':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:173: warning: unused parameter 'flags'
++In file included from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h: In function 'netif_msg_init':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:1455: warning: comparison between signed and unsigned
++/d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h: In function 'netif_rx_schedule_prep':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:1464: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h: In function '__netif_rx_schedule':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:1473: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h: In function '__netif_rx_complete':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:1502: warning: unused parameter 'dev'
++configure:15364: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| #define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++| #define SIZEOF_STRUCT_TIMEVAL 8
++| #define HAVE_STRUCT_TIMESPEC 1
++| #define SIZEOF_STRUCT_TIMESPEC 8
++| #define HAVE_ENDIAN_H 1
++| #define CLICK_BYTE_ORDER 1234
++| #define HAVE_BYTESWAP_H 1
++| #define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++| #define HAVE_ADDRESSABLE_VA_LIST 1
++| #define HAVE___BUILTIN_CLZ 1
++| #define HAVE___BUILTIN_CLZL 1
++| #define HAVE___BUILTIN_CLZLL 1
++| #define HAVE___BUILTIN_FFS 1
++| #define HAVE___BUILTIN_FFSL 1
++| #define HAVE___BUILTIN_FFSLL 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_FFS 1
++| #define HAVE_FFSL 1
++| #define HAVE_FFSLL 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_TERMIO_H 1
++| #define HAVE_NETDB_H 1
++| #define HAVE_PWD_H 1
++| #define HAVE_GRP_H 1
++| #define HAVE_POLL_H 1
++| #define HAVE_SIGACTION 1
++| #define HAVE_DLFCN_H 1
++| #define HAVE_DYNAMIC_LINKING 1
++| #define HAVE_ACCEPT_SOCKLEN_T 1
++| #define HAVE_LARGE_FILE_SUPPORT 1
++| #define SIZEOF_OFF_T 8
++| #define HAVE_SYS_MMAN_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_GETPAGESIZE 1
++| #define HAVE_MMAP 1
++| #define HAVE_MADVISE 1
++| #define HAVE_DECL_MADVISE 1
++| #define HAVE_LINUXMODULE_2_6 1
++| #define HAVE_CLICK_KERNEL 1
++| #define HAVE_LINUX_STRLEN_EXPOSED 1
++| #define HAVE_LINUX_POLLING 1
++| #define __SMP__ 1
++| #define HAVE_LINUX_ASM_ALTERNATIVE_H 1
++| #define HAVE_STRIDE_SCHED 1
++| #define HAVE_LINUX_IF_TUN_H 1
++| #define HAVE_DECL_PCAP_SETNONBLOCK 1
++| #define HAVE_PCAP 1
++| #define HAVE_PCAP_SETNONBLOCK 1
++| #define HAVE_USERLEVEL_DRIVER 1
++| #define HAVE_EXPAT 1
++| #define HAVE_INT64_IS_LONG_LONG_LINUXMODULE 1
++| /* end confdefs.h.  */
++| #if HAVE_LINUXMODULE_2_6
++| # define KBUILD_STR(s)              #s
++| # define KBUILD_BASENAME    KBUILD_STR(click)
++| # define KBUILD_MODNAME             KBUILD_STR(click)
++| #endif
++| #define new xxx_new
++| #define this xxx_this
++| #define delete xxx_delete
++| #define class xxx_class
++| #define virtual xxx_virtual
++| #define typename xxx_typename
++| #define private xxx_private
++| #define protected xxx_protected
++| #define public xxx_public
++| #define namespace xxx_namespace
++| #include <linux/autoconf.h>
++| #include <linux/skbuff.h>
++| #include <linux/netdevice.h>
++| 
++| int
++| main ()
++| {
++| #ifndef net_enable_timestamp
++|   (void) net_enable_timestamp;
++| #endif
++| 
++|   ;
++|   return 0;
++| }
++configure:15379: result: no
++configure:15395: checking whether netif_tx_lock is declared
++configure:15442: gcc -W -Wall -c -g -O2  -D__KERNEL__ -I/d/kernels/linux-2.6.27.10-clickport/include -I/d/kernels/linux-2.6.27.10-clickport/include/asm/mach-default  conftest.c >&5
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:17,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h: In function 'ratelimit':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h:23: warning: missing initializer
++/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h:23: warning: (near initialization for 'rs.printed')
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h: In function 'clear_user_page':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:71: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:72: warning: unused parameter 'pg'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h: In function 'copy_user_page':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:77: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:78: warning: unused parameter 'topage'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:131,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_none':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:25: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_bad':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:26: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:27: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pgd_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:28: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h: In function 'pud_offset':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h:38: warning: unused parameter 'address'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:131,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_none':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:29: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_bad':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:30: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:31: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pud_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:32: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pmd_offset':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:43: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h: In function 'pmd_free':
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:59: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h:59: warning: unused parameter 'pmd'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/page.h:158,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h: In function 'set_pte_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h:1305: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h:1305: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg.h:2,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/system.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h:17,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h:47,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:50,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h: In function '__set_64bit_var':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h:60: warning: dereferencing type-punned pointer will break strict-aliasing rules
++/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h:60: warning: dereferencing type-punned pointer will break strict-aliasing rules
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock_types.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h:81,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/time.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:19,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/lockdep.h: In function 'print_irqtrace_events':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/lockdep.h:398: warning: unused parameter 'curr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/net.h:58,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:25,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h: In function '__remove_wait_queue':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h:138: warning: unused parameter 'head'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:16,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:413: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_set_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:418: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:418: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'node_clear_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:422: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:422: warning: unused parameter 'state'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h: In function 'num_node_state':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h:426: warning: unused parameter 'state'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/rwsem.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/notifier.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:560,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/rwsem.h: In function '__down_write_nested':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/rwsem.h:144: warning: unused parameter 'subclass'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:560,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_lock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:165: warning: unused parameter 'p'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:165: warning: unused parameter 'f'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_unlock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:166: warning: unused parameter 'p'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:166: warning: unused parameter 'f'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'pgdat_resize_init':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:167: warning: unused parameter 'pgdat'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_seqbegin':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:169: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_seqretry':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:173: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:173: warning: unused parameter 'iv'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_writelock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:177: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_span_writeunlock':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:178: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'zone_seqlock_init':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:179: warning: unused parameter 'zone'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'register_page_bootmem_info_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:188: warning: unused parameter 'pgdat'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h: In function 'is_mem_section_removable':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:207: warning: unused parameter 'pfn'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h:208: warning: unused parameter 'nr_pages'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'memory_present':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'nid'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'start'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:579: warning: unused parameter 'end'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'is_dma32':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:645: warning: unused parameter 'zone'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap_32.h:28,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap.h:5,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/apic.h:8,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/smp.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/smp.h:28,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:33,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h: In function 'acpi_fake_nodes':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h:170: warning: unused parameter 'fake_nodes'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h:171: warning: unused parameter 'num_nodes'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:34,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function '_node_to_cpumask_ptr':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:189: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'node_to_cpumask':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:193: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'node_to_first_cpu':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:197: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h:34,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:683,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'arch_fix_phys_package_id':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:233: warning: unused parameter 'num'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:233: warning: unused parameter 'slot'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'get_mp_bus_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:249: warning: unused parameter 'busnum'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h: In function 'set_mp_bus_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:253: warning: unused parameter 'busnum'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h:253: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h: In function 'zonelist_node_idx':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h:735: warning: unused parameter 'zoneref'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h:22,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'node_zonelist':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:164: warning: unused parameter 'nid'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'arch_free_page':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:170: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:170: warning: unused parameter 'order'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h: In function 'arch_alloc_page':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:173: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h:173: warning: unused parameter 'order'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/elf.h:89,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h: In function 'pack_gate':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h:61: warning: unused parameter 'flags'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:14,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h: In function 'elf_coredump_extra_notes_write':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:400: warning: unused parameter 'file'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h:401: warning: unused parameter 'foffset'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:18,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h: In function 'marker_update_probe_range':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:88: warning: unused parameter 'begin'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:89: warning: unused parameter 'end'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h: In function '___mark_check_format':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h:125: warning: unused parameter 'fmt'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/percpu.h:5,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/local.h:4,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/module.h:19,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:26,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function 'kmalloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:200: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function '__kmalloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:205: warning: unused parameter 'node'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h: In function 'kmem_cache_alloc_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h:213: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:24,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h: In function 'dev_to_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:429: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h: In function 'set_dev_node':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:433: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h:433: warning: unused parameter 'node'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:13,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function '__debug_show_held_locks':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:53: warning: unused parameter 'task'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_show_held_locks':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:57: warning: unused parameter 'task'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_check_no_locks_freed':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:62: warning: unused parameter 'from'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:62: warning: unused parameter 'len'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h: In function 'debug_check_no_locks_held':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h:67: warning: unused parameter 'task'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h:98,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:364,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h: In function 'native_set_pte_present':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:29: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:30: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h: In function 'native_pte_clear':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:43: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h:44: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:364,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h: In function 'pud_large':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h:117: warning: unused parameter 'pud'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:39,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h: In function 'native_set_pte_at':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:426: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h:426: warning: unused parameter 'addr'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:220,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'PagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: (Each undeclared identifier is reported only once
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: for each function it appears in.)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'SetPagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'ClearPagePrivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:178: error: 'PG_xxx_private' undeclared (first use in this function)
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h: In function 'PageUncached':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h:219: warning: unused parameter 'page'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function 'zone_to_nid':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:513: warning: unused parameter 'zone'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h:6,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:9,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function '__pud_alloc':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:882: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:882: warning: unused parameter 'pgd'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:883: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function '__pmd_alloc':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:892: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:892: warning: unused parameter 'pud'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:893: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h: In function 'kernel_map_pages':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'page'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'numpages'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h:1245: warning: unused parameter 'enable'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h: In function 'dma_mark_clean':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h:56: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h:56: warning: unused parameter 'size'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h:52,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h:29,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:29,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'get_dma_ops':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:62: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'dma_mapping_error':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:75: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:75: warning: unused parameter 'dma_addr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h: In function 'dma_cache_sync':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'vaddr'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:237: warning: unused parameter 'size'
++/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h:238: warning: unused parameter 'dir'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:30,
++                 from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h: In function 'destroy_hrtimer_on_stack':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h:291: warning: unused parameter 'timer'
++In file included from conftest.c:104:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h: In function 'skb_can_coalesce':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h:1361: warning: comparison between signed and unsigned
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/timer.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:33,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h: In function 'debug_object_init':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:67: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:67: warning: unused parameter 'descr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h: In function 'debug_object_init_on_stack':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:69: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:69: warning: unused parameter 'descr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h: In function 'debug_object_activate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:71: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:71: warning: unused parameter 'descr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h: In function 'debug_object_deactivate':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:73: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:73: warning: unused parameter 'descr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h: In function 'debug_object_destroy':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:75: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:75: warning: unused parameter 'descr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h: In function 'debug_object_free':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:77: warning: unused parameter 'addr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:77: warning: unused parameter 'descr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h: In function 'debug_check_no_obj_freed':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:87: warning: unused parameter 'address'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h:87: warning: unused parameter 'size'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:33,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/timer.h: In function 'destroy_timer_on_stack':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/timer.h:47: warning: unused parameter 'timer'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:42,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/workqueue.h: In function 'cancel_delayed_work':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/workqueue.h:220: warning: dereferencing type-punned pointer will break strict-aliasing rules
++/d/kernels/linux-2.6.27.10-clickport/include/linux/workqueue.h: In function 'cancel_rearming_delayed_workqueue':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/workqueue.h:228: warning: unused parameter 'wq'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:44,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/net/net_namespace.h: In function 'release_net':
++/d/kernels/linux-2.6.27.10-clickport/include/net/net_namespace.h:184: warning: unused parameter 'net'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:77,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/seccomp.h: In function 'prctl_set_seccomp':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/seccomp.h:33: warning: unused parameter 'arg2'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/rtmutex.h:16,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:79,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/plist.h: In function 'plist_head_init':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/plist.h:128: warning: unused parameter 'lock'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:79,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/rtmutex.h: In function 'rt_mutex_debug_check_no_locks_freed':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/rtmutex.h:46: warning: unused parameter 'from'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/rtmutex.h:47: warning: unused parameter 'len'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:88,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/latencytop.h: In function 'account_scheduler_latency':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/latencytop.h:34: warning: unused parameter 'task'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/latencytop.h:34: warning: unused parameter 'usecs'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/latencytop.h:34: warning: unused parameter 'inter'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/latencytop.h: In function 'clear_all_latency_tracing':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/latencytop.h:38: warning: unused parameter 'p'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h: In function 'select_nohz_load_balancer':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:260: warning: unused parameter 'cpu'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h: In function 'prefetch_stack':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:892: warning: unused parameter 't'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:1407,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/pid.h: In function '__vx_info_map_pid':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/pid.h:13: warning: unused parameter 'func'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/pid.h:13: warning: unused parameter 'file'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/pid.h:13: warning: unused parameter 'line'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/pid.h: In function '__vx_info_rmap_pid':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/pid.h:35: warning: unused parameter 'func'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/pid.h:35: warning: unused parameter 'file'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/pid.h:35: warning: unused parameter 'line'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:11,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h: In function 'wake_up_idle_cpu':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:1636: warning: unused parameter 'cpu'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h: In function 'spin_needbreak':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:2101: warning: unused parameter 'lock'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h: In function '__trace_special':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:2154: warning: unused parameter '__tr'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:2154: warning: unused parameter '__data'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:2155: warning: unused parameter 'arg1'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:2155: warning: unused parameter 'arg2'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:2155: warning: unused parameter 'arg3'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h: In function 'mm_update_next_owner':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:2237: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h: In function 'mm_init_owner':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:2241: warning: unused parameter 'mm'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h:2241: warning: unused parameter 'p'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/irq.h:194,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/hardirq_32.h:5,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/hardirq.h:2,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/hardirq.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:12,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/asm/hw_irq.h: In function '__setup_vector_irq':
++/d/kernels/linux-2.6.27.10-clickport/include/asm/hw_irq.h:122: warning: unused parameter 'cpu'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/asm/hardirq_32.h:5,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/asm/hardirq.h:2,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/hardirq.h:7,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:12,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/irq.h: In function 'set_balance_irq_affinity':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/irq.h:242: warning: unused parameter 'irq'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/irq.h:242: warning: unused parameter 'mask'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:12,
++                 from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/hardirq.h: In function 'account_system_vtime':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/hardirq.h:116: warning: unused parameter 'tsk'
++In file included from /d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:911,
++                 from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h: In function 'disable_irq_nosync_lockdep_irqsave':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:149: warning: unused parameter 'flags'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h: In function 'enable_irq_lockdep_irqrestore':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/interrupt.h:173: warning: unused parameter 'flags'
++In file included from conftest.c:105:
++/d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h: In function 'netif_msg_init':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:1455: warning: comparison between signed and unsigned
++/d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h: In function 'netif_rx_schedule_prep':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:1464: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h: In function '__netif_rx_schedule':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:1473: warning: unused parameter 'dev'
++/d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h: In function '__netif_rx_complete':
++/d/kernels/linux-2.6.27.10-clickport/include/linux/netdevice.h:1502: warning: unused parameter 'dev'
++configure:15448: $? = 1
++configure: failed program was:
++| /* confdefs.h.  */
++| #define PACKAGE_NAME "click"
++| #define PACKAGE_TARNAME "click"
++| #define PACKAGE_VERSION "1.6.0"
++| #define PACKAGE_STRING "click 1.6.0"
++| #define PACKAGE_BUGREPORT ""
++| #define CLICK_VERSION "1.6.0"
++| #define HAVE_NEW_HDR 1
++| #define NUM_CLICK_CPUS 1
++| #define HAVE_CLICKFS 1
++| #define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++| #define FREEBSD_INCLUDEDIR "/usr/include"
++| #define HAVE_STRERROR 1
++| #define HAVE_SNPRINTF 1
++| #define HAVE_STRTOUL 1
++| #define HAVE_TCGETPGRP 1
++| #define HAVE_VSNPRINTF 1
++| #define STDC_HEADERS 1
++| #define HAVE_SYS_TYPES_H 1
++| #define HAVE_SYS_STAT_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_STRING_H 1
++| #define HAVE_MEMORY_H 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_STDINT_H 1
++| #define HAVE_UNISTD_H 1
++| #define SIZEOF_INT 4
++| #define SIZEOF_LONG 4
++| #define HAVE_INTTYPES_H 1
++| #define HAVE_INDIFFERENT_ALIGNMENT 1
++| #define SIZEOF_LONG_LONG 8
++| #define HAVE_LONG_LONG 1
++| #define HAVE_INT64_TYPES 1
++| #define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++| #define SIZEOF_STRUCT_TIMEVAL 8
++| #define HAVE_STRUCT_TIMESPEC 1
++| #define SIZEOF_STRUCT_TIMESPEC 8
++| #define HAVE_ENDIAN_H 1
++| #define CLICK_BYTE_ORDER 1234
++| #define HAVE_BYTESWAP_H 1
++| #define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++| #define HAVE_ADDRESSABLE_VA_LIST 1
++| #define HAVE___BUILTIN_CLZ 1
++| #define HAVE___BUILTIN_CLZL 1
++| #define HAVE___BUILTIN_CLZLL 1
++| #define HAVE___BUILTIN_FFS 1
++| #define HAVE___BUILTIN_FFSL 1
++| #define HAVE___BUILTIN_FFSLL 1
++| #define HAVE_STRINGS_H 1
++| #define HAVE_FFS 1
++| #define HAVE_FFSL 1
++| #define HAVE_FFSLL 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_TERMIO_H 1
++| #define HAVE_NETDB_H 1
++| #define HAVE_PWD_H 1
++| #define HAVE_GRP_H 1
++| #define HAVE_POLL_H 1
++| #define HAVE_SIGACTION 1
++| #define HAVE_DLFCN_H 1
++| #define HAVE_DYNAMIC_LINKING 1
++| #define HAVE_ACCEPT_SOCKLEN_T 1
++| #define HAVE_LARGE_FILE_SUPPORT 1
++| #define SIZEOF_OFF_T 8
++| #define HAVE_SYS_MMAN_H 1
++| #define HAVE_STDLIB_H 1
++| #define HAVE_UNISTD_H 1
++| #define HAVE_GETPAGESIZE 1
++| #define HAVE_MMAP 1
++| #define HAVE_MADVISE 1
++| #define HAVE_DECL_MADVISE 1
++| #define HAVE_LINUXMODULE_2_6 1
++| #define HAVE_CLICK_KERNEL 1
++| #define HAVE_LINUX_STRLEN_EXPOSED 1
++| #define HAVE_LINUX_POLLING 1
++| #define __SMP__ 1
++| #define HAVE_LINUX_ASM_ALTERNATIVE_H 1
++| #define HAVE_STRIDE_SCHED 1
++| #define HAVE_LINUX_IF_TUN_H 1
++| #define HAVE_DECL_PCAP_SETNONBLOCK 1
++| #define HAVE_PCAP 1
++| #define HAVE_PCAP_SETNONBLOCK 1
++| #define HAVE_USERLEVEL_DRIVER 1
++| #define HAVE_EXPAT 1
++| #define HAVE_INT64_IS_LONG_LONG_LINUXMODULE 1
++| /* end confdefs.h.  */
++| #if HAVE_LINUXMODULE_2_6
++| # define KBUILD_STR(s)              #s
++| # define KBUILD_BASENAME    KBUILD_STR(click)
++| # define KBUILD_MODNAME             KBUILD_STR(click)
++| #endif
++| #define new xxx_new
++| #define this xxx_this
++| #define delete xxx_delete
++| #define class xxx_class
++| #define virtual xxx_virtual
++| #define typename xxx_typename
++| #define private xxx_private
++| #define protected xxx_protected
++| #define public xxx_public
++| #define namespace xxx_namespace
++| #include <linux/autoconf.h>
++| #include <linux/skbuff.h>
++| #include <linux/netdevice.h>
++| 
++| int
++| main ()
++| {
++| #ifndef netif_tx_lock
++|   (void) netif_tx_lock;
++| #endif
++| 
++|   ;
++|   return 0;
++| }
++configure:15463: result: no
++configure:15600: checking for a BSD-compatible install
++configure:15656: result: /usr/bin/install -c
++configure:15669: checking whether install accepts -C
++configure:15678: result: no
++configure:15688: checking for GNU make
++configure:15701: result: make
++configure:15714: checking for working autoconf
++configure:15719: result: found
++configure:15741: checking for perl5
++configure:15771: result: no
++configure:15741: checking for perl
++configure:15757: found /usr/bin/perl
++configure:15768: result: perl
++configure:15864: checking for working makeinfo
++configure:15869: result: found
++configure:15882: checking for working texi2dvi
++configure:15887: result: found
++configure:15903: checking for install-info
++configure:15922: found /usr/bin/install-info
++configure:15935: result: /usr/bin/install-info
++configure:15944: checking for working install-info
++configure:15947: result: found
++configure:15955: checking for working pod2man
++configure:15959: result: found
++configure:16185: creating ./config.status
++
++## ---------------------- ##
++## Running config.status. ##
++## ---------------------- ##
++
++This file was extended by click config.status 1.6.0, which was
++generated by GNU Autoconf 2.61.  Invocation command line was
++
++  CONFIG_FILES    = 
++  CONFIG_HEADERS  = 
++  CONFIG_LINKS    = 
++  CONFIG_COMMANDS = 
++  $ ./config.status 
++
++on joyce
++
++config.status:689: creating Makefile
++config.status:689: creating click-buildtool
++config.status:689: creating click-compile
++config.status:689: creating config.mk
++config.status:689: creating installch
++config.status:689: creating tools/Makefile
++config.status:689: creating tools/lib/Makefile
++config.status:689: creating doc/Makefile
++config.status:689: creating etc/libclick/Makefile
++config.status:689: creating etc/pkg-config.mk
++config.status:689: creating bsdmodule/Makefile
++config.status:689: creating linuxmodule/Makefile
++config.status:689: creating ns/Makefile
++config.status:689: creating userlevel/Makefile
++config.status:689: creating tools/click-align/Makefile
++config.status:689: creating tools/click-check/Makefile
++config.status:689: creating tools/click-combine/Makefile
++config.status:689: creating tools/click-devirtualize/Makefile
++config.status:689: creating tools/click-fastclassifier/Makefile
++config.status:689: creating tools/click-flatten/Makefile
++config.status:689: creating tools/click-mkmindriver/Makefile
++config.status:689: creating tools/click-pretty/Makefile
++config.status:689: creating tools/click-undead/Makefile
++config.status:689: creating tools/click-xform/Makefile
++config.status:689: creating tools/click2xml/Makefile
++config.status:689: creating tools/click-install/Makefile
++config.status:689: creating include/click/config.h
++config.status:989: include/click/config.h is unchanged
++config.status:689: creating include/click/pathvars.h
++config.status:689: creating include/click/config-bsdmodule.h
++config.status:989: include/click/config-bsdmodule.h is unchanged
++config.status:689: creating include/click/config-linuxmodule.h
++config.status:989: include/click/config-linuxmodule.h is unchanged
++config.status:689: creating include/click/config-ns.h
++config.status:989: include/click/config-ns.h is unchanged
++config.status:689: creating include/click/config-userlevel.h
++config.status:989: include/click/config-userlevel.h is unchanged
++config.status:1002: executing default-1 commands
++
++## ---------------- ##
++## Cache variables. ##
++## ---------------- ##
++
++ac_cv_accept_socklen_t=yes
++ac_cv_alignment_indifferent=yes
++ac_cv_arithmetic_right_shift=yes
++ac_cv_bpf_timeval=no
++ac_cv_build=i686-pc-linux-gnu
++ac_cv_c_compiler_gnu=yes
++ac_cv_c_inline=inline
++ac_cv_click_kernel=yes
++ac_cv_click_kernel_tx_notify=no
++ac_cv_cxx_aware_system=yes
++ac_cv_cxx_compiler_gnu=yes
++ac_cv_emulated_poll_h=no
++ac_cv_endian=1234
++ac_cv_env_CCC_set=
++ac_cv_env_CCC_value=
++ac_cv_env_CC_set=
++ac_cv_env_CC_value=
++ac_cv_env_CFLAGS_set=
++ac_cv_env_CFLAGS_value=
++ac_cv_env_CPPFLAGS_set=
++ac_cv_env_CPPFLAGS_value=
++ac_cv_env_CPP_set=
++ac_cv_env_CPP_value=
++ac_cv_env_CXXCPP_set=
++ac_cv_env_CXXCPP_value=
++ac_cv_env_CXXFLAGS_set=
++ac_cv_env_CXXFLAGS_value=
++ac_cv_env_CXX_set=
++ac_cv_env_CXX_value=
++ac_cv_env_LDFLAGS_set=
++ac_cv_env_LDFLAGS_value=
++ac_cv_env_LIBS_set=
++ac_cv_env_LIBS_value=
++ac_cv_env_build_alias_set=
++ac_cv_env_build_alias_value=
++ac_cv_env_host_alias_set=
++ac_cv_env_host_alias_value=
++ac_cv_env_target_alias_set=
++ac_cv_env_target_alias_value=
++ac_cv_f_permissive=no
++ac_cv_func_dlopen=no
++ac_cv_func_ffs=yes
++ac_cv_func_ffsl=yes
++ac_cv_func_ffsll=yes
++ac_cv_func_getpagesize=yes
++ac_cv_func_kqueue=no
++ac_cv_func_madvise=yes
++ac_cv_func_mmap_fixed_mapped=yes
++ac_cv_func_pcap_setnonblock=yes
++ac_cv_func_sigaction=yes
++ac_cv_func_snprintf=yes
++ac_cv_func_strerror=yes
++ac_cv_func_strtoul=yes
++ac_cv_func_tcgetpgrp=yes
++ac_cv_func_vsnprintf=yes
++ac_cv_gnu_make=make
++ac_cv_good_new_hdr=yes
++ac_cv_have___builtin_clz=yes
++ac_cv_have___builtin_clzl=yes
++ac_cv_have___builtin_clzll=yes
++ac_cv_have___builtin_ffs=yes
++ac_cv_have___builtin_ffsl=yes
++ac_cv_have___builtin_ffsll=yes
++ac_cv_have_decl_madvise=yes
++ac_cv_have_decl_net_enable_timestamp=no
++ac_cv_have_decl_netif_tx_lock=no
++ac_cv_have_decl_pcap_setnonblock=yes
++ac_cv_header_byteswap_h=yes
++ac_cv_header_dlfcn_h=yes
++ac_cv_header_endian_h=yes
++ac_cv_header_expat_h=yes
++ac_cv_header_grp_h=yes
++ac_cv_header_inttypes_h=yes
++ac_cv_header_linux_if_tun_h=yes
++ac_cv_header_memory_h=yes
++ac_cv_header_net_bpf_h=no
++ac_cv_header_net_if_tap_h=no
++ac_cv_header_net_if_tun_h=no
++ac_cv_header_netdb_h=yes
++ac_cv_header_poll_h=yes
++ac_cv_header_pwd_h=yes
++ac_cv_header_stdc=yes
++ac_cv_header_stdint_h=yes
++ac_cv_header_stdlib_h=yes
++ac_cv_header_string_h=yes
++ac_cv_header_strings_h=yes
++ac_cv_header_sys_event_h=no
++ac_cv_header_sys_mman_h=yes
++ac_cv_header_sys_stat_h=yes
++ac_cv_header_sys_types_h=yes
++ac_cv_header_termio_h=yes
++ac_cv_header_unistd_h=yes
++ac_cv_host=i686-pc-linux-gnu
++ac_cv_if_data_ifi_datalen=no
++ac_cv_int64_t=yes
++ac_cv_large_file_support=yes
++ac_cv_lib_dl_dlopen=yes
++ac_cv_lib_expat_XML_ParserCreateNS=yes
++ac_cv_linux26=1
++ac_cv_linux_asm_alternative_h=yes
++ac_cv_linux_atomic_set_mask=no
++ac_cv_linux_poll_extension=yes
++ac_cv_linux_read_net_skbcount=no
++ac_cv_linux_strlen_exposed=yes
++ac_cv_linux_tulip_intr_hook=no
++ac_cv_linuxmodule_skb_shinfo_gso_size=no
++ac_cv_linuxmodule_skb_shinfo_ip6_frag_id=no
++ac_cv_linuxmodule_skb_shinfo_tso_size=no
++ac_cv_linuxmodule_skb_shinfo_ufo_size=no
++ac_cv_linuxmodule_skbuff_fclone=no
++ac_cv_linuxmodule_skbuff_security=no
++ac_cv_long_64=no
++ac_cv_long_64_linuxmodule=no
++ac_cv_long_long_64=yes
++ac_cv_long_long_64_linuxmodule=yes
++ac_cv_net_enable_timestamp=no
++ac_cv_netif_tx_lock=no
++ac_cv_objext=o
++ac_cv_path_EGREP='/bin/grep -E'
++ac_cv_path_GREP=/bin/grep
++ac_cv_path_INSTALL_INFO=/usr/bin/install-info
++ac_cv_path_install='/usr/bin/install -c'
++ac_cv_pcap_header_path=found
++ac_cv_pcap_library_path=found
++ac_cv_poll_h=yes
++ac_cv_prog_CPP='gcc -W -Wall -E'
++ac_cv_prog_CXXCPP='g++ -W -Wall  -E'
++ac_cv_prog_ac_ct_AR=ar
++ac_cv_prog_ac_ct_CC=gcc
++ac_cv_prog_ac_ct_CXX=g++
++ac_cv_prog_ac_ct_LD=ld
++ac_cv_prog_ac_ct_RANLIB=ranlib
++ac_cv_prog_ac_ct_STRIP=strip
++ac_cv_prog_cc_c89=
++ac_cv_prog_cc_g=yes
++ac_cv_prog_cxx_g=yes
++ac_cv_prog_perl5=perl
++ac_cv_search_connect='none required'
++ac_cv_search_gethostbyname='none required'
++ac_cv_sizeof_int=4
++ac_cv_sizeof_long=4
++ac_cv_sizeof_long_long=8
++ac_cv_sizeof_off_t=8
++ac_cv_sizeof_struct_timespec=8
++ac_cv_sizeof_struct_timeval=8
++ac_cv_smp=yes
++ac_cv_sockaddr_in_sin_len=no
++ac_cv_target=i686-pc-linux-gnu
++ac_cv_type_int=yes
++ac_cv_type_long=yes
++ac_cv_type_long_long=yes
++ac_cv_type_off_t=yes
++ac_cv_type_struct_timespec=yes
++ac_cv_type_struct_timeval=yes
++ac_cv_uint64_t=yes
++ac_cv_under_linux=yes
++ac_cv_va_list_addr=yes
++ac_cv_working_pcap_h=yes
++
++## ----------------- ##
++## Output variables. ##
++## ----------------- ##
++
++AR='ar'
++AR_CREATEFLAGS='cru'
++AUTOCONF='autoconf'
++BUILD_AR=''
++BUILD_CC=''
++BUILD_CXX=''
++BUILD_DL_LIBS=''
++BUILD_RANLIB=''
++CC='gcc -W -Wall'
++CFLAGS='-g -O2'
++CFLAGS_NDEBUG=' -O2'
++CLICKINSTALL='/usr/bin/install -c'
++CLICK_VERSION='1.6.0'
++CPP='gcc -W -Wall -E'
++CPPFLAGS=''
++CXX='g++ -W -Wall '
++CXXCPP='g++ -W -Wall  -E'
++CXXFLAGS='-g -O2'
++CXXFLAGS_NDEBUG=' -O2'
++DEFS='-DHAVE_CONFIG_H'
++DEPCFLAGS='-MD'
++DL_LIBS='-ldl'
++DRIVERS=' userlevel linuxmodule'
++ECHO_C=''
++ECHO_N='-n'
++ECHO_T=''
++EGREP='/bin/grep -E'
++EXEEXT=''
++EXPAT_INCLUDES=''
++EXPAT_LIBS=' -lexpat'
++EXTRA_DRIVER_OBJS=''
++EXTRA_TOOL_OBJS=''
++GMAKE='make'
++GREP='/bin/grep'
++HAVE_BSDMODULE_DRIVER='0'
++HAVE_LINUXMODULE_DRIVER='1'
++HAVE_USERLEVEL_DRIVER='1'
++HOST_TOOLS='host'
++INSTALL_DATA='${INSTALL} -m 644'
++INSTALL_IF_CHANGED='$(top_builddir)/installch'
++INSTALL_INFO='/usr/bin/install-info'
++INSTALL_PROGRAM='${INSTALL}'
++INSTALL_SCRIPT='${INSTALL}'
++KERNEL_CC='gcc -w -W -Wall'
++KERNEL_CXX='g++ -w -W -Wall -fno-exceptions -fno-rtti  -D__SMP__'
++LD='ld'
++LDFLAGS=''
++LDMODULEFLAGS='-shared'
++LIBOBJS=''
++LIBS=''
++LINUXMODULE_2_6='1'
++LINUX_CFLAGS=''
++LTLIBOBJS=''
++MAKEINFO='makeinfo'
++OBJEXT='o'
++OTHER_TARGETS=' tools'
++PACKAGE_BUGREPORT=''
++PACKAGE_NAME='click'
++PACKAGE_STRING='click 1.6.0'
++PACKAGE_TARNAME='click'
++PACKAGE_VERSION='1.6.0'
++PATH_SEPARATOR=':'
++PCAP_INCLUDES=''
++PCAP_LIBS='-lpcap'
++PERL='perl'
++POD2MAN='pod2man'
++POSSIBLE_DRIVERS=' bsdmodule linuxmodule ns userlevel'
++PROPER_INCLUDES=''
++PROPER_LIBS=''
++RANLIB='ranlib'
++SHELL='/bin/sh'
++SOCKET_LIBS=''
++STRIP='strip'
++SUBMAKE=''
++TEXI2DVI='texi2dvi'
++TOOLDIRS=' click-align click-check click-combine click-devirtualize click-fastclassifier click-flatten click-mkmindriver click-pretty click-undead click-xform click2xml click-install'
++TOOL_TARGETS=' click-align click-check click-combine click-devirtualize click-fastclassifier click-flatten click-mkmindriver click-pretty click-undead click-xform click2xml click-install'
++XML2CLICK='xml2click'
++ac_configure_args=' '\''--prefix=/d/click/click-1.6.0-27/inst'\'' '\''--exec-prefix=/d/click/click-1.6.0-27/inst'\'' '\''--with-linux=/d/kernels/linux-2.6.27.10-clickport'\'' '\''--with-linux-map=/d/uml/trelclickSystem.map'\'''
++ac_ct_CC='gcc'
++ac_ct_CXX='g++'
++bindir='/d/click/click-1.6.0-27/inst/bin'
++build='i686-pc-linux-gnu'
++build_alias=''
++build_cpu='i686'
++build_os='linux-gnu'
++build_vendor='pc'
++clickdatadir='/d/click/click-1.6.0-27/inst/share/click'
++conf_auxdir='$(top_srcdir)'
++datadir='/d/click/click-1.6.0-27/inst/share'
++datarootdir='/d/click/click-1.6.0-27/inst/share'
++docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
++dvidir='${docdir}'
++element_groups=' app aqm ethernet icmp ip standard tcpudp'
++exec_prefix='/d/click/click-1.6.0-27/inst'
++freebsd_includedir='/usr/include'
++freebsd_srcdir='NONE'
++host='i686-pc-linux-gnu'
++host_alias=''
++host_cpu='i686'
++host_os='linux-gnu'
++host_vendor='pc'
++htmldir='${docdir}'
++includedir='/d/click/click-1.6.0-27/inst/include'
++infodir='${datarootdir}/info'
++libdir='/d/click/click-1.6.0-27/inst/lib'
++libexecdir='${exec_prefix}/libexec'
++linuxdir='/d/kernels/linux-2.6.27.10-clickport'
++localedir='${datarootdir}/locale'
++localperl5=''
++localstatedir='${prefix}/var'
++mandir='${datarootdir}/man'
++oldincludedir='/usr/include'
++pdfdir='${docdir}'
++perl5='perl'
++prefix='/d/click/click-1.6.0-27/inst'
++program_transform_name='s,x,x,'
++provisions='i686 i386 i586 int64 linux linux_2_6 pcap'
++psdir='${docdir}'
++sbindir='/d/click/click-1.6.0-27/inst/sbin'
++sharedstatedir='${prefix}/com'
++sysconfdir='${prefix}/etc'
++target='i686-pc-linux-gnu'
++target_alias=''
++target_cpu='i686'
++target_os='linux-gnu'
++target_vendor='pc'
++
++## ----------- ##
++## confdefs.h. ##
++## ----------- ##
++
++#define PACKAGE_NAME "click"
++#define PACKAGE_TARNAME "click"
++#define PACKAGE_VERSION "1.6.0"
++#define PACKAGE_STRING "click 1.6.0"
++#define PACKAGE_BUGREPORT ""
++#define CLICK_VERSION "1.6.0"
++#define HAVE_NEW_HDR 1
++#define NUM_CLICK_CPUS 1
++#define HAVE_CLICKFS 1
++#define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++#define FREEBSD_INCLUDEDIR "/usr/include"
++#define HAVE_STRERROR 1
++#define HAVE_SNPRINTF 1
++#define HAVE_STRTOUL 1
++#define HAVE_TCGETPGRP 1
++#define HAVE_VSNPRINTF 1
++#define STDC_HEADERS 1
++#define HAVE_SYS_TYPES_H 1
++#define HAVE_SYS_STAT_H 1
++#define HAVE_STDLIB_H 1
++#define HAVE_STRING_H 1
++#define HAVE_MEMORY_H 1
++#define HAVE_STRINGS_H 1
++#define HAVE_INTTYPES_H 1
++#define HAVE_STDINT_H 1
++#define HAVE_UNISTD_H 1
++#define SIZEOF_INT 4
++#define SIZEOF_LONG 4
++#define HAVE_INTTYPES_H 1
++#define HAVE_INDIFFERENT_ALIGNMENT 1
++#define SIZEOF_LONG_LONG 8
++#define HAVE_LONG_LONG 1
++#define HAVE_INT64_TYPES 1
++#define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++#define SIZEOF_STRUCT_TIMEVAL 8
++#define HAVE_STRUCT_TIMESPEC 1
++#define SIZEOF_STRUCT_TIMESPEC 8
++#define HAVE_ENDIAN_H 1
++#define CLICK_BYTE_ORDER 1234
++#define HAVE_BYTESWAP_H 1
++#define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++#define HAVE_ADDRESSABLE_VA_LIST 1
++#define HAVE___BUILTIN_CLZ 1
++#define HAVE___BUILTIN_CLZL 1
++#define HAVE___BUILTIN_CLZLL 1
++#define HAVE___BUILTIN_FFS 1
++#define HAVE___BUILTIN_FFSL 1
++#define HAVE___BUILTIN_FFSLL 1
++#define HAVE_STRINGS_H 1
++#define HAVE_FFS 1
++#define HAVE_FFSL 1
++#define HAVE_FFSLL 1
++#define HAVE_UNISTD_H 1
++#define HAVE_TERMIO_H 1
++#define HAVE_NETDB_H 1
++#define HAVE_PWD_H 1
++#define HAVE_GRP_H 1
++#define HAVE_POLL_H 1
++#define HAVE_SIGACTION 1
++#define HAVE_DLFCN_H 1
++#define HAVE_DYNAMIC_LINKING 1
++#define HAVE_ACCEPT_SOCKLEN_T 1
++#define HAVE_LARGE_FILE_SUPPORT 1
++#define SIZEOF_OFF_T 8
++#define HAVE_SYS_MMAN_H 1
++#define HAVE_STDLIB_H 1
++#define HAVE_UNISTD_H 1
++#define HAVE_GETPAGESIZE 1
++#define HAVE_MMAP 1
++#define HAVE_MADVISE 1
++#define HAVE_DECL_MADVISE 1
++#define HAVE_LINUXMODULE_2_6 1
++#define HAVE_CLICK_KERNEL 1
++#define HAVE_LINUX_STRLEN_EXPOSED 1
++#define HAVE_LINUX_POLLING 1
++#define __SMP__ 1
++#define HAVE_LINUX_ASM_ALTERNATIVE_H 1
++#define HAVE_STRIDE_SCHED 1
++#define HAVE_LINUX_IF_TUN_H 1
++#define HAVE_DECL_PCAP_SETNONBLOCK 1
++#define HAVE_PCAP 1
++#define HAVE_PCAP_SETNONBLOCK 1
++#define HAVE_USERLEVEL_DRIVER 1
++#define HAVE_EXPAT 1
++#define HAVE_INT64_IS_LONG_LONG_LINUXMODULE 1
++#define HAVE_LINUXMODULE_DRIVER 1
++#define CLICK_BINDIR "/d/click/click-1.6.0-27/inst/bin"
++#define CLICK_LIBDIR "/d/click/click-1.6.0-27/inst/lib"
++#define CLICK_DATADIR "/d/click/click-1.6.0-27/inst/share/click"
++
++configure: exit 0
+diff -Nurb click-1.6.0/config.mk click-1.6.0-27/config.mk
+--- click-1.6.0/config.mk      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/config.mk   2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,13 @@
++clickprefix=/d/click/click-1.6.0-27/inst
++clickbindir=/d/click/click-1.6.0-27/inst/bin
++clicksbindir=/d/click/click-1.6.0-27/inst/sbin
++clicklibdir=/d/click/click-1.6.0-27/inst/lib
++clickincludedir=/d/click/click-1.6.0-27/inst/include
++clickdatadir=/d/click/click-1.6.0-27/inst/share/click
++clicklinuxdir=/d/kernels/linux-2.6.27.10-clickport
++clicksrcdir=/d/click/click-1.6.0-27/inst/share/click/src
++CLICK_HAVE_USERLEVEL_DRIVER=1
++CLICK_HAVE_LINUXMODULE_DRIVER=1
++CLICK_HAVE_BSDMODULE_DRIVER=0
++CLICK_LINUXMODULE_2_6=1
++CLICK_GMAKE=make
+diff -Nurb click-1.6.0/config.status click-1.6.0-27/config.status
+--- click-1.6.0/config.status  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/config.status       2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,1022 @@
++#! /bin/sh
++# Generated by configure.
++# Run this file to recreate the current configuration.
++# Compiler output produced by configure, useful for debugging
++# configure, is in config.log if it exists.
++
++debug=false
++ac_cs_recheck=false
++ac_cs_silent=false
++SHELL=${CONFIG_SHELL-/bin/sh}
++## --------------------- ##
++## M4sh Initialization.  ##
++## --------------------- ##
++
++# Be more Bourne compatible
++DUALCASE=1; export DUALCASE # for MKS sh
++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
++  emulate sh
++  NULLCMD=:
++  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
++  # is contrary to our usage.  Disable this feature.
++  alias -g '${1+"$@"}'='"$@"'
++  setopt NO_GLOB_SUBST
++else
++  case `(set -o) 2>/dev/null` in
++  *posix*) set -o posix ;;
++esac
++
++fi
++
++
++
++
++# PATH needs CR
++# Avoid depending upon Character Ranges.
++as_cr_letters='abcdefghijklmnopqrstuvwxyz'
++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
++as_cr_Letters=$as_cr_letters$as_cr_LETTERS
++as_cr_digits='0123456789'
++as_cr_alnum=$as_cr_Letters$as_cr_digits
++
++# The user is always right.
++if test "${PATH_SEPARATOR+set}" != set; then
++  echo "#! /bin/sh" >conf$$.sh
++  echo  "exit 0"   >>conf$$.sh
++  chmod +x conf$$.sh
++  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
++    PATH_SEPARATOR=';'
++  else
++    PATH_SEPARATOR=:
++  fi
++  rm -f conf$$.sh
++fi
++
++# Support unset when possible.
++if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
++  as_unset=unset
++else
++  as_unset=false
++fi
++
++
++# IFS
++# We need space, tab and new line, in precisely that order.  Quoting is
++# there to prevent editors from complaining about space-tab.
++# (If _AS_PATH_WALK were called with IFS unset, it would disable word
++# splitting by setting IFS to empty value.)
++as_nl='
++'
++IFS=" ""      $as_nl"
++
++# Find who we are.  Look in the path if we contain no directory separator.
++case $0 in
++  *[\\/]* ) as_myself=$0 ;;
++  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
++done
++IFS=$as_save_IFS
++
++     ;;
++esac
++# We did not find ourselves, most probably we were run as `sh COMMAND'
++# in which case we are not to be found in the path.
++if test "x$as_myself" = x; then
++  as_myself=$0
++fi
++if test ! -f "$as_myself"; then
++  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
++  { (exit 1); exit 1; }
++fi
++
++# Work around bugs in pre-3.0 UWIN ksh.
++for as_var in ENV MAIL MAILPATH
++do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
++done
++PS1='$ '
++PS2='> '
++PS4='+ '
++
++# NLS nuisances.
++for as_var in \
++  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
++  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
++  LC_TELEPHONE LC_TIME
++do
++  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
++    eval $as_var=C; export $as_var
++  else
++    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
++  fi
++done
++
++# Required to use basename.
++if expr a : '\(a\)' >/dev/null 2>&1 &&
++   test "X`expr 00001 : '.*\(...\)'`" = X001; then
++  as_expr=expr
++else
++  as_expr=false
++fi
++
++if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
++  as_basename=basename
++else
++  as_basename=false
++fi
++
++
++# Name of the executable.
++as_me=`$as_basename -- "$0" ||
++$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
++       X"$0" : 'X\(//\)$' \| \
++       X"$0" : 'X\(/\)' \| . 2>/dev/null ||
++echo X/"$0" |
++    sed '/^.*\/\([^/][^/]*\)\/*$/{
++          s//\1/
++          q
++        }
++        /^X\/\(\/\/\)$/{
++          s//\1/
++          q
++        }
++        /^X\/\(\/\).*/{
++          s//\1/
++          q
++        }
++        s/.*/./; q'`
++
++# CDPATH.
++$as_unset CDPATH
++
++
++
++  as_lineno_1=$LINENO
++  as_lineno_2=$LINENO
++  test "x$as_lineno_1" != "x$as_lineno_2" &&
++  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
++
++  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
++  # uniformly replaced by the line number.  The first 'sed' inserts a
++  # line-number line after each line using $LINENO; the second 'sed'
++  # does the real work.  The second script uses 'N' to pair each
++  # line-number line with the line containing $LINENO, and appends
++  # trailing '-' during substitution so that $LINENO is not a special
++  # case at line end.
++  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
++  # scripts with optimization help from Paolo Bonzini.  Blame Lee
++  # E. McMahon (1931-1989) for sed's syntax.  :-)
++  sed -n '
++    p
++    /[$]LINENO/=
++  ' <$as_myself |
++    sed '
++      s/[$]LINENO.*/&-/
++      t lineno
++      b
++      :lineno
++      N
++      :loop
++      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
++      t loop
++      s/-\n.*//
++    ' >$as_me.lineno &&
++  chmod +x "$as_me.lineno" ||
++    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
++   { (exit 1); exit 1; }; }
++
++  # Don't try to exec as it changes $[0], causing all sort of problems
++  # (the dirname of $[0] is not the place where we might find the
++  # original and so on.  Autoconf is especially sensitive to this).
++  . "./$as_me.lineno"
++  # Exit status is that of the last command.
++  exit
++}
++
++
++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
++  as_dirname=dirname
++else
++  as_dirname=false
++fi
++
++ECHO_C= ECHO_N= ECHO_T=
++case `echo -n x` in
++-n*)
++  case `echo 'x\c'` in
++  *c*) ECHO_T='       ';;     # ECHO_T is single tab character.
++  *)   ECHO_C='\c';;
++  esac;;
++*)
++  ECHO_N='-n';;
++esac
++
++if expr a : '\(a\)' >/dev/null 2>&1 &&
++   test "X`expr 00001 : '.*\(...\)'`" = X001; then
++  as_expr=expr
++else
++  as_expr=false
++fi
++
++rm -f conf$$ conf$$.exe conf$$.file
++if test -d conf$$.dir; then
++  rm -f conf$$.dir/conf$$.file
++else
++  rm -f conf$$.dir
++  mkdir conf$$.dir
++fi
++echo >conf$$.file
++if ln -s conf$$.file conf$$ 2>/dev/null; then
++  as_ln_s='ln -s'
++  # ... but there are two gotchas:
++  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
++  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
++  # In both cases, we have to default to `cp -p'.
++  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
++    as_ln_s='cp -p'
++elif ln conf$$.file conf$$ 2>/dev/null; then
++  as_ln_s=ln
++else
++  as_ln_s='cp -p'
++fi
++rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
++rmdir conf$$.dir 2>/dev/null
++
++if mkdir -p . 2>/dev/null; then
++  as_mkdir_p=:
++else
++  test -d ./-p && rmdir ./-p
++  as_mkdir_p=false
++fi
++
++if test -x / >/dev/null 2>&1; then
++  as_test_x='test -x'
++else
++  if ls -dL / >/dev/null 2>&1; then
++    as_ls_L_option=L
++  else
++    as_ls_L_option=
++  fi
++  as_test_x='
++    eval sh -c '\''
++      if test -d "$1"; then
++        test -d "$1/.";
++      else
++      case $1 in
++        -*)set "./$1";;
++      esac;
++      case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
++      ???[sx]*):;;*)false;;esac;fi
++    '\'' sh
++  '
++fi
++as_executable_p=$as_test_x
++
++# Sed expression to map a string onto a valid CPP name.
++as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
++
++# Sed expression to map a string onto a valid variable name.
++as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
++
++
++exec 6>&1
++
++# Save the log message, to keep $[0] and so on meaningful, and to
++# report actual input values of CONFIG_FILES etc. instead of their
++# values after options handling.
++ac_log="
++This file was extended by click $as_me 1.6.0, which was
++generated by GNU Autoconf 2.61.  Invocation command line was
++
++  CONFIG_FILES    = $CONFIG_FILES
++  CONFIG_HEADERS  = $CONFIG_HEADERS
++  CONFIG_LINKS    = $CONFIG_LINKS
++  CONFIG_COMMANDS = $CONFIG_COMMANDS
++  $ $0 $@
++
++on `(hostname || uname -n) 2>/dev/null | sed 1q`
++"
++
++# Files that config.status was made for.
++config_files=" Makefile click-buildtool click-compile config.mk installch tools/Makefile tools/lib/Makefile doc/Makefile etc/libclick/Makefile etc/pkg-config.mk bsdmodule/Makefile linuxmodule/Makefile ns/Makefile userlevel/Makefile tools/click-align/Makefile tools/click-check/Makefile tools/click-combine/Makefile tools/click-devirtualize/Makefile tools/click-fastclassifier/Makefile tools/click-flatten/Makefile tools/click-mkmindriver/Makefile tools/click-pretty/Makefile tools/click-undead/Makefile tools/click-xform/Makefile tools/click2xml/Makefile tools/click-install/Makefile"
++config_headers=" include/click/config.h:config.h.in include/click/pathvars.h:pathvars.h.in include/click/config-bsdmodule.h:config-bsdmodule.h.in include/click/config-linuxmodule.h:config-linuxmodule.h.in include/click/config-ns.h:config-ns.h.in include/click/config-userlevel.h:config-userlevel.h.in"
++config_commands=" default-1"
++
++ac_cs_usage="\
++\`$as_me' instantiates files from templates according to the
++current configuration.
++
++Usage: $0 [OPTIONS] [FILE]...
++
++  -h, --help       print this help, then exit
++  -V, --version    print version number and configuration settings, then exit
++  -q, --quiet      do not print progress messages
++  -d, --debug      don't remove temporary files
++      --recheck    update $as_me by reconfiguring in the same conditions
++  --file=FILE[:TEMPLATE]
++                 instantiate the configuration file FILE
++  --header=FILE[:TEMPLATE]
++                 instantiate the configuration header FILE
++
++Configuration files:
++$config_files
++
++Configuration headers:
++$config_headers
++
++Configuration commands:
++$config_commands
++
++Report bugs to <bug-autoconf@gnu.org>."
++
++ac_cs_version="\
++click config.status 1.6.0
++configured by ./configure, generated by GNU Autoconf 2.61,
++  with options \"'--prefix=/d/click/click-1.6.0-27/inst' '--exec-prefix=/d/click/click-1.6.0-27/inst' '--with-linux=/d/kernels/linux-2.6.27.10-clickport' '--with-linux-map=/d/uml/trelclickSystem.map'\"
++
++Copyright (C) 2006 Free Software Foundation, Inc.
++This config.status script is free software; the Free Software Foundation
++gives unlimited permission to copy, distribute and modify it."
++
++ac_pwd='/d/click/click-1.6.0-27'
++srcdir='.'
++INSTALL='/usr/bin/install -c'
++# If no file are specified by the user, then we need to provide default
++# value.  By we need to know if files were specified by the user.
++ac_need_defaults=:
++while test $# != 0
++do
++  case $1 in
++  --*=*)
++    ac_option=`expr "X$1" : 'X\([^=]*\)='`
++    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
++    ac_shift=:
++    ;;
++  *)
++    ac_option=$1
++    ac_optarg=$2
++    ac_shift=shift
++    ;;
++  esac
++
++  case $ac_option in
++  # Handling of the options.
++  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
++    ac_cs_recheck=: ;;
++  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
++    echo "$ac_cs_version"; exit ;;
++  --debug | --debu | --deb | --de | --d | -d )
++    debug=: ;;
++  --file | --fil | --fi | --f )
++    $ac_shift
++    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
++    ac_need_defaults=false;;
++  --header | --heade | --head | --hea )
++    $ac_shift
++    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
++    ac_need_defaults=false;;
++  --he | --h)
++    # Conflict between --help and --header
++    { echo "$as_me: error: ambiguous option: $1
++Try \`$0 --help' for more information." >&2
++   { (exit 1); exit 1; }; };;
++  --help | --hel | -h )
++    echo "$ac_cs_usage"; exit ;;
++  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
++  | -silent | --silent | --silen | --sile | --sil | --si | --s)
++    ac_cs_silent=: ;;
++
++  # This is an error.
++  -*) { echo "$as_me: error: unrecognized option: $1
++Try \`$0 --help' for more information." >&2
++   { (exit 1); exit 1; }; } ;;
++
++  *) ac_config_targets="$ac_config_targets $1"
++     ac_need_defaults=false ;;
++
++  esac
++  shift
++done
++
++ac_configure_extra_args=
++
++if $ac_cs_silent; then
++  exec 6>/dev/null
++  ac_configure_extra_args="$ac_configure_extra_args --silent"
++fi
++
++if $ac_cs_recheck; then
++  echo "running CONFIG_SHELL=/bin/sh /bin/sh ./configure " '--prefix=/d/click/click-1.6.0-27/inst' '--exec-prefix=/d/click/click-1.6.0-27/inst' '--with-linux=/d/kernels/linux-2.6.27.10-clickport' '--with-linux-map=/d/uml/trelclickSystem.map' $ac_configure_extra_args " --no-create --no-recursion" >&6
++  CONFIG_SHELL=/bin/sh
++  export CONFIG_SHELL
++  exec /bin/sh "./configure" '--prefix=/d/click/click-1.6.0-27/inst' '--exec-prefix=/d/click/click-1.6.0-27/inst' '--with-linux=/d/kernels/linux-2.6.27.10-clickport' '--with-linux-map=/d/uml/trelclickSystem.map' $ac_configure_extra_args --no-create --no-recursion
++fi
++
++exec 5>>config.log
++{
++  echo
++  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
++## Running $as_me. ##
++_ASBOX
++  echo "$ac_log"
++} >&5
++
++#
++# INIT-COMMANDS
++#
++
++
++
++# Handling of arguments.
++for ac_config_target in $ac_config_targets
++do
++  case $ac_config_target in
++    "include/click/config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/click/config.h:config.h.in" ;;
++    "include/click/pathvars.h") CONFIG_HEADERS="$CONFIG_HEADERS include/click/pathvars.h:pathvars.h.in" ;;
++    "include/click/config-bsdmodule.h") CONFIG_HEADERS="$CONFIG_HEADERS include/click/config-bsdmodule.h:config-bsdmodule.h.in" ;;
++    "include/click/config-linuxmodule.h") CONFIG_HEADERS="$CONFIG_HEADERS include/click/config-linuxmodule.h:config-linuxmodule.h.in" ;;
++    "include/click/config-ns.h") CONFIG_HEADERS="$CONFIG_HEADERS include/click/config-ns.h:config-ns.h.in" ;;
++    "include/click/config-userlevel.h") CONFIG_HEADERS="$CONFIG_HEADERS include/click/config-userlevel.h:config-userlevel.h.in" ;;
++    "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
++    "$config_files") CONFIG_FILES="$CONFIG_FILES $config_files" ;;
++
++  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
++echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
++   { (exit 1); exit 1; }; };;
++  esac
++done
++
++
++# If the user did not use the arguments to specify the items to instantiate,
++# then the envvar interface is used.  Set only those that are not.
++# We use the long form for the default assignment because of an extremely
++# bizarre bug on SunOS 4.1.3.
++if $ac_need_defaults; then
++  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
++  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
++  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
++fi
++
++# Have a temporary directory for convenience.  Make it in the build tree
++# simply because there is no reason against having it here, and in addition,
++# creating and moving files from /tmp can sometimes cause problems.
++# Hook for its removal unless debugging.
++# Note that there is a small window in which the directory will not be cleaned:
++# after its creation but before its name has been assigned to `$tmp'.
++$debug ||
++{
++  tmp=
++  trap 'exit_status=$?
++  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
++' 0
++  trap '{ (exit 1); exit 1; }' 1 2 13 15
++}
++# Create a (secure) tmp directory for tmp files.
++
++{
++  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
++  test -n "$tmp" && test -d "$tmp"
++}  ||
++{
++  tmp=./conf$$-$RANDOM
++  (umask 077 && mkdir "$tmp")
++} ||
++{
++   echo "$me: cannot create a temporary directory in ." >&2
++   { (exit 1); exit 1; }
++}
++
++#
++# Set up the sed scripts for CONFIG_FILES section.
++#
++
++# No need to generate the scripts if there are no CONFIG_FILES.
++# This happens for instance when ./config.status config.h
++if test -n "$CONFIG_FILES"; then
++
++cat >"$tmp/subs-1.sed" <<\CEOF
++/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
++s,@SHELL@,|#_!!_#|/bin/sh,g
++s,@PATH_SEPARATOR@,|#_!!_#|:,g
++s,@PACKAGE_NAME@,|#_!!_#|click,g
++s,@PACKAGE_TARNAME@,|#_!!_#|click,g
++s,@PACKAGE_VERSION@,|#_!!_#|1.6.0,g
++s,@PACKAGE_STRING@,|#_!!_#|click 1.6.0,g
++s,@PACKAGE_BUGREPORT@,|#_!!_#|,g
++s,@exec_prefix@,|#_!!_#|/d/click/click-1.6.0-27/inst,g
++s,@prefix@,|#_!!_#|/d/click/click-1.6.0-27/inst,g
++s,@program_transform_name@,|#_!!_#|s\,x\,x\,,g
++s,@bindir@,|#_!!_#|/d/click/click-1.6.0-27/inst/bin,g
++s,@sbindir@,|#_!!_#|/d/click/click-1.6.0-27/inst/sbin,g
++s,@libexecdir@,|#_!!_#|${exec_prefix}/libexec,g
++s,@datarootdir@,|#_!!_#|/d/click/click-1.6.0-27/inst/share,g
++s,@datadir@,|#_!!_#|/d/click/click-1.6.0-27/inst/share,g
++s,@sysconfdir@,|#_!!_#|${prefix}/etc,g
++s,@sharedstatedir@,|#_!!_#|${prefix}/com,g
++s,@localstatedir@,|#_!!_#|${prefix}/var,g
++s,@includedir@,|#_!!_#|/d/click/click-1.6.0-27/inst/include,g
++s,@oldincludedir@,|#_!!_#|/usr/include,g
++s,@docdir@,|#_!!_#|${datarootdir}/doc/${PACKAGE_TARNAME},g
++s,@infodir@,|#_!!_#|${datarootdir}/info,g
++s,@htmldir@,|#_!!_#|${docdir},g
++s,@dvidir@,|#_!!_#|${docdir},g
++s,@pdfdir@,|#_!!_#|${docdir},g
++s,@psdir@,|#_!!_#|${docdir},g
++s,@libdir@,|#_!!_#|/d/click/click-1.6.0-27/inst/lib,g
++s,@localedir@,|#_!!_#|${datarootdir}/locale,g
++s,@mandir@,|#_!!_#|${datarootdir}/man,g
++s,@DEFS@,|#_!!_#|-DHAVE_CONFIG_H,g
++s,@ECHO_C@,|#_!!_#|,g
++s,@ECHO_N@,|#_!!_#|-n,g
++s,@ECHO_T@,|#_!!_#|,g
++s,@LIBS@,|#_!!_#|,g
++s,@build_alias@,|#_!!_#|,g
++s,@host_alias@,|#_!!_#|,g
++s,@target_alias@,|#_!!_#|,g
++s,@ac_configure_args@,|#_!!_#| '--prefix=/d/click/click-1.6.0-27/inst' '--exec-prefix=/d/click/click-1.6.0-27/inst' '--with-linux=/d/kernels/linux-2.6.27.10-clickport' '--with-linux-map=/d/uml/trelclickSystem.map',g
++s,@CLICK_VERSION@,|#_!!_#|1.6.0,g
++s,@conf_auxdir@,|#_!!_#|$(top_srcdir),g
++s,@build@,|#_!!_#|i686-pc-linux-gnu,g
++s,@build_cpu@,|#_!!_#|i686,g
++s,@build_vendor@,|#_!!_#|pc,g
++s,@build_os@,|#_!!_#|linux-gnu,g
++s,@host@,|#_!!_#|i686-pc-linux-gnu,g
++s,@host_cpu@,|#_!!_#|i686,g
++s,@host_vendor@,|#_!!_#|pc,g
++s,@host_os@,|#_!!_#|linux-gnu,g
++s,@target@,|#_!!_#|i686-pc-linux-gnu,g
++s,@target_cpu@,|#_!!_#|i686,g
++s,@target_vendor@,|#_!!_#|pc,g
++s,@target_os@,|#_!!_#|linux-gnu,g
++s,@CC@,|#_!!_#|gcc -W -Wall,g
++s,@CXX@,|#_!!_#|g++ -W -Wall ,g
++s,@CFLAGS@,|#_!!_#|-g -O2,g
++s,@LDFLAGS@,|#_!!_#|,g
++s,@CPPFLAGS@,|#_!!_#|,g
++s,@ac_ct_CC@,|#_!!_#|gcc,g
++s,@EXEEXT@,|#_!!_#|,g
++s,@OBJEXT@,|#_!!_#|o,g
++s,@DEPCFLAGS@,|#_!!_#|-MD,g
++s,@CFLAGS_NDEBUG@,|#_!!_#| -O2,g
++s,@CPP@,|#_!!_#|gcc -W -Wall -E,g
++s,@CXXFLAGS@,|#_!!_#|-g -O2,g
++s,@ac_ct_CXX@,|#_!!_#|g++,g
++s,@CXXFLAGS_NDEBUG@,|#_!!_#| -O2,g
++s,@CXXCPP@,|#_!!_#|g++ -W -Wall  -E,g
++s,@KERNEL_CC@,|#_!!_#|gcc -w -W -Wall,g
++s,@KERNEL_CXX@,|#_!!_#|g++ -w -W -Wall -fno-exceptions -fno-rtti  -D__SMP__,g
++s,@AR@,|#_!!_#|ar,g
++s,@LD@,|#_!!_#|ld,g
++s,@RANLIB@,|#_!!_#|ranlib,g
++s,@STRIP@,|#_!!_#|strip,g
++s,@AR_CREATEFLAGS@,|#_!!_#|cru,g
++s,@linuxdir@,|#_!!_#|/d/kernels/linux-2.6.27.10-clickport,g
++s,@element_groups@,|#_!!_#| app aqm ethernet icmp ip standard tcpudp,g
++s,@freebsd_srcdir@,|#_!!_#|NONE,g
++s,@freebsd_includedir@,|#_!!_#|/usr/include,g
++s,@LIBOBJS@,|#_!!_#|,g
++s,@GREP@,|#_!!_#|/bin/grep,g
++s,@EGREP@,|#_!!_#|/bin/grep -E,g
++s,@BUILD_CC@,|#_!!_#|,g
++s,@BUILD_CXX@,|#_!!_#|,g
++s,@BUILD_AR@,|#_!!_#|,g
++s,@BUILD_RANLIB@,|#_!!_#|,g
++s,@HOST_TOOLS@,|#_!!_#|host,g
++s,@DL_LIBS@,|#_!!_#|-ldl,g
++s,@LDMODULEFLAGS@,|#_!!_#|-shared,g
++s,@BUILD_DL_LIBS@,|#_!!_#|,g
++s,@SOCKET_LIBS@,|#_!!_#|,g
++s,@EXTRA_DRIVER_OBJS@,|#_!!_#|,g
++s,@EXTRA_TOOL_OBJS@,|#_!!_#|,g
++s,@LINUXMODULE_2_6@,|#_!!_#|1,g
++s,@POSSIBLE_DRIVERS@,|#_!!_#| bsdmodule linuxmodule ns userlevel,g
++s,@DRIVERS@,|#_!!_#| userlevel linuxmodule,g
++s,@HAVE_USERLEVEL_DRIVER@,|#_!!_#|1,g
++s,@HAVE_LINUXMODULE_DRIVER@,|#_!!_#|1,g
++CEOF
++cat >"$tmp/subs-2.sed" <<\CEOF
++/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
++s,@HAVE_BSDMODULE_DRIVER@,|#_!!_#|0,g
++s,@OTHER_TARGETS@,|#_!!_#| tools,g
++s,@TOOLDIRS@,|#_!!_#| click-align click-check click-combine click-devirtualize click-fastclassifier click-flatten click-mkmindriver click-pretty click-undead click-xform click2xml click-install,g
++s,@TOOL_TARGETS@,|#_!!_#| click-align click-check click-combine click-devirtualize click-fastclassifier click-flatten click-mkmindriver click-pretty click-undead click-xform click2xml click-install,g
++s,@PCAP_INCLUDES@,|#_!!_#|,g
++s,@PCAP_LIBS@,|#_!!_#|-lpcap,g
++s,@PROPER_INCLUDES@,|#_!!_#|,g
++s,@PROPER_LIBS@,|#_!!_#|,g
++s,@XML2CLICK@,|#_!!_#|xml2click,g
++s,@EXPAT_INCLUDES@,|#_!!_#|,g
++s,@EXPAT_LIBS@,|#_!!_#| -lexpat,g
++s,@LINUX_CFLAGS@,|#_!!_#|,g
++s,@INSTALL_PROGRAM@,|#_!!_#|${INSTALL},g
++s,@INSTALL_SCRIPT@,|#_!!_#|${INSTALL},g
++s,@INSTALL_DATA@,|#_!!_#|${INSTALL} -m 644,g
++s,@INSTALL_IF_CHANGED@,|#_!!_#|$(top_builddir)/installch,g
++s,@CLICKINSTALL@,|#_!!_#|/usr/bin/install -c,g
++s,@SUBMAKE@,|#_!!_#|,g
++s,@GMAKE@,|#_!!_#|make,g
++s,@AUTOCONF@,|#_!!_#|autoconf,g
++s,@perl5@,|#_!!_#|perl,g
++s,@localperl5@,|#_!!_#|,g
++s,@PERL@,|#_!!_#|perl,g
++s,@INSTALL_INFO@,|#_!!_#|/usr/bin/install-info,g
++s,@MAKEINFO@,|#_!!_#|makeinfo,g
++s,@TEXI2DVI@,|#_!!_#|texi2dvi,g
++s,@POD2MAN@,|#_!!_#|pod2man,g
++s,@clickdatadir@,|#_!!_#|/d/click/click-1.6.0-27/inst/share/click,g
++s,@provisions@,|#_!!_#|i686 i386 i586 int64 linux linux_2_6 pcap,g
++s,@LTLIBOBJS@,|#_!!_#|,g
++:end
++s/|#_!!_#|//g
++CEOF
++fi # test -n "$CONFIG_FILES"
++
++
++for ac_tag in  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS
++do
++  case $ac_tag in
++  :[FHLC]) ac_mode=$ac_tag; continue;;
++  esac
++  case $ac_mode$ac_tag in
++  :[FHL]*:*);;
++  :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
++echo "$as_me: error: Invalid tag $ac_tag." >&2;}
++   { (exit 1); exit 1; }; };;
++  :[FH]-) ac_tag=-:-;;
++  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
++  esac
++  ac_save_IFS=$IFS
++  IFS=:
++  set x $ac_tag
++  IFS=$ac_save_IFS
++  shift
++  ac_file=$1
++  shift
++
++  case $ac_mode in
++  :L) ac_source=$1;;
++  :[FH])
++    ac_file_inputs=
++    for ac_f
++    do
++      case $ac_f in
++      -) ac_f="$tmp/stdin";;
++      *) # Look for the file first in the build tree, then in the source tree
++       # (if the path is not absolute).  The absolute path cannot be DOS-style,
++       # because $ac_f cannot contain `:'.
++       test -f "$ac_f" ||
++         case $ac_f in
++         [\\/$]*) false;;
++         *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
++         esac ||
++         { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
++echo "$as_me: error: cannot find input file: $ac_f" >&2;}
++   { (exit 1); exit 1; }; };;
++      esac
++      ac_file_inputs="$ac_file_inputs $ac_f"
++    done
++
++    # Let's still pretend it is `configure' which instantiates (i.e., don't
++    # use $as_me), people would be surprised to read:
++    #    /* config.h.  Generated by config.status.  */
++    configure_input="Generated from "`IFS=:
++        echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
++    if test x"$ac_file" != x-; then
++      configure_input="$ac_file.  $configure_input"
++      { echo "$as_me:$LINENO: creating $ac_file" >&5
++echo "$as_me: creating $ac_file" >&6;}
++    fi
++
++    case $ac_tag in
++    *:-:* | *:-) cat >"$tmp/stdin";;
++    esac
++    ;;
++  esac
++
++  ac_dir=`$as_dirname -- "$ac_file" ||
++$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++       X"$ac_file" : 'X\(//\)[^/]' \| \
++       X"$ac_file" : 'X\(//\)$' \| \
++       X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
++echo X"$ac_file" |
++    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++          s//\1/
++          q
++        }
++        /^X\(\/\/\)[^/].*/{
++          s//\1/
++          q
++        }
++        /^X\(\/\/\)$/{
++          s//\1/
++          q
++        }
++        /^X\(\/\).*/{
++          s//\1/
++          q
++        }
++        s/.*/./; q'`
++  { as_dir="$ac_dir"
++  case $as_dir in #(
++  -*) as_dir=./$as_dir;;
++  esac
++  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
++    as_dirs=
++    while :; do
++      case $as_dir in #(
++      *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
++      *) as_qdir=$as_dir;;
++      esac
++      as_dirs="'$as_qdir' $as_dirs"
++      as_dir=`$as_dirname -- "$as_dir" ||
++$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++       X"$as_dir" : 'X\(//\)[^/]' \| \
++       X"$as_dir" : 'X\(//\)$' \| \
++       X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
++echo X"$as_dir" |
++    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++          s//\1/
++          q
++        }
++        /^X\(\/\/\)[^/].*/{
++          s//\1/
++          q
++        }
++        /^X\(\/\/\)$/{
++          s//\1/
++          q
++        }
++        /^X\(\/\).*/{
++          s//\1/
++          q
++        }
++        s/.*/./; q'`
++      test -d "$as_dir" && break
++    done
++    test -z "$as_dirs" || eval "mkdir $as_dirs"
++  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
++echo "$as_me: error: cannot create directory $as_dir" >&2;}
++   { (exit 1); exit 1; }; }; }
++  ac_builddir=.
++
++case "$ac_dir" in
++.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
++*)
++  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
++  # A ".." for each directory in $ac_dir_suffix.
++  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
++  case $ac_top_builddir_sub in
++  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
++  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
++  esac ;;
++esac
++ac_abs_top_builddir=$ac_pwd
++ac_abs_builddir=$ac_pwd$ac_dir_suffix
++# for backward compatibility:
++ac_top_builddir=$ac_top_build_prefix
++
++case $srcdir in
++  .)  # We are building in place.
++    ac_srcdir=.
++    ac_top_srcdir=$ac_top_builddir_sub
++    ac_abs_top_srcdir=$ac_pwd ;;
++  [\\/]* | ?:[\\/]* )  # Absolute name.
++    ac_srcdir=$srcdir$ac_dir_suffix;
++    ac_top_srcdir=$srcdir
++    ac_abs_top_srcdir=$srcdir ;;
++  *) # Relative name.
++    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
++    ac_top_srcdir=$ac_top_build_prefix$srcdir
++    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
++esac
++ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
++
++
++  case $ac_mode in
++  :F)
++  #
++  # CONFIG_FILE
++  #
++
++  case $INSTALL in
++  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
++  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
++  esac
++# If the template does not know about datarootdir, expand it.
++# FIXME: This hack should be removed a few years after 2.60.
++ac_datarootdir_hack=; ac_datarootdir_seen=
++
++case `sed -n '/datarootdir/ {
++  p
++  q
++}
++/@datadir@/p
++/@docdir@/p
++/@infodir@/p
++/@localedir@/p
++/@mandir@/p
++' $ac_file_inputs` in
++*datarootdir*) ac_datarootdir_seen=yes;;
++*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
++  { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
++echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
++  ac_datarootdir_hack='
++  s&@datadir@&/d/click/click-1.6.0-27/inst/share&g
++  s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g
++  s&@infodir@&${datarootdir}/info&g
++  s&@localedir@&${datarootdir}/locale&g
++  s&@mandir@&${datarootdir}/man&g
++    s&\${datarootdir}&/d/click/click-1.6.0-27/inst/share&g' ;;
++esac
++  sed "/^[     ]*VPATH[        ]*=/{
++s/:*\$(srcdir):*/:/
++s/:*\${srcdir}:*/:/
++s/:*@srcdir@:*/:/
++s/^\([^=]*=[   ]*\):*/\1/
++s/:*$//
++s/^[^=]*=[     ]*$//
++}
++
++:t
++/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
++s&@configure_input@&$configure_input&;t t
++s&@top_builddir@&$ac_top_builddir_sub&;t t
++s&@srcdir@&$ac_srcdir&;t t
++s&@abs_srcdir@&$ac_abs_srcdir&;t t
++s&@top_srcdir@&$ac_top_srcdir&;t t
++s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
++s&@builddir@&$ac_builddir&;t t
++s&@abs_builddir@&$ac_abs_builddir&;t t
++s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
++s&@INSTALL@&$ac_INSTALL&;t t
++$ac_datarootdir_hack
++" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out
++
++test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
++  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
++  { ac_out=`sed -n '/^[        ]*datarootdir[  ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
++  { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
++which seems to be undefined.  Please make sure it is defined." >&5
++echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
++which seems to be undefined.  Please make sure it is defined." >&2;}
++
++  rm -f "$tmp/stdin"
++  case $ac_file in
++  -) cat "$tmp/out"; rm -f "$tmp/out";;
++  *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
++  esac
++ ;;
++  :H)
++  #
++  # CONFIG_HEADER
++  #
++    # First, check the format of the line:
++    cat >"$tmp/defines.sed" <<\CEOF
++/^[    ]*#[    ]*undef[        ][      ]*[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*[    ]*$/b def
++/^[    ]*#[    ]*define[       ][      ]*[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*[(   ]/b def
++b
++:def
++s/$/ /
++s,^\([         #]*\)[^         ]*\([   ]*PACKAGE_NAME\)[       (].*,\1define\2 "click" ,
++s,^\([         #]*\)[^         ]*\([   ]*PACKAGE_TARNAME\)[    (].*,\1define\2 "click" ,
++s,^\([         #]*\)[^         ]*\([   ]*PACKAGE_VERSION\)[    (].*,\1define\2 "1.6.0" ,
++s,^\([         #]*\)[^         ]*\([   ]*PACKAGE_STRING\)[     (].*,\1define\2 "click 1.6.0" ,
++s,^\([         #]*\)[^         ]*\([   ]*PACKAGE_BUGREPORT\)[  (].*,\1define\2 "" ,
++s,^\([         #]*\)[^         ]*\([   ]*CLICK_VERSION\)[      (].*,\1define\2 "1.6.0" ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_NEW_HDR\)[       (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*NUM_CLICK_CPUS\)[     (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_CLICKFS\)[       (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*LINUX_SRCDIR\)[       (].*,\1define\2 "/d/kernels/linux-2.6.27.10-clickport" ,
++s,^\([         #]*\)[^         ]*\([   ]*FREEBSD_INCLUDEDIR\)[         (].*,\1define\2 "/usr/include" ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_STRERROR\)[      (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_SNPRINTF\)[      (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_STRTOUL\)[       (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_TCGETPGRP\)[     (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_VSNPRINTF\)[     (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*STDC_HEADERS\)[       (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_SYS_TYPES_H\)[   (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_SYS_STAT_H\)[    (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_STDLIB_H\)[      (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_STRING_H\)[      (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_MEMORY_H\)[      (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_STRINGS_H\)[     (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_INTTYPES_H\)[    (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_STDINT_H\)[      (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_UNISTD_H\)[      (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*SIZEOF_INT\)[         (].*,\1define\2 4 ,
++s,^\([         #]*\)[^         ]*\([   ]*SIZEOF_LONG\)[        (].*,\1define\2 4 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_INTTYPES_H\)[    (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_INDIFFERENT_ALIGNMENT\)[         (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*SIZEOF_LONG_LONG\)[   (].*,\1define\2 8 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_LONG_LONG\)[     (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_INT64_TYPES\)[   (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_INT64_IS_LONG_LONG_USERLEVEL\)[  (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*SIZEOF_STRUCT_TIMEVAL\)[      (].*,\1define\2 8 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_STRUCT_TIMESPEC\)[       (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*SIZEOF_STRUCT_TIMESPEC\)[     (].*,\1define\2 8 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_ENDIAN_H\)[      (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*CLICK_BYTE_ORDER\)[   (].*,\1define\2 1234 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_BYTESWAP_H\)[    (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_ARITHMETIC_RIGHT_SHIFT\)[        (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_ADDRESSABLE_VA_LIST\)[   (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE___BUILTIN_CLZ\)[         (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE___BUILTIN_CLZL\)[        (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE___BUILTIN_CLZLL\)[       (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE___BUILTIN_FFS\)[         (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE___BUILTIN_FFSL\)[        (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE___BUILTIN_FFSLL\)[       (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_STRINGS_H\)[     (].*,\1define\2 1 ,
++CEOF
++    sed -f "$tmp/defines.sed" $ac_file_inputs >"$tmp/out1"
++    # First, check the format of the line:
++    cat >"$tmp/defines.sed" <<\CEOF
++/^[    ]*#[    ]*undef[        ][      ]*[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*[    ]*$/b def
++/^[    ]*#[    ]*define[       ][      ]*[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*[(   ]/b def
++b
++:def
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_FFS\)[   (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_FFSL\)[  (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_FFSLL\)[         (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_UNISTD_H\)[      (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_TERMIO_H\)[      (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_NETDB_H\)[       (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_PWD_H\)[         (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_GRP_H\)[         (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_POLL_H\)[        (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_SIGACTION\)[     (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_DLFCN_H\)[       (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_DYNAMIC_LINKING\)[       (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_ACCEPT_SOCKLEN_T\)[      (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_LARGE_FILE_SUPPORT\)[    (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*SIZEOF_OFF_T\)[       (].*,\1define\2 8 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_SYS_MMAN_H\)[    (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_STDLIB_H\)[      (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_UNISTD_H\)[      (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_GETPAGESIZE\)[   (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_MMAP\)[  (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_MADVISE\)[       (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_DECL_MADVISE\)[  (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_LINUXMODULE_2_6\)[       (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_CLICK_KERNEL\)[  (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_LINUX_STRLEN_EXPOSED\)[  (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_LINUX_POLLING\)[         (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*__SMP__\)[    (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_LINUX_ASM_ALTERNATIVE_H\)[       (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_STRIDE_SCHED\)[  (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_LINUX_IF_TUN_H\)[        (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_DECL_PCAP_SETNONBLOCK\)[         (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_PCAP\)[  (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_PCAP_SETNONBLOCK\)[      (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_USERLEVEL_DRIVER\)[      (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_EXPAT\)[         (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_INT64_IS_LONG_LONG_LINUXMODULE\)[        (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*HAVE_LINUXMODULE_DRIVER\)[    (].*,\1define\2 1 ,
++s,^\([         #]*\)[^         ]*\([   ]*CLICK_BINDIR\)[       (].*,\1define\2 "/d/click/click-1.6.0-27/inst/bin" ,
++s,^\([         #]*\)[^         ]*\([   ]*CLICK_LIBDIR\)[       (].*,\1define\2 "/d/click/click-1.6.0-27/inst/lib" ,
++s,^\([         #]*\)[^         ]*\([   ]*CLICK_DATADIR\)[      (].*,\1define\2 "/d/click/click-1.6.0-27/inst/share/click" ,
++s/ $//
++s,^[   #]*u.*,/* & */,
++CEOF
++    sed -f "$tmp/defines.sed" "$tmp/out1" >"$tmp/out2"
++ac_result="$tmp/out2"
++  if test x"$ac_file" != x-; then
++    echo "/* $configure_input  */" >"$tmp/config.h"
++    cat "$ac_result" >>"$tmp/config.h"
++    if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then
++      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
++echo "$as_me: $ac_file is unchanged" >&6;}
++    else
++      rm -f $ac_file
++      mv "$tmp/config.h" $ac_file
++    fi
++  else
++    echo "/* $configure_input  */"
++    cat "$ac_result"
++  fi
++  rm -f "$tmp/out12"
++ ;;
++
++  :C)  { echo "$as_me:$LINENO: executing $ac_file commands" >&5
++echo "$as_me: executing $ac_file commands" >&6;}
++ ;;
++  esac
++
++
++  case $ac_file$ac_mode in
++    "default-1":C) for ac_file in $CONFIG_HEADERS; do
++    test $ac_file = include/click/config.h:config.h.in && echo > stamp-h
++done
++for ac_file in $CONFIG_FILES; do
++    test $ac_file = click-buildtool && chmod +x click-buildtool
++    test $ac_file = click-compile && chmod +x click-compile
++    test $ac_file = installch && chmod +x installch
++done ;;
++
++  esac
++done # for ac_tag
++
++
++{ (exit 0); exit 0; }
+diff -Nurb click-1.6.0/configure click-1.6.0-27/configure
+--- click-1.6.0/configure      2007-09-18 16:40:11.000000000 -0400
++++ click-1.6.0-27/configure   2009-01-27 12:14:44.000000000 -0500
+@@ -1819,6 +1819,7 @@
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
++set +x +v
+ ac_config_headers="$ac_config_headers include/click/config.h:config.h.in include/click/pathvars.h:pathvars.h.in include/click/config-bsdmodule.h:config-bsdmodule.h.in include/click/config-linuxmodule.h:config-linuxmodule.h.in include/click/config-ns.h:config-ns.h.in include/click/config-userlevel.h:config-userlevel.h.in"
+@@ -8688,7 +8689,7 @@
+                   ac_cv_endian=0
+           cat > conftest.$ac_ext <<EOF
+-#line 8691 "configure"
++#line 8692 "configure"
+ #include "confdefs.h"
+ #include <$endian_hdr>
+ #ifdef __BYTE_ORDER
+@@ -14430,8 +14431,7 @@
+     SAVE_CXX="$CXX"
+     CXX="$KERNEL_CXX"
+     saveflags="$CPPFLAGS"
+-    CPPFLAGS="$saveflags -D__KERNEL__ -I$linuxdir/include $LINUX_CFLAGS"
+-
++    CPPFLAGS="$saveflags -D__KERNEL__ -I$linuxdir/include -I$linuxdir/include/asm/mach-default $LINUX_CFLAGS"
+     # CLICK_LINUXMODULE_PROLOGUE()
+diff -Nurb click-1.6.0/configure.in click-1.6.0-27/configure.in
+--- click-1.6.0/configure.in   2007-09-18 16:40:01.000000000 -0400
++++ click-1.6.0-27/configure.in        2009-01-27 12:14:10.000000000 -0500
+@@ -12,6 +12,7 @@
+ dnl legally binding.
+ AC_INIT(click, 1.6.0)
++set +x +v
+ AC_PREREQ(2.50)
+ AC_CONFIG_HEADER(include/click/config.h:config.h.in include/click/pathvars.h:pathvars.h.in include/click/config-bsdmodule.h:config-bsdmodule.h.in include/click/config-linuxmodule.h:config-linuxmodule.h.in include/click/config-ns.h:config-ns.h.in include/click/config-userlevel.h:config-userlevel.h.in)
+@@ -848,8 +849,7 @@
+     SAVE_CXX="$CXX"
+     CXX="$KERNEL_CXX"
+     saveflags="$CPPFLAGS"
+-    CPPFLAGS="$saveflags -D__KERNEL__ -I$linuxdir/include $LINUX_CFLAGS"
+-
++    CPPFLAGS="$saveflags -D__KERNEL__ -I$linuxdir/include -I$linuxdir/include/asm/mach-default $LINUX_CFLAGS" 
+     # CLICK_LINUXMODULE_PROLOGUE()
+     AC_DEFUN([CLICK_LINUXMODULE_PROLOGUE], [[#if HAVE_LINUXMODULE_2_6
+diff -Nurb click-1.6.0/configure.in.orig click-1.6.0-27/configure.in.orig
+--- click-1.6.0/configure.in.orig      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/configure.in.orig   2007-09-18 16:40:01.000000000 -0400
+@@ -0,0 +1,1286 @@
++dnl -*- mode: shell-script -*-
++dnl Process this file with autoconf to produce a configure script.
++dnl
++dnl Permission is hereby granted, free of charge, to any person obtaining a
++dnl copy of this software and associated documentation files (the "Software"),
++dnl to deal in the Software without restriction, subject to the conditions
++dnl listed in the Click LICENSE file. These conditions include: you must
++dnl preserve this copyright notice, and you cannot mention the copyright
++dnl holders in advertising related to the Software without their permission.
++dnl The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++dnl notice is a summary of the Click LICENSE file; the license in that file is
++dnl legally binding.
++
++AC_INIT(click, 1.6.0)
++AC_PREREQ(2.50)
++AC_CONFIG_HEADER(include/click/config.h:config.h.in include/click/pathvars.h:pathvars.h.in include/click/config-bsdmodule.h:config-bsdmodule.h.in include/click/config-linuxmodule.h:config-linuxmodule.h.in include/click/config-ns.h:config-ns.h.in include/click/config-userlevel.h:config-userlevel.h.in)
++
++CLICK_VERSION=$PACKAGE_VERSION
++
++AC_SUBST(ac_configure_args)
++AC_DEFINE_UNQUOTED(CLICK_VERSION, "$CLICK_VERSION")
++AC_SUBST(CLICK_VERSION)
++
++CLICK_INIT('$(top_srcdir)')
++
++dnl support for cross compiling
++AC_CANONICAL_SYSTEM
++
++dnl This is wrong!!
++AC_CHECK_TOOL(CC, gcc)
++AC_CHECK_TOOL(CXX, g++)
++
++CLICK_PROG_CC
++AC_PROG_CPP
++AC_C_INLINE
++
++CLICK_PROG_CXX
++AC_PROG_CXXCPP
++
++CLICK_PROG_KERNEL_CC
++CLICK_PROG_KERNEL_CXX
++
++ac_preset_ar="$AR"
++AC_CHECK_TOOL(AR, ar)
++AC_CHECK_TOOL(LD, ld)
++AC_CHECK_TOOL(RANLIB, ranlib, :)
++AC_CHECK_TOOL(STRIP, strip, :)
++
++conf_auxdir='$(top_srcdir)'
++AC_SUBST(conf_auxdir)
++
++test -z "$AR_CREATEFLAGS" && AR_CREATEFLAGS=cru
++AC_SUBST(AR_CREATEFLAGS)
++
++
++dnl
++dnl check drivers to enable
++dnl
++
++dnl userlevel driver and features
++
++AC_ARG_ENABLE(userlevel, [  --disable-userlevel     disable user-level driver], :, enable_userlevel=yes)
++
++AC_ARG_ENABLE(user-multithread, [[    --enable-user-multithread support userlevel multithreading (EXPERIMENTAL)]], :, [enable_user_multithread=no])
++if test "x$enable_user_multithread" = xyes; then
++    AC_DEFINE(HAVE_USER_MULTITHREAD)
++fi
++
++
++dnl linuxmodule driver and features
++
++AC_ARG_ENABLE(linuxmodule, [  --disable-linuxmodule   disable Linux kernel driver], :, [enable_linuxmodule=yes; enable_linuxmodule_default=yes])
++
++AC_ARG_ENABLE(multithread,
++  [[    --enable-multithread[=N]  support kernel multithreading, N threads max]],
++  :, enable_multithread=no)
++
++test "$enable_multithread" = yes && enable_multithread=4
++test "$enable_multithread" = no && enable_multithread=1
++if test "$enable_multithread" -gt 1; then
++    AC_DEFINE_UNQUOTED(NUM_CLICK_CPUS, $enable_multithread)
++    AC_DEFINE_UNQUOTED(__MTCLICK__, 1)
++    saveflags="$CPPFLAGS"
++    CPPFLAGS="$saveflags -D__MTCLICK__"
++else
++    AC_DEFINE_UNQUOTED(NUM_CLICK_CPUS, 1)
++fi
++
++AC_ARG_ENABLE(warp9, [[    --enable-warp9            reduce PollDevice functionality for speed]], :, enable_warp9=no)
++if test "x$enable_warp9" = xyes; then
++    AC_DEFINE(CLICK_WARP9)
++fi
++
++AC_DEFINE(HAVE_CLICKFS)
++
++AC_ARG_ENABLE(kassert, [[    --enable-kassert          enable kernel assertions]], :, enable_kassert=no)
++if test $enable_kassert = yes; then
++    AC_DEFINE(HAVE_KERNEL_ASSERT)
++fi
++
++AC_ARG_ENABLE(adaptive, [[    --enable-adaptive         use adaptive scheduler to flexibly arbitrate
++                              between Click and the kernel (EXPERIMENTAL)]], :, enable_adaptive=no)
++if test "x$enable_adaptive" = xyes; then
++    AC_DEFINE(HAVE_ADAPTIVE_SCHEDULER)
++fi
++
++
++
++dnl bsdmodule driver and features
++
++AC_ARG_ENABLE(bsdmodule, [  --enable-bsdmodule      enable FreeBSD kernel driver (EXPERIMENTAL)], :, enable_bsdmodule=no)
++
++dnl nsclick driver and features
++
++AC_ARG_ENABLE(nsclick, [  --enable-nsclick        enable NS simulator driver (EXPERIMENTAL)], :, enable_nsclick=no)
++
++
++dnl
++dnl How to build linuxmodule driver?
++dnl
++
++AC_ARG_WITH(linux, [[  --with-linux[=DIR]      Linux source code is in DIR]],
++    [linuxdir=$withval], [linuxdir=NONE])
++test -z "$linuxdir" -o "$linuxdir" = yes && linuxdir=yes
++
++AC_ARG_WITH(linux-map, [[  --with-linux-map[=FILE] filename for Linux System.map [LINUXDIR/System.map]]],
++  [linux_system_map=$withval; if test -z "$withval" -o "$withval" = yes; then linux_system_map=NONE; fi],
++  linux_system_map=NONE)
++
++linux_system_map_boot=no
++
++if test "x$linuxdir" = xNONE -o "x$linuxdir" = xyes; then
++    if uname -r 2>/dev/null | grep '^2\.6' >/dev/null 2>&1; then
++      linuxdir=/lib/modules/"`uname -r`"/build
++      linux_system_map_boot="`uname -r`"
++    else
++      linuxdir=/usr/src/linux
++    fi
++    if test ! -d "$linuxdir" -a "x$enable_linuxmodule" = xyes; then
++      if test "x$enable_linuxmodule_default" = xyes; then
++          linuxdir=NONE; enable_linuxmodule=no
++      else
++          AC_MSG_ERROR([
++=========================================
++
++Can't find $linuxdir, so I can't compile the linuxmodule driver!
++(You may need the --with-linux=DIR option.)
++
++=========================================])
++      fi
++    fi
++fi
++
++if test "x$linuxdir" = xNONE -o "x$linuxdir" = xno -o "x$enable_linuxmodule" != xyes; then
++    ac_have_linux_kernel=n
++    linuxdir=NONE
++elif expr "_$linuxdir" : '_[[^/\\]]' >/dev/null; then 
++    AC_MSG_ERROR([
++=========================================
++
++The --with-linux directory $linuxdir is relative.
++You must supply an absolute path starting with /.
++
++=========================================])
++elif test -r $linuxdir/include/linux/skbuff.h; then
++    ac_have_linux_kernel=y
++else
++    AC_MSG_ERROR([
++=========================================
++
++Can't find $linuxdir/include/linux/skbuff.h.
++Are you sure $linuxdir contains Linux kernel source?
++
++=========================================])
++fi
++AC_SUBST(linuxdir)
++AC_DEFINE_UNQUOTED(LINUX_SRCDIR, "${linuxdir}")
++
++
++
++dnl
++dnl element collections
++dnl
++
++AC_ARG_ENABLE(all-elements, [  --enable-all-elements   include all provided element groups])
++
++dnl ELEMENTS_ARG_ENABLE(COLLECTION, HELP-STRING, DEFAULT-VALUE)
++element_groups=""
++AC_SUBST(element_groups)
++AC_DEFUN([ELEMENTS_ARG_ENABLE],
++[AC_ARG_ENABLE($1, [  --]builtin(substr, builtin(ifelse, [$3], yes, dis, en)[able-$1              ], 0, 21)[ ]builtin(ifelse, [$3], yes, [do not ], [])[$2], ,
++[enable_]patsubst([$1], -, _)=$3)dnl
++test "x$enable_all_elements" = xyes -a ["x$enable_]patsubst([$1], -, _)["] = xNO && [enable_]patsubst([$1], -, _)[=yes]
++if test ["x$enable_]patsubst([$1], -, _)["] = xyes; then
++    :
++    $4
++fi])
++
++ELEMENTS_ARG_ENABLE(analysis, [include elements for network analysis], NO)
++ELEMENTS_ARG_ENABLE(app, [include application-level elements], yes)
++ELEMENTS_ARG_ENABLE(aqm, [include active queue management elements], yes)
++ELEMENTS_ARG_ENABLE(ethernet, [include Ethernet elements], yes)
++ELEMENTS_ARG_ENABLE(etherswitch, [include Ethernet switch elements (EXPERIMENTAL)], NO)
++ELEMENTS_ARG_ENABLE(grid, [include Grid elements (see FAQ)], NO)
++ELEMENTS_ARG_ENABLE(icmp, [include ICMP elements], yes)
++ELEMENTS_ARG_ENABLE(ip, [include IP elements], yes)
++ELEMENTS_ARG_ENABLE(ip6, [include IPv6 elements (EXPERIMENTAL)], NO, AC_DEFINE(HAVE_IP6))
++ELEMENTS_ARG_ENABLE(ipsec, [include IP security elements], NO, AC_DEFINE(HAVE_IPSEC))
++ELEMENTS_ARG_ENABLE(local, [include local elements], NO)
++ELEMENTS_ARG_ENABLE(radio, [include radio elements (EXPERIMENTAL)], NO)
++ELEMENTS_ARG_ENABLE(simple, [include simple versions of other elements], NO)
++dnl ELEMENTS_ARG_ENABLE(snmp, [include SNMP elements], NO)
++ELEMENTS_ARG_ENABLE(standard, [include standard elements], yes)
++ELEMENTS_ARG_ENABLE(tcpudp, [include TCP and UDP elements], yes)
++ELEMENTS_ARG_ENABLE(test, [include regression test elements], NO)
++ELEMENTS_ARG_ENABLE(wifi, [include wifi elements and support], NO)
++AC_ARG_ENABLE(experimental, [  --enable-experimental   enable experimental elements in normal groups], :, enable_experimental=no)
++
++for i in `(cd $srcdir/elements; ls | sed '/^CVS$/d;/^bsdmodule$/d;/^exopc$/d;/^linuxmodule$/d;/^ns$/d;/^userlevel$/d')`; do
++    enableval=`eval 'echo $'"enable_$i"`
++    test "x$enable_all_elements" = xyes -a "x$enableval" '!=' 'no' && enableval=yes
++    test -d "$srcdir/elements/$i" -a "$enableval" = "yes" && element_groups="$element_groups $i"
++done
++
++
++
++dnl
++dnl How to build bsdmodule driver?
++dnl
++
++AC_ARG_WITH(freebsd, [[  --with-freebsd[=SRC,INC] FreeBSD source code is in SRC [/usr/src/sys],
++                          include directory is INC [/usr/include]]],
++  [freebsddir=$withval; if test -z "$withval" -o "$withval" = yes; then freebsddir=/usr/src/sys,/usr/include; fi],
++  freebsddir=NONE)
++
++if test "x$freebsddir" = xNONE; then
++  if test -d /usr/src/sys -a -d /usr/include; then
++    freebsddir=/usr/src/sys,/usr/include
++  elif test "x$enable_bsdmodule" = xyes; then
++    AC_MSG_WARN([
++=========================================
++
++Can't find /usr/src/sys and/or /usr/include, so I'm not compiling
++the bsdmodule driver.  (You may need the --with-freebsd=DIR option.)
++
++=========================================])
++  fi
++fi
++
++freebsd_srcdir=`echo "$freebsddir," | sed -e 's/,.*//'`
++freebsd_includedir=`echo "$freebsddir,/usr/include," | sed -e 's/^[[^,]]*,\([[^,]]*\),.*$/\1/'`
++
++if test "x$freebsddir" = xNONE -o "x$freebsddir" = xno -o "x$enable_bsdmodule" != xyes; then
++  ac_have_bsd_kernel=n
++  freebsddir=NONE
++elif expr '(' "_$freebsd_includedir" : '_[[^/\\]]' ')' '|' '(' "_$freebsd_srcdir" : '_[[^/\\]]' ')'; then 
++  AC_MSG_ERROR([
++=========================================
++
++The --with-freebsd directories $freebsd_srcdir,$freebsd_includedir
++are relative.  You must supply absolute paths starting with /.
++
++=========================================])
++elif test -r $freebsd_includedir/net/if_var.h -a -r $freebsd_srcdir/kern/vnode_if.src; then
++  ac_have_bsd_kernel=y
++else
++  AC_MSG_ERROR([
++=========================================
++
++Can't find $freebsd_includedir/net/if_var.h and/or
++$freebsd_srcdir/kern/vnode_if.src.  Are you sure $freebsd_srcdir
++and $freebsd_includedir contain FreeBSD kernel source?
++
++=========================================])
++fi
++
++AC_SUBST(freebsd_srcdir)
++AC_SUBST(freebsd_includedir)
++AC_DEFINE_UNQUOTED(FREEBSD_INCLUDEDIR, "${freebsd_includedir}")
++
++
++dnl
++dnl check whether target is Linux
++dnl
++
++AC_CACHE_CHECK([whether we are compiling for Linux], [ac_cv_under_linux],
++    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[#ifndef __linux__
++#error "fuckers! fuckers!"
++#endif
++return 0;]])], ac_cv_under_linux=yes, ac_cv_under_linux=no)])
++
++
++dnl
++dnl functions
++dnl
++
++AC_LANG_C
++AC_REPLACE_FUNCS(strerror)
++AC_CHECK_FUNCS(snprintf strtoul tcgetpgrp vsnprintf)
++AC_LANG_CPLUSPLUS
++
++
++dnl
++dnl integer types, endianness, int64, addressable va_list
++dnl
++
++AC_ARG_ENABLE(int64, [  --disable-int64         disable 64-bit integer support], :, enable_int64=yes)
++
++AC_CHECK_SIZEOF(int)
++AC_CHECK_SIZEOF(long)
++CLICK_CHECK_INTEGER_TYPES
++CLICK_CHECK_ALIGNMENT
++if test "x$enable_int64" = xyes; then
++    AC_CHECK_SIZEOF(long long)
++    CLICK_CHECK_INT64_TYPES
++fi
++AC_CHECK_SIZEOF([struct timeval])
++AC_CHECK_TYPES([struct timespec], have_timespec=yes, have_timespec=no)
++if test "x$have_timespec" = xyes; then
++    AC_CHECK_SIZEOF([struct timespec])
++fi
++CLICK_CHECK_ENDIAN
++CLICK_CHECK_SIGNED_SHIFT
++CLICK_CHECK_ADDRESSABLE_VA_LIST
++CLICK_CHECK_INTEGER_BUILTINS
++
++
++dnl
++dnl nanosecond-precision timestamps
++dnl
++
++AC_ARG_ENABLE(nanotimestamp, [  --enable-nanotimestamp  enable nanosecond timestamps])
++if test "x$enable_nanotimestamp" = xyes; then
++    AC_DEFINE(HAVE_NANOTIMESTAMP_ENABLED)
++fi
++
++
++dnl
++dnl check whether tools should be built for host or build
++dnl
++
++AC_ARG_ENABLE(tools,
++  [[  --enable-tools=WHERE    enable tools (host/build/mixed/no) [mixed]]],
++  :, enable_tools=mixed)
++
++if test "$enable_tools" != mixed -a "$enable_tools" != host -a "$enable_tools" != build -a "$enable_tools" != no; then
++  AC_MSG_ERROR([
++=========================================
++
++Bad value for --enable-tools.  Try 'host', 'build', 'mixed', or 'no'.
++
++=========================================])
++elif test "$enable_tools" = no; then
++  HOST_TOOLS=host
++elif test "$cross_compiling" = no -o "$enable_tools" = host; then
++  HOST_TOOLS=host
++else
++  dnl This is wrong!! Should at least check that HOST_CC and HOST_CXX work.
++  AC_CHECK_PROGS(BUILD_CC, gcc)
++  AC_CHECK_PROGS(BUILD_CXX, g++)
++  CLICK_PROG_BUILD_CXX
++  AC_CHECK_PROGS(BUILD_AR, ar)
++  AC_CHECK_PROGS(BUILD_RANLIB, ranlib, :)
++  HOST_TOOLS=$enable_tools
++fi
++AC_SUBST(HOST_TOOLS)
++
++
++dnl
++dnl headers, event detection, dynamic linking
++dnl
++
++AC_CHECK_HEADERS(unistd.h termio.h netdb.h sys/event.h pwd.h grp.h)
++CLICK_CHECK_POLL_H
++AC_CHECK_FUNCS(sigaction)
++
++AC_CHECK_FUNCS(kqueue, have_kqueue=yes)
++if test "x$have_kqueue" = xyes; then
++    AC_CACHE_CHECK([whether EV_SET last argument is void *], [ac_cv_ev_set_udata_pointer],
++      [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
++#include <sys/event.h>
++#include <sys/time.h>]], [[struct kevent kev; EV_SET(&kev, 1, EVFILT_WRITE, EV_ADD, 0, 0, (void *) &kev);]])], [ac_cv_ev_set_udata_pointer=yes], [ac_cv_ev_set_udata_pointer=no])])
++    if test $ac_cv_ev_set_udata_pointer = yes; then
++      AC_DEFINE([HAVE_EV_SET_UDATA_POINTER], [1], [Define if the last argument to EV_SET has pointer type.])
++    fi
++fi
++
++AC_ARG_ENABLE(dynamic-linking, [  --disable-dynamic-linking disable dynamic linking], :, enable_dynamic_linking=yes)
++
++if test "x$enable_dynamic_linking" = xyes; then
++    CLICK_CHECK_DYNAMIC_LINKING
++    if test "$HOST_TOOLS" != host -a "$enable_tools" != no; then
++      CLICK_CHECK_BUILD_DYNAMIC_LINKING
++    fi
++fi
++
++
++dnl
++dnl sockets
++dnl
++
++AC_LANG_C
++SOCKET_LIBS=
++if test "$enable_userlevel" = yes; then
++    savelibs="$LIBS"; LIBS=
++    AC_SEARCH_LIBS(gethostbyname, nsl, , , $savelibs)
++    AC_SEARCH_LIBS(connect, socket, , , $savelibs)
++    SOCKET_LIBS="$LIBS"; LIBS="$savelibs"
++
++    AC_CACHE_CHECK([whether accept() uses socklen_t], [ac_cv_accept_socklen_t],
++          [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
++#include <sys/socket.h>
++]], [[socklen_t sl; (void) accept(0, (struct sockaddr *) 0, &sl);]])],
++      ac_cv_accept_socklen_t=yes, ac_cv_accept_socklen_t=no)])
++    if test "$ac_cv_accept_socklen_t" = yes; then
++      AC_DEFINE([HAVE_ACCEPT_SOCKLEN_T], [1], [Define if accept() uses socklen_t.])
++    fi
++fi
++AC_SUBST(SOCKET_LIBS)
++AC_LANG_CPLUSPLUS
++
++
++dnl
++dnl large file support
++dnl
++
++CLICK_CHECK_LARGE_FILE_SUPPORT
++
++
++dnl
++dnl mmap
++dnl
++
++AC_LANG_C
++AC_CHECK_HEADERS(sys/mman.h)
++AC_FUNC_MMAP
++AC_LANG_CPLUSPLUS
++AC_CHECK_FUNCS(madvise)
++AC_CHECK_DECLS(madvise, [], [], [#if HAVE_SYS_MMAN_H
++#include <sys/types.h>
++#include <sys/mman.h>
++#endif])
++
++
++dnl
++dnl objects required by element collections
++dnl
++
++EXTRA_DRIVER_OBJS=
++EXTRA_TOOL_OBJS=
++if test "x$enable_ip6" = xyes; then
++    EXTRA_DRIVER_OBJS="ip6address.o ip6flowid.o ip6table.o $EXTRA_DRIVER_OBJS"
++    EXTRA_TOOL_OBJS="ip6address.o $EXTRA_TOOL_OBJS"
++fi
++AC_SUBST(EXTRA_DRIVER_OBJS)
++AC_SUBST(EXTRA_TOOL_OBJS)
++
++
++dnl
++dnl stuff in the linux kernel
++dnl
++
++if test $ac_have_linux_kernel = y; then
++
++dnl Look for System.map
++
++if test "$linux_system_map" = NONE; then
++    linux_system_map=$linuxdir/System.map
++    if test "x$linux_system_map_boot" != xno -a ! -f "$linux_system_map"; then
++      linux_system_map=/boot/System.map-"$linux_system_map_boot"
++    fi
++fi
++
++if test ! -f "$linux_system_map"; then
++    if test "x$enable_linuxmodule_default" = xyes; then
++      AC_MSG_WARN([
++=========================================
++
++Can't find Linux System.map file '$linux_system_map',
++so I won't compile the linuxmodule driver.
++(You may need the --with-linux=DIR and/or --with-linux-map=MAP options.)
++
++=========================================])
++      ac_have_linux_kernel=no
++    else
++      AC_MSG_ERROR([
++=========================================
++
++Can't find Linux System.map file '$linux_system_map'.
++(You may need the --with-linux=DIR and/or --with-linux-map=MAP options.)
++
++=========================================])
++    fi
++fi
++
++fi
++
++dnl Check for Linux 2.6
++
++if test $ac_have_linux_kernel = y; then
++
++AC_CACHE_CHECK([for Linux 2.6], [ac_cv_linux26],
++    [if grep '^PATCHLEVEL[    ]*=[    ]*6' $linuxdir/Makefile >/dev/null 2>&1; then ac_cv_linux26=1; else ac_cv_linux26=0; fi])
++LINUXMODULE_2_6=$ac_cv_linux26
++AC_SUBST(LINUXMODULE_2_6)
++if test $LINUXMODULE_2_6 = 1; then
++    AC_DEFINE([HAVE_LINUXMODULE_2_6], [1], [Define if the Click linuxmodule is compiled for a 2.6 kernel.])
++fi
++
++AC_CACHE_CHECK(for Click Linux kernel extensions, ac_cv_click_kernel,
++[if grep register_net_in $linux_system_map >/dev/null 2>&1; then
++    ac_cv_click_kernel=yes
++else ac_cv_click_kernel=no; fi])
++if test $ac_cv_click_kernel = yes; then
++    AC_DEFINE(HAVE_CLICK_KERNEL)
++fi
++
++AC_CACHE_CHECK(for Click Linux kernel extensions for transmit notification, ac_cv_click_kernel_tx_notify,
++[if grep register_net_tx $linux_system_map >/dev/null 2>&1; then
++    ac_cv_click_kernel_tx_notify=yes
++else ac_cv_click_kernel_tx_notify=no; fi])
++if test $ac_cv_click_kernel_tx_notify = yes; then
++    AC_DEFINE(HAVE_CLICK_KERNEL_TX_NOTIFY)
++fi
++
++AC_CACHE_CHECK(for read_net_skbcount kernel extension, ac_cv_linux_read_net_skbcount,
++[if grep read_net_skbcount $linux_system_map >/dev/null 2>&1; then
++  ac_cv_linux_read_net_skbcount=yes
++else ac_cv_linux_read_net_skbcount=no; fi])
++if test $ac_cv_linux_read_net_skbcount = yes; then
++    AC_DEFINE(HAVE_LINUX_READ_NET_SKBCOUNT)
++fi
++
++AC_CACHE_CHECK(for strlen kernel symbol, ac_cv_linux_strlen_exposed,
++[if grep ' strlen' $linux_system_map >/dev/null 2>&1; then
++  ac_cv_linux_strlen_exposed=yes
++else ac_cv_linux_strlen_exposed=no; fi])
++if test $ac_cv_linux_strlen_exposed = yes; then
++    AC_DEFINE(HAVE_LINUX_STRLEN_EXPOSED)
++fi
++
++AC_CACHE_CHECK(for tulip_interrupt_hook kernel symbol, ac_cv_linux_tulip_intr_hook,
++[if grep ' tulip_interrupt_hook' $linux_system_map >/dev/null 2>&1; then
++  ac_cv_linux_tulip_intr_hook=yes
++else ac_cv_linux_tulip_intr_hook=no; fi])
++if test $ac_cv_linux_tulip_intr_hook = yes; then
++    AC_DEFINE(HAVE_LINUX_TULIP_INTERRUPT_HOOK)
++fi
++
++AC_CACHE_CHECK(for device polling kernel extension, ac_cv_linux_poll_extension,
++[if grep polling $linuxdir/include/linux/netdevice.h >/dev/null 2>&1; then
++  ac_cv_linux_poll_extension=yes
++else ac_cv_linux_poll_extension=no; fi])
++if test $ac_cv_linux_poll_extension = yes; then
++    AC_DEFINE(HAVE_LINUX_POLLING)
++fi
++
++AC_CACHE_CHECK(for atomic_set_mask, ac_cv_linux_atomic_set_mask,
++[if grep atomic_set_mask $linuxdir/include/asm/atomic.h >/dev/null 2>&1; then
++  ac_cv_linux_atomic_set_mask=yes
++else ac_cv_linux_atomic_set_mask=no; fi])
++if test $ac_cv_linux_atomic_set_mask = yes; then
++    AC_DEFINE(HAVE_LINUX_ATOMIC_SET_MASK)
++fi
++
++AC_CACHE_CHECK(for SMP, ac_cv_smp,
++[if grep "#define CONFIG_SMP 1" $linuxdir/include/linux/autoconf.h >/dev/null 2>&1; then
++  ac_cv_smp=yes
++else ac_cv_smp=no; fi])
++if test $ac_cv_smp = yes; then
++    AC_DEFINE(__SMP__)
++    KERNEL_CXX="$KERNEL_CXX -D__SMP__"
++fi
++
++AC_CACHE_CHECK(for <asm/alternative.h>, ac_cv_linux_asm_alternative_h,
++[if test -r $linuxdir/include/asm/alternative.h >/dev/null 2>&1; then
++  ac_cv_linux_asm_alternative_h=yes
++else ac_cv_linux_asm_alternative_h=no; fi])
++if test $ac_cv_linux_asm_alternative_h = yes; then
++    AC_DEFINE(HAVE_LINUX_ASM_ALTERNATIVE_H)
++fi
++
++fi
++
++
++dnl
++dnl stuff in the bsd kernel
++dnl
++
++if test $ac_have_bsd_kernel = y; then
++    KERNEL_CXX="$KERNEL_CXX -fpermissive"
++    AC_CACHE_CHECK(FreeBSD version, ac_cv_freebsd_version, [
++      save_flags="$CPPFLAGS"
++      CPPFLAGS="$CPPFLAGS -I$freebsd_includedir"
++      AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <sys/param.h>
++#if __FreeBSD_version < 500000
++#include <NONEXISTENT_FILE>
++#endif]])], ac_cv_freebsd_version=yes, ac_cv_freebsd_version=no)
++      CPPFLAGS="$save_flags"])
++    if test $ac_cv_freebsd_version = yes; then
++      AC_DEFINE(HAVE_CLICK_BSD_KERNEL)
++      AC_DEFINE(HAVE_BSD_POLLING)
++    else
++      AC_MSG_WARN([
++=========================================
++
++Your version of FreeBSD is old.  Click works with FreeBSD 5.x and later.
++
++=========================================])
++    fi
++fi
++
++
++dnl
++dnl type of scheduling
++dnl
++
++AC_ARG_ENABLE(stride, [  --disable-stride        disable stride scheduler], :, enable_stride=yes)
++if test $enable_stride = yes; then
++    AC_DEFINE(HAVE_STRIDE_SCHED)
++fi
++
++AC_ARG_ENABLE(task-heap, [  --enable-task-heap      use heap for task list], :, enable_task_heap=no)
++if test $enable_task_heap = yes; then
++    AC_DEFINE(HAVE_TASK_HEAP)
++fi
++
++
++dnl
++dnl debugging malloc
++dnl
++
++AC_ARG_ENABLE(dmalloc, [  --enable-dmalloc        enable debugging malloc], :, enable_dmalloc=no)
++if test $enable_dmalloc = yes; then
++    AC_DEFINE(CLICK_DMALLOC)
++fi
++
++
++dnl
++dnl use Intel-specific machine instructions
++dnl
++
++AC_ARG_ENABLE(intel-cpu, [  --enable-intel-cpu      enable Intel-specific machine instructions], :, enable_intel_cpu=no)
++if test $enable_intel_cpu = yes; then
++    AC_DEFINE(HAVE_INTEL_CPU)
++fi
++
++
++dnl
++dnl kernel interfaces
++dnl
++
++AC_CHECK_HEADERS(linux/if_tun.h net/if_tun.h net/if_tap.h net/bpf.h)
++
++
++dnl
++dnl possible drivers
++dnl
++
++POSSIBLE_DRIVERS=
++for i in bsdmodule exopc linuxmodule ns userlevel; do
++    test -f $srcdir/$i/Makefile.in && POSSIBLE_DRIVERS="$POSSIBLE_DRIVERS $i"
++done
++AC_SUBST(POSSIBLE_DRIVERS)
++
++
++dnl
++dnl default drivers
++dnl
++
++DRIVERS=
++AC_SUBST(DRIVERS)
++
++HAVE_USERLEVEL_DRIVER=0
++AC_SUBST(HAVE_USERLEVEL_DRIVER)
++HAVE_LINUXMODULE_DRIVER=0
++AC_SUBST(HAVE_LINUXMODULE_DRIVER)
++HAVE_BSDMODULE_DRIVER=0
++AC_SUBST(HAVE_BSDMODULE_DRIVER)
++
++OTHER_TARGETS=
++AC_SUBST(OTHER_TARGETS)
++
++for i in click-align click-check click-combine click-devirtualize click-fastclassifier click-flatten click-ipopt click-mkmindriver click-pretty click-undead click-xform click2xml; do
++    test -d $srcdir/tools/$i &&       \
++      TOOLDIRS="$TOOLDIRS $i" TOOL_TARGETS="$TOOL_TARGETS $i"
++done
++for i in click-install; do
++    test -d $srcdir/tools/$i && TOOLDIRS="$TOOLDIRS $i"
++done
++AC_SUBST(TOOLDIRS)
++AC_SUBST(TOOL_TARGETS)
++
++
++dnl pcap library
++dnl note: no longer need pcap under Linux
++
++if test "$enable_userlevel" = yes; then
++    CLICK_CHECK_LIBPCAP
++    if test "$HAVE_PCAP" != yes -a "$ac_cv_under_linux" != yes; then
++      AC_MSG_WARN([
++=========================================
++
++pcap.h and/or -lpcap not found; user-level driver can't steal packets.
++
++=========================================])
++    fi
++    DRIVERS="$DRIVERS userlevel"
++    AC_DEFINE(HAVE_USERLEVEL_DRIVER)
++    HAVE_USERLEVEL_DRIVER=1
++fi
++
++
++dnl other user-level specifics
++
++AC_CACHE_CHECK([whether struct if_data has ifi_datalen], [ac_cv_if_data_ifi_datalen],
++    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <net/if.h>
++#include <net/if_var.h>
++]], [[struct if_msghdr ifm; ifm.ifm_data.ifi_datalen = 0;]])], ac_cv_if_data_ifi_datalen=yes, ac_cv_if_data_ifi_datalen=no)])
++if test "x$ac_cv_if_data_ifi_datalen" = xyes; then
++    AC_DEFINE([HAVE_IF_DATA_IFI_DATALEN], [1], [Define if 'struct if_data' has an 'ifi_datalen' member.])
++fi
++
++AC_CACHE_CHECK([whether struct sockaddr_in has sin_len], [ac_cv_sockaddr_in_sin_len],
++    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>
++#include <netinet/in.h>
++]], [[struct sockaddr_in sin; sin.sin_len = 0;]])], ac_cv_sockaddr_in_sin_len=yes, ac_cv_sockaddr_in_sin_len=no)])
++if test "x$ac_cv_sockaddr_in_sin_len" = xyes; then
++    AC_DEFINE([HAVE_SOCKADDR_IN_SIN_LEN], [1], [Define if 'struct sockaddr_in' has a 'sin_len' member.])
++fi
++
++
++dnl PlanetLab "Privileged Operations" library
++
++explicit_proper=yes
++AC_ARG_WITH(proper, [[  --with-proper[=PREFIX]  use PlanetLab Proper library (optional)]],
++  [properprefix=$withval; if test -z "$withval" -o "$withval" = yes; then properprefix=; fi],
++  [properprefix=no; explicit_proper=no])
++if test "$properprefix" != no; then
++    dnl Proper requires libcurl
++    dnl AC_CHECK_HEADER(curl/curl.h, have_curl_h=yes, have_curl_h=no)
++    dnl AC_CHECK_LIB(curl, curl_easy_init)
++
++    saveflags="$CPPFLAGS"; test -n "$properprefix" && CPPFLAGS="$CPPFLAGS -I$properprefix/include"
++    AC_CHECK_HEADER(prop.h, have_prop_h=yes, have_prop_h=no)
++    CPPFLAGS="$saveflags"
++    
++    AC_LANG_C
++    saveflags="$LDFLAGS"; test -n "$properprefix" && LDFLAGS="$LDFLAGS -L$properprefix/lib"
++    AC_CHECK_LIB(proper, prop_open, have_libproper=yes, have_libproper=no)
++    LDFLAGS="$saveflags"
++    AC_LANG_CPLUSPLUS
++
++    if test $have_prop_h = yes -a $have_libproper = yes; then
++      AC_DEFINE(HAVE_PROPER)
++      test -n "$properprefix" && PROPER_INCLUDES="-I$properprefix/include" && PROPER_LIBS="-L$properprefix/lib"
++      PROPER_LIBS="$PROPER_LIBS -lproper"
++    elif test $explicit_proper = yes; then
++      PROPER_INCLUDES= PROPER_LIBS=
++      AC_MSG_ERROR([
++=========================================
++
++You explicitly specified --with-proper, but I can't find the proper headers
++and/or libraries where you said they would be.  Run again supplying
++--without-proper or --with-proper=PREFIX.
++
++=========================================])
++    fi
++fi
++AC_SUBST(PROPER_INCLUDES)
++AC_SUBST(PROPER_LIBS)
++
++
++dnl expat library
++
++explicit_expat=yes
++AC_ARG_WITH(expat, [[  --with-expat[=PREFIX]   locate expat XML library (optional)]],
++  [expatprefix=$withval; if test -z "$withval" -o "$withval" = yes; then expatprefix=; fi],
++  expatprefix=; explicit_expat=no)
++
++XML2CLICK=
++if test "$expatprefix" != no; then
++    saveflags="$CPPFLAGS"; test -n "$expatprefix" && CPPFLAGS="$CPPFLAGS -I$expatprefix/include"
++    AC_CHECK_HEADER(expat.h, have_expat_h=yes, have_expat_h=no)
++    CPPFLAGS="$saveflags"
++    
++    AC_LANG_C
++    saveflags="$LDFLAGS"; test -n "$expatprefix" && LDFLAGS="$LDFLAGS -L$expatprefix/lib"
++    AC_CHECK_LIB(expat, XML_ParserCreateNS, have_libexpat=yes, have_libexpat=no)
++    LDFLAGS="$saveflags"
++
++    if test $have_expat_h = yes -a $have_libexpat = yes; then
++      AC_DEFINE(HAVE_EXPAT)
++      XML2CLICK=xml2click
++      test -n "$expatprefix" && EXPAT_INCLUDES="-I$expatprefix/include" && EXPAT_LIBS="-L$expatprefix/lib"
++      EXPAT_LIBS="$EXPAT_LIBS -lexpat"
++    elif test $explicit_expat = yes; then
++      EXPAT_INCLUDES= EXPAT_LIBS=
++      AC_MSG_ERROR([
++=========================================
++
++You explicitly specified --with-expat, but I can't find the expat headers
++and/or libraries where you said they would be.  Run again supplying
++--without-expat or --with-expat=PREFIX.
++
++=========================================])
++    fi
++fi
++AC_SUBST(XML2CLICK)
++AC_SUBST(EXPAT_INCLUDES)
++AC_SUBST(EXPAT_LIBS)
++
++
++dnl check linuxmodule for Linux
++
++if test $ac_have_linux_kernel = y; then
++
++    dnl check for Linux 2.6 #includes
++    if test $LINUXMODULE_2_6 = 1; then
++      AC_MSG_CHECKING([for Linux 2.6 compilation flags])
++      echo "include $linuxdir/Makefile
++fwablongie:
++      @echo \$(CFLAGS)" >conftest.mk
++      make -C "${linuxdir}" M="`pwd`" -f "`pwd`/conftest.mk" --no-print-directory fwablongie >conftest.dat
++      if test $? != 0; then
++          AC_MSG_RESULT([not found])
++          AC_MSG_ERROR([
++==============================================
++
++Can't find Linux 2.6 compilation flags.
++
++==============================================])
++      fi
++      LINUX_CFLAGS="`sed -e s,-Iinclude,-I$linuxdir/include,g \
++          -e 's,-W[^ ]*,,g' \
++          -e 's,-Wno-pointer-sign,,g' \
++          -e s,-fno-unit-at-a-time,,g \
++          -e s,-Wstrict-prototypes,,g \
++          -e s,-Wdeclaration-after-statement,,g \
++          -e s,-fno-common,,g <conftest.dat`"
++      AC_MSG_RESULT($LINUX_CFLAGS)
++    else
++      LINUX_CFLAGS=""
++    fi
++    AC_SUBST(LINUX_CFLAGS)
++
++
++    SAVE_CXX="$CXX"
++    CXX="$KERNEL_CXX"
++    saveflags="$CPPFLAGS"
++    CPPFLAGS="$saveflags -D__KERNEL__ -I$linuxdir/include $LINUX_CFLAGS"
++
++
++    # CLICK_LINUXMODULE_PROLOGUE()
++    AC_DEFUN([CLICK_LINUXMODULE_PROLOGUE], [[#if HAVE_LINUXMODULE_2_6
++# define KBUILD_STR(s)                #s
++# define KBUILD_BASENAME      KBUILD_STR(click)
++# define KBUILD_MODNAME               KBUILD_STR(click)
++#endif
++#define new xxx_new
++#define this xxx_this
++#define delete xxx_delete
++#define class xxx_class
++#define virtual xxx_virtual
++#define typename xxx_typename
++#define private xxx_private
++#define protected xxx_protected
++#define public xxx_public
++#define namespace xxx_namespace
++#include <linux/autoconf.h>]])
++
++
++    AC_CACHE_CHECK([for C++-includable kernel header files], [ac_cv_cxx_aware_system],
++      [AC_LANG_CPLUSPLUS
++      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([CLICK_LINUXMODULE_PROLOGUE()[
++#include <linux/signal.h>]], [[return 0]])], ac_cv_cxx_aware_system=yes, ac_cv_cxx_aware_system=no)
++      ])
++
++
++    dnl check whether -fpermissive is required
++    if test $ac_cv_cxx_aware_system = yes; then
++
++      AC_CACHE_CHECK([whether -fpermissive is required], [ac_cv_f_permissive],
++          [AC_LANG_CPLUSPLUS
++          AC_LINK_IFELSE([AC_LANG_PROGRAM([CLICK_LINUXMODULE_PROLOGUE()[
++#include <linux/skbuff.h>]], [[]])], ac_cv_f_permissive=no, ac_cv_f_permissive=yes)])
++
++      if test $ac_cv_f_permissive = yes; then
++          CXX="$KERNEL_CXX -fpermissive"
++          AC_CACHE_CHECK([whether -fpermissive is allowed], [ac_cv_f_permissive_ok],
++              [AC_LANG_CPLUSPLUS
++              AC_LINK_IFELSE([AC_LANG_PROGRAM([CLICK_LINUXMODULE_PROLOGUE()[
++#include <linux/skbuff.h>]], [[]])], ac_cv_f_permissive_ok=yes, ac_cv_f_permissive_ok=no)])
++
++          if test $ac_cv_f_permissive_ok = no; then
++              ac_cv_cxx_aware_system=no
++          else
++              KERNEL_CXX="$KERNEL_CXX -fpermissive"
++          fi
++      fi
++    fi
++
++
++    AC_CACHE_CHECK([whether long and int64_t are the same type in the Linux kernel],
++      ac_cv_long_64_linuxmodule, [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([CLICK_LINUXMODULE_PROLOGUE()[
++#include <linux/types.h>
++void f1(long) {
++}
++void f1(int64_t) { // will fail if long and int64_t are the same type
++}]], [[]])], ac_cv_long_64_linuxmodule=no, ac_cv_long_64_linuxmodule=yes)])
++    if test $ac_cv_long_64_linuxmodule = yes; then
++      AC_DEFINE([HAVE_INT64_IS_LONG_LINUXMODULE], [1], [Define if 'int64_t' is typedefed to 'long' in linuxmodule.])
++    fi
++
++
++    AC_CACHE_CHECK([whether long long and int64_t are the same type in the Linux kernel],
++      ac_cv_long_long_64_linuxmodule, [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([CLICK_LINUXMODULE_PROLOGUE()[
++#include <linux/types.h>
++void f1(long long) {
++}
++void f1(int64_t) { // will fail if long long and int64_t are the same type
++}]], [[]])], ac_cv_long_long_64_linuxmodule=no, ac_cv_long_long_64_linuxmodule=yes)])
++    if test $ac_cv_long_long_64_linuxmodule = yes; then
++      AC_DEFINE([HAVE_INT64_IS_LONG_LONG_LINUXMODULE], [1], [Define if 'int64_t' is typedefed to 'long long' in linuxmodule.])
++    fi
++
++
++    AC_CACHE_CHECK([whether struct sk_buff has a security member], [ac_cv_linuxmodule_skbuff_security],
++      [AC_LANG_C
++      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([CLICK_LINUXMODULE_PROLOGUE()[
++#include <linux/skbuff.h>]],
++[[extern struct sk_buff *s; s->security = 0;]])], 
++      [ac_cv_linuxmodule_skbuff_security=yes], [ac_cv_linuxmodule_skbuff_security=no])])
++    if test $ac_cv_linuxmodule_skbuff_security = yes; then
++      AC_DEFINE([HAVE_LINUX_SKBUFF_SECURITY], [1], [Define if 'struct sk_buff' has a 'security' member.])
++    fi
++
++    AC_CACHE_CHECK([whether struct sk_buff has an fclone member], [ac_cv_linuxmodule_skbuff_fclone],
++      [AC_LANG_C
++      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([CLICK_LINUXMODULE_PROLOGUE()[
++#include <linux/skbuff.h>]],
++[[extern struct sk_buff *s; s->fclone = 0;]])], 
++      [ac_cv_linuxmodule_skbuff_fclone=yes], [ac_cv_linuxmodule_skbuff_fclone=no])])
++    if test $ac_cv_linuxmodule_skbuff_fclone = yes; then
++      AC_DEFINE([HAVE_LINUX_SKBUFF_FCLONE], [1], [Define if 'struct sk_buff' has an 'fclone' member.])
++    fi
++
++    AC_CACHE_CHECK([whether skb_shinfo has a tso_size member], [ac_cv_linuxmodule_skb_shinfo_tso_size],
++      [AC_LANG_C
++      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([CLICK_LINUXMODULE_PROLOGUE()[
++#include <linux/skbuff.h>]],
++[[extern struct sk_buff *s; skb_shinfo(s)->tso_size = 0;]])],
++      [ac_cv_linuxmodule_skb_shinfo_tso_size=yes], [ac_cv_linuxmodule_skb_shinfo_tso_size=no])])
++    if test $ac_cv_linuxmodule_skb_shinfo_tso_size = yes; then
++      AC_DEFINE([HAVE_LINUX_SKB_SHINFO_TSO_SIZE], [1], [Define if 'struct skb_shared_info' has a 'tso_size' member.])
++    fi
++
++    AC_CACHE_CHECK([whether skb_shinfo has a gso_size member], [ac_cv_linuxmodule_skb_shinfo_gso_size],
++      [AC_LANG_C
++      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([CLICK_LINUXMODULE_PROLOGUE()[
++#include <linux/skbuff.h>]],
++[[extern struct sk_buff *s; skb_shinfo(s)->gso_size = 0;]])],
++      [ac_cv_linuxmodule_skb_shinfo_gso_size=yes], [ac_cv_linuxmodule_skb_shinfo_gso_size=no])])
++    if test $ac_cv_linuxmodule_skb_shinfo_gso_size = yes; then
++      AC_DEFINE([HAVE_LINUX_SKB_SHINFO_GSO_SIZE], [1], [Define if 'struct skb_shared_info' has a 'gso_size' member.])
++    fi
++
++    AC_CACHE_CHECK([whether skb_shinfo has a ufo_size member], [ac_cv_linuxmodule_skb_shinfo_ufo_size],
++      [AC_LANG_C
++      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([CLICK_LINUXMODULE_PROLOGUE()[
++#include <linux/skbuff.h>]],
++[[extern struct sk_buff *s; skb_shinfo(s)->ufo_size = 0;]])],
++      [ac_cv_linuxmodule_skb_shinfo_ufo_size=yes], [ac_cv_linuxmodule_skb_shinfo_ufo_size=no])])
++    if test $ac_cv_linuxmodule_skb_shinfo_ufo_size = yes; then
++      AC_DEFINE([HAVE_LINUX_SKB_SHINFO_UFO_SIZE], [1], [Define if 'struct skb_shared_info' has a 'ufo_size' member.])
++    fi
++
++    AC_CACHE_CHECK([whether skb_shinfo has an ip6_frag_id member], [ac_cv_linuxmodule_skb_shinfo_ip6_frag_id],
++      [AC_LANG_C
++      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([CLICK_LINUXMODULE_PROLOGUE()[
++#include <linux/skbuff.h>]],
++[[extern struct sk_buff *s; skb_shinfo(s)->ip6_frag_id = 0;]])],
++      [ac_cv_linuxmodule_skb_shinfo_ip6_frag_id=yes], [ac_cv_linuxmodule_skb_shinfo_ip6_frag_id=no])])
++    if test $ac_cv_linuxmodule_skb_shinfo_ip6_frag_id = yes; then
++      AC_DEFINE([HAVE_LINUX_SKB_SHINFO_IP6_FRAG_ID], [1], [Define if 'struct skb_shared_info' has an 'ip6_frag_id' member.])
++    fi
++
++    AC_LANG_C
++    AC_CHECK_DECL(net_enable_timestamp, [ac_cv_net_enable_timestamp=yes], [ac_cv_net_enable_timestamp=no], [CLICK_LINUXMODULE_PROLOGUE()[
++#include <linux/skbuff.h>
++#include <linux/netdevice.h>]])
++    if test $ac_cv_net_enable_timestamp = yes; then
++      AC_DEFINE([HAVE_NET_ENABLE_TIMESTAMP], [1], [Define if you have the 'net_enable_timestamp' function.])
++    fi
++
++    AC_CHECK_DECL(netif_tx_lock, [ac_cv_netif_tx_lock=yes], [ac_cv_netif_tx_lock=no], [CLICK_LINUXMODULE_PROLOGUE()[
++#include <linux/skbuff.h>
++#include <linux/netdevice.h>]])
++    if test $ac_cv_netif_tx_lock = yes; then
++      AC_DEFINE([HAVE_NETIF_TX_LOCK], [1], [Define if you have the 'netif_tx_lock' function.])
++    fi
++
++
++    CXX="$SAVE_CXX"
++    CPPFLAGS="$saveflags"
++
++    if test $ac_cv_cxx_aware_system = yes; then
++      DRIVERS="$DRIVERS linuxmodule"
++      TOOL_TARGETS="$TOOL_TARGETS click-install"
++      AC_DEFINE(HAVE_LINUXMODULE_DRIVER)
++      HAVE_LINUXMODULE_DRIVER=1
++    elif test x$enable_linuxmodule_default = xyes; then
++      AC_MSG_WARN([
++=========================================
++
++Your Linux kernel header files cause errors when included by a C++ program,
++so I won't try to compile the linuxmodule driver.
++
++There are two common reasons for this error:
++1. You have not applied the Linux kernel patch that comes with this
++   distribution.  Apply the right patch and try again.  See the INSTALL
++   file for more information.
++2. Your Linux configuration enables some functionality that is not yet
++   covered by our patches.  Turn off this functionality and try again,
++   or fix the error and tell us how you did it.  See the config.log file
++   for more detailed information on the error.
++
++=========================================])
++    else
++      AC_MSG_ERROR([
++=========================================
++
++Your Linux kernel header files cause errors when included by a C++ program.
++
++There are two common reasons for this error:
++1. You have not applied the Linux kernel patch that comes with this
++   distribution.  Apply the right patch and try again.  See the INSTALL
++   file for more information.
++2. Your Linux configuration enables some functionality that is not yet
++   covered by our patches.  Turn off this functionality and try again,
++   or fix the error and tell us how you did it.  See the config.log file
++   for more detailed information on the error.
++
++=========================================])
++    fi
++fi
++
++
++dnl check bsdmodule for BSD
++
++if test $ac_have_bsd_kernel = y; then
++    DRIVERS="$DRIVERS bsdmodule"
++    if echo "$DRIVERS" | grep linuxmodule >/dev/null 2>&1; then :; else
++      TOOL_TARGETS="$TOOL_TARGETS click-install"
++    fi
++    AC_DEFINE(HAVE_BSDMODULE_DRIVER)
++    HAVE_BSDMODULE_DRIVER=1
++fi
++
++
++dnl check ns
++
++if test "x$enable_nsclick" = xyes; then
++    DRIVERS="$DRIVERS ns"
++fi
++
++
++dnl check tools
++
++if test "x$enable_tools" != xno; then
++    OTHER_TARGETS="$OTHER_TARGETS tools"
++fi
++
++
++dnl
++dnl programs needed for build process
++dnl
++
++CLICK_PROG_INSTALL
++CLICK_PROG_GMAKE
++CLICK_PROG_AUTOCONF
++CLICK_PROG_PERL5
++
++if test -z "$GMAKE"; then
++    AC_MSG_ERROR([
++==============================================
++
++Can't find GNU make.  Either put 'gmake' on your PATH and
++rerun './configure', or set the GMAKE environment variable to
++GNU make's pathname.
++
++==============================================])
++fi
++
++
++dnl
++dnl Makeinfo, texi2dvi, install-info, pod2man
++dnl
++
++AC_MSG_CHECKING(for working makeinfo)
++MAKEINFO=${MAKEINFO-makeinfo}
++if ($MAKEINFO --version) < /dev/null > conftest.out 2>&1; then
++    if test `head -n 1 conftest.out | sed 's/^.* \([[0-9]][[0-9]]*\).*$/\1/'` -ge 4; then
++      AC_MSG_RESULT(found)
++    else
++      MAKEINFO='$(conf_auxdir)/missing makeinfo'
++      AC_MSG_RESULT(old)
++    fi
++else
++    MAKEINFO='$(conf_auxdir)/missing makeinfo'
++    AC_MSG_RESULT(missing)
++fi
++
++AC_MSG_CHECKING(for working texi2dvi)
++TEXI2DVI=${TEXI2DVI-texi2dvi}
++if ($TEXI2DVI --version) < /dev/null > conftest.out 2>&1; then
++    dnl Search for a good version of texi2dvi
++    if test `head -n 1 conftest.out | sed 's/.*Texinfo \([[0-9]][[0-9]]*\).*/\1/'` -ge 4; then
++      AC_MSG_RESULT(found)
++    else
++      TEXI2DVI='$(conf_auxdir)/missing texi2dvi'
++      AC_MSG_RESULT(old)
++    fi
++else
++    TEXI2DVI='$(conf_auxdir)/missing texi2dvi'
++    AC_MSG_RESULT(missing)
++fi
++
++dnl Assume any version of install-info is OK
++if test ${INSTALL_INFO-xxx} = xxx; then
++    AC_PATH_PROG(INSTALL_INFO, install-info, '$(conf_auxdir)/missing install-info',
++      $PATH:/sbin:/usr/sbin:/usr/local/sbin)
++fi
++AC_MSG_CHECKING(for working install-info)
++if ($INSTALL_INFO --version) < /dev/null > conftest.out 2>&1; then
++    AC_MSG_RESULT(found)
++else
++    INSTALL_INFO='$(conf_auxdir)/missing install-info'
++    AC_MSG_RESULT(missing)
++fi
++
++AC_MSG_CHECKING(for working pod2man)
++POD2MAN=${POD2MAN-pod2man}
++if ($POD2MAN --help) < /dev/null > conftest.out 2>&1 && grep pod2man conftest.out >/dev/null 2>&1; then
++    AC_MSG_RESULT(found)
++else
++    POD2MAN='$(conf_auxdir)/missing pod2man'
++    AC_MSG_RESULT(missing)
++fi
++
++
++AC_SUBST(MAKEINFO)
++AC_SUBST(TEXI2DVI)
++AC_SUBST(INSTALL_INFO)
++AC_SUBST(POD2MAN)
++
++
++dnl
++dnl set path variables
++dnl
++
++shell_expand () {
++    val=`eval echo '$'"$1"`
++    while echo "x$val" | fgrep '$' >/dev/null 2>&1; do val=`eval echo "$val"`; done
++    eval "$1='$val'"
++}
++
++dnl Preset $prefix and $exec_prefix.
++test "x$prefix" = xNONE && prefix=$ac_default_prefix
++test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
++
++dnl Expand 'infodir' to check for Red Hat
++if test x$infodir = 'x${prefix}/info'; then
++    test ! -d ${prefix}/info && test -d ${prefix}/share/info && infodir='${prefix}/share/info'
++fi
++
++shell_expand bindir
++shell_expand sbindir
++shell_expand libdir
++shell_expand datarootdir
++shell_expand datadir
++shell_expand includedir
++
++clickdatadir="$datadir/click"
++AC_SUBST(clickdatadir)
++
++AC_DEFINE_UNQUOTED(CLICK_BINDIR, "$bindir")
++AC_DEFINE_UNQUOTED(CLICK_LIBDIR, "$libdir")
++AC_DEFINE_UNQUOTED(CLICK_DATADIR, "$clickdatadir")
++
++
++dnl
++dnl Provisions
++dnl
++
++dnl start out with CPU
++provisions="$target_cpu"
++case "$target_cpu" in
++    i386) :;;
++    i486|i586) provisions="$provisions i386";;
++    i686|i786) provisions="$provisions i386 i586";;
++esac
++
++dnl add 'analysis' if analysis elements are available
++if test "x$enable_analysis" = xyes; then
++    provisions="$provisions analysis"
++fi
++
++dnl add 'experimental' if --enable-experimental was supplied
++if test "x$enable_experimental" = xyes; then
++    provisions="$provisions experimental"
++fi
++
++dnl add 'int64' if 64-bit integers are available
++if test "x$have_int64_types" = xyes; then
++    provisions="$provisions int64"
++fi
++
++dnl add 'ip6' if ip6 elements are available
++if test "x$enable_ip6" = xyes; then
++    provisions="$provisions ip6"
++fi
++
++dnl add 'linux' if compiling under linux
++if test "x$ac_cv_under_linux" = xyes; then
++    provisions="$provisions linux"
++fi
++
++dnl add provision for linux kernel version
++if test $ac_have_linux_kernel = y; then
++    ac_linux_version_code=`grep LINUX_VERSION_CODE $linuxdir/include/linux/version.h | sed 's/^.*CODE //'`
++    if test $ac_linux_version_code -ge 131584 -a $ac_linux_version_code -lt 131840; then
++      provisions="$provisions linux_2_2"
++    elif test $ac_linux_version_code -ge 132096 -a $ac_linux_version_code -lt 132352; then
++      provisions="$provisions linux_2_4"
++    elif test $ac_linux_version_code -ge 132608 -a $ac_linux_version_code -lt 132864; then
++      provisions="$provisions linux_2_6"
++    fi
++fi
++
++dnl add 'pcap' if libpcap is available
++if test "x$HAVE_PCAP" = xyes; then
++    provisions="$provisions pcap"
++fi
++
++dnl add 'smpclick' if compiled with --enable-multithread > 1
++if test "$enable_multithread" -gt 1; then
++    provisions="$provisions smpclick"
++fi
++
++dnl add 'umultithread' if compiled with --enable-user-multithread
++if test "x$enable_user_multithread" = xyes; then
++    provisions="$provisions umultithread"
++fi
++
++dnl add 'wifi' if wifi elements are available
++if test "x$enable_wifi" = xyes; then
++    provisions="$provisions wifi"
++fi
++
++AC_SUBST(provisions)
++
++dnl
++dnl Output
++dnl
++
++config_files="Makefile click-buildtool click-compile config.mk installch tools/Makefile tools/lib/Makefile doc/Makefile etc/libclick/Makefile etc/pkg-config.mk"
++for ac_dir in $POSSIBLE_DRIVERS; do
++    config_files="$config_files $ac_dir/Makefile"
++done
++for ac_dir in $TOOLDIRS; do
++    config_files="$config_files tools/$ac_dir/Makefile"
++done
++for ac_dir in etc include; do
++    test ! -d "$ac_dir" && mkdir "$ac_dir"
++done
++
++AC_OUTPUT_COMMANDS([for ac_file in $CONFIG_HEADERS; do
++    test $ac_file = include/click/config.h:config.h.in && echo > stamp-h
++done
++for ac_file in $CONFIG_FILES; do
++    test $ac_file = click-buildtool && chmod +x click-buildtool
++    test $ac_file = click-compile && chmod +x click-compile
++    test $ac_file = installch && chmod +x installch
++done])
++AC_OUTPUT($config_files)
+diff -Nurb click-1.6.0/diff click-1.6.0-27/diff
+--- click-1.6.0/diff   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/diff        2009-01-26 14:37:19.000000000 -0500
+@@ -0,0 +1,780 @@
++--- ./lib/string.cc.orig      2007-09-09 23:45:30.000000000 -0400
+++++ ./lib/string.cc   2009-01-20 16:09:36.000000000 -0500
++@@ -17,6 +17,7 @@
++  * legally binding.
++  */
++ 
+++#include <linux/autoconf.h>
++ #include <click/config.h>
++ #include <click/string.hh>
++ #include <click/straccum.hh>
++--- ./lib/straccum.cc.orig    2007-08-28 01:08:36.000000000 -0400
+++++ ./lib/straccum.cc 2009-01-20 20:23:30.000000000 -0500
++@@ -17,6 +17,7 @@
++  * legally binding.
++  */
++ 
+++#include <linux/autoconf.h>
++ #include <click/config.h>
++ #include <click/straccum.hh>
++ #include <click/string.hh>
++--- ./lib/ino.cc.orig 2007-09-11 15:39:22.000000000 -0400
+++++ ./lib/ino.cc      2009-01-20 22:34:50.000000000 -0500
++@@ -34,6 +34,16 @@
++     _generation = 0;
++ }
++ 
+++#define DT_UNKNOWN      0
+++#define DT_FIFO         1
+++#define DT_CHR          2
+++#define DT_DIR          4
+++#define DT_BLK          6
+++#define DT_REG          8
+++#define DT_LNK          10
+++#define DT_SOCK         12
+++#define DT_WHT          14
+++
++ void
++ ClickIno::cleanup()
++ {
++--- ./lib/bitvector.cc.orig   2007-07-16 19:47:50.000000000 -0400
+++++ ./lib/bitvector.cc        2009-01-20 22:28:27.000000000 -0500
++@@ -17,6 +17,7 @@
++  * legally binding.
++  */
++ 
+++#include <linux/autoconf.h>
++ #include <click/config.h>
++ #include <click/bitvector.hh>
++ CLICK_DECLS
++--- ./lib/nameinfo.cc.orig    2007-07-16 19:47:50.000000000 -0400
+++++ ./lib/nameinfo.cc 2009-01-20 20:24:08.000000000 -0500
++@@ -16,6 +16,7 @@
++  * legally binding.
++  */
++ 
+++#include <linux/autoconf.h>
++ #include <click/config.h>
++ #include <click/nameinfo.hh>
++ #include <click/glue.hh>
++--- ./include/clicknet/ip.h.orig      2007-07-16 19:47:50.000000000 -0400
+++++ ./include/clicknet/ip.h   2009-01-19 16:01:43.000000000 -0500
++@@ -5,6 +5,7 @@
++ #include <click/cxxprotect.h>
++ CLICK_CXX_PROTECT
++ #if CLICK_LINUXMODULE
+++#include <linux/autoconf.h>
++ # include <net/checksum.h>
++ # include <linux/in.h>
++ #else
++--- ./include/click/glue.hh.orig      2007-09-12 18:24:50.000000000 -0400
+++++ ./include/click/glue.hh   2009-01-19 16:05:45.000000000 -0500
++@@ -15,6 +15,7 @@
++ # endif
++ # include <click/cxxprotect.h>
++ CLICK_CXX_PROTECT
+++#include <linux/autoconf.h>
++ # ifdef WANT_MOD_USE_COUNT
++ #  define __NO_VERSION__
++ #  include <linux/module.h>
++--- ./include/click/packet.hh.orig    2007-09-07 16:11:26.000000000 -0400
+++++ ./include/click/packet.hh 2009-01-20 22:21:20.000000000 -0500
++@@ -1,6 +1,7 @@
++ // -*- related-file-name: "../../lib/packet.cc" -*-
++ #ifndef CLICK_PACKET_HH
++ #define CLICK_PACKET_HH
+++#include <linux/autoconf.h>
++ #include <click/ipaddress.hh>
++ #include <click/ip6address.hh>
++ #include <click/glue.hh>
++@@ -452,7 +453,7 @@
++ Packet::mac_header() const
++ {
++ #if CLICK_LINUXMODULE
++-    return skb()->mac.raw;
+++    return skb_mac_header(skb());
++ #else
++     return _mac;
++ #endif
++@@ -462,7 +463,7 @@
++ Packet::network_header() const
++ {
++ #if CLICK_LINUXMODULE
++-    return skb()->nh.raw;
+++    return skb_network_header(skb());
++ #else
++     return _nh;
++ #endif
++@@ -472,7 +473,7 @@
++ Packet::transport_header() const
++ {
++ #if CLICK_LINUXMODULE
++-    return skb()->h.raw;
+++    return skb_transport_header(skb());
++ #else
++     return _h;
++ #endif
++@@ -567,7 +568,7 @@
++ # if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 13)
++     memcpy(&skb()->stamp, &timestamp, 8);
++ # else
++-    skb_set_timestamp(skb(), &timestamp.timeval());
+++    memcpy(&skb()->tstamp, &timestamp, 8);
++ # endif
++ #else
++     _timestamp = timestamp;
++@@ -904,7 +905,7 @@
++ Packet::set_mac_header(const unsigned char *h)
++ {
++ #if CLICK_LINUXMODULE        /* Linux kernel module */
++-    skb()->mac.raw = const_cast<unsigned char *>(h);
+++    skb()->mac_header = const_cast<unsigned char *>(h);
++ #else                                /* User-space and BSD kernel module */
++     _mac = const_cast<unsigned char *>(h);
++ #endif
++@@ -914,8 +915,8 @@
++ Packet::set_mac_header(const unsigned char *h, uint32_t len)
++ {
++ #if CLICK_LINUXMODULE        /* Linux kernel module */
++-    skb()->mac.raw = const_cast<unsigned char *>(h);
++-    skb()->nh.raw = const_cast<unsigned char *>(h) + len;
+++    skb()->mac_header = const_cast<unsigned char *>(h);
+++    skb()->network_header = const_cast<unsigned char *>(h) + len;
++ #else                                /* User-space and BSD kernel module */
++     _mac = const_cast<unsigned char *>(h);
++     _nh = const_cast<unsigned char *>(h) + len;
++@@ -956,8 +957,8 @@
++ Packet::set_network_header(const unsigned char *h, uint32_t len)
++ {
++ #if CLICK_LINUXMODULE        /* Linux kernel module */
++-    skb()->nh.raw = const_cast<unsigned char *>(h);
++-    skb()->h.raw = const_cast<unsigned char *>(h) + len;
+++    skb()->network_header = const_cast<unsigned char *>(h);
+++    skb()->transport_header = const_cast<unsigned char *>(h) + len;
++ #else                                /* User-space and BSD kernel module */
++     _nh = const_cast<unsigned char *>(h);
++     _h = const_cast<unsigned char *>(h) + len;
++@@ -968,7 +969,7 @@
++ Packet::set_network_header_length(uint32_t len)
++ {
++ #if CLICK_LINUXMODULE        /* Linux kernel module */
++-    skb()->h.raw = skb()->nh.raw + len;
+++    skb()->transport_header = skb()->network_header + len;
++ #else                                /* User-space and BSD kernel module */
++     _h = _nh + len;
++ #endif
++@@ -1076,9 +1077,9 @@
++   _h += (_h ? shift : 0);
++ #else
++   struct sk_buff *mskb = skb();
++-  mskb->mac.raw += (mskb->mac.raw ? shift : 0);
++-  mskb->nh.raw += (mskb->nh.raw ? shift : 0);
++-  mskb->h.raw += (mskb->h.raw ? shift : 0);
+++  mskb->mac_header += (mskb->mac_header ? shift : 0);
+++  mskb->network_header += (mskb->network_header ? shift : 0);
+++  mskb->transport_header += (mskb->transport_header ? shift : 0);
++ #endif
++ }
++ 
++--- ./include/click/config-linuxmodule.h.orig 2009-01-19 15:07:24.000000000 -0500
+++++ ./include/click/config-linuxmodule.h      2009-01-20 22:30:23.000000000 -0500
++@@ -87,12 +87,13 @@
++ #endif
++ 
++ /* Include integer type definitions. */
+++# include <linux/autoconf.h>
++ #if !HAVE_LINUXMODULE_2_6
++ # include <linux/autoconf.h>
++ #endif
++ #include <linux/types.h>
++ typedef ptrdiff_t intptr_t;
++-typedef unsigned long uintptr_t; /* XXX? */
+++//typedef unsigned long uintptr_t; /* XXX? */
++ 
++ /* Define HAVE_INT64_IS_LONG based on HAVE_INT64_IS_LONG_LINUXMODULE. */
++ #ifdef HAVE_INT64_IS_LONG_LINUXMODULE
++@@ -114,11 +115,11 @@
++ #ifdef __cplusplus
++ 
++ /* Declare operator new. */
++-void *operator new(size_t) throw ();
++-void *operator new[](size_t) throw ();
+++void *operator new(unsigned int) throw ();
+++void *operator new[](unsigned int) throw ();
++ 
++ /* Provide placement new. */
++-inline void *operator new(size_t, void *v) { return v; }
+++inline void *operator new(unsigned int, void *v) { return v; }
++ #define HAVE_PLACEMENT_NEW 1
++ 
++ /* Define macros that surround Click declarations. */
++--- ./linuxmodule/Makefile.orig       2009-01-19 15:15:55.000000000 -0500
+++++ ./linuxmodule/Makefile    2009-01-20 10:22:39.000000000 -0500
++@@ -95,7 +95,7 @@
++ 
++ CLICKDEFS = -DHAVE_CONFIG_H 
++ CLICKINCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
++-     -I$(srcdir) -I$(top_srcdir) -I$(linuxdir)/include
+++     -I$(srcdir) -I$(top_srcdir) -I$(linuxdir)/include -I$(linuxdir)/include/asm/mach-default
++ 
++ CXXCOMPILE = $(CLICKCXX) $(LINUXCFLAGS) $(CLICKCPPFLAGS) $(CLICKCFLAGS) \
++      $(CLICKCXXFLAGS) $(CLICKDEFS) $(CLICKINCLUDES) $(CLICKDEPCFLAGS)
++@@ -177,7 +177,7 @@
++ 
++ CC = gcc -w -W -Wall
++ CPP = gcc -W -Wall -E
++-CXX = g++ -w -W -Wall -fno-exceptions -fno-rtti  -D__SMP__
+++CXX = g++ -w -W -fno-exceptions -fno-rtti  -D__SMP__
++ CXXCPP = g++ -W -Wall  -E
++ LD = ld
++ STRIP = strip
++--- ./elements/linuxmodule/anydevice.cc.orig  2007-08-29 04:03:55.000000000 -0400
+++++ ./elements/linuxmodule/anydevice.cc       2009-01-21 14:44:39.000000000 -0500
++@@ -49,7 +49,7 @@
++ int
++ AnyDevice::find_device(AnyDeviceMap *adm, ErrorHandler *errh)
++ {
++-    _dev = dev_get_by_name(_devname.c_str());
+++    _dev = dev_get_by_name(&init_net,_devname.c_str());
++     _devname_exists = (bool) _dev;
++     if (!_dev)
++      _dev = dev_get_by_ether_address(_devname, this);
++@@ -233,7 +233,7 @@
++      return 0;
++     read_lock(&dev_base_lock);
++     net_device *dev;
++-    for (dev = dev_base; dev; dev = dev->next)
+++    for_each_netdev(&init_net, dev)//for (dev = dev_base; dev; dev = dev->next)
++      if ((dev->type == ARPHRD_ETHER || dev->type == ARPHRD_80211)
++          && memcmp(en, dev->dev_addr, 6) == 0) {
++          dev_hold(dev);      // dev_get_by_name does dev_hold; so
++--- ./elements/standard/addressinfo.cc.orig   2007-09-12 02:14:04.000000000 -0400
+++++ ./elements/standard/addressinfo.cc        2009-01-21 13:08:40.000000000 -0500
++@@ -272,7 +272,7 @@
++     // if it's a device name, return a primary IP address
++ #if CLICK_LINUXMODULE
++ # if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0)
++-    net_device *dev = dev_get_by_name(s.c_str());
+++    net_device *dev = dev_get_by_name(&init_net,s.c_str());
++     if (dev) {
++      bool found = false;
++      in_device *in_dev = in_dev_get(dev);
++@@ -383,7 +383,7 @@
++ # if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 0)
++ #  define dev_put(dev) /* nada */
++ # endif
++-    net_device *dev = dev_get_by_name(s.c_str());
+++    net_device *dev = dev_get_by_name(&init_net,s.c_str());
++     if (dev && (dev->type == ARPHRD_ETHER || dev->type == ARPHRD_80211)) {
++      memcpy(store, dev->dev_addr, 6);
++      dev_put(dev);
++--- ./drivers/e1000-4.x/src/e1000_param.c.orig        2007-07-16 19:47:50.000000000 -0400
+++++ ./drivers/e1000-4.x/src/e1000_param.c     2007-07-16 19:47:50.000000000 -0400
++@@ -362,7 +362,7 @@
++                      type: list_option,
++                      name: "Flow Control",
++                      err:  "reading default settings from EEPROM",
++-                     def:  e1000_fc_default,
+++                     def:  e1000_fc_none, /* RTM, was e1000_fc_default */
++                      arg: { l: { nr: ARRAY_SIZE(fc_list), p: fc_list }}
++              };
++ 
++--- ./drivers/e1000-4.x/src/e1000.h.orig      2007-07-16 19:47:50.000000000 -0400
+++++ ./drivers/e1000-4.x/src/e1000.h   2007-07-16 19:47:50.000000000 -0400
++@@ -150,6 +150,8 @@
++ 
++ #define E1000_DESC_UNUSED(R) \
++ ((((R)->next_to_clean + (R)->count) - ((R)->next_to_use + 1)) % ((R)->count))
+++#define E1000_RX_DESC_UNUSED(R) \
+++((((R)->next_to_clean + (R)->count) - ((R)->next_to_use)) % ((R)->count))
++ 
++ #define E1000_GET_DESC(R, i, type)   (&(((struct type *)((R).desc))[i]))
++ #define E1000_RX_DESC(R, i)          E1000_GET_DESC(R, i, e1000_rx_desc)
++@@ -240,5 +242,7 @@
++ 
++      /* Semaphore for locking HW access vs. i2c-i8254x SMBUS driver */
++      struct semaphore smbus_lock;
+++
+++        int do_poll_watchdog; /* Click polling */
++ };
++ #endif /* _E1000_H_ */
++--- ./drivers/e1000-4.x/src/e1000_main.c.orig 2007-07-16 19:47:50.000000000 -0400
+++++ ./drivers/e1000-4.x/src/e1000_main.c      2007-07-16 19:47:50.000000000 -0400
++@@ -146,6 +146,7 @@
++ static void e1000_set_multi(struct net_device *netdev);
++ static void e1000_update_phy_info(unsigned long data);
++ static void e1000_watchdog(unsigned long data);
+++void e1000_watchdog_1(struct e1000_adapter *adapter);
++ static int e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev);
++ static struct net_device_stats * e1000_get_stats(struct net_device *netdev);
++ static int e1000_change_mtu(struct net_device *netdev, int new_mtu);
++@@ -181,6 +182,16 @@
++ static int e1000_resume(struct pci_dev *pdev);
++ #endif
++ 
+++/* For Click polling */
+++static int e1000_tx_pqueue(struct net_device *dev, struct sk_buff *skb);
+++static int e1000_tx_start(struct net_device *dev);
+++static int e1000_rx_refill(struct net_device *dev, struct sk_buff **);
+++static int e1000_tx_eob(struct net_device *dev);
+++static struct sk_buff *e1000_tx_clean(struct net_device *dev);
+++static struct sk_buff *e1000_rx_poll(struct net_device *dev, int *want);
+++static int e1000_poll_on(struct net_device *dev);
+++static int e1000_poll_off(struct net_device *dev);
+++
++ struct notifier_block e1000_notifier = {
++      notifier_call:  e1000_notify_reboot,
++      next:           NULL,
++@@ -231,6 +242,8 @@
++      printk(KERN_INFO "%s - version %s\n",
++             e1000_driver_string, e1000_driver_version);
++ 
+++        printk(KERN_INFO " w/ Click polling\n");
+++
++      printk(KERN_INFO "%s\n", e1000_copyright);
++ 
++      ret = pci_module_init(&e1000_driver);
++@@ -416,6 +429,17 @@
++      netdev->vlan_rx_kill_vid = e1000_vlan_rx_kill_vid;
++ #endif
++ 
+++        /* Click - polling extensions */
+++        netdev->polling = 0;
+++        netdev->rx_poll = e1000_rx_poll;
+++        netdev->rx_refill = e1000_rx_refill;
+++        netdev->tx_queue = e1000_tx_pqueue;
+++        netdev->tx_eob = e1000_tx_eob;
+++        netdev->tx_start = e1000_tx_start;
+++        netdev->tx_clean = e1000_tx_clean;
+++        netdev->poll_off = e1000_poll_off;
+++        netdev->poll_on = e1000_poll_on;
+++
++      netdev->irq = pdev->irq;
++      netdev->mem_start = mmio_start;
++      netdev->base_addr = adapter->hw.io_base;
++@@ -1303,7 +1327,20 @@
++ static void
++ e1000_watchdog(unsigned long data)
++ {
++-     struct e1000_adapter *adapter = (struct e1000_adapter *) data;
+++  struct e1000_adapter *adapter = (struct e1000_adapter *) data;
+++
+++  if(adapter->netdev->polling){
+++    adapter->do_poll_watchdog = 1;
+++  } else {
+++    e1000_watchdog_1(adapter);
+++  }
+++
+++  mod_timer(&adapter->watchdog_timer, jiffies + 2 * HZ);
+++}
+++
+++void
+++e1000_watchdog_1(struct e1000_adapter *adapter)
+++{
++      struct net_device *netdev = adapter->netdev;
++      struct e1000_desc_ring *txdr = &adapter->tx_ring;
++      int i;
++@@ -1388,9 +1425,6 @@
++         time_after(jiffies, txdr->buffer_info[i].time_stamp + HZ) &&
++         !(E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_TXOFF))
++              netif_stop_queue(netdev);
++-
++-     /* Reset the timer */
++-     mod_timer(&adapter->watchdog_timer, jiffies + 2 * HZ);
++ }
++ 
++ #define E1000_TX_FLAGS_CSUM          0x00000001
++@@ -1893,8 +1927,18 @@
++                      mod_timer(&adapter->watchdog_timer, jiffies);
++              }
++ 
++-             e1000_clean_rx_irq(adapter);
++-             e1000_clean_tx_irq(adapter);
+++             /* 26.Jun.2004 - Do not print a message if we get an interrupt
+++                   in polling mode.  Andy Van Maele reports that e1000
+++                   adapters can share interrupts with other devices, such as
+++                   other network cards.  Thus, it is not necessarily a problem
+++                   if we get an interrupt; and printing a message is very
+++                   expensive. So scrap it.  It might be better to keep a
+++                   counter. */
+++                if(!netdev->polling){
+++                  e1000_clean_rx_irq(adapter);
+++                  e1000_clean_tx_irq(adapter);
+++                }
+++
++              i--;
++ 
++ #ifdef E1000_COUNT_ICR
++@@ -2533,4 +2577,335 @@
++      return ret_val;
++ }
++ 
+++/* Click polling support */
+++
+++static struct sk_buff *
+++e1000_rx_poll(struct net_device *dev, int *want)
+++{
+++  struct e1000_adapter *adapter = dev->priv;
+++  struct pci_dev *pdev = adapter->pdev;
+++  struct e1000_rx_desc *rx_desc;
+++  int i;
+++  uint32_t length;
+++  struct sk_buff *skb;
+++  uint8_t last_byte;
+++  unsigned long flags;
+++  struct sk_buff *skb_head = 0, *skb_last = 0;
+++  int good;
+++  int got = 0;
+++
+++  i = adapter->rx_ring.next_to_clean;
+++  rx_desc = E1000_RX_DESC(adapter->rx_ring, i);
+++
+++  while(got < *want){
+++    if((rx_desc->status & E1000_RXD_STAT_DD) == 0)
+++      break;
+++    pci_unmap_single(pdev, adapter->rx_ring.buffer_info[i].dma,
+++                     adapter->rx_ring.buffer_info[i].length,
+++                     PCI_DMA_FROMDEVICE);
+++
+++    skb = adapter->rx_ring.buffer_info[i].skb;
+++    length = le16_to_cpu(rx_desc->length);
+++    good = 1;
+++
+++    if(!(rx_desc->status & E1000_RXD_STAT_EOP))
+++      good = 0;
+++    
+++    if(good && (rx_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK)){
+++      last_byte = *(skb->data + length - 1);
+++      if(TBI_ACCEPT(&adapter->hw,rx_desc->status,rx_desc->errors,length,
+++                    last_byte)) {
+++        spin_lock_irqsave(&adapter->stats_lock, flags);
+++        e1000_tbi_adjust_stats(&adapter->hw, &adapter->stats,
+++                               length, skb->data);
+++        spin_unlock_irqrestore(&adapter->stats_lock, flags);
+++        length--;
+++      } else {
+++        good = 0;
+++      }
+++    }
+++
+++    if(good){
+++      skb_put(skb, length - CRC_LENGTH);
+++      e1000_rx_checksum(adapter, rx_desc, skb);
+++      skb_pull(skb, dev->hard_header_len);
+++      if (got == 0) {
+++        skb_head = skb;
+++        skb_last = skb;
+++        skb_last->next = NULL;
+++      } else {
+++        skb_last->next = skb;
+++        skb->next = NULL;
+++        skb_last = skb;
+++      }
+++      got++;
+++    } else {
+++      dev_kfree_skb(skb);
+++    }
+++    
+++#if 0
+++    memset(rx_desc, 0, 16);
+++#endif
+++
+++#if 0
+++    /*
+++     * This mb() generates a "lock addl" even on a uniprocessor.
+++     * It's slow (slows down ip forwarding by 15%?) and I do
+++     * not believe it's needed.
+++     */
+++    mb();
+++#endif
+++    adapter->rx_ring.buffer_info[i].skb = NULL;
+++    i = i + 1;
+++    if(i >= adapter->rx_ring.count)
+++      i = 0;
+++    rx_desc = E1000_RX_DESC(adapter->rx_ring, i);
+++  }
+++
+++  adapter->rx_ring.next_to_clean = i;
+++  *want = got;
+++
+++  return skb_head;
+++}
+++
+++int
+++e1000_rx_refill(struct net_device *dev, struct sk_buff **skbs)
+++{
+++  struct e1000_adapter *adapter = dev->priv;
+++  struct pci_dev *pdev = adapter->pdev;
+++  struct e1000_rx_desc *rx_desc;
+++  int i, nfilled = 0, last_filled = -1;
+++  struct sk_buff *skb_list;
+++
+++  if(skbs == 0)
+++    return E1000_RX_DESC_UNUSED(&adapter->rx_ring);
+++
+++  i = adapter->rx_ring.next_to_use;
+++  skb_list = *skbs;
+++  
+++  while(adapter->rx_ring.buffer_info[i].skb == NULL && skb_list){
+++    struct sk_buff *skb = skb_list;
+++    skb_list = skb_list->next;
+++    rx_desc = E1000_RX_DESC(adapter->rx_ring, i);
+++    skb->dev = dev;
+++    adapter->rx_ring.buffer_info[i].skb = skb;
+++    adapter->rx_ring.buffer_info[i].length = adapter->rx_buffer_len;
+++    adapter->rx_ring.buffer_info[i].dma =
+++      pci_map_single(pdev, skb->data, adapter->rx_buffer_len,
+++                     PCI_DMA_FROMDEVICE);
+++    rx_desc->status = 0;
+++    rx_desc->buffer_addr = cpu_to_le64(adapter->rx_ring.buffer_info[i].dma);
+++    last_filled = i;
+++    i = i + 1;
+++    if(i >= adapter->rx_ring.count)
+++      i = 0;
+++    nfilled++;
+++  }
+++
+++  *skbs = skb_list;
+++
+++  adapter->rx_ring.next_to_use = i;
+++  if(nfilled){
+++#if 0
+++    mb();
+++#endif
+++    /*
+++     * Intel driver code sets RDT to last filled slot.
+++     * e1000 manual implies (I think) one beyond.
+++     */
+++    E1000_WRITE_REG(&adapter->hw, RDT, last_filled);
+++  }
+++
+++  /*
+++   * Update statistics counters, check link.
+++   * do_poll_watchdog is set by the timer interrupt e1000_watchdog(),
+++   * but we don't want to do the work in an interrupt (since it may
+++   * happen while polling code is active), so defer it to here.
+++   */
+++  if(adapter->do_poll_watchdog){
+++    adapter->do_poll_watchdog = 0;
+++    e1000_watchdog_1(adapter);
+++  }
+++
+++  return E1000_RX_DESC_UNUSED(&adapter->rx_ring);
+++}
+++
+++static int
+++e1000_tx_pqueue(struct net_device *netdev, struct sk_buff *skb)
+++{
+++  /*
+++   * This function is just a streamlined version of
+++   * return e1000_xmit_frame(skb, netdev);
+++   */
+++
+++  struct e1000_adapter *adapter = netdev->priv;
+++  struct pci_dev *pdev = adapter->pdev;
+++  struct e1000_tx_desc *tx_desc;
+++  int i, len, offset, txd_needed;
+++  uint32_t txd_upper, txd_lower;
+++
+++  if(!netif_carrier_ok(netdev)) {
+++    netif_stop_queue(netdev);
+++    return 1;
+++  }
+++
+++  txd_needed = TXD_USE_COUNT(skb->len, adapter->max_data_per_txd);
+++
+++  /* make sure there are enough Tx descriptors available in the ring */
+++  if(E1000_DESC_UNUSED(&adapter->tx_ring) <= (txd_needed + 1)) {
+++    adapter->net_stats.tx_dropped++;
+++    netif_stop_queue(netdev);
+++    return 1;
+++  }
+++
+++  txd_upper = 0;
+++  txd_lower = adapter->txd_cmd;
+++
+++  if(e1000_tx_csum(adapter, skb)){
+++    txd_lower |= E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
+++    txd_upper |= E1000_TXD_POPTS_TXSM << 8;
+++  }
+++
+++  i = adapter->tx_ring.next_to_use;
+++  tx_desc = E1000_TX_DESC(adapter->tx_ring, i);
+++
+++  len = skb->len;
+++  offset = 0;
+++
+++  adapter->tx_ring.buffer_info[i].length = len;
+++  adapter->tx_ring.buffer_info[i].dma =
+++    pci_map_page(pdev, virt_to_page(skb->data + offset),
+++                 (unsigned long) (skb->data + offset) & ~PAGE_MASK, len,
+++                 PCI_DMA_TODEVICE);
+++
+++  tx_desc->buffer_addr = cpu_to_le64(adapter->tx_ring.buffer_info[i].dma);
+++  tx_desc->lower.data = cpu_to_le32(txd_lower | len);
+++  tx_desc->upper.data = cpu_to_le32(txd_upper);
+++
+++    /* EOP and SKB pointer go with the last fragment */
+++  tx_desc->lower.data |= cpu_to_le32(E1000_TXD_CMD_EOP);
+++  adapter->tx_ring.buffer_info[i].skb = skb;
+++
+++  i = i + 1;
+++  if(i >= adapter->tx_ring.count)
+++    i = 0;
+++
+++  /* Move the HW Tx Tail Pointer */
+++  adapter->tx_ring.next_to_use = i;
+++
+++  netdev->trans_start = jiffies;
+++
+++  return 0;
+++}
+++
+++static int
+++e1000_tx_eob(struct net_device *dev)
+++{
+++  struct e1000_adapter *adapter = dev->priv;
+++  E1000_WRITE_REG(&adapter->hw, TDT, adapter->tx_ring.next_to_use);
+++  return 0;
+++}
+++
+++static int
+++e1000_tx_start(struct net_device *dev)
+++{
+++  /*   printk("e1000_tx_start called\n"); */
+++  e1000_tx_eob(dev);
+++  return 0;
+++}
+++
+++static struct sk_buff *
+++e1000_tx_clean(struct net_device *netdev)
+++{
+++  /*
+++   * This function is a streamlined version of
+++   * return e1000_clean_tx_irq(adapter, 1);
+++   */
+++
+++  struct e1000_adapter *adapter = netdev->priv;
+++  struct pci_dev *pdev = adapter->pdev;
+++  int i;
+++  struct e1000_tx_desc *tx_desc;
+++  struct sk_buff *skb_head, *skb_last;
+++
+++  skb_head = skb_last = 0;
+++
+++  i = adapter->tx_ring.next_to_clean;
+++  tx_desc = E1000_TX_DESC(adapter->tx_ring, i);
+++
+++  while(tx_desc->upper.data & cpu_to_le32(E1000_TXD_STAT_DD)) {
+++    if(adapter->tx_ring.buffer_info[i].dma != 0) {
+++      pci_unmap_page(pdev, adapter->tx_ring.buffer_info[i].dma,
+++                     adapter->tx_ring.buffer_info[i].length,
+++                     PCI_DMA_TODEVICE);
+++      adapter->tx_ring.buffer_info[i].dma = 0;
+++    }
+++
+++    if(adapter->tx_ring.buffer_info[i].skb != NULL) {
+++      struct sk_buff *skb = adapter->tx_ring.buffer_info[i].skb;
+++      if (skb_head == 0) {
+++        skb_head = skb;
+++        skb_last = skb;
+++        skb_last->next = NULL;
+++      } else {
+++        skb_last->next = skb;
+++        skb->next = NULL;
+++        skb_last = skb;
+++      }
+++      adapter->tx_ring.buffer_info[i].skb = NULL;
+++    }
+++    
+++    i = i + 1;
+++    if(i >= adapter->tx_ring.count)
+++      i = 0;
+++
+++    tx_desc->upper.data = 0;
+++    tx_desc = E1000_TX_DESC(adapter->tx_ring, i);
+++  }
+++
+++  adapter->tx_ring.next_to_clean = i;
+++
+++  if(netif_queue_stopped(netdev) &&
+++     (E1000_DESC_UNUSED(&adapter->tx_ring) > E1000_TX_QUEUE_WAKE)) {
+++    netif_start_queue(netdev);
+++  }
+++
+++  return skb_head;
+++}
+++
+++static int
+++e1000_poll_on(struct net_device *dev)
+++{
+++  struct e1000_adapter *adapter = dev->priv;
+++  unsigned long flags;
+++
+++  if (!dev->polling) {
+++    printk("e1000_poll_on\n");
+++
+++    save_flags(flags);
+++    cli();
+++
+++    dev->polling = 2;
+++    e1000_irq_disable(adapter);
+++
+++    restore_flags(flags);
+++  }
+++
+++  return 0;
+++}
+++
+++static int
+++e1000_poll_off(struct net_device *dev)
+++{
+++  struct e1000_adapter *adapter = dev->priv;
+++
+++  if(dev->polling > 0){
+++    dev->polling = 0;
+++    e1000_irq_enable(adapter);
+++    printk("e1000_poll_off\n");
+++  }
+++
+++  return 0;
+++}
+++
++ /* e1000_main.c */
++--- ./drivers/e1000-4.x/src/e1000_idiag.c.orig        2007-07-16 19:47:50.000000000 -0400
+++++ ./drivers/e1000-4.x/src/e1000_idiag.c     2007-07-16 19:47:50.000000000 -0400
++@@ -322,10 +322,12 @@
++      if(rxdr->desc)
++              pci_free_consistent(pdev, rxdr->size, rxdr->desc, rxdr->dma);
++ 
+++#if 0
++      if(txdr->buffer_info)
++              kfree(txdr->buffer_info);
++      if(rxdr->buffer_info)
++              kfree(rxdr->buffer_info);
+++#endif
++ 
++      return;
++ }
++@@ -344,8 +346,10 @@
++      txdr->count = 80;
++ 
++      size = txdr->count * sizeof(struct e1000_buffer);
+++#if 0
++      if(!(txdr->buffer_info = kmalloc(size, GFP_KERNEL)))
++              goto err_nomem;
+++#endif
++      memset(txdr->buffer_info, 0, size);
++ 
++      txdr->size = txdr->count * sizeof(struct e1000_tx_desc);
++@@ -393,8 +397,10 @@
++      rxdr->count = 80;
++ 
++      size = rxdr->count * sizeof(struct e1000_buffer);
+++#if 0
++      if(!(rxdr->buffer_info = kmalloc(size, GFP_KERNEL)))
++              goto err_nomem;
+++#endif
++      memset(rxdr->buffer_info, 0, size);
++ 
++      rxdr->size = rxdr->count * sizeof(struct e1000_rx_desc);
+diff -Nurb click-1.6.0/doc/Makefile click-1.6.0-27/doc/Makefile
+--- click-1.6.0/doc/Makefile   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/doc/Makefile        2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,120 @@
++SHELL = /bin/sh
++
++top_srcdir = ..
++srcdir = .
++top_builddir = ..
++subdir = doc
++conf_auxdir = $(top_srcdir)
++
++prefix = /d/click/click-1.6.0-27/inst
++exec_prefix = /d/click/click-1.6.0-27/inst
++bindir = /d/click/click-1.6.0-27/inst/bin
++mandir = ${datarootdir}/man
++datarootdir = /d/click/click-1.6.0-27/inst/share
++datadir = /d/click/click-1.6.0-27/inst/share
++clickdatadir = $(datadir)/click
++infodir = ${datarootdir}/info
++
++PERL = perl
++INSTALL = /usr/bin/install -c
++INSTALL_DATA = /usr/bin/install -c -m 644
++INSTALL_INFO = /usr/bin/install-info
++MAKEINFO = makeinfo
++TEXI2DVI = texi2dvi
++POD2MAN = pod2man
++CP_PRESERVE = /bin/cp -p
++mkinstalldirs = $(conf_auxdir)/mkinstalldirs
++
++EXTRA_PROVIDES =
++
++all: Makefile
++
++Makefile: $(srcdir)/Makefile.in
++      cd $(top_builddir) \
++        && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
++
++install: Makefile install-man install-info
++      $(mkinstalldirs) $(DESTDIR)$(bindir)
++      $(INSTALL) $(srcdir)/click-elem2man $(DESTDIR)$(bindir)/click-elem2man
++install-man: testie.1 $(top_builddir)/elementmap.xml Makefile
++      $(mkinstalldirs) $(DESTDIR)$(mandir)/man1 $(DESTDIR)$(mandir)/man3 $(DESTDIR)$(mandir)/man5 $(DESTDIR)$(mandir)/man7 $(DESTDIR)$(mandir)/man8 $(DESTDIR)$(mandir)/mann
++      $(INSTALL_DATA) $(srcdir)/click.1 $(DESTDIR)$(mandir)/man1/click.1
++      $(INSTALL_DATA) $(srcdir)/click.5 $(DESTDIR)$(mandir)/man5/click.5
++      $(INSTALL_DATA) $(srcdir)/click.o.8 $(DESTDIR)$(mandir)/man8/click.o.8
++      $(INSTALL_DATA) $(srcdir)/click-align.1 $(DESTDIR)$(mandir)/man1/click-align.1
++      $(INSTALL_DATA) $(srcdir)/click-combine.1 $(DESTDIR)$(mandir)/man1/click-combine.1
++      $(INSTALL_DATA) $(srcdir)/click-devirtualize.1 $(DESTDIR)$(mandir)/man1/click-devirtualize.1
++      $(INSTALL_DATA) $(srcdir)/click-fastclassifier.1 $(DESTDIR)$(mandir)/man1/click-fastclassifier.1
++      $(INSTALL_DATA) $(srcdir)/click-flatten.1 $(DESTDIR)$(mandir)/man1/click-flatten.1
++      $(INSTALL_DATA) $(srcdir)/click-install.1 $(DESTDIR)$(mandir)/man1/click-install.1
++      $(INSTALL_DATA) $(srcdir)/click-mkmindriver.1 $(DESTDIR)$(mandir)/man1/click-mkmindriver.1
++      $(INSTALL_DATA) $(srcdir)/click-pretty.1 $(DESTDIR)$(mandir)/man1/click-pretty.1
++      $(INSTALL_DATA) $(srcdir)/click-uncombine.1 $(DESTDIR)$(mandir)/man1/click-uncombine.1
++      $(INSTALL_DATA) $(srcdir)/click-undead.1 $(DESTDIR)$(mandir)/man1/click-undead.1
++      $(INSTALL_DATA) $(srcdir)/click-uninstall.1 $(DESTDIR)$(mandir)/man1/click-uninstall.1
++      $(INSTALL_DATA) $(srcdir)/click-xform.1 $(DESTDIR)$(mandir)/man1/click-xform.1
++      $(INSTALL_DATA) $(srcdir)/elementdoc.7 $(DESTDIR)$(mandir)/man7/elementdoc.7
++      $(INSTALL_DATA) testie.1 $(DESTDIR)$(mandir)/man1/testie.1
++      $(PERL) $(srcdir)/click-elem2man -l -d $(DESTDIR)$(mandir)/mann -P DEFAULT -p $(top_srcdir) $(top_builddir)/elementmap.xml
++install-info: Makefile click.info
++      $(mkinstalldirs) $(DESTDIR)$(infodir)
++      @for f in click.info click.info-[0-9] click.info-[0-9][0-9]; do \
++        if test -f $$f; then \
++          echo "$(INSTALL_DATA) $$f $(DESTDIR)$(infodir)/$$f"; \
++          $(INSTALL_DATA) $$f $(DESTDIR)$(infodir)/$$f || exit 1; fi; \
++      done
++      -$(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/click.info 2>&1 >/dev/null
++
++uninstall: uninstall-man uninstall-info
++      /bin/rm -f $(DESTDIR)$(bindir)/click-elem2man
++uninstall-man: $(top_builddir)/elementmap.xml
++      cd $(DESTDIR)$(mandir)/man1; /bin/rm -f click.1 click-align.1 click-combine.1 click-devirtualize.1 click-fastclassifier.1 click-flatten.1 click-install.1 click-mkmindriver.1 click-pretty.1 click-uncombine.1 click-undead.1 click-uninstall.1 click-xform.1 testie.1
++      cd $(DESTDIR)$(mandir)/man5; /bin/rm -f click.5
++      cd $(DESTDIR)$(mandir)/man7; /bin/rm -f elementdoc.7
++      cd $(DESTDIR)$(mandir)/man8; /bin/rm -f click.o.8
++      $(PERL) $(srcdir)/click-elem2man -l -d $(DESTDIR)$(mandir)/mann -P DEFAULT -p $(top_srcdir) -u $(top_builddir)/elementmap.xml
++uninstall-info: click.info
++      @for f in click.info click.info-[0-9] click.info-[0-9][0-9]; do \
++        if test -f $$f; then \
++          echo "/bin/rm -f $(DESTDIR)$(infodir)/$$f"; \
++          /bin/rm -f $(DESTDIR)$(infodir)/$$f; fi; \
++      done
++
++info: click.info
++      @:
++click.info: $(srcdir)/click.texi
++      @-if [ ! -f click.info -a -f $(srcdir)/click.info ]; then \
++          echo $(CP_PRESERVE) "$(srcdir)/click.info*" .; \
++          $(CP_PRESERVE) $(srcdir)/click.info* .; \
++          $(MAKE) click.info; \
++      else \
++          echo $(MAKEINFO) $(srcdir)/click.texi; \
++          $(MAKEINFO) $(srcdir)/click.texi; \
++      fi
++click.html: $(srcdir)/click.texi
++      $(MAKEINFO) --html --no-split --number-sections $(srcdir)/click.texi
++      $(PERL) -pi -e 's|^<h3(.*)</h4|<h3$$1</h3|' click.html
++      $(PERL) -pi -e 's|^<h3(.*)</h5|<h4$$1</h4|' click.html
++click.dvi: $(srcdir)/click.texi always
++      $(TEXI2DVI) $(srcdir)/click.texi
++
++testie.1: $(top_srcdir)/test/testie
++      @-if [ ! -f testie.1 -a -f $(srcdir)/testie.1 ]; then \
++         echo $(CP_PRESERVE) $(srcdir)/testie.1 testie.1; \
++         $(CP_PRESERVE) $(srcdir)/testie.1 testie.1; \
++         $(MAKE) testie.1; \
++      else \
++         echo $(POD2MAN) -d '' -c '' $(top_srcdir)/test/testie testie.1; \
++         $(POD2MAN) -d '' -c '' $(top_srcdir)/test/testie testie.1; \
++      fi
++
++always:
++      @:
++
++clean:
++      rm -f click.aux click.cp click.cps click.dvi click.fn click.fns click.html click.ky click.kys click.pg click.pgs click.tmp click.toc click.tp click.tps click.vr click.vrs *.log
++distclean: clean
++      -rm -f Makefile
++
++.PHONY: all clean distclean info always \
++      install install-man install-info uninstall uninstall-man uninstall-info
+diff -Nurb click-1.6.0/drivers/e1000-4.x/src/e1000.h.orig click-1.6.0-27/drivers/e1000-4.x/src/e1000.h.orig
+--- click-1.6.0/drivers/e1000-4.x/src/e1000.h.orig     2007-07-16 19:47:50.000000000 -0400
++++ click-1.6.0-27/drivers/e1000-4.x/src/e1000.h.orig  1969-12-31 19:00:00.000000000 -0500
+@@ -1,244 +0,0 @@
+-/*******************************************************************************
+-
+-  
+-  Copyright(c) 1999 - 2002 Intel Corporation. All rights reserved.
+-  
+-  This program is free software; you can redistribute it and/or modify it 
+-  under the terms of the GNU General Public License as published by the Free 
+-  Software Foundation; either version 2 of the License, or (at your option) 
+-  any later version.
+-  
+-  This program is distributed in the hope that it will be useful, but WITHOUT 
+-  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
+-  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for 
+-  more details.
+-  
+-  You should have received a copy of the GNU General Public License along with
+-  this program; if not, write to the Free Software Foundation, Inc., 59 
+-  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-  
+-  The full GNU General Public License is included in this distribution in the
+-  file called LICENSE.
+-  
+-  Contact Information:
+-  Linux NICS <linux.nics@intel.com>
+-  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
+-
+-*******************************************************************************/
+-
+-
+-/* Linux PRO/1000 Ethernet Driver main header file */
+-
+-#ifndef _E1000_H_
+-#define _E1000_H_
+-#ifndef __E1000_MAIN__
+-#define __NO_VERSION__
+-#endif
+-
+-#include <linux/stddef.h>
+-#include <linux/config.h>
+-#include <linux/module.h>
+-#include <linux/types.h>
+-#include <asm/byteorder.h>
+-#include <linux/init.h>
+-#include <linux/mm.h>
+-#include <linux/errno.h>
+-#include <linux/ioport.h>
+-#include <linux/pci.h>
+-#include <linux/kernel.h>
+-#include <linux/netdevice.h>
+-#include <linux/etherdevice.h>
+-#include <linux/skbuff.h>
+-#include <linux/delay.h>
+-#include <linux/timer.h>
+-#include <linux/slab.h>
+-#include <linux/interrupt.h>
+-#include <linux/string.h>
+-#include <linux/pagemap.h>
+-#include <asm/bitops.h>
+-#include <asm/io.h>
+-#include <asm/irq.h>
+-#include <linux/capability.h>
+-#include <linux/in.h>
+-#include <linux/ip.h>
+-#include <linux/tcp.h>
+-#include <linux/udp.h>
+-#include <net/pkt_sched.h>
+-#include <linux/list.h>
+-#include <linux/reboot.h>
+-#ifdef SIOCETHTOOL
+-#include <linux/ethtool.h>
+-#endif
+-#ifdef NETIF_F_HW_VLAN_TX
+-#include <linux/if_vlan.h>
+-#endif
+-
+-#define BAR_0         0
+-#define BAR_1         1
+-#define BAR_5         5
+-#define PCI_DMA_64BIT 0xffffffffffffffffULL
+-#define PCI_DMA_32BIT 0x00000000ffffffffULL
+-
+-#include "kcompat.h"
+-
+-struct e1000_adapter;
+-
+-#include "e1000_hw.h"
+-#ifdef IANS
+-#include "base_comm.h"
+-#include "ans_driver.h"
+-#include "ans.h"
+-#endif
+-#ifdef IDIAG
+-#include "idiag_pro.h"
+-#endif
+-
+-#if DBG
+-#define E1000_DBG(args...) printk(KERN_DEBUG "e1000: " args)
+-#else
+-#define E1000_DBG(args...)
+-#endif
+-
+-#define E1000_ERR(args...) printk(KERN_ERR "e1000: " args)
+-
+-#define E1000_MAX_INTR 10
+-
+-/* Supported Rx Buffer Sizes */
+-#define E1000_RXBUFFER_2048  2048
+-#define E1000_RXBUFFER_4096  4096
+-#define E1000_RXBUFFER_8192  8192
+-#define E1000_RXBUFFER_16384 16384
+-
+-/* How many Tx Descriptors do we need to call netif_wake_queue ? */
+-#define E1000_TX_QUEUE_WAKE   16
+-/* How many Rx Buffers do we bundle into one write to the hardware ? */
+-#define E1000_RX_BUFFER_WRITE 16
+-
+-#define E1000_JUMBO_PBA      0x00000028
+-#define E1000_DEFAULT_PBA    0x00000030
+-
+-#define AUTO_ALL_MODES       0
+-
+-/* only works for sizes that are powers of 2 */
+-#define E1000_ROUNDUP(i, size) ((i) = (((i) + (size) - 1) & ~((size) - 1)))
+-
+-/* wrapper around a pointer to a socket buffer,
+- * so a DMA handle can be stored along with the buffer */
+-struct e1000_buffer {
+-      struct sk_buff *skb;
+-      uint64_t dma;
+-      unsigned long length;
+-      unsigned long time_stamp;
+-};
+-
+-struct e1000_desc_ring {
+-      /* pointer to the descriptor ring memory */
+-      void *desc;
+-      /* physical address of the descriptor ring */
+-      dma_addr_t dma;
+-      /* length of descriptor ring in bytes */
+-      unsigned int size;
+-      /* number of descriptors in the ring */
+-      unsigned int count;
+-      /* next descriptor to associate a buffer with */
+-      unsigned int next_to_use;
+-      /* next descriptor to check for DD status bit */
+-      unsigned int next_to_clean;
+-      /* array of buffer information structs */
+-      struct e1000_buffer *buffer_info;
+-};
+-
+-#define E1000_DESC_UNUSED(R) \
+-((((R)->next_to_clean + (R)->count) - ((R)->next_to_use + 1)) % ((R)->count))
+-
+-#define E1000_GET_DESC(R, i, type)    (&(((struct type *)((R).desc))[i]))
+-#define E1000_RX_DESC(R, i)           E1000_GET_DESC(R, i, e1000_rx_desc)
+-#define E1000_TX_DESC(R, i)           E1000_GET_DESC(R, i, e1000_tx_desc)
+-#define E1000_CONTEXT_DESC(R, i)      E1000_GET_DESC(R, i, e1000_context_desc)
+-
+-/* board specific private data structure */
+-
+-struct e1000_adapter {
+-#ifdef IANS
+-      void *iANSReserved;
+-      piANSsupport_t iANSdata;
+-      uint32_t ans_link;
+-      uint32_t ans_speed;
+-      uint32_t ans_duplex;
+-      uint32_t ans_suspend;
+-      IANS_BD_TAGGING_MODE tag_mode;
+-#endif
+-      struct timer_list watchdog_timer;
+-      struct timer_list phy_info_timer;
+-#ifdef CONFIG_PROC_FS
+-      struct list_head proc_list_head;
+-#endif
+-#ifdef NETIF_F_HW_VLAN_TX
+-      struct vlan_group *vlgrp;
+-#endif
+-      char *id_string;
+-      uint32_t bd_number;
+-      uint32_t rx_buffer_len;
+-      uint32_t part_num;
+-      uint32_t wol;
+-      uint16_t link_speed;
+-      uint16_t link_duplex;
+-      spinlock_t stats_lock;
+-      atomic_t irq_sem;
+-
+-#ifdef ETHTOOL_PHYS_ID
+-      struct timer_list blink_timer;
+-      unsigned long led_status;
+-#endif
+-
+-      /* TX */
+-      struct e1000_desc_ring tx_ring;
+-      uint32_t txd_cmd;
+-      uint32_t tx_int_delay;
+-      uint32_t tx_abs_int_delay;
+-      int max_data_per_txd;
+-
+-      /* RX */
+-      struct e1000_desc_ring rx_ring;
+-      uint64_t hw_csum_err;
+-      uint64_t hw_csum_good;
+-      uint32_t rx_int_delay;
+-      uint32_t rx_abs_int_delay;
+-      boolean_t rx_csum;
+-
+-      /* OS defined structs */
+-      struct net_device *netdev;
+-      struct pci_dev *pdev;
+-      struct net_device_stats net_stats;
+-
+-      /* structs defined in e1000_hw.h */
+-      struct e1000_hw hw;
+-      struct e1000_hw_stats stats;
+-      struct e1000_phy_info phy_info;
+-      struct e1000_phy_stats phy_stats;
+-
+-#ifdef IDIAG
+-      uint32_t diag_icr;
+-      struct e1000_desc_ring diag_tx_ring;
+-      struct e1000_desc_ring diag_rx_ring;
+-#endif
+-
+-#ifdef E1000_COUNT_ICR
+-      uint64_t icr_txdw;
+-      uint64_t icr_txqe;
+-      uint64_t icr_lsc;
+-      uint64_t icr_rxseq;
+-      uint64_t icr_rxdmt;
+-      uint64_t icr_rxo;
+-      uint64_t icr_rxt;
+-      uint64_t icr_mdac;
+-      uint64_t icr_rxcfg;
+-      uint64_t icr_gpi;
+-#endif
+-
+-      uint32_t pci_state[16];
+-
+-      /* Semaphore for locking HW access vs. i2c-i8254x SMBUS driver */
+-      struct semaphore smbus_lock;
+-};
+-#endif /* _E1000_H_ */
+diff -Nurb click-1.6.0/drivers/e1000-4.x/src/e1000_idiag.c.orig click-1.6.0-27/drivers/e1000-4.x/src/e1000_idiag.c.orig
+--- click-1.6.0/drivers/e1000-4.x/src/e1000_idiag.c.orig       2007-07-16 19:47:50.000000000 -0400
++++ click-1.6.0-27/drivers/e1000-4.x/src/e1000_idiag.c.orig    1969-12-31 19:00:00.000000000 -0500
+@@ -1,1048 +0,0 @@
+-/*******************************************************************************
+-
+-  
+-  Copyright(c) 1999 - 2002 Intel Corporation. All rights reserved.
+-  
+-  This program is free software; you can redistribute it and/or modify it 
+-  under the terms of the GNU General Public License as published by the Free 
+-  Software Foundation; either version 2 of the License, or (at your option) 
+-  any later version.
+-  
+-  This program is distributed in the hope that it will be useful, but WITHOUT 
+-  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
+-  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for 
+-  more details.
+-  
+-  You should have received a copy of the GNU General Public License along with
+-  this program; if not, write to the Free Software Foundation, Inc., 59 
+-  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-  
+-  The full GNU General Public License is included in this distribution in the
+-  file called LICENSE.
+-  
+-  Contact Information:
+-  Linux NICS <linux.nics@intel.com>
+-  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
+-
+-*******************************************************************************/
+-
+-/*
+- * Intel PRO diagnostics
+- */
+-
+-#include "e1000.h"
+-#include "idiag_pro.h"
+-#include "idiag_e1000.h"
+-
+-extern int e1000_up(struct e1000_adapter *adapter);
+-extern void e1000_down(struct e1000_adapter *adapter);
+-extern void e1000_reset(struct e1000_adapter *adapter);
+-
+-#define REG_PATTERN_TEST(R, M, W)                                          \
+-{                                                                          \
+-      uint32_t pat, value;                                               \
+-      uint32_t test[] =                                                  \
+-              {0x5A5A5A5A, 0xA5A5A5A5, 0x00000000, 0xFFFFFFFF};          \
+-      for(pat = 0; pat < sizeof(test)/sizeof(test[0]); pat++) {          \
+-              E1000_WRITE_REG(&adapter->hw, R, (test[pat] & W));     \
+-              value = E1000_READ_REG(&adapter->hw, R);               \
+-              if(value != (test[pat] & W & M)) {                         \
+-                      param->reg =                                       \
+-                              (adapter->hw.mac_type < e1000_82543) ? \
+-                              E1000_82542_##R : E1000_##R;               \
+-                      param->write_value = test[pat] & W;                \
+-                      param->read_value = value;                         \
+-                      return IDIAG_PRO_STAT_TEST_FAILED;                 \
+-              }                                                          \
+-      }                                                                  \
+-}
+-
+-#define REG_SET_AND_CHECK(R, M, W)                                         \
+-{                                                                          \
+-      uint32_t value;                                                    \
+-      E1000_WRITE_REG(&adapter->hw, R, W & M);                       \
+-      value = E1000_READ_REG(&adapter->hw, R);                       \
+-      if ((W & M) != (value & M)) {                                      \
+-              param->reg = (adapter->hw.mac_type < e1000_82543) ?    \
+-                      E1000_82542_##R : E1000_##R;                       \
+-              param->write_value = W & M;                                \
+-              param->read_value = value & M;                             \
+-              return IDIAG_PRO_STAT_TEST_FAILED;                         \
+-      }                                                                  \
+-}
+-
+-static enum idiag_pro_stat
+-e1000_diag_reg_test(struct e1000_adapter *adapter,
+-                  uint8_t *diag_param)
+-{
+-      struct idiag_e1000_diag_reg_test_param *param =
+-              (struct idiag_e1000_diag_reg_test_param *) diag_param;
+-      uint32_t value;
+-      uint32_t i;
+-
+-      /* The status register is Read Only, so a write should fail.
+-       * Some bits that get toggled are ignored.
+-       */
+-      value = (E1000_READ_REG(&adapter->hw, STATUS) & (0xFFFFF833));
+-      E1000_WRITE_REG(&adapter->hw, STATUS, (0xFFFFFFFF));
+-      if(value != (E1000_READ_REG(&adapter->hw, STATUS) & (0xFFFFF833))) {
+-              param->reg = E1000_STATUS;
+-              param->write_value = 0xFFFFFFFF;
+-              param->read_value = value;
+-              return IDIAG_PRO_STAT_TEST_FAILED;
+-      }
+-
+-      REG_PATTERN_TEST(FCAL, 0xFFFFFFFF, 0xFFFFFFFF);
+-      REG_PATTERN_TEST(FCAH, 0x0000FFFF, 0xFFFFFFFF);
+-      REG_PATTERN_TEST(FCT, 0x0000FFFF, 0xFFFFFFFF);
+-      REG_PATTERN_TEST(VET, 0x0000FFFF, 0xFFFFFFFF);
+-      REG_PATTERN_TEST(RDTR, 0x0000FFFF, 0xFFFFFFFF);
+-      REG_PATTERN_TEST(RDBAH, 0xFFFFFFFF, 0xFFFFFFFF);
+-      REG_PATTERN_TEST(RDLEN, 0x000FFF80, 0x000FFFFF);
+-      REG_PATTERN_TEST(RDH, 0x0000FFFF, 0x0000FFFF);
+-      REG_PATTERN_TEST(RDT, 0x0000FFFF, 0x0000FFFF);
+-      REG_PATTERN_TEST(FCRTH, 0x0000FFF8, 0x0000FFF8);
+-      REG_PATTERN_TEST(FCTTV, 0x0000FFFF, 0x0000FFFF);
+-      REG_PATTERN_TEST(TIPG, 0x3FFFFFFF, 0x3FFFFFFF);
+-      REG_PATTERN_TEST(TDBAH, 0xFFFFFFFF, 0xFFFFFFFF);
+-      REG_PATTERN_TEST(TDLEN, 0x000FFF80, 0x000FFFFF);
+-
+-      REG_SET_AND_CHECK(RCTL, 0xFFFFFFFF, 0x00000000);
+-      REG_SET_AND_CHECK(RCTL, 0x06DFB3FE, 0x003FFFFB);
+-      REG_SET_AND_CHECK(TCTL, 0xFFFFFFFF, 0x00000000);
+-
+-      if(adapter->hw.mac_type >= e1000_82543) {
+-
+-              REG_SET_AND_CHECK(RCTL, 0x06DFB3FE, 0xFFFFFFFF);
+-              REG_PATTERN_TEST(RDBAL, 0xFFFFFFF0, 0xFFFFFFFF);
+-              REG_PATTERN_TEST(TXCW, 0xC000FFFF, 0x0000FFFF);
+-              REG_PATTERN_TEST(TDBAL, 0xFFFFFFF0, 0xFFFFFFFF);
+-              REG_PATTERN_TEST(TIDV, 0x0000FFFF, 0x0000FFFF);
+-
+-              for(i = 0; i < E1000_RAR_ENTRIES; i++) {
+-                      REG_PATTERN_TEST(RA + ((i << 1) << 2), 0xFFFFFFFF,
+-                                       0xFFFFFFFF);
+-                      REG_PATTERN_TEST(RA + (((i << 1) + 1) << 2), 0x8003FFFF,
+-                                       0xFFFFFFFF);
+-              }
+-
+-      } else {
+-
+-              REG_SET_AND_CHECK(RCTL, 0xFFFFFFFF, 0x01FFFFFF);
+-              REG_PATTERN_TEST(RDBAL, 0xFFFFF000, 0xFFFFFFFF);
+-              REG_PATTERN_TEST(TXCW, 0x0000FFFF, 0x0000FFFF);
+-              REG_PATTERN_TEST(TDBAL, 0xFFFFF000, 0xFFFFFFFF);
+-
+-      }
+-
+-      for(i = 0; i < E1000_MC_TBL_SIZE; i++)
+-              REG_PATTERN_TEST(MTA + (i << 2), 0xFFFFFFFF, 0xFFFFFFFF);
+-
+-      return IDIAG_PRO_STAT_OK;
+-}
+-
+-
+-static enum idiag_pro_stat
+-e1000_diag_eeprom_test(struct e1000_adapter *adapter,
+-                     uint8_t *diag_param)
+-{
+-      struct idiag_e1000_diag_eeprom_test_param *param =
+-              (struct idiag_e1000_diag_eeprom_test_param *) diag_param;
+-      uint16_t temp;
+-      uint16_t checksum = 0;
+-      uint16_t i;
+-
+-      /* Read and add up the contents of the EEPROM */
+-      for(i = 0; i < (EEPROM_CHECKSUM_REG + 1); i++) {
+-              if((e1000_read_eeprom(&adapter->hw, i, &temp)) < 0) {
+-                      param->actual_checksum = checksum;
+-                      param->expected_checksum = EEPROM_SUM;
+-                      return IDIAG_PRO_STAT_TEST_FATAL;
+-              }
+-              checksum += temp;
+-      }
+-
+-      /* If Checksum is not Correct return error else test passed */
+-      if(checksum != (uint16_t) EEPROM_SUM) {
+-              param->actual_checksum = checksum;
+-              param->expected_checksum = EEPROM_SUM;
+-              return IDIAG_PRO_STAT_TEST_FAILED;
+-      }
+-
+-      return IDIAG_PRO_STAT_OK;
+-}
+-
+-static void
+-e1000_diag_intr(int irq,
+-              void *data,
+-              struct pt_regs *regs)
+-{
+-      struct net_device *netdev = (struct net_device *) data;
+-      struct e1000_adapter *adapter = netdev->priv;
+-
+-      adapter->diag_icr |= E1000_READ_REG(&adapter->hw, ICR);
+-
+-      return;
+-}
+-
+-static enum idiag_pro_stat
+-e1000_diag_intr_test(struct e1000_adapter *adapter,
+-                   uint8_t *diag_param)
+-{
+-      struct net_device *netdev = adapter->netdev;
+-      enum idiag_e1000_diag_intr_test_param *param =
+-              (enum idiag_e1000_diag_intr_test_param *) diag_param;
+-      uint32_t icr, i, mask;
+-
+-      *param = IDIAG_E1000_INTR_TEST_OK;
+-
+-      /* Hook up diag interrupt handler just for this test */
+-      if(request_irq
+-         (netdev->irq, &e1000_diag_intr, SA_SHIRQ, netdev->name, netdev))
+-              return IDIAG_PRO_STAT_TEST_FATAL;
+-
+-      /* Disable all the interrupts */
+-      E1000_WRITE_REG(&adapter->hw, IMC, 0xFFFFFFFF);
+-      msec_delay(10);
+-
+-      /* Interrupts are disabled, so read interrupt cause
+-       * register (icr) twice to verify that there are no interrupts
+-       * pending.  icr is clear on read.
+-       */
+-      icr = E1000_READ_REG(&adapter->hw, ICR);
+-      icr = E1000_READ_REG(&adapter->hw, ICR);
+-
+-      if(icr != 0) {
+-              /* if icr is non-zero, there is no point
+-               * running other interrupt tests.
+-               */
+-              *param = IDIAG_E1000_INTR_TEST_NOT_EXEC;
+-              return IDIAG_PRO_STAT_TEST_FAILED;
+-      }
+-
+-      /* Test each interrupt */
+-      for(i = 0; i < 10; i++) {
+-
+-              /* Interrupt to test */
+-              mask = 1 << i;
+-
+-              /* Disable the interrupt to be reported in
+-               * the cause register and then force the same
+-               * interrupt and see if one gets posted.  If
+-               * an interrupt was posted to the bus, the
+-               * test failed.
+-               */
+-              adapter->diag_icr = 0;
+-              E1000_WRITE_REG(&adapter->hw, IMC, mask);
+-              E1000_WRITE_REG(&adapter->hw, ICS, mask);
+-              msec_delay(10);
+-
+-              if(adapter->diag_icr & mask) {
+-                      *param = IDIAG_E1000_INTR_TEST_FAILED_WHILE_DISABLED;
+-                      break;
+-              }
+-
+-              /* Enable the interrupt to be reported in
+-               * the cause register and then force the same
+-               * interrupt and see if one gets posted.  If
+-               * an interrupt was not posted to the bus, the
+-               * test failed.
+-               */
+-              adapter->diag_icr = 0;
+-              E1000_WRITE_REG(&adapter->hw, IMS, mask);
+-              E1000_WRITE_REG(&adapter->hw, ICS, mask);
+-              msec_delay(10);
+-
+-              if(!(adapter->diag_icr & mask)) {
+-                      *param = IDIAG_E1000_INTR_TEST_FAILED_WHILE_ENABLED;
+-                      break;
+-              }
+-
+-              /* Disable the other interrupts to be reported in
+-               * the cause register and then force the other
+-               * interrupts and see if any get posted.  If
+-               * an interrupt was posted to the bus, the
+-               * test failed.
+-               */
+-              adapter->diag_icr = 0;
+-              E1000_WRITE_REG(&adapter->hw, IMC, ~mask);
+-              E1000_WRITE_REG(&adapter->hw, ICS, ~mask);
+-              msec_delay(10);
+-
+-              if(adapter->diag_icr) {
+-                      *param = IDIAG_E1000_INTR_TEST_FAILED_MASKED_ENABLED;
+-                      break;
+-              }
+-      }
+-
+-      /* Disable all the interrupts */
+-      E1000_WRITE_REG(&adapter->hw, IMC, 0xFFFFFFFF);
+-      msec_delay(10);
+-
+-      /* Unhook diag interrupt handler */
+-      free_irq(netdev->irq, netdev);
+-
+-      return (*param ==
+-              IDIAG_E1000_INTR_TEST_OK) ? IDIAG_PRO_STAT_OK :
+-              IDIAG_PRO_STAT_TEST_FAILED;
+-}
+-
+-static void
+-e1000_free_desc_rings(struct e1000_adapter *adapter)
+-{
+-      struct e1000_desc_ring *txdr = &adapter->diag_tx_ring;
+-      struct e1000_desc_ring *rxdr = &adapter->diag_rx_ring;
+-      struct pci_dev *pdev = adapter->pdev;
+-      int i;
+-
+-      if(txdr->desc && txdr->buffer_info) {
+-              for(i = 0; i < txdr->count; i++) {
+-                      if(txdr->buffer_info[i].dma)
+-                              pci_unmap_single(pdev, txdr->buffer_info[i].dma,
+-                                               txdr->buffer_info[i].length,
+-                                               PCI_DMA_TODEVICE);
+-                      if(txdr->buffer_info[i].skb)
+-                              dev_kfree_skb(txdr->buffer_info[i].skb);
+-              }
+-      }
+-
+-      if(rxdr->desc && rxdr->buffer_info) {
+-              for(i = 0; i < rxdr->count; i++) {
+-                      if(rxdr->buffer_info[i].dma)
+-                              pci_unmap_single(pdev, rxdr->buffer_info[i].dma,
+-                                               rxdr->buffer_info[i].length,
+-                                               PCI_DMA_FROMDEVICE);
+-                      if(rxdr->buffer_info[i].skb)
+-                              dev_kfree_skb(rxdr->buffer_info[i].skb);
+-              }
+-      }
+-
+-      if(txdr->desc)
+-              pci_free_consistent(pdev, txdr->size, txdr->desc, txdr->dma);
+-      if(rxdr->desc)
+-              pci_free_consistent(pdev, rxdr->size, rxdr->desc, rxdr->dma);
+-
+-      if(txdr->buffer_info)
+-              kfree(txdr->buffer_info);
+-      if(rxdr->buffer_info)
+-              kfree(rxdr->buffer_info);
+-
+-      return;
+-}
+-
+-static int
+-e1000_setup_desc_rings(struct e1000_adapter *adapter)
+-{
+-      struct e1000_desc_ring *txdr = &adapter->diag_tx_ring;
+-      struct e1000_desc_ring *rxdr = &adapter->diag_rx_ring;
+-      struct pci_dev *pdev = adapter->pdev;
+-      uint32_t rctl;
+-      int size, i;
+-
+-      /* Setup Tx descriptor ring and Tx buffers */
+-
+-      txdr->count = 80;
+-
+-      size = txdr->count * sizeof(struct e1000_buffer);
+-      if(!(txdr->buffer_info = kmalloc(size, GFP_KERNEL)))
+-              goto err_nomem;
+-      memset(txdr->buffer_info, 0, size);
+-
+-      txdr->size = txdr->count * sizeof(struct e1000_tx_desc);
+-      E1000_ROUNDUP(txdr->size, 4096);
+-      if(!(txdr->desc = pci_alloc_consistent(pdev, txdr->size, &txdr->dma)))
+-              goto err_nomem;
+-      memset(txdr->desc, 0, txdr->size);
+-      txdr->next_to_use = txdr->next_to_clean = 0;
+-
+-      E1000_WRITE_REG(&adapter->hw, TDBAL,
+-                      ((uint64_t) txdr->dma & 0x00000000FFFFFFFF));
+-      E1000_WRITE_REG(&adapter->hw, TDBAH, ((uint64_t) txdr->dma >> 32));
+-      E1000_WRITE_REG(&adapter->hw, TDLEN,
+-                      txdr->count * sizeof(struct e1000_tx_desc));
+-      E1000_WRITE_REG(&adapter->hw, TDH, 0);
+-      E1000_WRITE_REG(&adapter->hw, TDT, 0);
+-      E1000_WRITE_REG(&adapter->hw, TCTL,
+-                      E1000_TCTL_PSP | E1000_TCTL_EN |
+-                      E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT |
+-                      E1000_FDX_COLLISION_DISTANCE << E1000_COLD_SHIFT);
+-
+-      for(i = 0; i < txdr->count; i++) {
+-              struct e1000_tx_desc *tx_desc = E1000_TX_DESC(*txdr, i);
+-              struct sk_buff *skb;
+-              unsigned int size = 1024;
+-
+-              if(!(skb = alloc_skb(size, GFP_KERNEL)))
+-                      goto err_nomem;
+-              skb_put(skb, size);
+-              txdr->buffer_info[i].skb = skb;
+-              txdr->buffer_info[i].length = skb->len;
+-              txdr->buffer_info[i].dma =
+-                      pci_map_single(pdev, skb->data, skb->len,
+-                                     PCI_DMA_TODEVICE);
+-              tx_desc->buffer_addr = cpu_to_le64(txdr->buffer_info[i].dma);
+-              tx_desc->lower.data = cpu_to_le32(skb->len);
+-              tx_desc->lower.data |= E1000_TXD_CMD_EOP;
+-              tx_desc->lower.data |= E1000_TXD_CMD_IFCS;
+-              tx_desc->lower.data |= E1000_TXD_CMD_RPS;
+-              tx_desc->upper.data = 0;
+-      }
+-
+-      /* Setup Rx descriptor ring and Rx buffers */
+-
+-      rxdr->count = 80;
+-
+-      size = rxdr->count * sizeof(struct e1000_buffer);
+-      if(!(rxdr->buffer_info = kmalloc(size, GFP_KERNEL)))
+-              goto err_nomem;
+-      memset(rxdr->buffer_info, 0, size);
+-
+-      rxdr->size = rxdr->count * sizeof(struct e1000_rx_desc);
+-      if(!(rxdr->desc = pci_alloc_consistent(pdev, rxdr->size, &rxdr->dma)))
+-              goto err_nomem;
+-      memset(rxdr->desc, 0, rxdr->size);
+-      rxdr->next_to_use = rxdr->next_to_clean = 0;
+-
+-      rctl = E1000_READ_REG(&adapter->hw, RCTL);
+-      E1000_WRITE_REG(&adapter->hw, RCTL, rctl & ~E1000_RCTL_EN);
+-      E1000_WRITE_REG(&adapter->hw, RDBAL,
+-                      ((uint64_t) rxdr->dma & 0xFFFFFFFF));
+-      E1000_WRITE_REG(&adapter->hw, RDBAH, ((uint64_t) rxdr->dma >> 32));
+-      E1000_WRITE_REG(&adapter->hw, RDLEN, rxdr->size);
+-      E1000_WRITE_REG(&adapter->hw, RDH, 0);
+-      E1000_WRITE_REG(&adapter->hw, RDT, 0);
+-      rctl = E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_SZ_2048 |
+-              E1000_RCTL_LBM_NO | E1000_RCTL_RDMTS_HALF | 
+-              (adapter->hw.mc_filter_type << E1000_RCTL_MO_SHIFT);
+-      E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
+-
+-      for(i = 0; i < rxdr->count; i++) {
+-              struct e1000_rx_desc *rx_desc = E1000_RX_DESC(*rxdr, i);
+-              struct sk_buff *skb;
+-
+-              if(!(skb = alloc_skb(E1000_RXBUFFER_2048 + 2, GFP_KERNEL)))
+-                      goto err_nomem;
+-              skb_reserve(skb, 2);
+-              rxdr->buffer_info[i].skb = skb;
+-              rxdr->buffer_info[i].length = E1000_RXBUFFER_2048;
+-              rxdr->buffer_info[i].dma =
+-                      pci_map_single(pdev, skb->data, E1000_RXBUFFER_2048,
+-                                     PCI_DMA_FROMDEVICE);
+-              rx_desc->buffer_addr = cpu_to_le64(rxdr->buffer_info[i].dma);
+-              memset(skb->data, 0x00, skb->len);
+-      }
+-
+-      return 0;
+-
+-      err_nomem:
+-      e1000_free_desc_rings(adapter);
+-      return -ENOMEM;
+-}
+-
+-/**
+- * e1000_phy_disable_receiver - This routine disables the receiver
+- * during loopback testing to insure that if, in the middle of a
+- * loopback test, a link partner is connected, it won't change the
+- * speed or link status and thus cause a failure.
+- *
+- * @adapter: board private structure
+- **/
+-
+-static void
+-e1000_phy_disable_receiver(struct e1000_adapter *adapter)
+-{
+-      /* Write out to PHY registers 29 and 30 to disable the Receiver. */
+-      e1000_write_phy_reg(&adapter->hw, 29, 0x001F);
+-      e1000_write_phy_reg(&adapter->hw, 30, 0x8FFC);
+-      e1000_write_phy_reg(&adapter->hw, 29, 0x001A);
+-      e1000_write_phy_reg(&adapter->hw, 30, 0x8FF0);
+-
+-      return;
+-}
+-
+-/**
+- * e1000_phy_reset_clk_and_crs - This routine resets the TX_CLK and
+- * TX_CRS registers on the non-integrated PHY.
+- *
+- * @adapter: board private structure
+- **/
+-
+-static void
+-e1000_phy_reset_clk_and_crs(struct e1000_adapter *adapter)
+-{
+-      uint16_t phy_reg;
+-
+-      /* Because we reset the PHY above, we need to re-force TX_CLK in the
+-       * Extended PHY Specific Control Register to 25MHz clock.  This
+-       * value defaults back to a 2.5MHz clock when the PHY is reset.
+-       */
+-      e1000_read_phy_reg(&adapter->hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_reg);
+-      phy_reg |= M88E1000_EPSCR_TX_CLK_25;
+-      e1000_write_phy_reg(&adapter->hw, 
+-              M88E1000_EXT_PHY_SPEC_CTRL, phy_reg);
+-
+-      /* In addition, because of the s/w reset above, we need to enable
+-       * CRS on TX.  This must be set for both full and half duplex
+-       * operation.
+-       */
+-      e1000_read_phy_reg(&adapter->hw, M88E1000_PHY_SPEC_CTRL, &phy_reg);
+-      phy_reg |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
+-      e1000_write_phy_reg(&adapter->hw, 
+-              M88E1000_PHY_SPEC_CTRL, phy_reg);
+-}
+-
+-/**
+- * e1000_nonintegrated_phy_loopback - This routine enables the PHY 
+- * loopback circuit to work on the non-integrated PHY, under *any* link
+- * condition.
+- *
+- * @adapter: board private structure
+- *
+- * Returns 0 on success, 1 on failure
+- **/
+-
+-static int
+-e1000_nonintegrated_phy_loopback(struct e1000_adapter *adapter)
+-{
+-      uint32_t ctrl_reg;
+-      uint16_t phy_reg;
+-      int status = 1;
+-
+-      /* Setup the Device Control Register for PHY loopback test. */
+-
+-      ctrl_reg = E1000_READ_REG(&adapter->hw, CTRL);
+-      ctrl_reg |= (E1000_CTRL_ILOS |          /* Invert Loss-Of-Signal */
+-                   E1000_CTRL_FRCSPD |        /* Set the Force Speed Bit */
+-                   E1000_CTRL_FRCDPX |        /* Set the Force Duplex Bit */
+-                   E1000_CTRL_SPD_1000 |      /* Force Speed to 1000 */
+-                   E1000_CTRL_FD);            /* Force Duplex to FULL */
+-
+-      E1000_WRITE_REG(&adapter->hw, CTRL, ctrl_reg);
+-
+-      /* Read the PHY Specific Control Register (0x10) */
+-      e1000_read_phy_reg(&adapter->hw, M88E1000_PHY_SPEC_CTRL, &phy_reg);
+-
+-      /* Clear Auto-Crossover bits in PHY Specific Control Register
+-       * (bits 6:5).
+-       */
+-      phy_reg &= ~M88E1000_PSCR_AUTO_X_MODE;
+-      e1000_write_phy_reg(&adapter->hw, M88E1000_PHY_SPEC_CTRL, phy_reg);
+-
+-      /* Perform software reset on the PHY */
+-      e1000_phy_reset(&adapter->hw);
+-
+-      /* Have to setup TX_CLK and TX_CRS after software reset */
+-      e1000_phy_reset_clk_and_crs(adapter);
+-
+-      e1000_write_phy_reg(&adapter->hw, PHY_CTRL, 0x8100);
+-
+-      /* Wait for reset to complete. */
+-      usec_delay(500);
+-
+-      /* Have to setup TX_CLK and TX_CRS after software reset */
+-      e1000_phy_reset_clk_and_crs(adapter);
+-
+-      /* Write out to PHY registers 29 and 30 to disable the Receiver. */
+-      e1000_phy_disable_receiver(adapter);
+-
+-      /* Set the loopback bit in the PHY control register. */
+-      e1000_read_phy_reg(&adapter->hw, PHY_CTRL, &phy_reg);
+-      phy_reg |= MII_CR_LOOPBACK;
+-      e1000_write_phy_reg(&adapter->hw, PHY_CTRL, phy_reg);
+-
+-      /* Setup TX_CLK and TX_CRS one more time. */
+-      e1000_phy_reset_clk_and_crs(adapter);
+-
+-      status = 0;
+-
+-      /* Check Phy Configuration */
+-      e1000_read_phy_reg(&adapter->hw, PHY_CTRL, &phy_reg);
+-      if(phy_reg != 0x4100) {
+-              status = 1;
+-      }
+-
+-      e1000_read_phy_reg(&adapter->hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_reg);
+-      if(phy_reg != 0x0070) {
+-              status = 1;
+-      }
+-
+-      e1000_read_phy_reg(&adapter->hw, 29, &phy_reg);
+-      if(phy_reg != 0x001A) {
+-              status = 1;
+-      }
+-
+-      return status;
+-}
+-
+-/**
+- * e1000_integrated_phy_loopback - This routine is used by diagnostic
+- * software to put the 82544, 82540, 82545, and 82546 MAC based network
+- * cards into loopback mode.
+- *
+- * @adapter: board private structure
+- * @speed: speed
+- *               
+- *  Current procedure is to:
+- *    1) Disable auto-MDI/MDIX
+- *    2) Perform SW phy reset (bit 15 of PHY_CTRL)
+- *    3) Disable autoneg and reset
+- *    4) For the specified speed, set the loopback
+- *       mode for that speed.  Also force the MAC
+- *       to the correct speed and duplex for the
+- *       specified operation.
+- *    5) If this is an 82543, setup the TX_CLK and
+- *       TX_CRS again.
+- *    6) Disable the receiver so a cable disconnect
+- *       and reconnect will not cause autoneg to
+- *       begin.
+- *
+- * Returns 0 on success, 1 on failure
+- **/
+-
+-static int
+-e1000_integrated_phy_loopback(struct e1000_adapter *adapter,
+-                            uint16_t speed)
+-{
+-      uint32_t ctrl_reg = 0;
+-      uint32_t stat_reg = 0;
+-      boolean_t loopback_mode_set = FALSE;
+-
+-      adapter->hw.autoneg = FALSE;
+-
+-      /* Set up desired loopback speed and duplex depending on input
+-       * into this function.
+-       */
+-      switch (speed) {
+-      case SPEED_1000:
+-              /* Set up the MII control reg to the desired loopback speed. */
+-
+-              /* Auto-MDI/MDIX Off */
+-              e1000_write_phy_reg(&adapter->hw, M88E1000_PHY_SPEC_CTRL,
+-                                  0x0808);
+-              /* reset to update Auto-MDI/MDIX */
+-              e1000_write_phy_reg(&adapter->hw, PHY_CTRL, 0x9140);
+-              /* autoneg off */
+-              e1000_write_phy_reg(&adapter->hw, PHY_CTRL, 0x8140);
+-              /* force 1000, set loopback */
+-              e1000_write_phy_reg(&adapter->hw, PHY_CTRL, 0x4140);
+-
+-              /* Now set up the MAC to the same speed/duplex as the PHY. */
+-              ctrl_reg = E1000_READ_REG(&adapter->hw, CTRL);
+-              ctrl_reg &= ~E1000_CTRL_SPD_SEL; /* Clear the speed sel bits */
+-              ctrl_reg |= (E1000_CTRL_FRCSPD | /* Set the Force Speed Bit */
+-                           E1000_CTRL_FRCDPX | /* Set the Force Duplex Bit */
+-                           E1000_CTRL_SPD_1000 |/* Force Speed to 1000 */
+-                           E1000_CTRL_FD);     /* Force Duplex to FULL */
+-
+-              if(adapter->hw.media_type == e1000_media_type_copper) {
+-                      ctrl_reg |= E1000_CTRL_ILOS; /* Invert Loss of Signal */
+-              } else {
+-                      /* Set the ILOS bit on the fiber Nic is half
+-                       * duplex link is detected. */
+-                      stat_reg = E1000_READ_REG(&adapter->hw, STATUS);
+-                      if((stat_reg & E1000_STATUS_FD) == 0)
+-                              ctrl_reg |= (E1000_CTRL_ILOS | E1000_CTRL_SLU);
+-              }
+-
+-              E1000_WRITE_REG(&adapter->hw, CTRL, ctrl_reg);
+-              loopback_mode_set = TRUE;
+-              break;
+-
+-      case SPEED_100:
+-              /* Set up the MII control reg to the desired loopback speed. */
+-
+-              /* Auto-MDI/MDIX Off */
+-              e1000_write_phy_reg(&adapter->hw, M88E1000_PHY_SPEC_CTRL,
+-                                  0x0808);
+-              /* reset to update Auto-MDI/MDIX */
+-              e1000_write_phy_reg(&adapter->hw, PHY_CTRL, 0x9140);
+-              /* autoneg off */
+-              e1000_write_phy_reg(&adapter->hw, PHY_CTRL, 0x8140);
+-              /* reset to update autoneg */
+-              e1000_write_phy_reg(&adapter->hw, PHY_CTRL, 0x8100);
+-              /* MAC interface speed to 100Mbps */
+-              e1000_write_phy_reg(&adapter->hw,
+-                                  M88E1000_EXT_PHY_SPEC_CTRL, 0x0c14);
+-              /* reset to update MAC interface speed */
+-              e1000_write_phy_reg(&adapter->hw, PHY_CTRL, 0xe100);
+-              /* force 100, set loopback */
+-              e1000_write_phy_reg(&adapter->hw, PHY_CTRL, 0x6100);
+-
+-              /* Now set up the MAC to the same speed/duplex as the PHY. */
+-              ctrl_reg = E1000_READ_REG(&adapter->hw, CTRL);
+-              ctrl_reg &= ~E1000_CTRL_SPD_SEL; /* Clear the speed sel bits */
+-              ctrl_reg |= (E1000_CTRL_ILOS |   /* Invert Loss-Of-Signal */
+-                           E1000_CTRL_SLU |    /* Set the Force Link Bit */
+-                           E1000_CTRL_FRCSPD | /* Set the Force Speed Bit */
+-                           E1000_CTRL_FRCDPX | /* Set the Force Duplex Bit */
+-                           E1000_CTRL_SPD_100 |/* Force Speed to 100 */
+-                           E1000_CTRL_FD);     /* Force Duplex to FULL */
+-
+-              E1000_WRITE_REG(&adapter->hw, CTRL, ctrl_reg);
+-              loopback_mode_set = TRUE;
+-              break;
+-
+-      case SPEED_10:
+-              /* Set up the MII control reg to the desired loopback speed. */
+-
+-              /* Auto-MDI/MDIX Off */
+-              e1000_write_phy_reg(&adapter->hw, M88E1000_PHY_SPEC_CTRL,
+-                                  0x0808);
+-              /* reset to update Auto-MDI/MDIX */
+-              e1000_write_phy_reg(&adapter->hw, PHY_CTRL, 0x9140);
+-              /* autoneg off */
+-              e1000_write_phy_reg(&adapter->hw, PHY_CTRL, 0x8140);
+-              /* reset to update autoneg */
+-              e1000_write_phy_reg(&adapter->hw, PHY_CTRL, 0x8100);
+-              /* MAC interface speed to 10Mbps */
+-              e1000_write_phy_reg(&adapter->hw,
+-                                  M88E1000_EXT_PHY_SPEC_CTRL, 0x0c04);
+-              /* reset to update MAC interface speed */
+-              e1000_write_phy_reg(&adapter->hw, PHY_CTRL, 0x8100);
+-              /* force 10, set loopback */
+-              e1000_write_phy_reg(&adapter->hw, PHY_CTRL, 0x4100);
+-
+-              /* Now set up the MAC to the same speed/duplex as the PHY. */
+-              ctrl_reg = E1000_READ_REG(&adapter->hw, CTRL);
+-              ctrl_reg &= ~E1000_CTRL_SPD_SEL; /* Clear the speed sel bits */
+-              ctrl_reg |= (E1000_CTRL_SLU |   /* Set the Force Link Bit */
+-                           E1000_CTRL_FRCSPD |/* Set the Force Speed Bit */
+-                           E1000_CTRL_FRCDPX |/* Set the Force Duplex Bit */
+-                           E1000_CTRL_SPD_10 |/* Force Speed to 10 */
+-                           E1000_CTRL_FD);    /* Force Duplex to FULL */
+-
+-              E1000_WRITE_REG(&adapter->hw, CTRL, ctrl_reg);
+-              loopback_mode_set = TRUE;
+-              break;
+-
+-      default:
+-              loopback_mode_set = FALSE;
+-              break;
+-      }
+-
+-      /* Disable the receiver on the PHY so when a cable is plugged
+-       * in, the PHY does not begin to autoneg when a cable is 
+-       * reconnected to the NIC.
+-       */
+-      e1000_phy_disable_receiver(adapter);
+-
+-      usec_delay(500);
+-
+-      return loopback_mode_set ? 0 : 1;
+-}
+-
+-/**
+- * e1000_set_phy_loopback - Set the PHY into loopback mode.
+- * @adapter: board private structure
+- *
+- * Returns 0 on success, 1 on failure
+- **/
+-
+-static int
+-e1000_set_phy_loopback(struct e1000_adapter *adapter)
+-{
+-      uint16_t phy_reg = 0;
+-      uint16_t speed = 0;
+-      uint16_t duplex = 0;
+-      int status = 1;
+-      int count;
+-
+-      switch (adapter->hw.mac_type) {
+-      case e1000_82543:
+-              if(adapter->hw.media_type == e1000_media_type_copper) {
+-                      /* Attempt to setup Loopback mode on Non-
+-                       * integrated PHY.  Some PHY registers get
+-                       * corrupted at random, so attempt this
+-                       * 10 times.
+-                       */
+-                      for(count = 0; count < 10; count++)
+-                              if(!e1000_nonintegrated_phy_loopback(adapter))
+-                                      break;
+-                      status = 0;
+-              }
+-              break;
+-
+-      case e1000_82544:
+-              if(adapter->hw.media_type == e1000_media_type_copper)
+-                      e1000_get_speed_and_duplex(&adapter->hw, &speed,
+-                                                 &duplex);
+-                      status = e1000_integrated_phy_loopback(adapter, speed);
+-              break;
+-
+-      case e1000_82540:
+-      case e1000_82545:
+-      case e1000_82546:
+-              e1000_get_speed_and_duplex(&adapter->hw, &speed, &duplex);
+-              status = e1000_integrated_phy_loopback(adapter, speed);
+-              break;
+-
+-      default:
+-              /* Default PHY loopback work is to read the MII 
+-               * control register and assert bit 14 (loopback mode).
+-               */
+-              e1000_read_phy_reg(&adapter->hw, PHY_CTRL, &phy_reg);
+-              phy_reg |= MII_CR_LOOPBACK;
+-              e1000_write_phy_reg(&adapter->hw, PHY_CTRL,
+-                                  phy_reg);
+-              status = 0;
+-              break;
+-      }
+-
+-      return status;
+-}
+-
+-static int
+-e1000_set_loopback_mode(struct e1000_adapter *adapter,
+-                      enum idiag_e1000_diag_loopback_mode mode)
+-{
+-      uint32_t rctl;
+-      uint16_t phy_reg;
+-      int status = 1;
+-
+-      switch (mode) {
+-
+-      case IDIAG_E1000_DIAG_NONE_LB:
+-              /* Clear bits 7:6 to turn off loopback mode */
+-              rctl = E1000_READ_REG(&adapter->hw, RCTL);
+-              rctl &= ~(E1000_RCTL_LBM_TCVR | E1000_RCTL_LBM_MAC);
+-              E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
+-              /* Only modify the GMII/MII PHY device if the
+-               * media type is copper.
+-               */
+-              if(adapter->hw.media_type == e1000_media_type_copper ||
+-                (adapter->hw.media_type == e1000_media_type_fiber &&
+-                (adapter->hw.mac_type == e1000_82545 ||
+-                 adapter->hw.mac_type == e1000_82546))) {
+-                      adapter->hw.autoneg = TRUE;
+-                      /* De-assert bit 14 (loopback mode) in PHY */
+-                      e1000_read_phy_reg(&adapter->hw, PHY_CTRL, &phy_reg);
+-                      /* Only turn off PHY loopback if enabled */
+-                      if(phy_reg & MII_CR_LOOPBACK) {
+-                              phy_reg &= ~MII_CR_LOOPBACK;
+-                              e1000_write_phy_reg(&adapter->hw, PHY_CTRL,
+-                                                  phy_reg);
+-                              /* Reset the PHY to make sure we
+-                               * regain link */
+-                              e1000_phy_reset(&adapter->hw);
+-                      }
+-              }
+-              status = 0;
+-              break;
+-
+-
+-      case IDIAG_E1000_DIAG_MAC_LB:
+-              /* Not supported */
+-              break;
+-
+-      case IDIAG_E1000_DIAG_PHY_TCVR_LB:
+-              if(adapter->hw.media_type == e1000_media_type_fiber) {
+-                      if(adapter->hw.mac_type == e1000_82545 ||
+-                         adapter->hw.mac_type == e1000_82546) {
+-                              status = e1000_set_phy_loopback(adapter);
+-                      } else {
+-                              rctl = E1000_READ_REG(&adapter->hw, RCTL);
+-                              rctl |= E1000_RCTL_LBM_TCVR;
+-                              E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
+-                              status = 0;
+-                      }
+-              }
+-              if(adapter->hw.media_type == e1000_media_type_copper) {
+-                      status = e1000_set_phy_loopback(adapter);
+-              }
+-              break;
+-      }
+-
+-      return status;
+-}
+-
+-static void
+-e1000_create_lbtest_frame(struct sk_buff *skb,
+-                        unsigned int frame_size)
+-{
+-      memset(skb->data, 0xFF, frame_size);
+-      frame_size = (frame_size % 2) ? (frame_size - 1) : frame_size;
+-      memset(&skb->data[frame_size / 2], 0xAA, frame_size / 2 - 1);
+-      memset(&skb->data[frame_size / 2 + 10], 0xBE, 1);
+-      memset(&skb->data[frame_size / 2 + 12], 0xAF, 1);
+-}
+-
+-static int
+-e1000_check_lbtest_frame(struct sk_buff *skb,
+-                       unsigned int frame_size)
+-{
+-      frame_size = (frame_size % 2) ? (frame_size - 1) : frame_size;
+-      if(*(skb->data + 3) == 0xFF) {
+-              if((*(skb->data + frame_size / 2 + 10) == 0xBE) &&
+-                 (*(skb->data + frame_size / 2 + 12) == 0xAF)) {
+-                      return 1;
+-              }
+-      }
+-      return 0;
+-}
+-
+-static enum idiag_e1000_diag_loopback_result
+-e1000_loopback_test(struct e1000_adapter *adapter)
+-{
+-      struct e1000_desc_ring *txdr = &adapter->diag_tx_ring;
+-      struct e1000_desc_ring *rxdr = &adapter->diag_rx_ring;
+-      struct pci_dev *pdev = adapter->pdev;
+-      int i;
+-
+-      E1000_WRITE_REG(&adapter->hw, RDT, rxdr->count - 1);
+-
+-      for(i = 0; i < 64; i++) {
+-              e1000_create_lbtest_frame(txdr->buffer_info[i].skb, 1024);
+-              pci_dma_sync_single(pdev, txdr->buffer_info[i].dma,
+-                                  txdr->buffer_info[i].length,
+-                                  PCI_DMA_TODEVICE);
+-      }
+-      E1000_WRITE_REG(&adapter->hw, TDT, i);
+-
+-      msec_delay(200);
+-
+-      pci_dma_sync_single(pdev, rxdr->buffer_info[0].dma,
+-                          rxdr->buffer_info[0].length, PCI_DMA_FROMDEVICE);
+-      if(e1000_check_lbtest_frame(rxdr->buffer_info[0].skb, 1024))
+-              return IDIAG_E1000_LOOPBACK_TEST_OK;
+-      else
+-              return IDIAG_E1000_LOOPBACK_TEST_FAILED;
+-}
+-
+-static enum idiag_pro_stat
+-e1000_diag_loopback_test(struct e1000_adapter *adapter,
+-                       uint8_t *diag_param)
+-{
+-      struct idiag_e1000_diag_loopback_test_param *param =
+-              (struct idiag_e1000_diag_loopback_test_param *) diag_param;
+-
+-      if(param->mode == IDIAG_E1000_DIAG_MAC_LB) {
+-              /* Loopback test not support */
+-              param->result = IDIAG_E1000_LOOPBACK_TEST_NOT_EXEC;
+-              return IDIAG_PRO_STAT_NOT_SUPPORTED;
+-      }
+-
+-      if(e1000_setup_desc_rings(adapter)) {
+-              param->result = IDIAG_E1000_LOOPBACK_TEST_NOT_EXEC;
+-              return IDIAG_PRO_STAT_TEST_FAILED;
+-      }
+-
+-      if(e1000_set_loopback_mode(adapter, param->mode)) {
+-              param->result = IDIAG_E1000_LOOPBACK_TEST_NOT_EXEC;
+-              e1000_free_desc_rings(adapter);
+-              return IDIAG_PRO_STAT_TEST_FAILED;
+-      }
+-      param->result = e1000_loopback_test(adapter);
+-      e1000_set_loopback_mode(adapter, IDIAG_E1000_DIAG_NONE_LB);
+-
+-      e1000_free_desc_rings(adapter);
+-
+-      return (param->result ==
+-              IDIAG_E1000_LOOPBACK_TEST_OK) ? IDIAG_PRO_STAT_OK :
+-              IDIAG_PRO_STAT_TEST_FAILED;
+-}
+-
+-static enum idiag_pro_stat
+-e1000_diag_link_test(struct e1000_adapter *adapter,
+-                   uint8_t *diag_param)
+-{
+-      e1000_check_for_link(&adapter->hw);
+-
+-      if(E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU)
+-              return IDIAG_PRO_STAT_OK;
+-      else
+-              return IDIAG_PRO_STAT_TEST_FAILED;
+-}
+-
+-int
+-e1000_diag_ioctl(struct net_device *netdev,
+-               struct ifreq *ifr)
+-{
+-      struct e1000_adapter *adapter = netdev->priv;
+-      struct idiag_pro_data *diag_data =
+-              (struct idiag_pro_data *) ifr->ifr_data;
+-      boolean_t run_offline;
+-      boolean_t interface_up = netif_running(netdev);
+-
+-      diag_data->status = IDIAG_PRO_STAT_NOT_SUPPORTED;
+-
+-      if(!capable(CAP_NET_ADMIN))
+-              /* must have admin capabilities */
+-              return -EPERM;
+-
+-      if(diag_data->interface_ver != IDIAG_PRO_VERSION)
+-              /* incorrect diagnostics interface version */
+-              return -EFAULT;
+-
+-      if(diag_data->cmd != IDIAG_PRO_IDENTIFY_DRIVER &&
+-         diag_data->driver_id != IDIAG_E1000_DRIVER)
+-              /* incorrect driver identifier */
+-              return -EFAULT;
+-
+-      /* Some test requring exclusive access to hardware, so
+-       * we need to teardown the hardware setup, run the test,
+-       * and restore the hardware to resume the network 
+-       * connection. 
+-       */
+-      run_offline =  (diag_data->cmd == IDIAG_E1000_DIAG_REG_TEST ||
+-                      diag_data->cmd == IDIAG_E1000_DIAG_INTR_TEST ||
+-                      diag_data->cmd == IDIAG_E1000_DIAG_LOOPBACK_TEST);
+-
+-      if(run_offline) {
+-              if(interface_up)
+-                      e1000_down(adapter);
+-              else
+-                      e1000_reset(adapter);
+-      }
+-
+-      /* Run the diagnotic test */
+-      switch (diag_data->cmd) {
+-
+-      case IDIAG_PRO_IDENTIFY_DRIVER:
+-              diag_data->driver_id = IDIAG_E1000_DRIVER;
+-              diag_data->status = IDIAG_PRO_STAT_OK;
+-              break;
+-
+-      case IDIAG_E1000_DIAG_REG_TEST:
+-              diag_data->status =
+-                      e1000_diag_reg_test(adapter, diag_data->diag_param);
+-              break;
+-
+-      case IDIAG_E1000_DIAG_XSUM_TEST:
+-              diag_data->status =
+-                      e1000_diag_eeprom_test(adapter, diag_data->diag_param);
+-              break;
+-
+-      case IDIAG_E1000_DIAG_INTR_TEST:
+-              diag_data->status =
+-                      e1000_diag_intr_test(adapter, diag_data->diag_param);
+-              break;
+-
+-      case IDIAG_E1000_DIAG_LOOPBACK_TEST:
+-              diag_data->status =
+-                      e1000_diag_loopback_test(adapter,
+-                                               diag_data->diag_param);
+-              break;
+-
+-      case IDIAG_E1000_DIAG_LINK_TEST:
+-              diag_data->status =
+-                      e1000_diag_link_test(adapter, diag_data->diag_param);
+-              break;
+-
+-      default:
+-              diag_data->status = IDIAG_PRO_STAT_NOT_SUPPORTED;
+-              break;
+-      }
+-
+-      if(run_offline) {
+-              e1000_reset(adapter);
+-              if(interface_up) {
+-                      if(e1000_up(adapter)) {
+-                              diag_data->status = IDIAG_PRO_STAT_TEST_FATAL;
+-                              return -EFAULT;
+-                      }
+-              }
+-      }
+-
+-      return 0;
+-}
+-
+diff -Nurb click-1.6.0/drivers/e1000-4.x/src/e1000_main.c.orig click-1.6.0-27/drivers/e1000-4.x/src/e1000_main.c.orig
+--- click-1.6.0/drivers/e1000-4.x/src/e1000_main.c.orig        2007-07-16 19:47:50.000000000 -0400
++++ click-1.6.0-27/drivers/e1000-4.x/src/e1000_main.c.orig     1969-12-31 19:00:00.000000000 -0500
+@@ -1,2536 +0,0 @@
+-/*******************************************************************************
+-
+-  
+-  Copyright(c) 1999 - 2002 Intel Corporation. All rights reserved.
+-  
+-  This program is free software; you can redistribute it and/or modify it 
+-  under the terms of the GNU General Public License as published by the Free 
+-  Software Foundation; either version 2 of the License, or (at your option) 
+-  any later version.
+-  
+-  This program is distributed in the hope that it will be useful, but WITHOUT 
+-  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
+-  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for 
+-  more details.
+-  
+-  You should have received a copy of the GNU General Public License along with
+-  this program; if not, write to the Free Software Foundation, Inc., 59 
+-  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-  
+-  The full GNU General Public License is included in this distribution in the
+-  file called LICENSE.
+-  
+-  Contact Information:
+-  Linux NICS <linux.nics@intel.com>
+-  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
+-
+-*******************************************************************************/
+-
+-#define __E1000_MAIN__
+-#ifdef IANS
+-#define _IANS_MAIN_MODULE_C_
+-#endif
+-#include "e1000.h"
+-
+-/* Change Log
+- *
+- * 4.3.15      8/9/02
+- *   o Clean up: prepended a shortened version of the license that references
+- *     the full license in LICENSE.
+- *   o Clean up: copied small packets to small socket buffers for truesize
+- *     bug that is exposed with the NFS mount daemon.
+- *   o Clean up: added pci reads for pci posting issues.
+- *   o Bug fix: added memory barriers for IA64.
+- *   o Feature: added locking mechanism for asf functionality.
+- *
+- * 4.3.2       7/5/02
+- *   o Bug fix: perform controller reset using I/O rather than mmio because
+- *     some chipsets try to perform a 64-bit write, but the controller ignores
+- *     the upper 32-bit write once the reset is intiated by the lower 32-bit
+- *     write, causing a master abort.
+- *   o Bug fix: fixed jumbo frames sized from 1514 to 2048.
+- *   o ASF support: disable ARP when driver is loaded or resumed; enable when
+- *     driver is removed or suspended.
+- *   o Bug fix: changed default setting for RxIntDelay to 0 for 82542/3/4
+- *     controllers to workaround h/w errata where controller will hang when
+- *     RxIntDelay <> 0 under certian network conditions.
+- *   o Clean up: removed unused and undocumented user-settable settings for
+- *     PHY.
+- *   o Bug fix: ethtool GEEPROM was using byte address rather than word
+- *     addressing.
+- *   o Feature: added support for ethtool SEEPROM.
+- *   o Feature: added support for entropy pool.
+- *
+- * 4.2.17      5/30/02
+- */
+- 
+-char e1000_driver_name[] = "e1000";
+-char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver";
+-char e1000_driver_version[] = "4.3.15";
+-char e1000_copyright[] = "Copyright (c) 1999-2002 Intel Corporation.";
+-
+-/* e1000_pci_tbl - PCI Device ID Table
+- *
+- * Private driver_data field (last one) stores an index into e1000_strings
+- * Wildcard entries (PCI_ANY_ID) should come last
+- * Last entry must be all 0s
+- *
+- * { Vendor ID, Device ID, SubVendor ID, SubDevice ID,
+- *   Class, Class Mask, String Index }
+- */
+-static struct pci_device_id e1000_pci_tbl[] __devinitdata = {
+-      /* Intel(R) PRO/1000 Network Connection */
+-      {0x8086, 0x1000, 0x8086, 0x1000, 0, 0, 0},
+-      {0x8086, 0x1001, 0x8086, 0x1003, 0, 0, 0},
+-      {0x8086, 0x1004, 0x8086, 0x1004, 0, 0, 0},
+-      {0x8086, 0x1008, 0x8086, 0x1107, 0, 0, 0},
+-      {0x8086, 0x1009, 0x8086, 0x1109, 0, 0, 0},
+-      {0x8086, 0x100C, 0x8086, 0x1112, 0, 0, 0},
+-      {0x8086, 0x100E, 0x8086, 0x001E, 0, 0, 0},
+-      /* Compaq Gigabit Ethernet Server Adapter */
+-      {0x8086, 0x1000, 0x0E11, PCI_ANY_ID, 0, 0, 1},
+-      {0x8086, 0x1001, 0x0E11, PCI_ANY_ID, 0, 0, 1},
+-      {0x8086, 0x1004, 0x0E11, PCI_ANY_ID, 0, 0, 1},
+-      /* IBM Mobile, Desktop & Server Adapters */
+-      {0x8086, 0x1000, 0x1014, PCI_ANY_ID, 0, 0, 2},
+-      {0x8086, 0x1001, 0x1014, PCI_ANY_ID, 0, 0, 2},
+-      {0x8086, 0x1004, 0x1014, PCI_ANY_ID, 0, 0, 2},
+-      /* Generic */
+-      {0x8086, 0x1000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+-      {0x8086, 0x1001, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+-      {0x8086, 0x1004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+-      {0x8086, 0x1008, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+-      {0x8086, 0x1009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+-      {0x8086, 0x100C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+-      {0x8086, 0x100D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+-      {0x8086, 0x100E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+-      {0x8086, 0x100F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+-      {0x8086, 0x1011, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+-      {0x8086, 0x1010, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+-      {0x8086, 0x1012, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+-      /* required last entry */
+-      {0,}
+-};
+-
+-MODULE_DEVICE_TABLE(pci, e1000_pci_tbl);
+-
+-static char *e1000_strings[] = {
+-      "Intel(R) PRO/1000 Network Connection",
+-      "Compaq Gigabit Ethernet Server Adapter",
+-      "IBM Mobile, Desktop & Server Adapters"
+-};
+-
+-/* Local Function Prototypes */
+-
+-int e1000_up(struct e1000_adapter *adapter);
+-void e1000_down(struct e1000_adapter *adapter);
+-void e1000_reset(struct e1000_adapter *adapter);
+-void e1000_smbus_lock(struct pci_dev *pdev, boolean_t lock);
+-
+-static int e1000_init_module(void);
+-static void e1000_exit_module(void);
+-static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent);
+-static void e1000_remove(struct pci_dev *pdev);
+-static void e1000_sw_init(struct e1000_adapter *adapter);
+-static int e1000_open(struct net_device *netdev);
+-static int e1000_close(struct net_device *netdev);
+-static int e1000_setup_tx_resources(struct e1000_adapter *adapter);
+-static int e1000_setup_rx_resources(struct e1000_adapter *adapter);
+-static void e1000_configure_tx(struct e1000_adapter *adapter);
+-static void e1000_configure_rx(struct e1000_adapter *adapter);
+-static void e1000_setup_rctl(struct e1000_adapter *adapter);
+-static void e1000_clean_tx_ring(struct e1000_adapter *adapter);
+-static void e1000_clean_rx_ring(struct e1000_adapter *adapter);
+-static void e1000_free_tx_resources(struct e1000_adapter *adapter);
+-static void e1000_free_rx_resources(struct e1000_adapter *adapter);
+-static void e1000_set_multi(struct net_device *netdev);
+-static void e1000_update_phy_info(unsigned long data);
+-static void e1000_watchdog(unsigned long data);
+-static int e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev);
+-static struct net_device_stats * e1000_get_stats(struct net_device *netdev);
+-static int e1000_change_mtu(struct net_device *netdev, int new_mtu);
+-static int e1000_set_mac(struct net_device *netdev, void *p);
+-static void e1000_update_stats(struct e1000_adapter *adapter);
+-static inline void e1000_irq_disable(struct e1000_adapter *adapter);
+-static inline void e1000_irq_enable(struct e1000_adapter *adapter);
+-static void e1000_intr(int irq, void *data, struct pt_regs *regs);
+-static void e1000_clean_tx_irq(struct e1000_adapter *adapter);
+-static void e1000_clean_rx_irq(struct e1000_adapter *adapter);
+-static void e1000_alloc_rx_buffers(struct e1000_adapter *adapter);
+-static int e1000_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd);
+-static void e1000_enter_82542_rst(struct e1000_adapter *adapter);
+-static void e1000_leave_82542_rst(struct e1000_adapter *adapter);
+-static inline void e1000_rx_checksum(struct e1000_adapter *adapter,
+-                                     struct e1000_rx_desc *rx_desc,
+-                                     struct sk_buff *skb);
+-static boolean_t e1000_smbus_arp_enable(struct e1000_adapter *adapter,
+-                                      boolean_t arp_enable);
+-#ifdef HAVE_TX_TIMEOUT
+-static void e1000_tx_timeout(struct net_device *dev);
+-#endif
+-
+-#ifdef NETIF_F_HW_VLAN_TX
+-static void e1000_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp);
+-static void e1000_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid);
+-static void e1000_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid);
+-#endif
+-
+-static int e1000_notify_reboot(struct notifier_block *, unsigned long event, void *ptr);
+-static int e1000_suspend(struct pci_dev *pdev, uint32_t state);
+-#ifdef CONFIG_PM
+-static int e1000_resume(struct pci_dev *pdev);
+-#endif
+-
+-struct notifier_block e1000_notifier = {
+-      notifier_call:  e1000_notify_reboot,
+-      next:           NULL,
+-      priority:       0
+-};
+-
+-/* Exported from other modules */
+-
+-extern void e1000_check_options(struct e1000_adapter *adapter);
+-extern void e1000_proc_dev_setup(struct e1000_adapter *adapter);
+-extern void e1000_proc_dev_free(struct e1000_adapter *adapter);
+-extern int e1000_ethtool_ioctl(struct net_device *netdev, struct ifreq *ifr);
+-#ifdef IDIAG
+-extern int e1000_diag_ioctl(struct net_device *netdev, struct ifreq *ifr);
+-#endif
+-
+-static struct pci_driver e1000_driver = {
+-      name:     e1000_driver_name,
+-      id_table: e1000_pci_tbl,
+-      probe:    e1000_probe,
+-      remove:   __devexit_p(e1000_remove),
+-      /* Power Managment Hooks */
+-#ifdef CONFIG_PM
+-      suspend:  e1000_suspend,
+-      resume:   e1000_resume
+-#endif
+-};
+-
+-MODULE_AUTHOR("Intel Corporation, <linux.nics@intel.com>");
+-MODULE_DESCRIPTION("Intel(R) PRO/1000 Network Driver");
+-MODULE_LICENSE("GPL");
+-
+-#ifdef EXPORT_SYMTAB
+-EXPORT_SYMBOL(e1000_smbus_lock);
+-#endif
+-
+-/**
+- * e1000_init_module - Driver Registration Routine
+- *
+- * e1000_init_module is the first routine called when the driver is
+- * loaded. All it does is register with the PCI subsystem.
+- **/
+-
+-static int __init
+-e1000_init_module(void)
+-{
+-      int ret;
+-      printk(KERN_INFO "%s - version %s\n",
+-             e1000_driver_string, e1000_driver_version);
+-
+-      printk(KERN_INFO "%s\n", e1000_copyright);
+-
+-      ret = pci_module_init(&e1000_driver);
+-      if(ret >= 0)
+-              register_reboot_notifier(&e1000_notifier);
+-      return ret;
+-}
+-
+-module_init(e1000_init_module);
+-
+-/**
+- * e1000_exit_module - Driver Exit Cleanup Routine
+- *
+- * e1000_exit_module is called just before the driver is removed
+- * from memory.
+- **/
+-
+-static void __exit
+-e1000_exit_module(void)
+-{
+-      unregister_reboot_notifier(&e1000_notifier);
+-      pci_unregister_driver(&e1000_driver);
+-}
+-
+-module_exit(e1000_exit_module);
+-
+-
+-int
+-e1000_up(struct e1000_adapter *adapter)
+-{
+-      struct net_device *netdev = adapter->netdev;
+-
+-      if(request_irq(netdev->irq, &e1000_intr, SA_SHIRQ | SA_SAMPLE_RANDOM,
+-                     netdev->name, netdev))
+-              return -1;
+-
+-      /* hardware has been reset, we need to reload some things */
+-
+-      e1000_set_multi(netdev);
+-#ifdef IANS
+-      if((ANS_PRIVATE_DATA_FIELD(adapter)->tag_mode) != IANS_BD_TAGGING_NONE)
+-          bd_ans_hw_EnableVLAN(adapter);
+-#endif
+-
+-      e1000_configure_tx(adapter);
+-      e1000_setup_rctl(adapter);
+-      e1000_configure_rx(adapter);
+-      e1000_alloc_rx_buffers(adapter);
+-
+-      mod_timer(&adapter->watchdog_timer, jiffies);
+-      e1000_irq_enable(adapter);
+-
+-      return 0;
+-}
+-
+-void
+-e1000_down(struct e1000_adapter *adapter)
+-{
+-      struct net_device *netdev = adapter->netdev;
+-
+-      e1000_irq_disable(adapter);
+-      free_irq(netdev->irq, netdev);
+-      del_timer_sync(&adapter->watchdog_timer);
+-      del_timer_sync(&adapter->phy_info_timer);
+-      adapter->link_speed = 0;
+-      adapter->link_duplex = 0;
+-      netif_carrier_off(netdev);
+-      netif_stop_queue(netdev);
+-
+-      e1000_reset(adapter);
+-      e1000_clean_tx_ring(adapter);
+-      e1000_clean_rx_ring(adapter);
+-}
+-
+-void
+-e1000_reset(struct e1000_adapter *adapter)
+-{
+-      /* Repartition Pba for greater than 9k mtu
+-       * To take effect CTRL.RST is required.
+-       */
+-
+-      if(adapter->rx_buffer_len > E1000_RXBUFFER_8192)
+-              E1000_WRITE_REG(&adapter->hw, PBA, E1000_JUMBO_PBA);
+-      else
+-              E1000_WRITE_REG(&adapter->hw, PBA, E1000_DEFAULT_PBA);
+-
+-      adapter->hw.fc = adapter->hw.original_fc;
+-      down(&adapter->smbus_lock);
+-      e1000_reset_hw(&adapter->hw);
+-      up(&adapter->smbus_lock);
+-      if(adapter->hw.mac_type >= e1000_82544)
+-              E1000_WRITE_REG(&adapter->hw, WUC, 0);
+-      e1000_init_hw(&adapter->hw);
+-      e1000_reset_adaptive(&adapter->hw);
+-      e1000_phy_get_info(&adapter->hw, &adapter->phy_info);
+-}
+-
+-/**
+- * e1000_probe - Device Initialization Routine
+- * @pdev: PCI device information struct
+- * @ent: entry in e1000_pci_tbl
+- *
+- * Returns 0 on success, negative on failure
+- *
+- * e1000_probe initializes an adapter identified by a pci_dev structure.
+- * The OS initialization, configuring of the adapter private structure,
+- * and a hardware reset occur.
+- **/
+-
+-static int __devinit
+-e1000_probe(struct pci_dev *pdev,
+-            const struct pci_device_id *ent)
+-{
+-      struct net_device *netdev;
+-      struct e1000_adapter *adapter;
+-      static int cards_found = 0;
+-      unsigned long mmio_start;
+-      int mmio_len;
+-      int pci_using_dac;
+-      int i;
+-
+-      if((i = pci_enable_device(pdev)))
+-              return i;
+-
+-      if(!(i = pci_set_dma_mask(pdev, PCI_DMA_64BIT))) {
+-              pci_using_dac = 1;
+-      } else {
+-              if((i = pci_set_dma_mask(pdev, PCI_DMA_32BIT))) {
+-                      E1000_ERR("No usable DMA configuration, aborting\n");
+-                      return i;
+-              }
+-              pci_using_dac = 0;
+-      }
+-
+-      if((i = pci_request_regions(pdev, e1000_driver_name)))
+-              return i;
+-
+-      pci_set_master(pdev);
+-
+-      netdev = alloc_etherdev(sizeof(struct e1000_adapter));
+-      if(!netdev)
+-              goto err_alloc_etherdev;
+-
+-      SET_MODULE_OWNER(netdev);
+-
+-      pci_set_drvdata(pdev, netdev);
+-      adapter = netdev->priv;
+-      adapter->netdev = netdev;
+-      adapter->pdev = pdev;
+-      adapter->hw.back = adapter;
+-
+-      mmio_start = pci_resource_start(pdev, BAR_0);
+-      mmio_len = pci_resource_len(pdev, BAR_0);
+-
+-      adapter->hw.hw_addr = ioremap(mmio_start, mmio_len);
+-      if(!adapter->hw.hw_addr)
+-              goto err_ioremap;
+-
+-      for(i = BAR_1; i <= BAR_5; i++) {
+-              if(pci_resource_len(pdev, i) == 0)
+-                      continue;
+-              if(pci_resource_flags(pdev, i) & IORESOURCE_IO) {
+-                      adapter->hw.io_base = pci_resource_start(pdev, i);
+-                      break;
+-              }
+-      }
+-
+-      netdev->open = &e1000_open;
+-      netdev->stop = &e1000_close;
+-      netdev->hard_start_xmit = &e1000_xmit_frame;
+-      netdev->get_stats = &e1000_get_stats;
+-      netdev->set_multicast_list = &e1000_set_multi;
+-      netdev->set_mac_address = &e1000_set_mac;
+-      netdev->change_mtu = &e1000_change_mtu;
+-      netdev->do_ioctl = &e1000_ioctl;
+-#ifdef HAVE_TX_TIMEOUT
+-      netdev->tx_timeout = &e1000_tx_timeout;
+-      netdev->watchdog_timeo = HZ;
+-#endif
+-#ifdef NETIF_F_HW_VLAN_TX
+-      netdev->vlan_rx_register = e1000_vlan_rx_register;
+-      netdev->vlan_rx_add_vid = e1000_vlan_rx_add_vid;
+-      netdev->vlan_rx_kill_vid = e1000_vlan_rx_kill_vid;
+-#endif
+-
+-      netdev->irq = pdev->irq;
+-      netdev->mem_start = mmio_start;
+-      netdev->base_addr = adapter->hw.io_base;
+-
+-      adapter->bd_number = cards_found;
+-      adapter->id_string = e1000_strings[ent->driver_data];
+-
+-      /* setup the private structure */
+-
+-      e1000_sw_init(adapter);
+-
+-#ifdef MAX_SKB_FRAGS
+-      if(adapter->hw.mac_type >= e1000_82543) {
+-#ifdef NETIF_F_HW_VLAN_TX
+-              netdev->features = NETIF_F_SG |
+-                                 NETIF_F_HW_CSUM |
+-                                 NETIF_F_HW_VLAN_TX |
+-                                 NETIF_F_HW_VLAN_RX |
+-                                 NETIF_F_HW_VLAN_FILTER;
+-#else
+-              netdev->features = NETIF_F_SG | NETIF_F_HW_CSUM;
+-#endif
+-      } else {
+-              netdev->features = NETIF_F_SG;
+-      }
+-
+-      if(pci_using_dac)
+-              netdev->features |= NETIF_F_HIGHDMA;
+-#endif
+-
+-      /* make sure the EEPROM is good */
+-
+-      if(e1000_validate_eeprom_checksum(&adapter->hw) < 0) {
+-              printk(KERN_ERR "The EEPROM Checksum Is Not Valid\n");
+-              goto err_eeprom;
+-      }
+-
+-      /* copy the MAC address out of the EEPROM */
+-
+-      e1000_read_mac_addr(&adapter->hw);
+-      memcpy(netdev->dev_addr, adapter->hw.mac_addr, netdev->addr_len);
+-
+-      if(!is_valid_ether_addr(netdev->dev_addr))
+-              goto err_eeprom;
+-
+-      e1000_read_part_num(&adapter->hw, &(adapter->part_num));
+-
+-      e1000_get_bus_info(&adapter->hw);
+-
+-      if((adapter->hw.mac_type == e1000_82544) &&
+-         (adapter->hw.bus_type == e1000_bus_type_pcix))
+-
+-              adapter->max_data_per_txd = 4096;
+-      else
+-              adapter->max_data_per_txd = MAX_JUMBO_FRAME_SIZE;
+-
+-#ifdef IANS
+-      adapter->iANSdata = kmalloc(sizeof(iANSsupport_t), GFP_KERNEL);
+-
+-      if(!adapter->iANSdata)
+-              goto err_eeprom;
+-
+-      memset(adapter->iANSdata, 0, sizeof(iANSsupport_t));
+-      bd_ans_drv_InitANS(adapter, adapter->iANSdata);
+-#endif
+-
+-      init_timer(&adapter->watchdog_timer);
+-      adapter->watchdog_timer.function = &e1000_watchdog;
+-      adapter->watchdog_timer.data = (unsigned long) adapter;
+-
+-      init_timer(&adapter->phy_info_timer);
+-      adapter->phy_info_timer.function = &e1000_update_phy_info;
+-      adapter->phy_info_timer.data = (unsigned long) adapter;
+-
+-      register_netdev(netdev);
+-
+-      /* we're going to reset, so assume we have no link for now */
+-
+-      netif_carrier_off(netdev);
+-      netif_stop_queue(netdev);
+-
+-      printk(KERN_INFO "%s: %s\n", netdev->name, adapter->id_string);
+-      e1000_check_options(adapter);
+-      e1000_proc_dev_setup(adapter);
+-
+-      /* Initial Wake on LAN setting
+-       * If APM wake is enabled in the EEPROM,
+-       * enable the ACPI Magic Packet filter
+-       */
+-
+-      if((adapter->hw.mac_type >= e1000_82544) &&
+-         (E1000_READ_REG(&adapter->hw, WUC) & E1000_WUC_APME))
+-              adapter->wol |= E1000_WUFC_MAG;
+-
+-      /* reset the hardware with the new settings */
+-
+-      e1000_reset(adapter);
+-
+-      cards_found++;
+-      return 0;
+-
+-err_eeprom:
+-      iounmap(adapter->hw.hw_addr);
+-err_ioremap:
+-      pci_release_regions(pdev);
+-      kfree(netdev);
+-err_alloc_etherdev:
+-      return -ENOMEM;
+-}
+-
+-/**
+- * e1000_remove - Device Removal Routine
+- * @pdev: PCI device information struct
+- *
+- * e1000_remove is called by the PCI subsystem to alert the driver
+- * that it should release a PCI device.  The could be caused by a
+- * Hot-Plug event, or because the driver is going to be removed from
+- * memory.
+- **/
+-
+-static void __devexit
+-e1000_remove(struct pci_dev *pdev)
+-{
+-      struct net_device *netdev = pci_get_drvdata(pdev);
+-      struct e1000_adapter *adapter = netdev->priv;
+-
+-      e1000_smbus_arp_enable(adapter, TRUE);
+-
+-      unregister_netdev(netdev);
+-
+-      e1000_phy_hw_reset(&adapter->hw);
+-
+-      e1000_proc_dev_free(adapter);
+-
+-#ifdef IANS
+-      if(adapter->iANSdata)
+-              kfree(adapter->iANSdata);
+-#endif
+-      iounmap(adapter->hw.hw_addr);
+-      pci_release_regions(pdev);
+-
+-      kfree(netdev);
+-}
+-
+-/**
+- * e1000_sw_init - Initialize general software structures (struct e1000_adapter)
+- * @adapter: board private structure to initialize
+- *
+- * e1000_sw_init initializes the Adapter private data structure.
+- * Fields are initialized based on PCI device information and
+- * OS network device settings (MTU size).
+- **/
+-
+-static void __devinit
+-e1000_sw_init(struct e1000_adapter *adapter)
+-{
+-      struct e1000_hw *hw = &adapter->hw;
+-      struct net_device *netdev = adapter->netdev;
+-      struct pci_dev *pdev = adapter->pdev;
+-
+-      /* PCI config space info */
+-
+-      pci_read_config_word(pdev, PCI_VENDOR_ID, &hw->vendor_id);
+-      pci_read_config_word(pdev, PCI_DEVICE_ID, &hw->device_id);
+-      pci_read_config_byte(pdev, PCI_REVISION_ID, &hw->revision_id);
+-      pci_read_config_word(pdev, PCI_SUBSYSTEM_VENDOR_ID,
+-                             &hw->subsystem_vendor_id);
+-      pci_read_config_word(pdev, PCI_SUBSYSTEM_ID, &hw->subsystem_id);
+-
+-      pci_read_config_word(pdev, PCI_COMMAND, &hw->pci_cmd_word);
+-
+-      adapter->rx_buffer_len = E1000_RXBUFFER_2048;
+-      hw->max_frame_size = netdev->mtu +
+-                               ENET_HEADER_SIZE + ETHERNET_FCS_SIZE;
+-      hw->min_frame_size = MINIMUM_ETHERNET_FRAME_SIZE;
+-
+-      /* identify the MAC */
+-
+-      if (e1000_set_mac_type(hw)) {
+-              E1000_ERR("Unknown MAC Type\n");
+-              BUG();
+-      }
+-
+-      /* flow control settings */
+-
+-      hw->fc_high_water = FC_DEFAULT_HI_THRESH;
+-      hw->fc_low_water = FC_DEFAULT_LO_THRESH;
+-      hw->fc_pause_time = FC_DEFAULT_TX_TIMER;
+-      hw->fc_send_xon = 1;
+-
+-      /* Media type - copper or fiber */
+-
+-      if(hw->mac_type >= e1000_82543) {
+-              uint32_t status = E1000_READ_REG(hw, STATUS);
+-
+-              if(status & E1000_STATUS_TBIMODE)
+-                      hw->media_type = e1000_media_type_fiber;
+-              else
+-                      hw->media_type = e1000_media_type_copper;
+-      } else {
+-              hw->media_type = e1000_media_type_fiber;
+-      }
+-
+-      if(hw->mac_type < e1000_82543)
+-              hw->report_tx_early = 0;
+-      else
+-              hw->report_tx_early = 1;
+-
+-      hw->wait_autoneg_complete = FALSE;
+-      hw->tbi_compatibility_en = TRUE;
+-      hw->adaptive_ifs = TRUE;
+-
+-      /* Copper options */
+-      
+-      if(hw->media_type == e1000_media_type_copper) {
+-              hw->mdix = AUTO_ALL_MODES;
+-              hw->disable_polarity_correction = FALSE;
+-      }
+-
+-      atomic_set(&adapter->irq_sem, 1);
+-      spin_lock_init(&adapter->stats_lock);
+-      init_MUTEX(&adapter->smbus_lock);
+-}
+-
+-/**
+- * e1000_open - Called when a network interface is made active
+- * @netdev: network interface device structure
+- *
+- * Returns 0 on success, negative value on failure
+- *
+- * The open entry point is called when a network interface is made
+- * active by the system (IFF_UP).  At this point all resources needed
+- * for transmit and receive operations are allocated, the interrupt
+- * handler is registered with the OS, the watchdog timer is started,
+- * and the stack is notified that the interface is ready.
+- **/
+-
+-static int
+-e1000_open(struct net_device *netdev)
+-{
+-      struct e1000_adapter *adapter = netdev->priv;
+-
+-      /* allocate transmit descriptors */
+-
+-      if(e1000_setup_tx_resources(adapter))
+-              goto err_setup_tx;
+-
+-      /* allocate receive descriptors */
+-
+-      if(e1000_setup_rx_resources(adapter))
+-              goto err_setup_rx;
+-
+-      if(e1000_up(adapter))
+-              goto err_up;
+-
+-      MOD_INC_USE_COUNT;
+-      return 0;
+-
+-err_up:
+-      e1000_free_rx_resources(adapter);
+-err_setup_rx:
+-      e1000_free_tx_resources(adapter);
+-err_setup_tx:
+-      e1000_reset(adapter);
+-
+-      return -EBUSY;
+-}
+-
+-/**
+- * e1000_close - Disables a network interface
+- * @netdev: network interface device structure
+- *
+- * Returns 0, this is not allowed to fail
+- *
+- * The close entry point is called when an interface is de-activated
+- * by the OS.  The hardware is still under the drivers control, but
+- * needs to be disabled.  A global MAC reset is issued to stop the
+- * hardware, and all transmit and receive resources are freed.
+- **/
+-
+-static int
+-e1000_close(struct net_device *netdev)
+-{
+-      struct e1000_adapter *adapter = netdev->priv;
+-
+-      e1000_down(adapter);
+-
+-      e1000_free_tx_resources(adapter);
+-      e1000_free_rx_resources(adapter);
+-
+-      MOD_DEC_USE_COUNT;
+-      return 0;
+-}
+-
+-/**
+- * e1000_setup_tx_resources - allocate Tx resources (Descriptors)
+- * @adapter: board private structure
+- *
+- * Return 0 on success, negative on failure
+- **/
+-
+-static int
+-e1000_setup_tx_resources(struct e1000_adapter *adapter)
+-{
+-      struct e1000_desc_ring *txdr = &adapter->tx_ring;
+-      struct pci_dev *pdev = adapter->pdev;
+-      int size;
+-
+-      size = sizeof(struct e1000_buffer) * txdr->count;
+-      txdr->buffer_info = kmalloc(size, GFP_KERNEL);
+-      if(!txdr->buffer_info) {
+-              return -ENOMEM;
+-      }
+-      memset(txdr->buffer_info, 0, size);
+-
+-      /* round up to nearest 4K */
+-
+-      txdr->size = txdr->count * sizeof(struct e1000_tx_desc);
+-      E1000_ROUNDUP(txdr->size, 4096);
+-
+-      txdr->desc = pci_alloc_consistent(pdev, txdr->size, &txdr->dma);
+-      if(!txdr->desc) {
+-              kfree(txdr->buffer_info);
+-              return -ENOMEM;
+-      }
+-      memset(txdr->desc, 0, txdr->size);
+-
+-      txdr->next_to_use = 0;
+-      txdr->next_to_clean = 0;
+-
+-      return 0;
+-}
+-
+-/**
+- * e1000_configure_tx - Configure 8254x Transmit Unit after Reset
+- * @adapter: board private structure
+- *
+- * Configure the Tx unit of the MAC after a reset.
+- **/
+-
+-static void
+-e1000_configure_tx(struct e1000_adapter *adapter)
+-{
+-      uint64_t tdba = adapter->tx_ring.dma;
+-      uint32_t tdlen = adapter->tx_ring.count * sizeof(struct e1000_tx_desc);
+-      uint32_t tctl, tipg;
+-
+-      E1000_WRITE_REG(&adapter->hw, TDBAL, (tdba & 0x00000000ffffffffULL));
+-      E1000_WRITE_REG(&adapter->hw, TDBAH, (tdba >> 32));
+-
+-      E1000_WRITE_REG(&adapter->hw, TDLEN, tdlen);
+-
+-      /* Setup the HW Tx Head and Tail descriptor pointers */
+-
+-      E1000_WRITE_REG(&adapter->hw, TDH, 0);
+-      E1000_WRITE_REG(&adapter->hw, TDT, 0);
+-
+-      /* Set the default values for the Tx Inter Packet Gap timer */
+-
+-      switch (adapter->hw.mac_type) {
+-      case e1000_82542_rev2_0:
+-      case e1000_82542_rev2_1:
+-              tipg = DEFAULT_82542_TIPG_IPGT;
+-              tipg |= DEFAULT_82542_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
+-              tipg |= DEFAULT_82542_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
+-              break;
+-      default:
+-              if(adapter->hw.media_type == e1000_media_type_fiber)
+-                      tipg = DEFAULT_82543_TIPG_IPGT_FIBER;
+-              else
+-                      tipg = DEFAULT_82543_TIPG_IPGT_COPPER;
+-              tipg |= DEFAULT_82543_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
+-              tipg |= DEFAULT_82543_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
+-      }
+-      E1000_WRITE_REG(&adapter->hw, TIPG, tipg);
+-
+-      /* Set the Tx Interrupt Delay register */
+-
+-      E1000_WRITE_REG(&adapter->hw, TIDV, adapter->tx_int_delay);
+-      if(adapter->hw.mac_type >= e1000_82540)
+-              E1000_WRITE_REG(&adapter->hw, TADV, adapter->tx_abs_int_delay);
+-
+-      /* Program the Transmit Control Register */
+-
+-      tctl = E1000_READ_REG(&adapter->hw, TCTL);
+-
+-      tctl &= ~E1000_TCTL_CT;
+-      tctl |= E1000_TCTL_EN | E1000_TCTL_PSP |
+-             (E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT);
+-
+-      E1000_WRITE_REG(&adapter->hw, TCTL, tctl);
+-
+-      e1000_config_collision_dist(&adapter->hw);
+-
+-      /* Setup Transmit Descriptor Settings for this adapter */
+-      adapter->txd_cmd = E1000_TXD_CMD_IFCS | E1000_TXD_CMD_IDE;
+-
+-      if(adapter->hw.report_tx_early == 1)
+-              adapter->txd_cmd |= E1000_TXD_CMD_RS;
+-      else
+-              adapter->txd_cmd |= E1000_TXD_CMD_RPS;
+-}
+-
+-/**
+- * e1000_setup_rx_resources - allocate Rx resources (Descriptors)
+- * @adapter: board private structure
+- *
+- * Returns 0 on success, negative on failure
+- **/
+-
+-static int
+-e1000_setup_rx_resources(struct e1000_adapter *adapter)
+-{
+-      struct e1000_desc_ring *rxdr = &adapter->rx_ring;
+-      struct pci_dev *pdev = adapter->pdev;
+-      int size;
+-
+-      size = sizeof(struct e1000_buffer) * rxdr->count;
+-      rxdr->buffer_info = kmalloc(size, GFP_KERNEL);
+-      if(!rxdr->buffer_info) {
+-              return -ENOMEM;
+-      }
+-      memset(rxdr->buffer_info, 0, size);
+-
+-      /* Round up to nearest 4K */
+-
+-      rxdr->size = rxdr->count * sizeof(struct e1000_rx_desc);
+-      E1000_ROUNDUP(rxdr->size, 4096);
+-
+-      rxdr->desc = pci_alloc_consistent(pdev, rxdr->size, &rxdr->dma);
+-
+-      if(!rxdr->desc) {
+-              kfree(rxdr->buffer_info);
+-              return -ENOMEM;
+-      }
+-      memset(rxdr->desc, 0, rxdr->size);
+-
+-      rxdr->next_to_clean = 0;
+-      rxdr->next_to_use = 0;
+-
+-      return 0;
+-}
+-
+-/**
+- * e1000_setup_rctl - configure the receive control register
+- * @adapter: Board private structure
+- **/
+-
+-static void
+-e1000_setup_rctl(struct e1000_adapter *adapter)
+-{
+-      uint32_t rctl;
+-
+-      rctl = E1000_READ_REG(&adapter->hw, RCTL);
+-
+-      rctl &= ~(3 << E1000_RCTL_MO_SHIFT);
+-
+-      rctl |= E1000_RCTL_EN | E1000_RCTL_BAM |
+-              E1000_RCTL_LBM_NO | E1000_RCTL_RDMTS_HALF |
+-              (adapter->hw.mc_filter_type << E1000_RCTL_MO_SHIFT);
+-
+-      if(adapter->hw.tbi_compatibility_on == 1)
+-              rctl |= E1000_RCTL_SBP;
+-      else
+-              rctl &= ~E1000_RCTL_SBP;
+-
+-      rctl &= ~(E1000_RCTL_SZ_4096);
+-      switch (adapter->rx_buffer_len) {
+-      case E1000_RXBUFFER_2048:
+-      default:
+-              rctl |= E1000_RCTL_SZ_2048;
+-              rctl &= ~(E1000_RCTL_BSEX | E1000_RCTL_LPE);
+-              break;
+-      case E1000_RXBUFFER_4096:
+-              rctl |= E1000_RCTL_SZ_4096 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
+-              break;
+-      case E1000_RXBUFFER_8192:
+-              rctl |= E1000_RCTL_SZ_8192 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
+-              break;
+-      case E1000_RXBUFFER_16384:
+-              rctl |= E1000_RCTL_SZ_16384 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
+-              break;
+-      }
+-
+-      E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
+-}
+-
+-/**
+- * e1000_configure_rx - Configure 8254x Receive Unit after Reset
+- * @adapter: board private structure
+- *
+- * Configure the Rx unit of the MAC after a reset.
+- **/
+-
+-static void
+-e1000_configure_rx(struct e1000_adapter *adapter)
+-{
+-      uint64_t rdba = adapter->rx_ring.dma;
+-      uint32_t rdlen = adapter->rx_ring.count * sizeof(struct e1000_rx_desc);
+-      uint32_t rctl;
+-      uint32_t rxcsum;
+-
+-      /* make sure receives are disabled while setting up the descriptors */
+-
+-      rctl = E1000_READ_REG(&adapter->hw, RCTL);
+-      E1000_WRITE_REG(&adapter->hw, RCTL, rctl & ~E1000_RCTL_EN);
+-
+-      /* set the Receive Delay Timer Register */
+-
+-      if(adapter->hw.mac_type >= e1000_82540) {
+-              E1000_WRITE_REG(&adapter->hw, RDTR, adapter->rx_int_delay);
+-              E1000_WRITE_REG(&adapter->hw, RADV, adapter->rx_abs_int_delay);
+-
+-              /* Set the interrupt throttling rate.  Value is calculated
+-               * as DEFAULT_ITR = 1/(MAX_INTS_PER_SEC * 256ns) */
+-#define MAX_INTS_PER_SEC        8000
+-#define DEFAULT_ITR             1000000000/(MAX_INTS_PER_SEC * 256)
+-              E1000_WRITE_REG(&adapter->hw, ITR, DEFAULT_ITR);
+-
+-#ifdef HAVE_TX_TIMEOUT
+-      } else {
+-              E1000_WRITE_REG(&adapter->hw, RDTR, adapter->rx_int_delay);
+-#endif
+-      }
+-
+-      /* Setup the Base and Length of the Rx Descriptor Ring */
+-
+-      E1000_WRITE_REG(&adapter->hw, RDBAL, (rdba & 0x00000000ffffffffULL));
+-      E1000_WRITE_REG(&adapter->hw, RDBAH, (rdba >> 32));
+-
+-      E1000_WRITE_REG(&adapter->hw, RDLEN, rdlen);
+-
+-      /* Setup the HW Rx Head and Tail Descriptor Pointers */
+-      E1000_WRITE_REG(&adapter->hw, RDH, 0);
+-      E1000_WRITE_REG(&adapter->hw, RDT, 0);
+-
+-      /* Enable 82543 Receive Checksum Offload for TCP and UDP */
+-      if((adapter->hw.mac_type >= e1000_82543) &&
+-         (adapter->rx_csum == TRUE)) {
+-              rxcsum = E1000_READ_REG(&adapter->hw, RXCSUM);
+-              rxcsum |= E1000_RXCSUM_TUOFL;
+-              E1000_WRITE_REG(&adapter->hw, RXCSUM, rxcsum);
+-      }
+-
+-      /* Enable Receives */
+-
+-      E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
+-}
+-
+-/**
+- * e1000_free_tx_resources - Free Tx Resources
+- * @adapter: board private structure
+- *
+- * Free all transmit software resources
+- **/
+-
+-static void
+-e1000_free_tx_resources(struct e1000_adapter *adapter)
+-{
+-      struct pci_dev *pdev = adapter->pdev;
+-
+-      e1000_clean_tx_ring(adapter);
+-
+-      kfree(adapter->tx_ring.buffer_info);
+-      adapter->tx_ring.buffer_info = NULL;
+-
+-      pci_free_consistent(pdev, adapter->tx_ring.size,
+-                          adapter->tx_ring.desc, adapter->tx_ring.dma);
+-
+-      adapter->tx_ring.desc = NULL;
+-}
+-
+-/**
+- * e1000_clean_tx_ring - Free Tx Buffers
+- * @adapter: board private structure
+- **/
+-
+-static void
+-e1000_clean_tx_ring(struct e1000_adapter *adapter)
+-{
+-      struct pci_dev *pdev = adapter->pdev;
+-      unsigned long size;
+-      int i;
+-
+-      /* Free all the Tx ring sk_buffs */
+-
+-      for(i = 0; i < adapter->tx_ring.count; i++) {
+-              if(adapter->tx_ring.buffer_info[i].skb) {
+-
+-                      pci_unmap_page(pdev,
+-                                     adapter->tx_ring.buffer_info[i].dma,
+-                                     adapter->tx_ring.buffer_info[i].length,
+-                                     PCI_DMA_TODEVICE);
+-
+-                      dev_kfree_skb(adapter->tx_ring.buffer_info[i].skb);
+-
+-                      adapter->tx_ring.buffer_info[i].skb = NULL;
+-              }
+-      }
+-
+-      size = sizeof(struct e1000_buffer) * adapter->tx_ring.count;
+-      memset(adapter->tx_ring.buffer_info, 0, size);
+-
+-      /* Zero out the descriptor ring */
+-
+-      memset(adapter->tx_ring.desc, 0, adapter->tx_ring.size);
+-
+-      adapter->tx_ring.next_to_use = 0;
+-      adapter->tx_ring.next_to_clean = 0;
+-
+-      E1000_WRITE_REG(&adapter->hw, TDH, 0);
+-      E1000_WRITE_REG(&adapter->hw, TDT, 0);
+-}
+-
+-/**
+- * e1000_free_rx_resources - Free Rx Resources
+- * @adapter: board private structure
+- *
+- * Free all receive software resources
+- **/
+-
+-static void
+-e1000_free_rx_resources(struct e1000_adapter *adapter)
+-{
+-      struct pci_dev *pdev = adapter->pdev;
+-
+-      e1000_clean_rx_ring(adapter);
+-
+-      kfree(adapter->rx_ring.buffer_info);
+-      adapter->rx_ring.buffer_info = NULL;
+-
+-      pci_free_consistent(pdev, adapter->rx_ring.size,
+-                          adapter->rx_ring.desc, adapter->rx_ring.dma);
+-
+-      adapter->rx_ring.desc = NULL;
+-}
+-
+-/**
+- * e1000_clean_rx_ring - Free Rx Buffers
+- * @adapter: board private structure
+- **/
+-
+-static void
+-e1000_clean_rx_ring(struct e1000_adapter *adapter)
+-{
+-      struct pci_dev *pdev = adapter->pdev;
+-      unsigned long size;
+-      int i;
+-
+-      /* Free all the Rx ring sk_buffs */
+-
+-      for(i = 0; i < adapter->rx_ring.count; i++) {
+-              if(adapter->rx_ring.buffer_info[i].skb) {
+-
+-                      pci_unmap_single(pdev,
+-                                       adapter->rx_ring.buffer_info[i].dma,
+-                                       adapter->rx_ring.buffer_info[i].length,
+-                                       PCI_DMA_FROMDEVICE);
+-
+-                      dev_kfree_skb(adapter->rx_ring.buffer_info[i].skb);
+-
+-                      adapter->rx_ring.buffer_info[i].skb = NULL;
+-              }
+-      }
+-
+-      size = sizeof(struct e1000_buffer) * adapter->rx_ring.count;
+-      memset(adapter->rx_ring.buffer_info, 0, size);
+-
+-      /* Zero out the descriptor ring */
+-
+-      memset(adapter->rx_ring.desc, 0, adapter->rx_ring.size);
+-
+-      adapter->rx_ring.next_to_clean = 0;
+-      adapter->rx_ring.next_to_use = 0;
+-
+-      E1000_WRITE_REG(&adapter->hw, RDH, 0);
+-      E1000_WRITE_REG(&adapter->hw, RDT, 0);
+-}
+-
+-/* The 82542 2.0 (revision 2) needs to have the receive unit in reset
+- * and memory write and invalidate disabled for certain operations
+- */
+-static void
+-e1000_enter_82542_rst(struct e1000_adapter *adapter)
+-{
+-      struct net_device *netdev = adapter->netdev;
+-      uint32_t rctl;
+-
+-      e1000_pci_clear_mwi(&adapter->hw);
+-
+-      rctl = E1000_READ_REG(&adapter->hw, RCTL);
+-      rctl |= E1000_RCTL_RST;
+-      E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
+-      E1000_WRITE_FLUSH(&adapter->hw);
+-      mdelay(5);
+-
+-      if(netif_running(netdev))
+-              e1000_clean_rx_ring(adapter);
+-}
+-
+-static void
+-e1000_leave_82542_rst(struct e1000_adapter *adapter)
+-{
+-      struct net_device *netdev = adapter->netdev;
+-      uint32_t rctl;
+-
+-      rctl = E1000_READ_REG(&adapter->hw, RCTL);
+-      rctl &= ~E1000_RCTL_RST;
+-      E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
+-      E1000_WRITE_FLUSH(&adapter->hw);
+-      mdelay(5);
+-
+-      if(adapter->hw.pci_cmd_word & PCI_COMMAND_INVALIDATE)
+-              e1000_pci_set_mwi(&adapter->hw);
+-
+-      if(netif_running(netdev)) {
+-              e1000_configure_rx(adapter);
+-              e1000_alloc_rx_buffers(adapter);
+-      }
+-}
+-
+-/**
+- * e1000_set_mac - Change the Ethernet Address of the NIC
+- * @netdev: network interface device structure
+- * @p: pointer to an address structure
+- *
+- * Returns 0 on success, negative on failure
+- **/
+-
+-static int
+-e1000_set_mac(struct net_device *netdev, void *p)
+-{
+-      struct e1000_adapter *adapter = netdev->priv;
+-      struct sockaddr *addr = p;
+-
+-      /* 82542 2.0 needs to be in reset to write receive address registers */
+-
+-      if(adapter->hw.mac_type == e1000_82542_rev2_0)
+-              e1000_enter_82542_rst(adapter);
+-
+-      memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
+-      memcpy(adapter->hw.mac_addr, addr->sa_data, netdev->addr_len);
+-
+-      e1000_rar_set(&adapter->hw, adapter->hw.mac_addr, 0);
+-
+-      if(adapter->hw.mac_type == e1000_82542_rev2_0)
+-              e1000_leave_82542_rst(adapter);
+-
+-      return 0;
+-}
+-
+-/**
+- * e1000_set_multi - Multicast and Promiscuous mode set
+- * @netdev: network interface device structure
+- *
+- * The set_multi entry point is called whenever the multicast address
+- * list or the network interface flags are updated.  This routine is
+- * resposible for configuring the hardware for proper multicast,
+- * promiscuous mode, and all-multi behavior.
+- **/
+-
+-static void
+-e1000_set_multi(struct net_device *netdev)
+-{
+-      struct e1000_adapter *adapter = netdev->priv;
+-      struct e1000_hw *hw = &adapter->hw;
+-      struct dev_mc_list *mc_ptr;
+-      uint32_t rctl;
+-      uint32_t hash_value;
+-      int i;
+-
+-      /* Check for Promiscuous and All Multicast modes */
+-
+-      rctl = E1000_READ_REG(hw, RCTL);
+-
+-      if(netdev->flags & IFF_PROMISC) {
+-              rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE);
+-      } else if(netdev->flags & IFF_ALLMULTI) {
+-              rctl |= E1000_RCTL_MPE;
+-              rctl &= ~E1000_RCTL_UPE;
+-      } else {
+-              rctl &= ~(E1000_RCTL_UPE | E1000_RCTL_MPE);
+-      }
+-
+-      E1000_WRITE_REG(hw, RCTL, rctl);
+-
+-      /* 82542 2.0 needs to be in reset to write receive address registers */
+-
+-      if(hw->mac_type == e1000_82542_rev2_0)
+-              e1000_enter_82542_rst(adapter);
+-
+-      /* load the first 15 multicast address into the exact filters 1-15
+-       * RAR 0 is used for the station MAC adddress
+-       * if there are not 15 addresses, go ahead and clear the filters
+-       */
+-      mc_ptr = netdev->mc_list;
+-
+-      for(i = 1; i < E1000_RAR_ENTRIES; i++) {
+-              if(mc_ptr) {
+-                      e1000_rar_set(hw, mc_ptr->dmi_addr, i);
+-                      mc_ptr = mc_ptr->next;
+-              } else {
+-                      E1000_WRITE_REG_ARRAY(hw, RA, i << 1, 0);
+-                      E1000_WRITE_REG_ARRAY(hw, RA, (i << 1) + 1, 0);
+-              }
+-      }
+-
+-      /* clear the old settings from the multicast hash table */
+-
+-      for(i = 0; i < E1000_NUM_MTA_REGISTERS; i++)
+-              E1000_WRITE_REG_ARRAY(hw, MTA, i, 0);
+-
+-      /* load any remaining addresses into the hash table */
+-
+-      for(; mc_ptr; mc_ptr = mc_ptr->next) {
+-              hash_value = e1000_hash_mc_addr(hw, mc_ptr->dmi_addr);
+-              e1000_mta_set(hw, hash_value);
+-      }
+-
+-      if(hw->mac_type == e1000_82542_rev2_0)
+-              e1000_leave_82542_rst(adapter);
+-}
+-
+-#ifdef IANS
+-
+-static void
+-e1000_tx_flush(struct e1000_adapter *adapter)
+-{
+-      uint32_t ctrl, tctl, txcw, icr;
+-
+-      e1000_irq_disable(adapter);
+-
+-      /* TODO , does the ILOS trick work for 82542 also? */
+-
+-      if(adapter->hw.mac_type < e1000_82543) {
+-              /* Transmit Unit Reset */
+-
+-              tctl = E1000_READ_REG(&adapter->hw, TCTL);
+-              E1000_WRITE_REG(&adapter->hw, TCTL, tctl | E1000_TCTL_RST);
+-              E1000_WRITE_REG(&adapter->hw, TCTL, tctl);
+-              e1000_clean_tx_ring(adapter);
+-              e1000_configure_tx(adapter);
+-
+-      } else {
+-              /* turn off autoneg, set link up, and invert loss of signal */
+-
+-              txcw = E1000_READ_REG(&adapter->hw, TXCW);
+-              E1000_WRITE_REG(&adapter->hw, TXCW, txcw & ~E1000_TXCW_ANE);
+-
+-              ctrl = E1000_READ_REG(&adapter->hw, CTRL);
+-              E1000_WRITE_REG(&adapter->hw, CTRL, ctrl | E1000_CTRL_SLU | E1000_CTRL_ILOS);
+-
+-              /* delay to flush queue, then clean up */
+-
+-              mdelay(10);
+-
+-              e1000_clean_tx_irq(adapter);
+-              E1000_WRITE_REG(&adapter->hw, CTRL, ctrl);
+-              E1000_WRITE_REG(&adapter->hw, TXCW, txcw);
+-
+-              /* clear the link status change interrupts this caused */
+-
+-              icr = E1000_READ_REG(&adapter->hw, ICR);
+-      }
+-
+-      e1000_irq_enable(adapter);
+-}
+-
+-#endif
+-
+-/* need to wait a few seconds after link up to get diagnostic information from the phy */
+-
+-static void
+-e1000_update_phy_info(unsigned long data)
+-{
+-      struct e1000_adapter *adapter = (struct e1000_adapter *) data;
+-      e1000_phy_get_info(&adapter->hw, &adapter->phy_info);
+-}
+-
+-/**
+- * e1000_watchdog - Timer Call-back
+- * @data: pointer to netdev cast into an unsigned long
+- **/
+-
+-static void
+-e1000_watchdog(unsigned long data)
+-{
+-      struct e1000_adapter *adapter = (struct e1000_adapter *) data;
+-      struct net_device *netdev = adapter->netdev;
+-      struct e1000_desc_ring *txdr = &adapter->tx_ring;
+-      int i;
+-
+-      e1000_check_for_link(&adapter->hw);
+-
+-      if(E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU) {
+-              if(!netif_carrier_ok(netdev)) {
+-#ifdef IANS
+-                      if((adapter->iANSdata->iANS_status == IANS_COMMUNICATION_UP) &&
+-                         (adapter->iANSdata->reporting_mode == IANS_STATUS_REPORTING_ON))
+-                              if(ans_notify)
+-                                      ans_notify(netdev, IANS_IND_XMIT_QUEUE_READY);
+-#endif
+-                      e1000_get_speed_and_duplex(&adapter->hw,
+-                                                 &adapter->link_speed,
+-                                                 &adapter->link_duplex);
+-
+-                      printk(KERN_INFO
+-                             "e1000: %s NIC Link is Up %d Mbps %s\n",
+-                             netdev->name, adapter->link_speed,
+-                             adapter->link_duplex == FULL_DUPLEX ?
+-                             "Full Duplex" : "Half Duplex");
+-
+-                      netif_carrier_on(netdev);
+-                      netif_wake_queue(netdev);
+-                      mod_timer(&adapter->phy_info_timer, jiffies + 2 * HZ);
+-              }
+-      } else {
+-              if(netif_carrier_ok(netdev)) {
+-                      adapter->link_speed = 0;
+-                      adapter->link_duplex = 0;
+-                      printk(KERN_INFO
+-                             "e1000: %s NIC Link is Down\n",
+-                             netdev->name);
+-                      netif_carrier_off(netdev);
+-                      netif_stop_queue(netdev);
+-                      mod_timer(&adapter->phy_info_timer, jiffies + 2 * HZ);
+-              }
+-      }
+-
+-      e1000_update_stats(adapter);
+-      e1000_update_adaptive(&adapter->hw);
+-
+-#ifdef IANS
+-{
+-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0))
+-      unsigned long flags;
+-#endif
+-      if(adapter->iANSdata->iANS_status == IANS_COMMUNICATION_UP) {
+-
+-              if(adapter->iANSdata->reporting_mode == IANS_STATUS_REPORTING_ON)
+-                      bd_ans_os_Watchdog(netdev, adapter);
+-
+-              if(!netif_carrier_ok(netdev)) {
+-                      /* don't sit on SKBs while link is down */
+-
+-                      if(E1000_DESC_UNUSED(&adapter->tx_ring) + 1 < adapter->tx_ring.count) {
+-
+-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0))
+-                              spin_lock_irqsave(&netdev->xmit_lock, flags);
+-                              e1000_tx_flush(adapter);
+-                              spin_unlock_irqrestore(&netdev->xmit_lock, flags);
+-#else
+-                              e1000_tx_flush(adapter);
+-#endif
+-                      }
+-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0))
+-                      spin_lock_irqsave(&netdev->queue_lock, flags);
+-                      qdisc_reset(netdev->qdisc);
+-                      spin_unlock_irqrestore(&netdev->queue_lock, flags);
+-#else
+-                      qdisc_reset(netdev->qdisc);
+-#endif
+-              }
+-      }
+-}
+-#endif
+-      /* Early detection of hung controller */
+-      i = txdr->next_to_clean;
+-      if(txdr->buffer_info[i].dma &&
+-         time_after(jiffies, txdr->buffer_info[i].time_stamp + HZ) &&
+-         !(E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_TXOFF))
+-              netif_stop_queue(netdev);
+-
+-      /* Reset the timer */
+-      mod_timer(&adapter->watchdog_timer, jiffies + 2 * HZ);
+-}
+-
+-#define E1000_TX_FLAGS_CSUM           0x00000001
+-#define E1000_TX_FLAGS_VLAN           0x00000002
+-#define E1000_TX_FLAGS_VLAN_MASK      0xffff0000
+-#define E1000_TX_FLAGS_VLAN_SHIFT     16
+-
+-static inline boolean_t
+-e1000_tx_csum(struct e1000_adapter *adapter, struct sk_buff *skb)
+-{
+-      struct e1000_context_desc *context_desc;
+-      int i;
+-      uint8_t css, cso;
+-
+-      if(skb->ip_summed == CHECKSUM_HW) {
+-              css = skb->h.raw - skb->data;
+-              cso = (skb->h.raw + skb->csum) - skb->data;
+-
+-              i = adapter->tx_ring.next_to_use;
+-              context_desc = E1000_CONTEXT_DESC(adapter->tx_ring, i);
+-
+-              context_desc->upper_setup.tcp_fields.tucss = css;
+-              context_desc->upper_setup.tcp_fields.tucso = cso;
+-              context_desc->upper_setup.tcp_fields.tucse = 0;
+-              context_desc->tcp_seg_setup.data = 0;
+-              context_desc->cmd_and_length =
+-                      cpu_to_le32(adapter->txd_cmd | E1000_TXD_CMD_DEXT);
+-
+-              i = (i + 1) % adapter->tx_ring.count;
+-              adapter->tx_ring.next_to_use = i;
+-
+-              return TRUE;
+-      }
+-
+-      return FALSE;
+-}
+-
+-static inline int
+-e1000_tx_map(struct e1000_adapter *adapter, struct sk_buff *skb)
+-{
+-      struct e1000_desc_ring *tx_ring = &adapter->tx_ring;
+-      int len, offset, size, count, i;
+-
+-#ifdef MAX_SKB_FRAGS
+-      int f;
+-      len = skb->len - skb->data_len;
+-#else
+-      len = skb->len;
+-#endif
+-
+-      i = (tx_ring->next_to_use + tx_ring->count - 1) % tx_ring->count;
+-      count = 0;
+-
+-      offset = 0;
+-
+-      while(len) {
+-              i = (i + 1) % tx_ring->count;
+-              size = min(len, adapter->max_data_per_txd);
+-              tx_ring->buffer_info[i].length = size;
+-              tx_ring->buffer_info[i].dma =
+-                      pci_map_single(adapter->pdev,
+-                              skb->data + offset,
+-                              size,
+-                              PCI_DMA_TODEVICE);
+-              tx_ring->buffer_info[i].time_stamp = jiffies;
+-
+-              len -= size;
+-              offset += size;
+-              count++;
+-      }
+-
+-#ifdef MAX_SKB_FRAGS
+-      for(f = 0; f < skb_shinfo(skb)->nr_frags; f++) {
+-              struct skb_frag_struct *frag;
+-
+-              frag = &skb_shinfo(skb)->frags[f];
+-              len = frag->size;
+-              offset = 0;
+-
+-              while(len) {
+-                      i = (i + 1) % tx_ring->count;
+-                      size = min(len, adapter->max_data_per_txd);
+-                      tx_ring->buffer_info[i].length = size;
+-                      tx_ring->buffer_info[i].dma =
+-                              pci_map_page(adapter->pdev,
+-                                      frag->page,
+-                                      frag->page_offset + offset,
+-                                      size,
+-                                      PCI_DMA_TODEVICE);
+-
+-                      len -= size;
+-                      offset += size;
+-                      count++;
+-              }
+-      }
+-#endif
+-      tx_ring->buffer_info[i].skb = skb;
+-
+-      return count;
+-}
+-
+-static inline void
+-e1000_tx_queue(struct e1000_adapter *adapter, int count, int tx_flags)
+-{
+-      struct e1000_desc_ring *tx_ring = &adapter->tx_ring;
+-      struct e1000_tx_desc *tx_desc = NULL;
+-      uint32_t txd_upper, txd_lower;
+-      int i;
+-
+-      txd_upper = 0;
+-      txd_lower = adapter->txd_cmd;
+-
+-      if(tx_flags & E1000_TX_FLAGS_CSUM) {
+-              txd_lower |= E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
+-              txd_upper |= E1000_TXD_POPTS_TXSM << 8;
+-      }
+-
+-      if(tx_flags & E1000_TX_FLAGS_VLAN) {
+-              txd_lower |= E1000_TXD_CMD_VLE;
+-              txd_upper |= (tx_flags & E1000_TX_FLAGS_VLAN_MASK);
+-      }
+-
+-      i = tx_ring->next_to_use;
+-
+-      while(count--) {
+-              tx_desc = E1000_TX_DESC(*tx_ring, i);
+-              tx_desc->buffer_addr = cpu_to_le64(tx_ring->buffer_info[i].dma);
+-              tx_desc->lower.data =
+-                      cpu_to_le32(txd_lower | tx_ring->buffer_info[i].length);
+-              tx_desc->upper.data = cpu_to_le32(txd_upper);
+-              i = (i + 1) % tx_ring->count;
+-      }
+-
+-      tx_desc->lower.data |= cpu_to_le32(E1000_TXD_CMD_EOP);
+-
+-      /* Force memory writes to complete before letting h/w
+-       * know there are new descriptors to fetch.  (Only
+-       * applicable for weak-ordered memory model archs,
+-       * such as IA-64). */
+-      wmb();
+-
+-      tx_ring->next_to_use = i;
+-      E1000_WRITE_REG(&adapter->hw, TDT, i);
+-}
+-
+-#define TXD_USE_COUNT(S, X) (((S) / (X)) + (((S) % (X)) ? 1 : 0))
+-#ifdef IANS
+-#define ANS_XMIT_FULL() do { \
+-      iANSsupport_t *ans = adapter->iANSdata; \
+-      if((ans->iANS_status == IANS_COMMUNICATION_UP) && \
+-         (ans->reporting_mode == IANS_STATUS_REPORTING_ON) && \
+-         (ans_notify)) \
+-              ans_notify(netdev, IANS_IND_XMIT_QUEUE_FULL); \
+-} while (0)
+-#endif
+-
+-static int
+-e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
+-{
+-      struct e1000_adapter *adapter = netdev->priv;
+-      int tx_flags = 0, count;
+-
+-#ifdef MAX_SKB_FRAGS
+-      int f;
+-#endif
+-
+-      if(!netif_carrier_ok(netdev)) {
+-              netif_stop_queue(netdev);
+-#ifdef IANS
+-              ANS_XMIT_FULL();
+-#endif
+-              return 1;
+-      }
+-
+-#ifdef MAX_SKB_FRAGS
+-      count = TXD_USE_COUNT(skb->len - skb->data_len,
+-                            adapter->max_data_per_txd);
+-      for(f = 0; f < skb_shinfo(skb)->nr_frags; f++)
+-              count += TXD_USE_COUNT(skb_shinfo(skb)->frags[f].size,
+-                                     adapter->max_data_per_txd);
+-      if(skb->ip_summed == CHECKSUM_HW)
+-              count++;
+-#else
+-      count = TXD_USE_COUNT(skb->len, adapter->max_data_per_txd);
+-#endif
+-
+-      if(E1000_DESC_UNUSED(&adapter->tx_ring) < count) {
+-              netif_stop_queue(netdev);
+-#ifdef IANS
+-              ANS_XMIT_FULL();
+-#endif
+-              return 1;
+-      }
+-
+-      if(e1000_tx_csum(adapter, skb))
+-              tx_flags |= E1000_TX_FLAGS_CSUM;
+-
+-#ifdef IANS
+-if(adapter->iANSdata->iANS_status == IANS_COMMUNICATION_UP) {
+-      struct e1000_tx_desc *tx_desc;
+-      tx_desc = E1000_TX_DESC(adapter->tx_ring, adapter->tx_ring.next_to_use);
+-
+-      if(bd_ans_os_Transmit(adapter, tx_desc, &skb) == BD_ANS_FAILURE)
+-              return 1;
+-
+-      if(tx_desc->lower.data & E1000_TXD_CMD_VLE) {
+-              tx_flags |= E1000_TX_FLAGS_VLAN;
+-              tx_flags |= (tx_desc->upper.data & E1000_TX_FLAGS_VLAN_MASK);
+-      }
+-}
+-#endif
+-#ifdef NETIF_F_HW_VLAN_TX
+-      if(adapter->vlgrp && vlan_tx_tag_present(skb)) {
+-              tx_flags |= E1000_TX_FLAGS_VLAN;
+-              tx_flags |= (vlan_tx_tag_get(skb) << E1000_TX_FLAGS_VLAN_SHIFT);
+-      }
+-#endif
+-
+-      count = e1000_tx_map(adapter, skb);
+-
+-      e1000_tx_queue(adapter, count, tx_flags);
+-
+-      netdev->trans_start = jiffies;
+-
+-      return 0;
+-}
+-
+-#ifdef HAVE_TX_TIMEOUT
+-/**
+- * e1000_tx_timeout - Respond to a Tx Hang
+- * @netdev: network interface device structure
+- **/
+-
+-static void
+-e1000_tx_timeout(struct net_device *netdev)
+-{
+-      struct e1000_adapter *adapter = netdev->priv;
+-
+-      e1000_down(adapter);
+-#ifdef IANS
+-      if((adapter->iANSdata->iANS_status == IANS_COMMUNICATION_UP) &&
+-         (adapter->iANSdata->reporting_mode == IANS_STATUS_REPORTING_ON)) {
+-              netif_carrier_off(netdev);
+-              bd_ans_os_Watchdog(netdev, adapter);
+-              netif_carrier_on(netdev);
+-      }
+-#endif
+-      e1000_up(adapter);
+-}
+-#endif
+-
+-/**
+- * e1000_get_stats - Get System Network Statistics
+- * @netdev: network interface device structure
+- *
+- * Returns the address of the device statistics structure.
+- * The statistics are actually updated from the timer callback.
+- **/
+-
+-static struct net_device_stats *
+-e1000_get_stats(struct net_device *netdev)
+-{
+-      struct e1000_adapter *adapter = netdev->priv;
+-
+-      return &adapter->net_stats;
+-}
+-
+-/**
+- * e1000_change_mtu - Change the Maximum Transfer Unit
+- * @netdev: network interface device structure
+- * @new_mtu: new value for maximum frame size
+- *
+- * Returns 0 on success, negative on failure
+- **/
+-
+-static int
+-e1000_change_mtu(struct net_device *netdev, int new_mtu)
+-{
+-      struct e1000_adapter *adapter = netdev->priv;
+-      int old_mtu = adapter->rx_buffer_len;
+-      int max_frame = new_mtu + ENET_HEADER_SIZE + ETHERNET_FCS_SIZE;
+-
+-      if((max_frame < MINIMUM_ETHERNET_FRAME_SIZE) ||
+-         (max_frame > MAX_JUMBO_FRAME_SIZE)) {
+-              E1000_ERR("Invalid MTU setting\n");
+-              return -EINVAL;
+-      }
+-
+-      if(max_frame <= MAXIMUM_ETHERNET_FRAME_SIZE) {
+-              adapter->rx_buffer_len = E1000_RXBUFFER_2048;
+-
+-      } else if(adapter->hw.mac_type < e1000_82543) {
+-              E1000_ERR("Jumbo Frames not supported on 82542\n");
+-              return -EINVAL;
+-
+-      } else if(max_frame <= E1000_RXBUFFER_4096) {
+-              adapter->rx_buffer_len = E1000_RXBUFFER_4096;
+-
+-      } else if(max_frame <= E1000_RXBUFFER_8192) {
+-              adapter->rx_buffer_len = E1000_RXBUFFER_8192;
+-
+-      } else {
+-              adapter->rx_buffer_len = E1000_RXBUFFER_16384;
+-      }
+-
+-      if(old_mtu != adapter->rx_buffer_len && netif_running(netdev)) {
+-
+-              e1000_down(adapter);
+-              e1000_up(adapter);
+-      }
+-
+-      netdev->mtu = new_mtu;
+-      adapter->hw.max_frame_size = max_frame;
+-
+-      return 0;
+-}
+-
+-/**
+- * e1000_update_stats - Update the board statistics counters
+- * @adapter: board private structure
+- **/
+-
+-static void
+-e1000_update_stats(struct e1000_adapter *adapter)
+-{
+-      struct e1000_hw *hw = &adapter->hw;
+-      unsigned long flags;
+-      uint16_t phy_tmp;
+-
+-#define PHY_IDLE_ERROR_COUNT_MASK 0x00FF
+-
+-      spin_lock_irqsave(&adapter->stats_lock, flags);
+-
+-      /* these counters are modified from e1000_adjust_tbi_stats,
+-       * called from the interrupt context, so they must only
+-       * be written while holding adapter->stats_lock
+-       */
+-
+-      adapter->stats.crcerrs += E1000_READ_REG(hw, CRCERRS);
+-      adapter->stats.gprc += E1000_READ_REG(hw, GPRC);
+-      adapter->stats.gorcl += E1000_READ_REG(hw, GORCL);
+-      adapter->stats.gorch += E1000_READ_REG(hw, GORCH);
+-      adapter->stats.bprc += E1000_READ_REG(hw, BPRC);
+-      adapter->stats.mprc += E1000_READ_REG(hw, MPRC);
+-      adapter->stats.roc += E1000_READ_REG(hw, ROC);
+-      adapter->stats.prc64 += E1000_READ_REG(hw, PRC64);
+-      adapter->stats.prc127 += E1000_READ_REG(hw, PRC127);
+-      adapter->stats.prc255 += E1000_READ_REG(hw, PRC255);
+-      adapter->stats.prc511 += E1000_READ_REG(hw, PRC511);
+-      adapter->stats.prc1023 += E1000_READ_REG(hw, PRC1023);
+-      adapter->stats.prc1522 += E1000_READ_REG(hw, PRC1522);
+-
+-      spin_unlock_irqrestore(&adapter->stats_lock, flags);
+-
+-      /* the rest of the counters are only modified here */
+-
+-      adapter->stats.symerrs += E1000_READ_REG(hw, SYMERRS);
+-      adapter->stats.mpc += E1000_READ_REG(hw, MPC);
+-      adapter->stats.scc += E1000_READ_REG(hw, SCC);
+-      adapter->stats.ecol += E1000_READ_REG(hw, ECOL);
+-      adapter->stats.mcc += E1000_READ_REG(hw, MCC);
+-      adapter->stats.latecol += E1000_READ_REG(hw, LATECOL);
+-      adapter->stats.dc += E1000_READ_REG(hw, DC);
+-      adapter->stats.sec += E1000_READ_REG(hw, SEC);
+-      adapter->stats.rlec += E1000_READ_REG(hw, RLEC);
+-      adapter->stats.xonrxc += E1000_READ_REG(hw, XONRXC);
+-      adapter->stats.xontxc += E1000_READ_REG(hw, XONTXC);
+-      adapter->stats.xoffrxc += E1000_READ_REG(hw, XOFFRXC);
+-      adapter->stats.xofftxc += E1000_READ_REG(hw, XOFFTXC);
+-      adapter->stats.fcruc += E1000_READ_REG(hw, FCRUC);
+-      adapter->stats.gptc += E1000_READ_REG(hw, GPTC);
+-      adapter->stats.gotcl += E1000_READ_REG(hw, GOTCL);
+-      adapter->stats.gotch += E1000_READ_REG(hw, GOTCH);
+-      adapter->stats.rnbc += E1000_READ_REG(hw, RNBC);
+-      adapter->stats.ruc += E1000_READ_REG(hw, RUC);
+-      adapter->stats.rfc += E1000_READ_REG(hw, RFC);
+-      adapter->stats.rjc += E1000_READ_REG(hw, RJC);
+-      adapter->stats.torl += E1000_READ_REG(hw, TORL);
+-      adapter->stats.torh += E1000_READ_REG(hw, TORH);
+-      adapter->stats.totl += E1000_READ_REG(hw, TOTL);
+-      adapter->stats.toth += E1000_READ_REG(hw, TOTH);
+-      adapter->stats.tpr += E1000_READ_REG(hw, TPR);
+-      adapter->stats.ptc64 += E1000_READ_REG(hw, PTC64);
+-      adapter->stats.ptc127 += E1000_READ_REG(hw, PTC127);
+-      adapter->stats.ptc255 += E1000_READ_REG(hw, PTC255);
+-      adapter->stats.ptc511 += E1000_READ_REG(hw, PTC511);
+-      adapter->stats.ptc1023 += E1000_READ_REG(hw, PTC1023);
+-      adapter->stats.ptc1522 += E1000_READ_REG(hw, PTC1522);
+-      adapter->stats.mptc += E1000_READ_REG(hw, MPTC);
+-      adapter->stats.bptc += E1000_READ_REG(hw, BPTC);
+-
+-      /* used for adaptive IFS */
+-
+-      hw->tx_packet_delta = E1000_READ_REG(hw, TPT);
+-      adapter->stats.tpt += hw->tx_packet_delta;
+-      hw->collision_delta = E1000_READ_REG(hw, COLC);
+-      adapter->stats.colc += hw->collision_delta;
+-
+-      if(hw->mac_type >= e1000_82543) {
+-              adapter->stats.algnerrc += E1000_READ_REG(hw, ALGNERRC);
+-              adapter->stats.rxerrc += E1000_READ_REG(hw, RXERRC);
+-              adapter->stats.tncrs += E1000_READ_REG(hw, TNCRS);
+-              adapter->stats.cexterr += E1000_READ_REG(hw, CEXTERR);
+-              adapter->stats.tsctc += E1000_READ_REG(hw, TSCTC);
+-              adapter->stats.tsctfc += E1000_READ_REG(hw, TSCTFC);
+-      }
+-
+-      /* Fill out the OS statistics structure */
+-
+-      adapter->net_stats.rx_packets = adapter->stats.gprc;
+-      adapter->net_stats.tx_packets = adapter->stats.gptc;
+-      adapter->net_stats.rx_bytes = adapter->stats.gorcl;
+-      adapter->net_stats.tx_bytes = adapter->stats.gotcl;
+-      adapter->net_stats.multicast = adapter->stats.mprc;
+-      adapter->net_stats.collisions = adapter->stats.colc;
+-
+-      /* Rx Errors */
+-
+-      adapter->net_stats.rx_errors = adapter->stats.rxerrc +
+-              adapter->stats.crcerrs + adapter->stats.algnerrc +
+-              adapter->stats.rlec + adapter->stats.rnbc +
+-              adapter->stats.mpc + adapter->stats.cexterr;
+-      adapter->net_stats.rx_dropped = adapter->stats.rnbc;
+-      adapter->net_stats.rx_length_errors = adapter->stats.rlec;
+-      adapter->net_stats.rx_crc_errors = adapter->stats.crcerrs;
+-      adapter->net_stats.rx_frame_errors = adapter->stats.algnerrc;
+-      adapter->net_stats.rx_fifo_errors = adapter->stats.mpc;
+-      adapter->net_stats.rx_missed_errors = adapter->stats.mpc;
+-
+-      /* Tx Errors */
+-
+-      adapter->net_stats.tx_errors = adapter->stats.ecol +
+-                                     adapter->stats.latecol;
+-      adapter->net_stats.tx_aborted_errors = adapter->stats.ecol;
+-      adapter->net_stats.tx_window_errors = adapter->stats.latecol;
+-
+-      /* Tx Dropped needs to be maintained elsewhere */
+-
+-      /* Phy Stats */
+-
+-      if(hw->media_type == e1000_media_type_copper) {
+-              if((adapter->link_speed == SPEED_1000) &&
+-                 (!e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_tmp))) {
+-                      phy_tmp &= PHY_IDLE_ERROR_COUNT_MASK;
+-                      adapter->phy_stats.idle_errors += phy_tmp;
+-              }
+-
+-              if(!e1000_read_phy_reg(hw, M88E1000_RX_ERR_CNTR, &phy_tmp))
+-                      adapter->phy_stats.receive_errors += phy_tmp;
+-      }
+-}
+-
+-/**
+- * e1000_irq_disable - Mask off interrupt generation on the NIC
+- * @adapter: board private structure
+- **/
+-
+-static inline void
+-e1000_irq_disable(struct e1000_adapter *adapter)
+-{
+-      atomic_inc(&adapter->irq_sem);
+-      E1000_WRITE_REG(&adapter->hw, IMC, ~0);
+-      E1000_WRITE_FLUSH(&adapter->hw);
+-      synchronize_irq();
+-}
+-
+-/**
+- * e1000_irq_enable - Enable default interrupt generation settings
+- * @adapter: board private structure
+- **/
+-
+-static inline void
+-e1000_irq_enable(struct e1000_adapter *adapter)
+-{
+-      if(atomic_dec_and_test(&adapter->irq_sem)) {
+-              E1000_WRITE_REG(&adapter->hw, IMS, IMS_ENABLE_MASK);
+-              E1000_WRITE_FLUSH(&adapter->hw);
+-      }
+-}
+-
+-/**
+- * e1000_intr - Interrupt Handler
+- * @irq: interrupt number
+- * @data: pointer to a network interface device structure
+- * @pt_regs: CPU registers structure
+- **/
+-
+-static void
+-e1000_intr(int irq, void *data, struct pt_regs *regs)
+-{
+-      struct net_device *netdev = data;
+-      struct e1000_adapter *adapter = netdev->priv;
+-      uint32_t icr;
+-      int i = E1000_MAX_INTR;
+-
+-      while(i && (icr = E1000_READ_REG(&adapter->hw, ICR))) {
+-
+-              if(icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
+-                      adapter->hw.get_link_status = 1;
+-                      mod_timer(&adapter->watchdog_timer, jiffies);
+-              }
+-
+-              e1000_clean_rx_irq(adapter);
+-              e1000_clean_tx_irq(adapter);
+-              i--;
+-
+-#ifdef E1000_COUNT_ICR
+-              adapter->icr_txdw += icr & 0x01;
+-              icr >>= 1;
+-              adapter->icr_txqe += icr & 0x01;
+-              icr >>= 1;
+-              adapter->icr_lsc += icr & 0x01;
+-              icr >>= 1;
+-              adapter->icr_rxseq += icr & 0x01;
+-              icr >>= 1;
+-              adapter->icr_rxdmt += icr & 0x01;
+-              icr >>= 2;
+-              adapter->icr_rxo += icr & 0x01;
+-              icr >>= 1;
+-              adapter->icr_rxt += icr & 0x01;
+-              icr >>= 2;
+-              adapter->icr_mdac += icr & 0x01;
+-              icr >>= 1;
+-              adpater->icr_rxcfg += icr & 0x01;
+-              icr >>= 1;
+-              adpater->icr_gpi += icr & 0x01;
+-#endif
+-      }
+-}
+-
+-/**
+- * e1000_clean_tx_irq - Reclaim resources after transmit completes
+- * @adapter: board private structure
+- **/
+-
+-static void
+-e1000_clean_tx_irq(struct e1000_adapter *adapter)
+-{
+-      struct e1000_desc_ring *tx_ring = &adapter->tx_ring;
+-      struct net_device *netdev = adapter->netdev;
+-      struct pci_dev *pdev = adapter->pdev;
+-      struct e1000_tx_desc *tx_desc;
+-      int i;
+-
+-      i = tx_ring->next_to_clean;
+-      tx_desc = E1000_TX_DESC(*tx_ring, i);
+-
+-      while(tx_desc->upper.data & cpu_to_le32(E1000_TXD_STAT_DD)) {
+-
+-              if(tx_ring->buffer_info[i].dma) {
+-
+-                      pci_unmap_page(pdev,
+-                                     tx_ring->buffer_info[i].dma,
+-                                     tx_ring->buffer_info[i].length,
+-                                     PCI_DMA_TODEVICE);
+-
+-                      tx_ring->buffer_info[i].dma = 0;
+-              }
+-
+-              if(tx_ring->buffer_info[i].skb) {
+-
+-                      dev_kfree_skb_any(tx_ring->buffer_info[i].skb);
+-
+-                      tx_ring->buffer_info[i].skb = NULL;
+-              }
+-
+-              tx_desc->upper.data = 0;
+-
+-              i = (i + 1) % tx_ring->count;
+-              tx_desc = E1000_TX_DESC(*tx_ring, i);
+-      }
+-
+-      tx_ring->next_to_clean = i;
+-
+-      if(netif_queue_stopped(netdev) && netif_carrier_ok(netdev) &&
+-         (E1000_DESC_UNUSED(tx_ring) > E1000_TX_QUEUE_WAKE)) {
+-
+-#ifdef IANS
+-{
+-      iANSsupport_t *ans = adapter->iANSdata;
+-
+-      if((ans->iANS_status == IANS_COMMUNICATION_UP) &&
+-         (ans->reporting_mode == IANS_STATUS_REPORTING_ON) &&
+-         (ans_notify))
+-              ans_notify(netdev, IANS_IND_XMIT_QUEUE_READY);
+-}
+-#endif
+-              netif_wake_queue(netdev);
+-      }
+-}
+-
+-/**
+- * e1000_clean_rx_irq - Send received data up the network stack,
+- * @adapter: board private structure
+- **/
+-
+-static void
+-e1000_clean_rx_irq(struct e1000_adapter *adapter)
+-{
+-      struct e1000_desc_ring *rx_ring = &adapter->rx_ring;
+-      struct net_device *netdev = adapter->netdev;
+-      struct pci_dev *pdev = adapter->pdev;
+-      struct e1000_rx_desc *rx_desc;
+-      struct sk_buff *skb;
+-      unsigned long flags;
+-      uint32_t length;
+-      uint8_t last_byte;
+-      int i;
+-
+-      i = rx_ring->next_to_clean;
+-      rx_desc = E1000_RX_DESC(*rx_ring, i);
+-
+-      while(rx_desc->status & E1000_RXD_STAT_DD) {
+-
+-              pci_unmap_single(pdev,
+-                               rx_ring->buffer_info[i].dma,
+-                               rx_ring->buffer_info[i].length,
+-                               PCI_DMA_FROMDEVICE);
+-
+-              skb = rx_ring->buffer_info[i].skb;
+-              length = le16_to_cpu(rx_desc->length);
+-
+-              if(!(rx_desc->status & E1000_RXD_STAT_EOP)) {
+-
+-                      /* All receives must fit into a single buffer */
+-
+-                      E1000_DBG("Receive packet consumed multiple buffers\n");
+-
+-                      dev_kfree_skb_irq(skb);
+-                      rx_desc->status = 0;
+-                      rx_ring->buffer_info[i].skb = NULL;
+-
+-                      i = (i + 1) % rx_ring->count;
+-
+-                      rx_desc = E1000_RX_DESC(*rx_ring, i);
+-                      continue;
+-              }
+-
+-              if(rx_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK) {
+-
+-                      last_byte = *(skb->data + length - 1);
+-
+-                      if(TBI_ACCEPT(&adapter->hw, rx_desc->status,
+-                                    rx_desc->errors, length, last_byte)) {
+-
+-                              spin_lock_irqsave(&adapter->stats_lock, flags);
+-
+-                              e1000_tbi_adjust_stats(&adapter->hw,
+-                                                     &adapter->stats,
+-                                                     length, skb->data);
+-
+-                              spin_unlock_irqrestore(&adapter->stats_lock,
+-                                                     flags);
+-                              length--;
+-                      } else {
+-
+-                              dev_kfree_skb_irq(skb);
+-                              rx_desc->status = 0;
+-                              rx_ring->buffer_info[i].skb = NULL;
+-
+-                              i = (i + 1) % rx_ring->count;
+-
+-                              rx_desc = E1000_RX_DESC(*rx_ring, i);
+-                              continue;
+-                      }
+-              }
+-
+-              /* Good Receive */
+-              skb_put(skb, length - ETHERNET_FCS_SIZE);
+-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0))
+-              /* NFS mountd workaround on 2.2.x */
+-              if(length < 512) {
+-                      struct sk_buff *tmp_skb;
+-                      tmp_skb = alloc_skb(E1000_RXBUFFER_2048>>1, GFP_ATOMIC);
+-                      if(tmp_skb != NULL) {
+-                              tmp_skb->dev = skb->dev;
+-                              skb_reserve(tmp_skb, skb->data - skb->head);
+-                              skb_put(tmp_skb, skb->len);
+-                              memcpy(tmp_skb->head, skb->head,
+-                                     tmp_skb->end - tmp_skb->head);
+-                              dev_kfree_skb(skb);
+-                              skb = tmp_skb;
+-                      }
+-              }
+-#endif
+-
+-              /* Receive Checksum Offload */
+-              e1000_rx_checksum(adapter, rx_desc, skb);
+-
+-#ifdef IANS
+-{
+-      iANSsupport_t *ans = adapter->iANSdata;
+-
+-      if(ans->iANS_status == IANS_COMMUNICATION_UP) {
+-              if(bd_ans_os_Receive(adapter, rx_desc, skb) == BD_ANS_FAILURE)
+-                      dev_kfree_skb_irq(skb);
+-              else
+-                      netif_rx(skb);
+-      } else {
+-#endif
+-              skb->protocol = eth_type_trans(skb, netdev);
+-#ifdef NETIF_F_HW_VLAN_TX
+-              if(adapter->vlgrp && (rx_desc->status & E1000_RXD_STAT_VP)) {
+-                      vlan_hwaccel_rx(skb, adapter->vlgrp,
+-                              (rx_desc->special & E1000_RXD_SPC_VLAN_MASK));
+-              } else {
+-                      netif_rx(skb);
+-              }
+-#else
+-              netif_rx(skb);
+-#endif
+-#ifdef IANS
+-      }
+-}
+-#endif
+-              netdev->last_rx = jiffies;
+-
+-              rx_desc->status = 0;
+-              rx_ring->buffer_info[i].skb = NULL;
+-
+-              i = (i + 1) % rx_ring->count;
+-
+-              rx_desc = E1000_RX_DESC(*rx_ring, i);
+-      }
+-
+-      rx_ring->next_to_clean = i;
+-
+-      e1000_alloc_rx_buffers(adapter);
+-}
+-
+-/**
+- * e1000_alloc_rx_buffers - Replace used receive buffers
+- * @data: address of board private structure
+- **/
+-
+-static void
+-e1000_alloc_rx_buffers(struct e1000_adapter *adapter)
+-{
+-      struct e1000_desc_ring *rx_ring = &adapter->rx_ring;
+-      struct net_device *netdev = adapter->netdev;
+-      struct pci_dev *pdev = adapter->pdev;
+-      struct e1000_rx_desc *rx_desc;
+-      struct sk_buff *skb;
+-      int reserve_len;
+-      int i;
+-
+-#ifdef IANS
+-      reserve_len = BD_ANS_INFO_SIZE;
+-      E1000_ROUNDUP(reserve_len, 16);
+-      reserve_len += 2;
+-#else
+-      reserve_len = 2;
+-#endif
+-
+-      i = rx_ring->next_to_use;
+-
+-      while(!rx_ring->buffer_info[i].skb) {
+-              rx_desc = E1000_RX_DESC(*rx_ring, i);
+-
+-              skb = alloc_skb(adapter->rx_buffer_len + reserve_len,
+-                              GFP_ATOMIC);
+-
+-              if(!skb) {
+-                      /* Better luck next round */
+-                      break;
+-              }
+-
+-              /* Make buffer alignment 2 beyond a 16 byte boundary
+-               * this will result in a 16 byte aligned IP header after
+-               * the 14 byte MAC header is removed
+-               */
+-              skb_reserve(skb, reserve_len);
+-
+-              skb->dev = netdev;
+-
+-              rx_ring->buffer_info[i].skb = skb;
+-              rx_ring->buffer_info[i].length = adapter->rx_buffer_len;
+-              rx_ring->buffer_info[i].dma =
+-                      pci_map_single(pdev,
+-                                     skb->data,
+-                                     adapter->rx_buffer_len,
+-                                     PCI_DMA_FROMDEVICE);
+-
+-              rx_desc->buffer_addr = cpu_to_le64(rx_ring->buffer_info[i].dma);
+-
+-              if(!(i % E1000_RX_BUFFER_WRITE)) {
+-                      /* Force memory writes to complete before letting h/w
+-                       * know there are new descriptors to fetch.  (Only
+-                       * applicable for weak-ordered memory model archs,
+-                       * such as IA-64). */
+-                      wmb();
+-
+-                      E1000_WRITE_REG(&adapter->hw, RDT, i);
+-              }
+-
+-              i = (i + 1) % rx_ring->count;
+-      }
+-
+-      rx_ring->next_to_use = i;
+-}
+-
+-/**
+- * e1000_ioctl -
+- * @netdev:
+- * @ifreq:
+- * @cmd:
+- **/
+-
+-static int
+-e1000_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
+-{
+-      switch (cmd) {
+-#ifdef IANS
+-      case IANS_BASE_SIOC: {
+-              IANS_BD_PARAM_HEADER *header;
+-
+-              header = (IANS_BD_PARAM_HEADER *) ifr->ifr_data;
+-              if((header->Opcode != IANS_OP_EXT_GET_STATUS) &&
+-                 (!capable(CAP_NET_ADMIN)))
+-                      return -EPERM;
+-
+-              return bd_ans_os_Ioctl(netdev, ifr, cmd);
+-      }
+-#endif
+-#ifdef IDIAG
+-      case IDIAG_PRO_BASE_SIOC:
+-              return e1000_diag_ioctl(netdev, ifr);
+-#endif
+-#ifdef SIOCETHTOOL
+-      case SIOCETHTOOL:
+-              return e1000_ethtool_ioctl(netdev, ifr);
+-#endif
+-      default:
+-              return -EOPNOTSUPP;
+-      }
+-}
+-
+-/**
+- * e1000_rx_checksum - Receive Checksum Offload for 82543
+- * @adapter: board private structure
+- * @rx_desc: receive descriptor
+- * @sk_buff: socket buffer with received data
+- **/
+-
+-static inline void
+-e1000_rx_checksum(struct e1000_adapter *adapter,
+-                  struct e1000_rx_desc *rx_desc,
+-                  struct sk_buff *skb)
+-{
+-      /* 82543 or newer only */
+-      if((adapter->hw.mac_type < e1000_82543) ||
+-      /* Ignore Checksum bit is set */
+-      (rx_desc->status & E1000_RXD_STAT_IXSM) ||
+-      /* TCP Checksum has not been calculated */
+-      (!(rx_desc->status & E1000_RXD_STAT_TCPCS))) {
+-              skb->ip_summed = CHECKSUM_NONE;
+-              return;
+-      }
+-
+-      /* At this point we know the hardware did the TCP checksum */
+-      /* now look at the TCP checksum error bit */
+-      if(rx_desc->errors & E1000_RXD_ERR_TCPE) {
+-              /* let the stack verify checksum errors */
+-              skb->ip_summed = CHECKSUM_NONE;
+-              adapter->hw_csum_err++;
+-      } else {
+-      /* TCP checksum is good */
+-              skb->ip_summed = CHECKSUM_UNNECESSARY;
+-              adapter->hw_csum_good++;
+-      }
+-}
+-
+-void
+-e1000_pci_set_mwi(struct e1000_hw *hw)
+-{
+-      struct e1000_adapter *adapter = hw->back;
+-
+-#ifdef HAVE_PCI_SET_MWI
+-      pci_set_mwi(adapter->pdev);
+-#else
+-      pci_write_config_word(adapter->pdev, PCI_COMMAND,
+-                            adapter->hw.pci_cmd_word |
+-                            PCI_COMMAND_INVALIDATE);
+-#endif
+-}
+-
+-void
+-e1000_pci_clear_mwi(struct e1000_hw *hw)
+-{
+-      struct e1000_adapter *adapter = hw->back;
+-
+-#ifdef HAVE_PCI_SET_MWI
+-      pci_clear_mwi(adapter->pdev);
+-#else
+-      pci_write_config_word(adapter->pdev, PCI_COMMAND,
+-                            adapter->hw.pci_cmd_word &
+-                            ~PCI_COMMAND_INVALIDATE);
+-#endif
+-}
+-
+-void
+-e1000_read_pci_cfg(struct e1000_hw *hw, uint32_t reg, uint16_t *value)
+-{
+-      struct e1000_adapter *adapter = hw->back;
+-
+-      pci_read_config_word(adapter->pdev, reg, value);
+-}
+-
+-void
+-e1000_write_pci_cfg(struct e1000_hw *hw, uint32_t reg, uint16_t *value)
+-{
+-      struct e1000_adapter *adapter = hw->back;
+-
+-      pci_write_config_word(adapter->pdev, reg, *value);
+-}
+-
+-uint32_t
+-e1000_io_read(struct e1000_hw *hw, uint32_t port)
+-{
+-      return inl(port);
+-}
+-
+-void
+-e1000_io_write(struct e1000_hw *hw, uint32_t port, uint32_t value)
+-{
+-      outl(value, port);
+-}
+-
+-#ifdef NETIF_F_HW_VLAN_TX
+-static void
+-e1000_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp)
+-{
+-      struct e1000_adapter *adapter = netdev->priv;
+-      uint32_t ctrl, rctl;
+-
+-      e1000_irq_disable(adapter);
+-      adapter->vlgrp = grp;
+-
+-      if(grp) {
+-              /* enable VLAN tag insert/strip */
+-
+-              E1000_WRITE_REG(&adapter->hw, VET, ETHERNET_IEEE_VLAN_TYPE);
+-
+-              ctrl = E1000_READ_REG(&adapter->hw, CTRL);
+-              ctrl |= E1000_CTRL_VME;
+-              E1000_WRITE_REG(&adapter->hw, CTRL, ctrl);
+-
+-              /* enable VLAN receive filtering */
+-
+-              rctl = E1000_READ_REG(&adapter->hw, RCTL);
+-              rctl |= E1000_RCTL_VFE;
+-              rctl &= ~E1000_RCTL_CFIEN;
+-              E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
+-      } else {
+-              /* disable VLAN tag insert/strip */
+-
+-              ctrl = E1000_READ_REG(&adapter->hw, CTRL);
+-              ctrl &= ~E1000_CTRL_VME;
+-              E1000_WRITE_REG(&adapter->hw, CTRL, ctrl);
+-
+-              /* disable VLAN filtering */
+-
+-              rctl = E1000_READ_REG(&adapter->hw, RCTL);
+-              rctl &= ~E1000_RCTL_VFE;
+-              E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
+-      }
+-
+-      e1000_irq_enable(adapter);
+-}
+-
+-static void
+-e1000_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid)
+-{
+-      struct e1000_adapter *adapter = netdev->priv;
+-      uint32_t vfta, index;
+-
+-      /* add VID to filter table */
+-
+-      index = (vid >> 5) & 0x7F;
+-      vfta = E1000_READ_REG_ARRAY(&adapter->hw, VFTA, index);
+-      vfta |= (1 << (vid & 0x1F));
+-      e1000_write_vfta(&adapter->hw, index, vfta);
+-}
+-
+-static void
+-e1000_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid)
+-{
+-      struct e1000_adapter *adapter = netdev->priv;
+-      uint32_t vfta, index;
+-
+-      e1000_irq_disable(adapter);
+-
+-      if(adapter->vlgrp)
+-              adapter->vlgrp->vlan_devices[vid] = NULL;
+-
+-      e1000_irq_enable(adapter);
+-
+-      /* remove VID from filter table*/
+-
+-      index = (vid >> 5) & 0x7F;
+-      vfta = E1000_READ_REG_ARRAY(&adapter->hw, VFTA, index);
+-      vfta &= ~(1 << (vid & 0x1F));
+-      e1000_write_vfta(&adapter->hw, index, vfta);
+-}
+-#endif
+-
+-static int
+-e1000_notify_reboot(struct notifier_block *nb, unsigned long event, void *p)
+-{
+-      struct pci_dev *pdev = NULL;
+-
+-      switch(event) {
+-      case SYS_DOWN:
+-      case SYS_HALT:
+-      case SYS_POWER_OFF:
+-              pci_for_each_dev(pdev) {
+-                      if(pci_dev_driver(pdev) == &e1000_driver)
+-                              e1000_suspend(pdev, 3);
+-              }
+-      }
+-      return NOTIFY_DONE;
+-}
+-
+-static int
+-e1000_suspend(struct pci_dev *pdev, uint32_t state)
+-{
+-      struct net_device *netdev = pci_get_drvdata(pdev);
+-      struct e1000_adapter *adapter = netdev->priv;
+-      uint32_t ctrl, ctrl_ext, rctl;
+-
+-      netif_device_detach(netdev);
+-
+-      if(netif_running(netdev))
+-              e1000_down(adapter);
+-
+-      if(adapter->wol) {
+-              e1000_setup_rctl(adapter);
+-              e1000_set_multi(netdev);
+-
+-              if(adapter->wol & E1000_WUFC_MC) {
+-                      rctl = E1000_READ_REG(&adapter->hw, RCTL);
+-                      rctl |= E1000_RCTL_MPE;
+-                      E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
+-              }
+-
+-              if(adapter->hw.media_type == e1000_media_type_fiber) {
+-                      #define E1000_CTRL_ADVD3WUC 0x00100000
+-                      ctrl = E1000_READ_REG(&adapter->hw, CTRL);
+-                      ctrl |= E1000_CTRL_ADVD3WUC;
+-                      E1000_WRITE_REG(&adapter->hw, CTRL, ctrl);
+-
+-                      ctrl_ext = E1000_READ_REG(&adapter->hw, CTRL_EXT);
+-                      ctrl_ext |= E1000_CTRL_EXT_SDP7_DATA;
+-                      E1000_WRITE_REG(&adapter->hw, CTRL_EXT, ctrl_ext);
+-              }
+-
+-              E1000_WRITE_REG(&adapter->hw, WUC, 0);
+-              E1000_WRITE_REG(&adapter->hw, WUFC, adapter->wol);
+-              pci_enable_wake(pdev, 3, 1);
+-      } else {
+-              E1000_WRITE_REG(&adapter->hw, WUC, 0);
+-              E1000_WRITE_REG(&adapter->hw, WUFC, 0);
+-              pci_enable_wake(pdev, 3, 0);
+-      }
+-
+-      pci_save_state(pdev, adapter->pci_state);
+-
+-      if(!e1000_smbus_arp_enable(adapter, TRUE))
+-              pci_set_power_state(pdev, 3);
+-
+-      return 0;
+-}
+-
+-#ifdef CONFIG_PM
+-static int
+-e1000_resume(struct pci_dev *pdev)
+-{
+-      struct net_device *netdev = pci_get_drvdata(pdev);
+-      struct e1000_adapter *adapter = netdev->priv;
+-
+-      pci_set_power_state(pdev, 0);
+-      pci_restore_state(pdev, adapter->pci_state);
+-      pci_enable_wake(pdev, 0, 0);
+-
+-      /* Clear the wakeup status bits */
+-
+-      E1000_WRITE_REG(&adapter->hw, WUS, ~0);
+-
+-      if(netif_running(netdev))
+-              e1000_up(adapter);
+-
+-      netif_device_attach(netdev);
+-
+-      e1000_smbus_arp_enable(adapter, FALSE);
+-
+-      return 0;
+-}
+-#endif
+-
+-/**
+- * e1000_smbus_lock - Exported for lock/unlock external smbus hw access
+- * @pdev: PCI device information struct
+- * @lock: TRUE to lock hw access; FALSE to unlock
+- *
+- * e1000_smbus_lock is designed to allow synchronization between e1000
+- * driver and i2c-i8254x SMBUS bus driver when accessing e1000 hardware
+- **/
+-void
+-e1000_smbus_lock(struct pci_dev *pdev, boolean_t lock)
+-{
+-      struct net_device *netdev = pci_get_drvdata(pdev);
+-      struct e1000_adapter *adapter = netdev->priv;
+-
+-      if (lock)
+-              down(&adapter->smbus_lock);
+-      else
+-              up(&adapter->smbus_lock);
+-}
+-
+-static boolean_t
+-e1000_smbus_arp_enable(struct e1000_adapter *adapter, boolean_t arp_enable)
+-{
+-      uint32_t manc;
+-      boolean_t ret_val = FALSE;
+-
+-      if(adapter->hw.mac_type < e1000_82540)
+-              return ret_val;
+-
+-      down(&adapter->smbus_lock);
+-      manc = E1000_READ_REG(&adapter->hw, MANC);
+-      if(!arp_enable) {
+-              manc &= ~(E1000_MANC_ARP_EN);
+-      } else if(manc & E1000_MANC_SMBUS_EN) {
+-              manc |= E1000_MANC_ARP_EN;
+-              ret_val = TRUE;
+-      }
+-      E1000_WRITE_REG(&adapter->hw, MANC, manc);
+-      up(&adapter->smbus_lock);
+-
+-      return ret_val;
+-}
+-
+-/* e1000_main.c */
+diff -Nurb click-1.6.0/drivers/e1000-4.x/src/e1000_param.c.orig click-1.6.0-27/drivers/e1000-4.x/src/e1000_param.c.orig
+--- click-1.6.0/drivers/e1000-4.x/src/e1000_param.c.orig       2007-07-16 19:47:50.000000000 -0400
++++ click-1.6.0-27/drivers/e1000-4.x/src/e1000_param.c.orig    1969-12-31 19:00:00.000000000 -0500
+@@ -1,657 +0,0 @@
+-/*******************************************************************************
+-
+-  
+-  Copyright(c) 1999 - 2002 Intel Corporation. All rights reserved.
+-  
+-  This program is free software; you can redistribute it and/or modify it 
+-  under the terms of the GNU General Public License as published by the Free 
+-  Software Foundation; either version 2 of the License, or (at your option) 
+-  any later version.
+-  
+-  This program is distributed in the hope that it will be useful, but WITHOUT 
+-  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
+-  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for 
+-  more details.
+-  
+-  You should have received a copy of the GNU General Public License along with
+-  this program; if not, write to the Free Software Foundation, Inc., 59 
+-  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+-  
+-  The full GNU General Public License is included in this distribution in the
+-  file called LICENSE.
+-  
+-  Contact Information:
+-  Linux NICS <linux.nics@intel.com>
+-  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
+-
+-*******************************************************************************/
+-
+-#include "e1000.h"
+-
+-/* This is the only thing that needs to be changed to adjust the
+- * maximum number of ports that the driver can manage.
+- */
+-
+-#define E1000_MAX_NIC 32
+-
+-#define OPTION_UNSET    -1
+-#define OPTION_DISABLED 0
+-#define OPTION_ENABLED  1
+-
+-/* Module Parameters are always initialized to -1, so that the driver
+- * can tell the difference between no user specified value or the
+- * user asking for the default value.
+- * The true default values are loaded in when e1000_check_options is called.
+- *
+- * This is a GCC extension to ANSI C.
+- * See the item "Labeled Elements in Initializers" in the section
+- * "Extensions to the C Language Family" of the GCC documentation.
+- */
+-
+-#define E1000_PARAM_INIT { [0 ... E1000_MAX_NIC] = OPTION_UNSET }
+-
+-/* All parameters are treated the same, as an integer array of values.
+- * This macro just reduces the need to repeat the same declaration code
+- * over and over (plus this helps to avoid typo bugs).
+- */
+-
+-#define E1000_PARAM(X, S) \
+-static const int __devinitdata X[E1000_MAX_NIC + 1] = E1000_PARAM_INIT; \
+-MODULE_PARM(X, "1-" __MODULE_STRING(E1000_MAX_NIC) "i"); \
+-MODULE_PARM_DESC(X, S);
+-
+-/* Transmit Descriptor Count
+- *
+- * Valid Range: 80-256 for 82542 and 82543 gigabit ethernet controllers
+- * Valid Range: 80-4096 for 82544
+- *
+- * Default Value: 256
+- */
+-
+-E1000_PARAM(TxDescriptors, "Number of transmit descriptors");
+-
+-/* Receive Descriptor Count
+- *
+- * Valid Range: 80-256 for 82542 and 82543 gigabit ethernet controllers
+- * Valid Range: 80-4096 for 82544
+- *
+- * Default Value: 80
+- */
+-
+-E1000_PARAM(RxDescriptors, "Number of receive descriptors");
+-
+-/* User Specified Speed Override
+- *
+- * Valid Range: 0, 10, 100, 1000
+- *  - 0    - auto-negotiate at all supported speeds
+- *  - 10   - only link at 10 Mbps
+- *  - 100  - only link at 100 Mbps
+- *  - 1000 - only link at 1000 Mbps
+- *
+- * Default Value: 0
+- */
+-
+-E1000_PARAM(Speed, "Speed setting");
+-
+-/* User Specified Duplex Override
+- *
+- * Valid Range: 0-2
+- *  - 0 - auto-negotiate for duplex
+- *  - 1 - only link at half duplex
+- *  - 2 - only link at full duplex
+- *
+- * Default Value: 0
+- */
+-
+-E1000_PARAM(Duplex, "Duplex setting");
+-
+-/* Auto-negotiation Advertisement Override
+- *
+- * Valid Range: 0x01-0x0F, 0x20-0x2F
+- *
+- * The AutoNeg value is a bit mask describing which speed and duplex
+- * combinations should be advertised during auto-negotiation.
+- * The supported speed and duplex modes are listed below
+- *
+- * Bit           7     6     5      4      3     2     1      0
+- * Speed (Mbps)  N/A   N/A   1000   N/A    100   100   10     10
+- * Duplex                    Full          Full  Half  Full   Half
+- *
+- * Default Value: 0x2F
+- */
+-
+-E1000_PARAM(AutoNeg, "Advertised auto-negotiation setting");
+-
+-/* User Specified Flow Control Override
+- *
+- * Valid Range: 0-3
+- *  - 0 - No Flow Control
+- *  - 1 - Rx only, respond to PAUSE frames but do not generate them
+- *  - 2 - Tx only, generate PAUSE frames but ignore them on receive
+- *  - 3 - Full Flow Control Support
+- *
+- * Default Value: Read flow control settings from the EEPROM
+- */
+-
+-E1000_PARAM(FlowControl, "Flow Control setting");
+-
+-/* XsumRX - Receive Checksum Offload Enable/Disable
+- *
+- * Valid Range: 0, 1
+- *  - 0 - disables all checksum offload
+- *  - 1 - enables receive IP/TCP/UDP checksum offload
+- *        on 82543 based NICs
+- *
+- * Default Value: 1
+- */
+-
+-E1000_PARAM(XsumRX, "Disable or enable Receive Checksum offload");
+-
+-/* Transmit Interrupt Delay in units of 1.024 microseconds
+- *
+- * Valid Range: 0-65535
+- *
+- * Default Value: 64
+- */
+-
+-E1000_PARAM(TxIntDelay, "Transmit Interrupt Delay");
+-
+-/* Transmit Absolute Interrupt Delay in units of 1.024 microseconds
+- *
+- * Valid Range: 0-65535
+- *
+- * Default Value: 0
+- */
+-
+-E1000_PARAM(TxAbsIntDelay, "Transmit Absolute Interrupt Delay");
+-
+-/* Receive Interrupt Delay in units of 1.024 microseconds
+- *
+- * Valid Range: 0-65535
+- *
+- * Default Value: 0/128
+- */
+-
+-E1000_PARAM(RxIntDelay, "Receive Interrupt Delay");
+-
+-/* Receive Absolute Interrupt Delay in units of 1.024 microseconds
+- *
+- * Valid Range: 0-65535
+- *
+- * Default Value: 128
+- */
+-
+-E1000_PARAM(RxAbsIntDelay, "Receive Absolute Interrupt Delay");
+-
+-#define AUTONEG_ADV_DEFAULT  0x2F
+-#define AUTONEG_ADV_MASK     0x2F
+-#define FLOW_CONTROL_DEFAULT FLOW_CONTROL_FULL
+-
+-#define DEFAULT_TXD                  256
+-#define MAX_TXD                      256
+-#define MIN_TXD                       80
+-#define MAX_82544_TXD               4096
+-
+-#define DEFAULT_RXD                   80
+-#define MAX_RXD                      256
+-#define MIN_RXD                       80
+-#define MAX_82544_RXD               4096
+-
+-#define DEFAULT_RDTR                 128
+-#define DEFAULT_RDTR_82544             0
+-#define MAX_RXDELAY               0xFFFF
+-#define MIN_RXDELAY                    0
+-
+-#define DEFAULT_RADV                 128
+-#define MAX_RXABSDELAY            0xFFFF
+-#define MIN_RXABSDELAY                 0
+-
+-#define DEFAULT_TIDV                64
+-#define MAX_TXDELAY             0xFFFF
+-#define MIN_TXDELAY                  0
+-
+-#define DEFAULT_TADV                64
+-#define MAX_TXABSDELAY                  0xFFFF
+-#define MIN_TXABSDELAY                       0
+-
+-struct e1000_option {
+-      enum { enable_option, range_option, list_option } type;
+-      char *name;
+-      char *err;
+-      int  def;
+-      union {
+-              struct { /* range_option info */
+-                      int min;
+-                      int max;
+-              } r;
+-              struct { /* list_option info */
+-                      int nr;
+-                      struct e1000_opt_list { int i; char *str; } *p;
+-              } l;
+-      } arg;
+-};
+-
+-
+-static int __devinit
+-e1000_validate_option(int *value, struct e1000_option *opt)
+-{
+-      if(*value == OPTION_UNSET) {
+-              *value = opt->def;
+-              return 0;
+-      }
+-
+-      switch (opt->type) {
+-      case enable_option:
+-              switch (*value) {
+-              case OPTION_ENABLED:
+-                      printk(KERN_INFO "%s Enabled\n", opt->name);
+-                      return 0;
+-              case OPTION_DISABLED:
+-                      printk(KERN_INFO "%s Disabled\n", opt->name);
+-                      return 0;
+-              }
+-              break;
+-      case range_option:
+-              if(*value >= opt->arg.r.min && *value <= opt->arg.r.max) {
+-                      printk(KERN_INFO "%s set to %i\n", opt->name, *value);
+-                      return 0;
+-              }
+-              break;
+-      case list_option: {
+-              int i;
+-              struct e1000_opt_list *ent;
+-
+-              for(i = 0; i < opt->arg.l.nr; i++) {
+-                      ent = &opt->arg.l.p[i];
+-                      if(*value == ent->i) {
+-                              if(ent->str[0] != '\0')
+-                                      printk(KERN_INFO "%s\n", ent->str);
+-                              return 0;
+-                      }
+-              }
+-      }
+-              break;
+-      default:
+-              BUG();
+-      }
+-              
+-      printk(KERN_INFO "Invalid %s specified (%i) %s\n",
+-             opt->name, *value, opt->err);
+-      *value = opt->def;
+-      return -1;
+-}
+-
+-static void e1000_check_fiber_options(struct e1000_adapter *adapter);
+-static void e1000_check_copper_options(struct e1000_adapter *adapter);
+-
+-/**
+- * e1000_check_options - Range Checking for Command Line Parameters
+- * @adapter: board private structure
+- *
+- * This routine checks all command line paramters for valid user
+- * input.  If an invalid value is given, or if no user specified
+- * value exists, a default value is used.  The final value is stored
+- * in a variable in the adapter structure.
+- **/
+-
+-void __devinit
+-e1000_check_options(struct e1000_adapter *adapter)
+-{
+-      int bd = adapter->bd_number;
+-      if(bd >= E1000_MAX_NIC) {
+-              printk(KERN_NOTICE 
+-                     "Warning: no configuration for board #%i\n", bd);
+-              printk(KERN_NOTICE "Using defaults for all values\n");
+-              bd = E1000_MAX_NIC;
+-      }
+-
+-      { /* Transmit Descriptor Count */
+-              struct e1000_option opt = {
+-                      type: range_option,
+-                      name: "Transmit Descriptors",
+-                      err:  "using default of " __MODULE_STRING(DEFAULT_TXD),
+-                      def:  DEFAULT_TXD,
+-                      arg: { r: { min: MIN_TXD }}
+-              };
+-              struct e1000_desc_ring *tx_ring = &adapter->tx_ring;
+-              e1000_mac_type mac_type = adapter->hw.mac_type;
+-              opt.arg.r.max = mac_type < e1000_82544 ? MAX_TXD : MAX_82544_TXD;
+-
+-              tx_ring->count = TxDescriptors[bd];
+-              e1000_validate_option(&tx_ring->count, &opt);
+-              E1000_ROUNDUP(tx_ring->count, REQ_TX_DESCRIPTOR_MULTIPLE);
+-      }
+-      { /* Receive Descriptor Count */
+-              struct e1000_option opt = {
+-                      type: range_option,
+-                      name: "Receive Descriptors",
+-                      err:  "using default of " __MODULE_STRING(DEFAULT_RXD),
+-                      def:  DEFAULT_RXD,
+-                      arg: { r: { min: MIN_RXD }}
+-              };
+-              struct e1000_desc_ring *rx_ring = &adapter->rx_ring;
+-              e1000_mac_type mac_type = adapter->hw.mac_type;
+-              opt.arg.r.max = mac_type < e1000_82544 ? MAX_RXD : MAX_82544_RXD;
+-
+-              rx_ring->count = RxDescriptors[bd];
+-              e1000_validate_option(&rx_ring->count, &opt);
+-              E1000_ROUNDUP(rx_ring->count, REQ_RX_DESCRIPTOR_MULTIPLE);
+-      }
+-      { /* Checksum Offload Enable/Disable */
+-              struct e1000_option opt = {
+-                      type: enable_option,
+-                      name: "Checksum Offload",
+-                      err:  "defaulting to Enabled",
+-                      def:  OPTION_ENABLED
+-              };
+-              
+-              int rx_csum = XsumRX[bd];
+-              e1000_validate_option(&rx_csum, &opt);
+-              adapter->rx_csum = rx_csum;
+-      }
+-      { /* Flow Control */
+-              
+-              struct e1000_opt_list fc_list[] =
+-                      {{ e1000_fc_none,    "Flow Control Disabled" },
+-                       { e1000_fc_rx_pause,"Flow Control Receive Only" },
+-                       { e1000_fc_tx_pause,"Flow Control Transmit Only" },
+-                       { e1000_fc_full,    "Flow Control Enabled" },
+-                       { e1000_fc_default, "Flow Control Hardware Default" }};
+-
+-              struct e1000_option opt = {
+-                      type: list_option,
+-                      name: "Flow Control",
+-                      err:  "reading default settings from EEPROM",
+-                      def:  e1000_fc_default,
+-                      arg: { l: { nr: ARRAY_SIZE(fc_list), p: fc_list }}
+-              };
+-
+-              int fc = FlowControl[bd];
+-              e1000_validate_option(&fc, &opt);
+-              adapter->hw.fc = adapter->hw.original_fc = fc;
+-      }
+-      { /* Transmit Interrupt Delay */
+-              char *tidv = "using default of " __MODULE_STRING(DEFAULT_TIDV);
+-              struct e1000_option opt = {
+-                      type: range_option,
+-                      name: "Transmit Interrupt Delay",
+-                      arg: { r: { min: MIN_TXDELAY, max: MAX_TXDELAY }}
+-              };
+-              opt.def = DEFAULT_TIDV;
+-              opt.err = tidv;
+-
+-              adapter->tx_int_delay = TxIntDelay[bd];
+-              e1000_validate_option(&adapter->tx_int_delay, &opt);
+-      }
+-      { /* Transmit Absolute Interrupt Delay */
+-              char *tadv = "using default of " __MODULE_STRING(DEFAULT_TADV);
+-              struct e1000_option opt = {
+-                      type: range_option,
+-                      name: "Transmit Absolute Interrupt Delay",
+-                      arg: { r: { min: MIN_TXABSDELAY, max: MAX_TXABSDELAY }}
+-              };
+-              opt.def = DEFAULT_TADV;
+-              opt.err = tadv;
+-
+-              adapter->tx_abs_int_delay = TxAbsIntDelay[bd];
+-              e1000_validate_option(&adapter->tx_abs_int_delay, &opt);
+-      }
+-      { /* Receive Interrupt Delay */
+-              char *rdtr = "using default of " __MODULE_STRING(DEFAULT_RDTR);
+-              char *rdtr_82544 = "using default of "
+-                                 __MODULE_STRING(DEFAULT_RDTR_82544);
+-              struct e1000_option opt = {
+-                      type: range_option,
+-                      name: "Receive Interrupt Delay",
+-                      arg: { r: { min: MIN_RXDELAY, max: MAX_RXDELAY }}
+-              };
+-              e1000_mac_type mac_type = adapter->hw.mac_type;
+-              opt.def = mac_type > e1000_82544 ? DEFAULT_RDTR : 0;
+-              opt.err = mac_type > e1000_82544 ? rdtr : rdtr_82544;
+-
+-              adapter->rx_int_delay = RxIntDelay[bd];
+-              e1000_validate_option(&adapter->rx_int_delay, &opt);
+-      }
+-      { /* Receive Absolute Interrupt Delay */
+-              char *radv = "using default of " __MODULE_STRING(DEFAULT_RADV);
+-              struct e1000_option opt = {
+-                      type: range_option,
+-                      name: "Receive Absolute Interrupt Delay",
+-                      arg: { r: { min: MIN_RXABSDELAY, max: MAX_RXABSDELAY }}
+-              };
+-              opt.def = DEFAULT_RADV;
+-              opt.err = radv;
+-
+-              adapter->rx_abs_int_delay = RxAbsIntDelay[bd];
+-              e1000_validate_option(&adapter->rx_abs_int_delay, &opt);
+-      }
+-      
+-      switch(adapter->hw.media_type) {
+-      case e1000_media_type_fiber:
+-              e1000_check_fiber_options(adapter);
+-              break;
+-      case e1000_media_type_copper:
+-              e1000_check_copper_options(adapter);
+-              break;
+-      default:
+-              BUG();
+-      }
+-}
+-
+-/**
+- * e1000_check_fiber_options - Range Checking for Link Options, Fiber Version
+- * @adapter: board private structure
+- *
+- * Handles speed and duplex options on fiber adapters
+- **/
+-
+-static void __devinit
+-e1000_check_fiber_options(struct e1000_adapter *adapter)
+-{
+-      int bd = adapter->bd_number;
+-      bd = bd > E1000_MAX_NIC ? E1000_MAX_NIC : bd;
+-
+-      if((Speed[bd] != OPTION_UNSET)) {
+-              printk(KERN_INFO "Speed not valid for fiber adapters, "
+-                     "parameter ignored\n");
+-      }
+-      if((Duplex[bd] != OPTION_UNSET)) {
+-              printk(KERN_INFO "Duplex not valid for fiber adapters, "
+-                     "parameter ignored\n");
+-      }
+-      if((AutoNeg[bd] != OPTION_UNSET)) {
+-              printk(KERN_INFO "AutoNeg not valid for fiber adapters, "
+-                     "parameter ignored\n");
+-      }
+-}
+-
+-/**
+- * e1000_check_copper_options - Range Checking for Link Options, Copper Version
+- * @adapter: board private structure
+- *
+- * Handles speed and duplex options on copper adapters
+- **/
+-
+-static void __devinit
+-e1000_check_copper_options(struct e1000_adapter *adapter)
+-{
+-      int speed, dplx;
+-      int bd = adapter->bd_number;
+-      bd = bd > E1000_MAX_NIC ? E1000_MAX_NIC : bd;
+-
+-      { /* Speed */
+-              struct e1000_opt_list speed_list[] = {{          0, "" },
+-                                                    {   SPEED_10, "" },
+-                                                    {  SPEED_100, "" },
+-                                                    { SPEED_1000, "" }};
+-              struct e1000_option opt = {
+-                      type: list_option,
+-                      name: "Speed",
+-                      err:  "parameter ignored",
+-                      def:  0,
+-                      arg: { l: { nr: ARRAY_SIZE(speed_list), p: speed_list }}
+-              };
+-
+-              speed = Speed[bd];
+-              e1000_validate_option(&speed, &opt);
+-      }
+-      { /* Duplex */
+-              struct e1000_opt_list dplx_list[] = {{           0, "" },
+-                                                   { HALF_DUPLEX, "" },
+-                                                   { FULL_DUPLEX, "" }};
+-              struct e1000_option opt = {
+-                      type: list_option,
+-                      name: "Duplex",
+-                      err:  "parameter ignored",
+-                      def:  0,
+-                      arg: { l: { nr: ARRAY_SIZE(dplx_list), p: dplx_list }}
+-              };
+-
+-              dplx = Duplex[bd];
+-              e1000_validate_option(&dplx, &opt);
+-      }
+-
+-      if(AutoNeg[bd] != OPTION_UNSET && (speed != 0 || dplx != 0)) {
+-              printk(KERN_INFO
+-                     "AutoNeg specified along with Speed or Duplex, "
+-                     "parameter ignored\n");
+-              adapter->hw.autoneg_advertised = AUTONEG_ADV_DEFAULT;
+-      } else { /* Autoneg */
+-              struct e1000_opt_list an_list[] =
+-                      #define AA "AutoNeg advertising "
+-                      {{ 0x01, AA "10/HD" },
+-                       { 0x02, AA "10/FD" },
+-                       { 0x03, AA "10/FD, 10/HD" },
+-                       { 0x04, AA "100/HD" },
+-                       { 0x05, AA "100/HD, 10/HD" },
+-                       { 0x06, AA "100/HD, 10/FD" },
+-                       { 0x07, AA "100/HD, 10/FD, 10/HD" },
+-                       { 0x08, AA "100/FD" },
+-                       { 0x09, AA "100/FD, 10/HD" },
+-                       { 0x0a, AA "100/FD, 10/FD" },
+-                       { 0x0b, AA "100/FD, 10/FD, 10/HD" },
+-                       { 0x0c, AA "100/FD, 100/HD" },
+-                       { 0x0d, AA "100/FD, 100/HD, 10/HD" },
+-                       { 0x0e, AA "100/FD, 100/HD, 10/FD" },
+-                       { 0x0f, AA "100/FD, 100/HD, 10/FD, 10/HD" },
+-                       { 0x20, AA "1000/FD" },
+-                       { 0x21, AA "1000/FD, 10/HD" },
+-                       { 0x22, AA "1000/FD, 10/FD" },
+-                       { 0x23, AA "1000/FD, 10/FD, 10/HD" },
+-                       { 0x24, AA "1000/FD, 100/HD" },
+-                       { 0x25, AA "1000/FD, 100/HD, 10/HD" },
+-                       { 0x26, AA "1000/FD, 100/HD, 10/FD" },
+-                       { 0x27, AA "1000/FD, 100/HD, 10/FD, 10/HD" },
+-                       { 0x28, AA "1000/FD, 100/FD" },
+-                       { 0x29, AA "1000/FD, 100/FD, 10/HD" },
+-                       { 0x2a, AA "1000/FD, 100/FD, 10/FD" },
+-                       { 0x2b, AA "1000/FD, 100/FD, 10/FD, 10/HD" },
+-                       { 0x2c, AA "1000/FD, 100/FD, 100/HD" },
+-                       { 0x2d, AA "1000/FD, 100/FD, 100/HD, 10/HD" },
+-                       { 0x2e, AA "1000/FD, 100/FD, 100/HD, 10/FD" },
+-                       { 0x2f, AA "1000/FD, 100/FD, 100/HD, 10/FD, 10/HD" }};
+-
+-              struct e1000_option opt = {
+-                      type: list_option,
+-                      name: "AutoNeg",
+-                      err:  "parameter ignored",
+-                      def:  AUTONEG_ADV_DEFAULT,
+-                      arg: { l: { nr: ARRAY_SIZE(an_list), p: an_list }}
+-              };
+-
+-              int an = AutoNeg[bd];
+-              e1000_validate_option(&an, &opt);
+-              adapter->hw.autoneg_advertised = an;
+-      }
+-
+-      switch (speed + dplx) {
+-      case 0:
+-              adapter->hw.autoneg = 1;
+-              if(Speed[bd] != OPTION_UNSET || Duplex[bd] != OPTION_UNSET)
+-                      printk(KERN_INFO
+-                             "Speed and duplex autonegotiation enabled\n");
+-              break;
+-      case HALF_DUPLEX:
+-              printk(KERN_INFO "Half Duplex specified without Speed\n");
+-              printk(KERN_INFO "Using Autonegotiation at Half Duplex only\n");
+-              adapter->hw.autoneg = 1;
+-              adapter->hw.autoneg_advertised = ADVERTISE_10_HALF | 
+-                                               ADVERTISE_100_HALF;
+-              break;
+-      case FULL_DUPLEX:
+-              printk(KERN_INFO "Full Duplex specified without Speed\n");
+-              printk(KERN_INFO "Using Autonegotiation at Full Duplex only\n");
+-              adapter->hw.autoneg = 1;
+-              adapter->hw.autoneg_advertised = ADVERTISE_10_FULL |
+-                                               ADVERTISE_100_FULL |
+-                                               ADVERTISE_1000_FULL;
+-              break;
+-      case SPEED_10:
+-              printk(KERN_INFO "10 Mbps Speed specified without Duplex\n");
+-              printk(KERN_INFO "Using Autonegotiation at 10 Mbps only\n");
+-              adapter->hw.autoneg = 1;
+-              adapter->hw.autoneg_advertised = ADVERTISE_10_HALF |
+-                                               ADVERTISE_10_FULL;
+-              break;
+-      case SPEED_10 + HALF_DUPLEX:
+-              printk(KERN_INFO "Forcing to 10 Mbps Half Duplex\n");
+-              adapter->hw.autoneg = 0;
+-              adapter->hw.forced_speed_duplex = e1000_10_half;
+-              adapter->hw.autoneg_advertised = 0;
+-              break;
+-      case SPEED_10 + FULL_DUPLEX:
+-              printk(KERN_INFO "Forcing to 10 Mbps Full Duplex\n");
+-              adapter->hw.autoneg = 0;
+-              adapter->hw.forced_speed_duplex = e1000_10_full;
+-              adapter->hw.autoneg_advertised = 0;
+-              break;
+-      case SPEED_100:
+-              printk(KERN_INFO "100 Mbps Speed specified without Duplex\n");
+-              printk(KERN_INFO "Using Autonegotiation at 100 Mbps only\n");
+-              adapter->hw.autoneg = 1;
+-              adapter->hw.autoneg_advertised = ADVERTISE_100_HALF |
+-                                               ADVERTISE_100_FULL;
+-              break;
+-      case SPEED_100 + HALF_DUPLEX:
+-              printk(KERN_INFO "Forcing to 100 Mbps Half Duplex\n");
+-              adapter->hw.autoneg = 0;
+-              adapter->hw.forced_speed_duplex = e1000_100_half;
+-              adapter->hw.autoneg_advertised = 0;
+-              break;
+-      case SPEED_100 + FULL_DUPLEX:
+-              printk(KERN_INFO "Forcing to 100 Mbps Full Duplex\n");
+-              adapter->hw.autoneg = 0;
+-              adapter->hw.forced_speed_duplex = e1000_100_full;
+-              adapter->hw.autoneg_advertised = 0;
+-              break;
+-      case SPEED_1000:
+-              printk(KERN_INFO "1000 Mbps Speed specified without Duplex\n");
+-              printk(KERN_INFO
+-                     "Using Autonegotiation at 1000 Mbps Full Duplex only\n");
+-              adapter->hw.autoneg = 1;
+-              adapter->hw.autoneg_advertised = ADVERTISE_1000_FULL;
+-              break;
+-      case SPEED_1000 + HALF_DUPLEX:
+-              printk(KERN_INFO "Half Duplex is not supported at 1000 Mbps\n");
+-              printk(KERN_INFO
+-                     "Using Autonegotiation at 1000 Mbps Full Duplex only\n");
+-              adapter->hw.autoneg = 1;
+-              adapter->hw.autoneg_advertised = ADVERTISE_1000_FULL;
+-              break;
+-      case SPEED_1000 + FULL_DUPLEX:
+-              printk(KERN_INFO
+-                     "Using Autonegotiation at 1000 Mbps Full Duplex only\n");
+-              adapter->hw.autoneg = 1;
+-              adapter->hw.autoneg_advertised = ADVERTISE_1000_FULL;
+-              break;
+-      default:
+-              BUG();
+-      }
+-
+-      /* Speed, AutoNeg and MDI/MDI-X must all play nice */
+-      if (e1000_validate_mdi_setting(&(adapter->hw)) < 0) {
+-              printk(KERN_INFO "Speed, AutoNeg and MDI-X specifications are "
+-                     "incompatible. Setting MDI-X to a compatible value.\n");
+-      }
+-}
+-
+diff -Nurb click-1.6.0/elements/linuxmodule/anydevice.cc click-1.6.0-27/elements/linuxmodule/anydevice.cc
+--- click-1.6.0/elements/linuxmodule/anydevice.cc      2007-08-29 04:03:55.000000000 -0400
++++ click-1.6.0-27/elements/linuxmodule/anydevice.cc   2009-01-21 14:44:39.000000000 -0500
+@@ -49,7 +49,7 @@
+ int
+ AnyDevice::find_device(AnyDeviceMap *adm, ErrorHandler *errh)
+ {
+-    _dev = dev_get_by_name(_devname.c_str());
++    _dev = dev_get_by_name(&init_net,_devname.c_str());
+     _devname_exists = (bool) _dev;
+     if (!_dev)
+       _dev = dev_get_by_ether_address(_devname, this);
+@@ -233,7 +233,7 @@
+       return 0;
+     read_lock(&dev_base_lock);
+     net_device *dev;
+-    for (dev = dev_base; dev; dev = dev->next)
++    for_each_netdev(&init_net, dev)//for (dev = dev_base; dev; dev = dev->next)
+       if ((dev->type == ARPHRD_ETHER || dev->type == ARPHRD_80211)
+           && memcmp(en, dev->dev_addr, 6) == 0) {
+           dev_hold(dev);      // dev_get_by_name does dev_hold; so
+diff -Nurb click-1.6.0/elements/linuxmodule/anydevice.cc.orig click-1.6.0-27/elements/linuxmodule/anydevice.cc.orig
+--- click-1.6.0/elements/linuxmodule/anydevice.cc.orig 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/elements/linuxmodule/anydevice.cc.orig      2007-08-29 04:03:55.000000000 -0400
+@@ -0,0 +1,248 @@
++// -*- mode: c++; c-basic-offset: 4 -*-
++/*
++ * anydevice.{cc,hh} -- support Linux device interaction
++ * Eddie Kohler
++ *
++ * Copyright (c) 2001 International Computer Science Institute
++ * Copyright (c) 2000 Massachusetts Institute of Technology
++ * Copyright (c) 2000 Mazu Networks, Inc.
++ * Copyright (c) 2004-2007 Regents of the University of California
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, subject to the conditions
++ * listed in the Click LICENSE file. These conditions include: you must
++ * preserve this copyright notice, and you cannot mention the copyright
++ * holders in advertising related to the Software without their permission.
++ * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++ * notice is a summary of the Click LICENSE file; the license in that file is
++ * legally binding.
++ */
++
++#include <click/config.h>
++#include <click/glue.hh>
++#include "anydevice.hh"
++#include <click/confparse.hh>
++#include <click/error.hh>
++#include <clicknet/ether.h>
++#include <click/cxxprotect.h>
++CLICK_CXX_PROTECT
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
++#include <linux/if_arp.h>
++#endif
++#include <linux/smp_lock.h>
++CLICK_CXX_UNPROTECT
++#include <click/cxxunprotect.h>
++
++AnyDevice::AnyDevice()
++    : _dev(0), _promisc(false), _timestamp(true), _in_map(false),
++      _quiet(false), _allow_nonexistent(false), _devname_exists(false), _next(0)
++{
++}
++
++AnyDevice::~AnyDevice()
++{
++    if (_in_map || _dev)
++      click_chatter("%s: bad device destructor!", name().c_str());
++}
++
++int
++AnyDevice::find_device(AnyDeviceMap *adm, ErrorHandler *errh)
++{
++    _dev = dev_get_by_name(_devname.c_str());
++    _devname_exists = (bool) _dev;
++    if (!_dev)
++      _dev = dev_get_by_ether_address(_devname, this);
++
++    if (!_dev && !_allow_nonexistent)
++      return errh->error("unknown device '%s'", _devname.c_str());
++    else if (!_dev && !_quiet)
++      errh->warning("unknown device '%s'", _devname.c_str());
++    else if (_dev && !(_dev->flags & IFF_UP)) {
++      if (!_quiet)
++          errh->warning("device '%s' is down", _devname.c_str());
++      dev_put(_dev);
++      _dev = 0;
++    }
++
++    if (_dev && _promisc)
++      dev_set_promiscuity(_dev, 1);
++#if HAVE_NET_ENABLE_TIMESTAMP
++    if (_dev && _timestamp)
++      net_enable_timestamp();
++#endif
++    if (adm)
++      adm->insert(this, false);
++
++    return 0;
++}
++
++void
++AnyDevice::set_device(net_device *dev, AnyDeviceMap *adm, bool locked)
++{
++    if (_dev == dev)          // changing to the same device is a noop
++      return;
++    
++    if (_dev && !_quiet)
++      click_chatter("%s: device '%s' went down", declaration().c_str(), _devname.c_str());
++    if (dev && !_quiet)
++      click_chatter("%s: device '%s' came up", declaration().c_str(), _devname.c_str());
++    
++    if (_dev && _promisc)
++      dev_set_promiscuity(_dev, -1);
++#if HAVE_NET_ENABLE_TIMESTAMP
++    if (_dev && _timestamp)
++      net_disable_timestamp();
++#endif
++    
++    if (adm && _in_map)
++      adm->remove(this, locked);
++    if (_dev)
++      dev_put(_dev);
++    _dev = dev;
++    if (_dev)
++      dev_hold(_dev);
++    if (adm)
++      adm->insert(this, locked);
++
++    if (_dev && _promisc)
++      dev_set_promiscuity(_dev, 1);
++#if HAVE_NET_ENABLE_TIMESTAMP
++    if (_dev && _timestamp)
++      net_enable_timestamp();
++#endif
++}
++
++void
++AnyDevice::clear_device(AnyDeviceMap *adm)
++{
++    if (_dev && _promisc)
++      dev_set_promiscuity(_dev, -1);
++#if HAVE_NET_ENABLE_TIMESTAMP
++    if (_dev && _timestamp)
++      net_disable_timestamp();
++#endif
++    if (adm && _in_map)
++      adm->remove(this, false);
++    if (_dev)
++      dev_put(_dev);
++    _dev = 0;
++}
++
++
++AnyTaskDevice::AnyTaskDevice()
++    : _task(this), _idles(0)
++{
++}
++
++
++void
++AnyDeviceMap::initialize()
++{
++    _unknown_map = 0;
++    for (int i = 0; i < MAP_SIZE; i++)
++      _map[i] = 0;
++    rwlock_init(&_lock);
++}
++
++void
++AnyDeviceMap::insert(AnyDevice *d, bool locked)
++{
++    // lock when manipulating device map
++    if (!locked)
++      lock(true);
++    
++    // put new devices last on list
++    int ifi = d->ifindex();
++    AnyDevice **pprev = (ifi >= 0 ? &_map[ifi % MAP_SIZE] : &_unknown_map);
++    AnyDevice *trav = *pprev;
++    while (trav) {
++      pprev = &trav->_next;
++      trav = *pprev;
++    }
++    d->_next = 0;
++    *pprev = d;
++
++    d->_in_map = true;
++    if (!locked)
++      unlock(true);
++}
++
++void
++AnyDeviceMap::remove(AnyDevice *d, bool locked)
++{
++    if (!locked)
++      lock(true);
++    int ifi = d->ifindex();
++    AnyDevice **pprev = (ifi >= 0 ? &_map[ifi % MAP_SIZE] : &_unknown_map);
++    AnyDevice *trav = *pprev;
++    while (trav && trav != d) {
++      pprev = &trav->_next;
++      trav = *pprev;
++    }
++    if (trav)
++      *pprev = d->_next;
++    d->_in_map = false;
++    if (!locked)
++      unlock(true);
++}
++
++AnyDevice *
++AnyDeviceMap::lookup_unknown(net_device *dev, AnyDevice *last) const
++    // must be called between AnyDeviceMap::lock() ... unlock()
++{
++    // make sure device is valid
++    if (!dev)
++      return 0;
++
++    // look by device name and Ethernet address
++    String dev_name = dev->name;
++    unsigned char en[6];
++    
++    for (AnyDevice *d = (last ? last->_next : _unknown_map); d; d = d->_next)
++      if (d->devname() == dev_name) {
++          d->_devname_exists = true;
++          return d;
++      } else if ((dev->type == ARPHRD_ETHER || dev->type == ARPHRD_80211)
++                 && !d->_devname_exists
++                 && cp_ethernet_address(d->devname(), en, d)
++                 && memcmp(en, dev->dev_addr, 6) == 0)
++          return d;
++
++    return 0;
++}
++
++void
++AnyDeviceMap::lookup_all(net_device *dev, bool known, Vector<AnyDevice *> &v) const
++    // must be called between AnyDeviceMap::lock() ... unlock()
++{
++    if (known)
++      for (AnyDevice *d = 0; d = lookup(dev, d); v.push_back(d))
++          /* nada */;
++    else
++      for (AnyDevice *d = 0; d = lookup_unknown(dev, d); v.push_back(d))
++          /* nada */;
++}
++
++
++net_device *
++dev_get_by_ether_address(const String &name, Element *context)
++{
++    unsigned char en[6];
++    if (!cp_ethernet_address(name, en, context))
++      return 0;
++    read_lock(&dev_base_lock);
++    net_device *dev;
++    for (dev = dev_base; dev; dev = dev->next)
++      if ((dev->type == ARPHRD_ETHER || dev->type == ARPHRD_80211)
++          && memcmp(en, dev->dev_addr, 6) == 0) {
++          dev_hold(dev);      // dev_get_by_name does dev_hold; so
++                              // should we
++          break;
++      }
++    read_unlock(&dev_base_lock);
++    return dev;
++}
++
++ELEMENT_REQUIRES(linuxmodule)
++ELEMENT_PROVIDES(AnyDevice)
+diff -Nurb click-1.6.0/elements/linuxmodule/fromdevice.cc click-1.6.0-27/elements/linuxmodule/fromdevice.cc
+--- click-1.6.0/elements/linuxmodule/fromdevice.cc     2007-08-29 04:01:48.000000000 -0400
++++ click-1.6.0-27/elements/linuxmodule/fromdevice.cc  2009-01-26 14:38:07.000000000 -0500
+@@ -258,7 +258,7 @@
+       assert(skb_shared(skb) == 0); /* else skb = skb_clone(skb, GFP_ATOMIC); */
+       /* Retrieve the MAC header. */
+-      skb_push(skb, skb->data - skb->mac.raw);
++      skb_push(skb, skb->data - skb_mac_header(skb));
+       Packet *p = Packet::make(skb);
+       _queue[_tail] = p; /* hand it to run_task */
+diff -Nurb click-1.6.0/elements/linuxmodule/fromdevice.cc.orig click-1.6.0-27/elements/linuxmodule/fromdevice.cc.orig
+--- click-1.6.0/elements/linuxmodule/fromdevice.cc.orig        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/elements/linuxmodule/fromdevice.cc.orig     2007-08-29 04:01:48.000000000 -0400
+@@ -0,0 +1,395 @@
++// -*- mode: c++; c-basic-offset: 4 -*-
++/*
++ * fromdevice.{cc,hh} -- element steals packets from Linux devices using
++ * register_net_in
++ * Eddie Kohler
++ * Robert Morris
++ * Benjie Chen: scheduling, internal queue
++ *
++ * Copyright (c) 1999-2000 Massachusetts Institute of Technology
++ * Copyright (c) 2000 Mazu Networks, Inc.
++ * Copyright (c) 2001 International Computer Science Institute
++ * Copyright (c) 2007 Regents of the University of California
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, subject to the conditions
++ * listed in the Click LICENSE file. These conditions include: you must
++ * preserve this copyright notice, and you cannot mention the copyright
++ * holders in advertising related to the Software without their permission.
++ * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++ * notice is a summary of the Click LICENSE file; the license in that file is
++ * legally binding.
++ */
++
++#include <click/config.h>
++#include <click/glue.hh>
++#include "fromdevice.hh"
++#include <click/error.hh>
++#include <click/confparse.hh>
++#include <click/router.hh>
++#include <click/standard/scheduleinfo.hh>
++#include <click/straccum.hh>
++
++static AnyDeviceMap from_device_map;
++static int registered_readers;
++#ifdef HAVE_CLICK_KERNEL
++static struct notifier_block packet_notifier;
++#endif
++static struct notifier_block device_notifier;
++
++extern "C" {
++#ifdef HAVE_CLICK_KERNEL
++static int packet_notifier_hook(struct notifier_block *nb, unsigned long val, void *v);
++#endif
++static int device_notifier_hook(struct notifier_block *nb, unsigned long val, void *v);
++}
++
++void
++FromDevice::static_initialize()
++{
++    from_device_map.initialize();
++#ifdef HAVE_CLICK_KERNEL
++    packet_notifier.notifier_call = packet_notifier_hook;
++    packet_notifier.priority = 1;
++    packet_notifier.next = 0;
++#endif
++    device_notifier.notifier_call = device_notifier_hook;
++    device_notifier.priority = 1;
++    device_notifier.next = 0;
++    register_netdevice_notifier(&device_notifier);
++}
++
++void
++FromDevice::static_cleanup()
++{
++#ifdef HAVE_CLICK_KERNEL
++    if (registered_readers)
++      unregister_net_in(&packet_notifier);
++#endif
++    unregister_netdevice_notifier(&device_notifier);
++}
++
++FromDevice::FromDevice()
++{
++    _head = _tail = 0;
++}
++
++FromDevice::~FromDevice()
++{
++}
++
++void *
++FromDevice::cast(const char *n)
++{
++    if (strcmp(n, "Storage") == 0)
++      return (Storage *)this;
++    else if (strcmp(n, "FromDevice") == 0)
++      return (Element *)this;
++    else
++      return 0;
++}
++
++int
++FromDevice::configure(Vector<String> &conf, ErrorHandler *errh)
++{
++    bool promisc = false, quiet = false, allow_nonexistent = false, timestamp = true;
++    _burst = 8;
++    if (cp_va_parse(conf, this, errh, 
++                  cpString, "device name", &_devname, 
++                  cpOptional,
++                  cpBool, "enter promiscuous mode?", &promisc,
++                  cpUnsigned, "burst size", &_burst,
++                  cpKeywords,
++                  "PROMISC", cpBool, "enter promiscuous mode?", &promisc,
++                  "PROMISCUOUS", cpBool, "enter promiscuous mode?", &promisc,
++                  "BURST", cpUnsigned, "burst size", &_burst,
++                  "TIMESTAMP", cpBool, "set timestamps?", &timestamp,
++                  "QUIET", cpBool, "suppress up/down messages?", &quiet,
++                  "ALLOW_NONEXISTENT", cpBool, "allow nonexistent device?", &allow_nonexistent,
++                  cpEnd) < 0)
++      return -1;
++    set_device_flags(promisc, timestamp, allow_nonexistent, quiet);
++
++    // make queue look full so packets sent to us are ignored
++    _head = _tail = _capacity = 0;
++
++    return find_device(&from_device_map, errh);
++}
++
++/*
++ * Use a Linux interface added by us, in net/core/dev.c,
++ * to register to grab incoming packets.
++ */
++int
++FromDevice::initialize(ErrorHandler *errh)
++{
++    // check for duplicate readers
++    if (ifindex() >= 0) {
++      void *&used = router()->force_attachment("device_reader_" + String(ifindex()));
++      if (used)
++          return errh->error("duplicate reader for device '%s'", _devname.c_str());
++      used = this;
++    }
++
++    if (!registered_readers) {
++#ifdef HAVE_CLICK_KERNEL
++      packet_notifier.next = 0;
++      register_net_in(&packet_notifier);
++#else
++      errh->warning("can't get packets: not compiled for a Click kernel");
++#endif
++    }
++    registered_readers++;
++
++    _drops = 0;
++    reset_counts();
++
++    ScheduleInfo::initialize_task(this, &_task, _dev != 0, errh);
++#ifdef HAVE_STRIDE_SCHED
++    // user specifies max number of tickets; we start with default
++    _max_tickets = _task.tickets();
++    _task.set_tickets(Task::DEFAULT_TICKETS);
++#endif
++
++    // set true queue size (now we can start receiving packets)
++    _capacity = QSIZE;
++    
++    return 0;
++}
++
++void
++FromDevice::cleanup(CleanupStage stage)
++{
++    if (stage >= CLEANUP_INITIALIZED) {
++      registered_readers--;
++#ifdef HAVE_CLICK_KERNEL
++      if (registered_readers == 0)
++          unregister_net_in(&packet_notifier);
++#endif
++    }
++    
++    clear_device(&from_device_map);
++
++    if (stage >= CLEANUP_INITIALIZED)
++      for (unsigned i = _head; i != _tail; i = next_i(i))
++          _queue[i]->kill();
++    _head = _tail = 0;
++}
++
++void
++FromDevice::take_state(Element *e, ErrorHandler *errh)
++{
++    if (FromDevice *fd = (FromDevice *)e->cast("FromDevice")) {
++      SpinlockIRQ::flags_t flags;
++      local_irq_save(flags);
++
++      unsigned fd_i = fd->_head;
++      while (fd_i != fd->_tail) {
++          unsigned next = next_i(_tail);
++          if (next == _head)
++              break;
++          _queue[_tail] = fd->_queue[fd_i];
++          fd_i = fd->next_i(fd_i);
++          _tail = next;
++      }
++      for (; fd_i != fd->_tail; fd_i = fd->next_i(fd_i))
++          fd->_queue[fd_i]->kill();
++      if (_head != _tail)
++          _task.reschedule();
++
++      fd->_head = fd->_tail = fd->_capacity = 0;
++
++      local_irq_restore(flags);
++    }
++}
++
++/*
++ * Called by Linux net_bh[2.2]/net_rx_action[2.4] with each packet.
++ */
++extern "C" {
++
++#ifdef HAVE_CLICK_KERNEL
++static int
++packet_notifier_hook(struct notifier_block *nb, unsigned long backlog_len, void *v)
++{
++    struct sk_buff *skb = (struct sk_buff *)v;
++    int stolen = 0;
++    FromDevice *fd = 0;
++    from_device_map.lock(false);
++    while (stolen == 0 && (fd = (FromDevice *)from_device_map.lookup(skb->dev, fd)))
++      stolen = fd->got_skb(skb);
++    from_device_map.unlock(false);
++    return (stolen ? NOTIFY_STOP_MASK : 0);
++}
++#endif
++
++static int
++device_notifier_hook(struct notifier_block *nb, unsigned long flags, void *v)
++{
++#ifdef NETDEV_GOING_DOWN
++    if (flags == NETDEV_GOING_DOWN)
++      flags = NETDEV_DOWN;
++#endif
++    if (flags == NETDEV_DOWN || flags == NETDEV_UP) {
++      bool down = (flags == NETDEV_DOWN);
++      net_device* dev = (net_device*)v;
++      Vector<AnyDevice*> es;
++      from_device_map.lock(true);
++      from_device_map.lookup_all(dev, down, es);
++      for (int i = 0; i < es.size(); i++)
++          ((FromDevice*)(es[i]))->set_device(down ? 0 : dev, &from_device_map, true);
++      from_device_map.unlock(true);
++    }
++    return 0;
++}
++
++}
++
++/*
++ * Per-FromDevice packet input routine.
++ */
++int
++FromDevice::got_skb(struct sk_buff *skb)
++{
++    unsigned next = next_i(_tail);
++
++    if (next != _head) { /* ours */
++      assert(skb_shared(skb) == 0); /* else skb = skb_clone(skb, GFP_ATOMIC); */
++
++      /* Retrieve the MAC header. */
++      skb_push(skb, skb->data - skb->mac.raw);
++
++      Packet *p = Packet::make(skb);
++      _queue[_tail] = p; /* hand it to run_task */
++
++#if CLICK_DEBUG_SCHEDULING
++      click_gettimeofday(&_schinfo[_tail].enq_time);
++      RouterThread *rt = _task.thread();
++      _schinfo[_tail].enq_state = rt->thread_state();
++      int enq_process_asleep = rt->sleeper() && rt->sleeper()->state != TASK_RUNNING;
++      _schinfo[_tail].enq_task_scheduled = _task.scheduled();
++      _schinfo[_tail].enq_epoch = rt->driver_epoch();
++      _schinfo[_tail].enq_task_epoch = rt->driver_task_epoch();
++#endif
++      
++      _tail = next;
++      _task.reschedule();
++
++#if CLICK_DEBUG_SCHEDULING
++      _schinfo[_tail].enq_woke_process = enq_process_asleep && rt->sleeper()->state == TASK_RUNNING;
++#endif
++
++    } else if (_capacity > 0) {
++      /* queue full, drop */
++      kfree_skb(skb);
++      _drops++;
++      
++    } else // not yet initialized
++      return 0;
++
++    return 1;
++}
++
++#if CLICK_DEBUG_SCHEDULING
++void
++FromDevice::emission_report(int idx)
++{
++    struct timeval now;
++    click_gettimeofday(&now);
++    RouterThread *rt = _task.thread();
++    StringAccum sa;
++    sa << "dt " << (now - _schinfo[idx].enq_time);
++    if (_schinfo[idx].enq_state != RouterThread::S_RUNNING) {
++      struct timeval etime = rt->task_epoch_time(_schinfo[idx].enq_task_epoch + 1);
++      if (timerisset(&etime))
++          sa << " dt_thread " << (etime - _schinfo[idx].enq_time);
++    }
++    sa << " arrst " << RouterThread::thread_state_name(_schinfo[idx].enq_state)
++       << " depoch " << (rt->driver_epoch() - _schinfo[idx].enq_epoch)
++       << " dtepoch " << (rt->driver_task_epoch() - _schinfo[idx].enq_task_epoch);
++    if (_schinfo[idx].enq_woke_process)
++      sa << " woke";
++    if (_schinfo[idx].enq_task_scheduled)
++      sa << " tasksched";
++    
++    click_chatter("%s packet: %s", name().c_str(), sa.c_str()); 
++}
++#endif
++
++bool
++FromDevice::run_task(Task *)
++{
++    _runs++;
++    int npq = 0;
++    while (npq < _burst && _head != _tail) {
++      Packet *p = _queue[_head];
++#if CLICK_DEBUG_SCHEDULING
++      emission_report(_head);
++#endif
++      _head = next_i(_head);
++      output(0).push(p);
++      npq++;
++      _pushes++;
++    }
++    if (npq == 0)
++      _empty_runs++;
++    // 9/18/06: Frederic Van Quickenborne reports (1/24/05) that ticket
++    // adjustments in FromDevice+ToDevice cause odd behavior.  The ticket
++    // adjustments actually don't feel necessary to me in From/ToDevice any
++    // more, since FromDevice's interrupt handler will reschedule FromDevice
++    // as necessary; now "ticket adjustment" is subsumed by "scheduled or not
++    // scheduled".  So commenting this out.
++    // adjust_tickets(npq);
++    if (npq > 0)
++      _task.fast_reschedule();
++    return npq > 0;
++}
++
++void
++FromDevice::reset_counts()
++{
++    _runs = 0;
++    _empty_runs = 0;
++    _pushes = 0;
++}
++
++static int
++FromDevice_write_stats(const String &, Element *e, void *, ErrorHandler *)
++{
++    FromDevice *fd = (FromDevice *) e;
++    fd->reset_counts();
++    return 0;
++}
++
++static String
++FromDevice_read_stats(Element *e, void *thunk)
++{
++    FromDevice *fd = (FromDevice *) e;
++    switch (reinterpret_cast<intptr_t>(thunk)) {
++    case 0: return String(fd->drops()); break;
++    case 1: {
++      StringAccum sa;
++      sa << "calls to run_task(): " << fd->runs() << "\n"
++         << "calls to push():     " << fd->pushes() << "\n"
++         << "empty runs:          " << fd->empty_runs() << "\n"
++         << "drops:               " << fd->drops() << "\n";
++      return sa.take_string();
++      break;
++    }
++    default: 
++      return String();
++    } 
++}
++
++void
++FromDevice::add_handlers()
++{
++    add_task_handlers(&_task);
++    add_read_handler("drops", FromDevice_read_stats, (void *) 0);
++    add_read_handler("calls", FromDevice_read_stats, (void *) 1);
++    add_write_handler("reset_counts", FromDevice_write_stats, 0);
++}
++
++ELEMENT_REQUIRES(AnyDevice linuxmodule)
++EXPORT_ELEMENT(FromDevice)
+diff -Nurb click-1.6.0/elements/linuxmodule/fromhost.cc click-1.6.0-27/elements/linuxmodule/fromhost.cc
+--- click-1.6.0/elements/linuxmodule/fromhost.cc       2007-07-16 19:47:50.000000000 -0400
++++ click-1.6.0-27/elements/linuxmodule/fromhost.cc    2009-01-26 15:16:05.000000000 -0500
+@@ -121,7 +121,7 @@
+     used = this;
+     
+     // check for existing device
+-    _dev = dev_get_by_name(_devname.c_str());
++    _dev = dev_get_by_name(&init_net, _devname.c_str());
+     if (_dev) {
+       if (_dev->open != fl_open) {
+           dev_put(_dev);
+@@ -175,16 +175,16 @@
+     ifr.ifr_hwaddr.sa_family = _dev->type;
+     memcpy(ifr.ifr_hwaddr.sa_data, _macaddr.data(), 6);
+-    if ((res = dev_ioctl(SIOCSIFHWADDR, &ifr)) < 0)
++    if ((res = dev_ioctl(&init_net, SIOCSIFHWADDR, &ifr)) < 0)
+       errh->error("error %d setting hardware address for device '%s'", res, _devname.c_str());
+     sin->sin_family = AF_INET;
+     sin->sin_addr = _destaddr;
+-    if (res >= 0 && (res = devinet_ioctl(SIOCSIFADDR, &ifr)) < 0)
++    if (res >= 0 && (res = devinet_ioctl(&init_net,SIOCSIFADDR, &ifr)) < 0)
+       errh->error("error %d setting address for device '%s'", res, _devname.c_str());
+     sin->sin_addr = _destmask;
+-    if (res >= 0 && (res = devinet_ioctl(SIOCSIFNETMASK, &ifr)) < 0)
++    if (res >= 0 && (res = devinet_ioctl(&init_net,SIOCSIFNETMASK, &ifr)) < 0)
+       errh->error("error %d setting netmask for device '%s'", res, _devname.c_str());
+     set_fs(oldfs);
+@@ -202,9 +202,9 @@
+     mm_segment_t oldfs = get_fs();
+     set_fs(get_ds());
+-    (void) dev_ioctl(SIOCGIFFLAGS, &ifr);
++    (void) dev_ioctl(&init_net, SIOCGIFFLAGS, &ifr);
+     ifr.ifr_flags = (up > 0 ? ifr.ifr_flags | flags : ifr.ifr_flags & ~flags);
+-    if ((res = dev_ioctl(SIOCSIFFLAGS, &ifr)) < 0 && errh)
++    if ((res = dev_ioctl(&init_net, SIOCSIFFLAGS, &ifr)) < 0 && errh)
+       errh->error("error %d bringing %s device '%s'", res, (up > 0 ? "up" : "down"), dev->name);
+     set_fs(oldfs);
+diff -Nurb click-1.6.0/elements/linuxmodule/fromhost.cc.orig click-1.6.0-27/elements/linuxmodule/fromhost.cc.orig
+--- click-1.6.0/elements/linuxmodule/fromhost.cc.orig  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/elements/linuxmodule/fromhost.cc.orig       2007-07-16 19:47:50.000000000 -0400
+@@ -0,0 +1,345 @@
++// -*- mode: c++; c-basic-offset: 4 -*-
++/*
++ * fromhost.{cc,hh} -- receives packets from Linux
++ * Max Poletto, Eddie Kohler
++ *
++ * Copyright (c) 1999-2000 Massachusetts Institute of Technology
++ * Copyright (c) 2000 Mazu Networks, Inc.
++ * Copyright (c) 2001-2003 International Computer Science Institute
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, subject to the conditions
++ * listed in the Click LICENSE file. These conditions include: you must
++ * preserve this copyright notice, and you cannot mention the copyright
++ * holders in advertising related to the Software without their permission.
++ * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++ * notice is a summary of the Click LICENSE file; the license in that file is
++ * legally binding.
++ */
++
++#include <click/config.h>
++#include <click/router.hh>
++#include "fromhost.hh"
++#include <click/confparse.hh>
++#include <click/error.hh>
++#include <click/standard/scheduleinfo.hh>
++
++#include <click/cxxprotect.h>
++CLICK_CXX_PROTECT
++#include <asm/types.h>
++#include <asm/uaccess.h>
++#include <linux/ip.h>
++#include <linux/inetdevice.h>
++#include <net/route.h>
++CLICK_CXX_UNPROTECT
++#include <click/cxxunprotect.h>
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 0)
++# define netif_start_queue(dev)       do { dev->start=1; dev->tbusy=0; } while (0)
++# define netif_stop_queue(dev)        do { dev->tbusy=1; } while (0)
++# define netif_wake_queue(dev)        do { dev->tbusy=0; } while (0)
++#endif
++
++static int fl_open(net_device *);
++static int fl_close(net_device *);
++static net_device_stats *fl_stats(net_device *);
++static void fl_wakeup(Timer *, void *);
++
++static int from_linux_count;
++static AnyDeviceMap fromlinux_map;
++
++void
++FromHost::static_initialize()
++{
++    fromlinux_map.initialize();
++}
++
++FromHost::FromHost()
++    : _macaddr((const unsigned char *)"\000\001\002\003\004\005"),
++      _task(this), _wakeup_timer(fl_wakeup, this), _queue(0)
++{
++    memset(&_stats, 0, sizeof(_stats));
++}
++
++FromHost::~FromHost()
++{
++}
++
++net_device *
++FromHost::new_device(const char *name)
++{
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0)
++    read_lock(&dev_base_lock);
++#endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
++    net_device *dev = alloc_netdev(0, name, ether_setup);
++#else
++    int errcode;
++    net_device *dev = dev_alloc(name, &errcode);
++#endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0)
++    read_unlock(&dev_base_lock);
++#endif
++    if (!dev)
++      return 0;
++    
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 0)
++    // need to zero out the dev structure
++    char *nameptr = dev->name;
++    memset(dev, 0, sizeof(*dev));
++    dev->name = nameptr;
++#endif
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
++    ether_setup(dev);
++#endif
++    dev->open = fl_open;
++    dev->stop = fl_close;
++    dev->hard_start_xmit = fl_tx;
++    dev->get_stats = fl_stats;
++    return dev;
++}
++
++int
++FromHost::configure(Vector<String> &conf, ErrorHandler *errh)
++{
++    if (cp_va_parse(conf, this, errh,
++                  cpString, "device name", &_devname,
++                  cpIPPrefix, "destination IP prefix", &_destaddr, &_destmask,
++                  cpKeywords,
++                  "ETHER", cpEthernetAddress, "fake device Ethernet address", &_macaddr,
++                  cpEnd) < 0)
++      return -1;
++    if (_devname.length() > IFNAMSIZ - 1)
++      return errh->error("device name '%s' too long", _devname.c_str());
++
++    // check for duplicate element
++    void *&used = router()->force_attachment("FromHost_" + _devname);
++    if (used)
++      return errh->error("duplicate FromHost for device '%s'", _devname.c_str());
++    used = this;
++    
++    // check for existing device
++    _dev = dev_get_by_name(_devname.c_str());
++    if (_dev) {
++      if (_dev->open != fl_open) {
++          dev_put(_dev);
++          _dev = 0;
++          return errh->error("device '%s' already exists", _devname.c_str());
++      } else {
++          fromlinux_map.insert(this, false);
++          return 0;
++      }
++    }
++
++    // if not found, create new device
++    int res;
++    _dev = new_device(_devname.c_str());
++    if (!_dev)
++      return errh->error("out of memory!", res, _devname.c_str());
++    else if ((res = register_netdev(_dev)) < 0) {
++      kfree(_dev);
++      _dev = 0;
++      return errh->error("error %d registering device '%s'", res, _devname.c_str());
++    }
++
++    dev_hold(_dev);
++    fromlinux_map.insert(this, false);
++    return 0;
++}
++
++#if 0 /* Why was this code here? */
++static void
++dev_locks(int up)
++{
++# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0)
++    if (up > 0)
++      rtnl_lock();
++    else
++      rtnl_unlock();
++# endif
++}
++#endif
++
++int
++FromHost::set_device_addresses(ErrorHandler *errh)
++{
++    int res;
++    struct ifreq ifr;
++    strncpy(ifr.ifr_name, _dev->name, IFNAMSIZ);
++    struct sockaddr_in *sin = (struct sockaddr_in *)&ifr.ifr_addr;
++
++    mm_segment_t oldfs = get_fs();
++    set_fs(get_ds());
++
++    ifr.ifr_hwaddr.sa_family = _dev->type;
++    memcpy(ifr.ifr_hwaddr.sa_data, _macaddr.data(), 6);
++    if ((res = dev_ioctl(SIOCSIFHWADDR, &ifr)) < 0)
++      errh->error("error %d setting hardware address for device '%s'", res, _devname.c_str());
++
++    sin->sin_family = AF_INET;
++    sin->sin_addr = _destaddr;
++    if (res >= 0 && (res = devinet_ioctl(SIOCSIFADDR, &ifr)) < 0)
++      errh->error("error %d setting address for device '%s'", res, _devname.c_str());
++
++    sin->sin_addr = _destmask;
++    if (res >= 0 && (res = devinet_ioctl(SIOCSIFNETMASK, &ifr)) < 0)
++      errh->error("error %d setting netmask for device '%s'", res, _devname.c_str());
++
++    set_fs(oldfs);
++    return res;
++}
++
++static int
++dev_updown(net_device *dev, int up, ErrorHandler *errh)
++{
++    struct ifreq ifr;
++    strncpy(ifr.ifr_name, dev->name, IFNAMSIZ);
++    uint32_t flags = IFF_UP | IFF_RUNNING;
++    int res;
++
++    mm_segment_t oldfs = get_fs();
++    set_fs(get_ds());
++
++    (void) dev_ioctl(SIOCGIFFLAGS, &ifr);
++    ifr.ifr_flags = (up > 0 ? ifr.ifr_flags | flags : ifr.ifr_flags & ~flags);
++    if ((res = dev_ioctl(SIOCSIFFLAGS, &ifr)) < 0 && errh)
++      errh->error("error %d bringing %s device '%s'", res, (up > 0 ? "up" : "down"), dev->name);
++
++    set_fs(oldfs);
++    return res;
++}
++
++int
++FromHost::initialize(ErrorHandler *errh)
++{
++    ScheduleInfo::initialize_task(this, &_task, _dev != 0, errh);
++    _nonfull_signal = Notifier::downstream_full_signal(this, 0, &_task);
++    if (_dev->flags & IFF_UP) {
++      _wakeup_timer.initialize(this);
++      _wakeup_timer.schedule_now();
++      return 0;
++    } else if (set_device_addresses(errh) < 0)
++      return -1;
++    else
++      return dev_updown(_dev, 1, errh);
++}
++
++void
++FromHost::cleanup(CleanupStage)
++{
++    fromlinux_map.remove(this, false);
++
++    if (_queue) {
++      _queue->kill();
++      _queue = 0;
++    }
++    
++    if (_dev) {
++      dev_put(_dev);
++      fromlinux_map.lock(false);
++      if (fromlinux_map.lookup(_dev, 0))
++          // do not free device if it is in use
++          _dev = 0;
++      fromlinux_map.unlock(false);
++      if (_dev) {
++          if (_dev->flags & IFF_UP)
++              dev_updown(_dev, -1, 0);
++          unregister_netdev(_dev);
++          kfree(_dev);
++          _dev = 0;
++      }
++    }
++}
++
++static void
++fl_wakeup(Timer *, void *thunk)
++{
++    FromHost *fl = (FromHost *)thunk;
++    PrefixErrorHandler errh(ErrorHandler::default_handler(), fl->declaration() + ": ");
++    net_device *dev = fl->device();
++
++    if (dev->flags & IFF_UP)
++      dev_updown(dev, -1, &errh);
++    
++    fl->set_device_addresses(&errh);
++    
++    dev_updown(dev, 1, &errh);
++}
++
++/*
++ * Device callbacks
++ */
++
++static int
++fl_open(net_device *dev)
++{
++    netif_start_queue(dev);
++    return 0;
++}
++
++static int
++fl_close(net_device *dev)
++{
++    netif_stop_queue(dev);
++    return 0;
++}
++
++int
++FromHost::fl_tx(struct sk_buff *skb, net_device *dev)
++{
++    /* 8.May.2003 - Doug and company had crashes with FromHost configurations.
++         We eventually figured out this was because fl_tx was called at
++         interrupt time -- at bottom-half time, to be exact -- and then pushed
++         a packet through the configuration. Whoops: if Click was interrupted,
++         and during the bottom-half FromHost emitted a packet into Click,
++         DISASTER -- we assume that, when running single-threaded, at most one
++         Click thread is active at a time; so there were race conditions,
++         particularly with the task list. The solution is a single-packet-long
++         queue in FromHost. fl_tx puts a packet onto the queue, a regular
++         Click Task takes the packet off the queue. We could have implemented
++         a larger queue, but why bother? Linux already maintains a queue for
++         the device. */
++    fromlinux_map.lock(false);
++    if (FromHost *fl = (FromHost *)fromlinux_map.lookup(dev, 0))
++      if (!fl->_queue) {
++          fl->_queue = Packet::make(skb);
++          fl->_stats.tx_packets++;
++          fl->_stats.tx_bytes += fl->_queue->length();
++          fl->_task.reschedule();
++          fromlinux_map.unlock(false);
++          netif_stop_queue(dev);
++          return 0;
++      }
++    fromlinux_map.unlock(false);
++    return -1;
++}
++
++static net_device_stats *
++fl_stats(net_device *dev)
++{
++    net_device_stats *stats = 0;
++    fromlinux_map.lock(false);
++    if (FromHost *fl = (FromHost *)fromlinux_map.lookup(dev, 0))
++      stats = fl->stats();
++    fromlinux_map.unlock(false);
++    return stats;
++}
++
++bool
++FromHost::run_task(Task *)
++{
++    if (!_nonfull_signal)
++      return false;
++    else if (Packet *p = _queue) {
++      _queue = 0;
++      netif_wake_queue(_dev);
++      output(0).push(p);
++      return true;
++    } else
++      return false;
++}
++
++ELEMENT_REQUIRES(AnyDevice linuxmodule)
++EXPORT_ELEMENT(FromHost)
+diff -Nurb click-1.6.0/elements/linuxmodule/todevice.cc click-1.6.0-27/elements/linuxmodule/todevice.cc
+--- click-1.6.0/elements/linuxmodule/todevice.cc       2007-09-14 12:19:28.000000000 -0400
++++ click-1.6.0-27/elements/linuxmodule/todevice.cc    2009-01-26 16:50:39.000000000 -0500
+@@ -21,6 +21,8 @@
+  * legally binding.
+  */
++#include <linux/autoconf.h>
++#include <linux/version.h>
+ #include <click/config.h>
+ #include <click/glue.hh>
+ #include "polldevice.hh"
+@@ -243,12 +245,12 @@
+     }
+ # else
+     local_bh_disable();
+-    if (!spin_trylock(&_dev->xmit_lock)) {
++    if (!spin_trylock(&_dev->_tx[0]._xmit_lock)) {
+       local_bh_enable();
+       _task.fast_reschedule();
+       return false;
+     }
+-    _dev->xmit_lock_owner = smp_processor_id();
++    _dev->_tx[0].xmit_lock_owner = smp_processor_id();
+ # endif
+ #endif
+@@ -316,7 +318,7 @@
+     // (or until Linux sends another packet) unless we poke
+     // net_bh(), which calls qdisc_restart(). We are not allowed
+     // to call qdisc_restart() ourselves, outside of net_bh().
+-    if (is_polling && !busy && _dev->qdisc->q.qlen) {
++    if (is_polling && !busy && _dev->_tx[0].qdisc->q.qlen) {
+       _dev->tx_eob(_dev);
+       netif_wake_queue(_dev);
+     }
+@@ -349,8 +351,8 @@
+ # if HAVE_NETIF_TX_LOCK
+     netif_tx_unlock_bh(_dev);
+ # else
+-    _dev->xmit_lock_owner = -1;
+-    spin_unlock(&_dev->xmit_lock);
++    _dev->_tx[0].xmit_lock_owner = -1;
++    spin_unlock(&_dev->_tx[0]._xmit_lock);
+     local_bh_enable();
+ # endif
+ #endif
+diff -Nurb click-1.6.0/elements/linuxmodule/todevice.cc.orig click-1.6.0-27/elements/linuxmodule/todevice.cc.orig
+--- click-1.6.0/elements/linuxmodule/todevice.cc.orig  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/elements/linuxmodule/todevice.cc.orig       2007-09-14 12:19:28.000000000 -0400
+@@ -0,0 +1,562 @@
++// -*- mode: c++; c-basic-offset: 4 -*-
++/*
++ * todevice.{cc,hh} -- element sends packets to Linux devices.
++ * Robert Morris
++ * Eddie Kohler: register once per configuration
++ * Benjie Chen: polling
++ *
++ * Copyright (c) 1999-2000 Massachusetts Institute of Technology
++ * Copyright (c) 2000 Mazu Networks, Inc.
++ * Copyright (c) 2001 International Computer Science Institute
++ * Copyright (c) 2005-2007 Regents of the University of California
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, subject to the conditions
++ * listed in the Click LICENSE file. These conditions include: you must
++ * preserve this copyright notice, and you cannot mention the copyright
++ * holders in advertising related to the Software without their permission.
++ * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++ * notice is a summary of the Click LICENSE file; the license in that file is
++ * legally binding.
++ */
++
++#include <click/config.h>
++#include <click/glue.hh>
++#include "polldevice.hh"
++#include "todevice.hh"
++#include <click/error.hh>
++#include <click/etheraddress.hh>
++#include <click/confparse.hh>
++#include <click/router.hh>
++#include <click/standard/scheduleinfo.hh>
++
++#include <click/cxxprotect.h>
++CLICK_CXX_PROTECT
++#include <net/pkt_sched.h>
++#if __i386__
++#include <asm/msr.h>
++#endif
++CLICK_CXX_UNPROTECT
++#include <click/cxxunprotect.h>
++
++/* for watching when devices go offline */
++static AnyDeviceMap to_device_map;
++static struct notifier_block device_notifier;
++extern "C" {
++static int device_notifier_hook(struct notifier_block *nb, unsigned long val, void *v);
++#if HAVE_CLICK_KERNEL_TX_NOTIFY
++static struct notifier_block tx_notifier;
++static int registered_tx_notifiers;
++static int tx_notifier_hook(struct notifier_block *nb, unsigned long val, void *v);
++#endif
++}
++
++void
++ToDevice::static_initialize()
++{
++    to_device_map.initialize();
++#if HAVE_CLICK_KERNEL_TX_NOTIFY
++    tx_notifier.notifier_call = tx_notifier_hook;
++    tx_notifier.priority = 1;
++    tx_notifier.next = 0;
++#endif
++    device_notifier.notifier_call = device_notifier_hook;
++    device_notifier.priority = 1;
++    device_notifier.next = 0;
++    register_netdevice_notifier(&device_notifier);
++
++}
++
++void
++ToDevice::static_cleanup()
++{
++    unregister_netdevice_notifier(&device_notifier);
++#if HAVE_CLICK_KERNEL_TX_NOTIFY
++    if (registered_tx_notifiers)
++      unregister_net_tx(&tx_notifier);
++#endif
++}
++
++inline void
++ToDevice::tx_wake_queue(net_device *dev) 
++{
++    //click_chatter("%{element}::%s for dev %s\n", this, __func__, dev->name);
++    _task.reschedule();
++}
++
++#if HAVE_CLICK_KERNEL_TX_NOTIFY
++extern "C" {
++static int
++tx_notifier_hook(struct notifier_block *nb, unsigned long val, void *v) 
++{
++    struct net_device *dev = (struct net_device *)v;
++    if (!dev) {
++      return 0;
++    }
++    Vector<AnyDevice *> es;
++    bool down = true;
++    to_device_map.lock(false);
++    to_device_map.lookup_all(dev, down, es);
++    for (int i = 0; i < es.size(); i++) 
++      ((ToDevice *)(es[i]))->tx_wake_queue(dev);
++    to_device_map.unlock(false);
++    return 0;
++}
++}
++#endif
++
++ToDevice::ToDevice()
++    : _dev_idle(0), _rejected(0), _hard_start(0), _no_pad(false)
++{
++}
++
++ToDevice::~ToDevice()
++{
++}
++
++
++int
++ToDevice::configure(Vector<String> &conf, ErrorHandler *errh)
++{
++    _burst = 16;
++    bool allow_nonexistent = false, quiet = false;
++    if (cp_va_parse(conf, this, errh,
++                  cpString, "device name", &_devname,
++                  cpOptional,
++                  cpUnsigned, "burst size", &_burst,
++                  cpKeywords,
++                  "BURST", cpUnsigned, "burst size", &_burst,
++                  "QUIET", cpBool, "suppress up/down messages?", &quiet,
++                  "ALLOW_NONEXISTENT", cpBool, "allow nonexistent device?", &allow_nonexistent,
++                  "NO_PAD", cpBool, "don't pad packets to 60 bytes?", &_no_pad,
++                  cpEnd) < 0)
++      return -1;
++    set_device_flags(false, true, allow_nonexistent, quiet);
++    return find_device(&to_device_map, errh);
++}
++
++int
++ToDevice::initialize(ErrorHandler *errh)
++{
++#ifndef HAVE_CLICK_KERNEL
++    errh->warning("not compiled for a Click kernel");
++#endif
++
++    // check for duplicate writers
++    if (ifindex() >= 0) {
++      void *&used = router()->force_attachment("device_writer_" + String(ifindex()));
++      if (used)
++          return errh->error("duplicate writer for device '%s'", _devname.c_str());
++      used = this;
++    }
++
++#if HAVE_CLICK_KERNEL_TX_NOTIFY
++    if (!registered_tx_notifiers) {
++      tx_notifier.next = 0;
++      register_net_tx(&tx_notifier);
++    }
++    registered_tx_notifiers++;
++#endif
++
++    ScheduleInfo::initialize_task(this, &_task, _dev != 0, errh);
++    _signal = Notifier::upstream_empty_signal(this, 0, &_task);
++
++#ifdef HAVE_STRIDE_SCHED
++    // user specifies max number of tickets; we start with default
++    _max_tickets = _task.tickets();
++    _task.set_tickets(Task::DEFAULT_TICKETS);
++#endif
++
++    reset_counts();
++    return 0;
++}
++
++void
++ToDevice::reset_counts()
++{
++  _npackets = 0;
++  
++  _busy_returns = 0;
++  _too_short = 0;
++  _runs = 0;
++  _pulls = 0;
++#if CLICK_DEVICE_STATS
++  _activations = 0;
++  _time_clean = 0;
++  _time_freeskb = 0;
++  _time_queue = 0;
++  _perfcnt1_pull = 0;
++  _perfcnt1_clean = 0;
++  _perfcnt1_freeskb = 0;
++  _perfcnt1_queue = 0;
++  _perfcnt2_pull = 0;
++  _perfcnt2_clean = 0;
++  _perfcnt2_freeskb = 0;
++  _perfcnt2_queue = 0;
++#endif
++#if CLICK_DEVICE_THESIS_STATS || CLICK_DEVICE_STATS
++  _pull_cycles = 0;
++#endif
++}
++
++void
++ToDevice::cleanup(CleanupStage stage)
++{
++#if HAVE_CLICK_KERNEL_TX_NOTIFY
++    if (stage >= CLEANUP_INITIALIZED) {
++      registered_tx_notifiers--;
++      if (registered_tx_notifiers == 0)
++          unregister_net_tx(&tx_notifier);
++    }
++#endif
++    clear_device(&to_device_map);
++}
++
++/*
++ * Problem: Linux drivers aren't required to
++ * accept a packet even if they've marked themselves
++ * as idle. What do we do with a rejected packet?
++ */
++
++#if LINUX_VERSION_CODE < 0x020400
++# define netif_queue_stopped(dev)     ((dev)->tbusy)
++# define netif_wake_queue(dev)                mark_bh(NET_BH)
++#endif
++
++bool
++ToDevice::run_task(Task *)
++{
++    int busy = 0;
++    int sent = 0;
++
++    _runs++;
++
++#if LINUX_VERSION_CODE >= 0x020400
++# if HAVE_NETIF_TX_LOCK
++    int ok = spin_trylock_bh(&_dev->_xmit_lock);
++    if (likely(ok))
++      _dev->xmit_lock_owner = smp_processor_id();
++    else {
++      _task.fast_reschedule();
++      return false;
++    }
++# else
++    local_bh_disable();
++    if (!spin_trylock(&_dev->xmit_lock)) {
++      local_bh_enable();
++      _task.fast_reschedule();
++      return false;
++    }
++    _dev->xmit_lock_owner = smp_processor_id();
++# endif
++#endif
++
++#if CLICK_DEVICE_STATS
++    unsigned low00, low10;
++    uint64_t time_now;
++    SET_STATS(low00, low10, time_now);
++#endif
++    
++#if HAVE_LINUX_POLLING
++    bool is_polling = (_dev->polling > 0);
++    if (is_polling) {
++      struct sk_buff *skbs = _dev->tx_clean(_dev);
++# if CLICK_DEVICE_STATS
++      if (_activations > 0 && skbs)
++          GET_STATS_RESET(low00, low10, time_now, 
++                          _perfcnt1_clean, _perfcnt2_clean, _time_clean);
++# endif
++      if (skbs)
++          skbmgr_recycle_skbs(skbs);
++# if CLICK_DEVICE_STATS
++      if (_activations > 0 && skbs)
++          GET_STATS_RESET(low00, low10, time_now, 
++                          _perfcnt1_freeskb, _perfcnt2_freeskb, _time_freeskb);
++# endif
++    }
++#endif
++  
++    /* try to send from click */
++    while (sent < _burst && (busy = netif_queue_stopped(_dev)) == 0) {
++#if CLICK_DEVICE_THESIS_STATS && !CLICK_DEVICE_STATS
++      click_cycles_t before_pull_cycles = click_get_cycles();
++#endif
++
++      _pulls++;
++
++      Packet *p = input(0).pull();
++      if (!p)
++          break;
++
++      _npackets++;
++#if CLICK_DEVICE_THESIS_STATS && !CLICK_DEVICE_STATS
++      _pull_cycles += click_get_cycles() - before_pull_cycles - CLICK_CYCLE_COMPENSATION;
++#endif
++
++      GET_STATS_RESET(low00, low10, time_now, 
++                      _perfcnt1_pull, _perfcnt2_pull, _pull_cycles);
++
++      busy = queue_packet(p);
++
++      GET_STATS_RESET(low00, low10, time_now, 
++                      _perfcnt1_queue, _perfcnt2_queue, _time_queue);
++
++      if (busy)
++          break;
++      sent++;
++    }
++
++#if HAVE_LINUX_POLLING
++    if (is_polling && sent > 0)
++      _dev->tx_eob(_dev);
++
++    // If Linux tried to send a packet, but saw tbusy, it will
++    // have left it on the queue. It'll just sit there forever
++    // (or until Linux sends another packet) unless we poke
++    // net_bh(), which calls qdisc_restart(). We are not allowed
++    // to call qdisc_restart() ourselves, outside of net_bh().
++    if (is_polling && !busy && _dev->qdisc->q.qlen) {
++      _dev->tx_eob(_dev);
++      netif_wake_queue(_dev);
++    }
++#endif
++
++#if CLICK_DEVICE_STATS
++    if (sent > 0)
++      _activations++;
++#endif
++
++    if (busy && sent == 0)
++      _busy_returns++;
++
++#if HAVE_LINUX_POLLING
++    if (is_polling) {
++      if (busy && sent == 0) {
++          _dev_idle++;
++          if (_dev_idle == 1024) {
++              /* device didn't send anything, ping it */
++              _dev->tx_start(_dev);
++              _dev_idle = 0;
++              _hard_start++;
++          }
++      } else
++          _dev_idle = 0;
++    }
++#endif
++
++#if LINUX_VERSION_CODE >= 0x020400
++# if HAVE_NETIF_TX_LOCK
++    netif_tx_unlock_bh(_dev);
++# else
++    _dev->xmit_lock_owner = -1;
++    spin_unlock(&_dev->xmit_lock);
++    local_bh_enable();
++# endif
++#endif
++
++    // If we're polling, never go to sleep! We're relying on ToDevice to clean
++    // the transmit ring.
++    // Otherwise, don't go to sleep if the signal isn't active and
++    // we didn't just send any packets
++#if HAVE_CLICK_KERNEL_TX_NOTIFY
++    bool reschedule = (!busy && (sent > 0 || _signal.active()));
++#else 
++    bool reschedule = (busy || sent > 0 || _signal.active());
++#endif
++    
++#if HAVE_LINUX_POLLING
++    if (is_polling) {
++      reschedule = true;
++      // 9/18/06: Frederic Van Quickenborne reports (1/24/05) that ticket
++      // adjustments in FromDevice+ToDevice cause odd behavior.  The ticket
++      // adjustments actually don't feel necessary to me in From/ToDevice
++      // any more, as described in FromDevice.  So adjusting tickets now
++      // only if polling.
++      adjust_tickets(sent);
++    }
++#endif /* HAVE_LINUX_POLLING */
++
++    // 5.Feb.2007: Incorporate a version of a patch from Jason Park.  If the
++    // device is "busy", perhaps there is no carrier!  Don't spin on no
++    // carrier; instead, rely on Linux's notifer_hook to wake us up again.
++    if (busy && sent == 0 && !netif_carrier_ok(_dev))
++      reschedule = false;
++    
++    if (reschedule)
++      _task.fast_reschedule();
++    return sent > 0;
++}
++
++int
++ToDevice::queue_packet(Packet *p)
++{
++    struct sk_buff *skb1 = p->skb();
++  
++    /*
++     * Ensure minimum ethernet packet size (14 hdr + 46 data).
++     * I can't figure out where Linux does this, so I don't
++     * know the correct procedure.
++     */
++    if (!_no_pad && skb1->len < 60) {
++      if (skb_tailroom(skb1) < 60 - skb1->len) {
++          if (++_too_short == 1)
++              printk("<1>ToDevice %s packet too small (len %d, tailroom %d), had to copy\n", skb1->len, skb_tailroom(skb1));
++          struct sk_buff *nskb = skb_copy_expand(skb1, skb_headroom(skb1), skb_tailroom(skb1) + 60 - skb1->len, GFP_ATOMIC);
++          kfree_skb(skb1);
++          if (!nskb)
++              return -1;
++          skb1 = nskb;
++      }
++      skb_put(skb1, 60 - skb1->len);
++    }
++
++    // set the device annotation;
++    // apparently some devices in Linux 2.6 require it
++    skb1->dev = _dev;
++    
++    int ret;
++#if HAVE_LINUX_POLLING
++    if (_dev->polling > 0)
++      ret = _dev->tx_queue(_dev, skb1);
++    else
++#endif
++      {
++          ret = _dev->hard_start_xmit(skb1, _dev);
++          _hard_start++;
++      }
++    if (ret != 0) {
++      if (++_rejected == 1)
++          printk("<1>ToDevice %s rejected a packet!\n", _dev->name);
++      kfree_skb(skb1);
++    }
++    return ret;
++}
++
++void
++ToDevice::change_device(net_device *dev)
++{
++    _task.strong_unschedule();
++    
++    set_device(dev, &to_device_map, true);
++
++    if (_dev)
++      _task.strong_reschedule();
++}
++
++extern "C" {
++static int
++device_notifier_hook(struct notifier_block *nb, unsigned long flags, void *v)
++{
++#ifdef NETDEV_GOING_DOWN
++    if (flags == NETDEV_GOING_DOWN)
++      flags = NETDEV_DOWN;
++#endif
++    if (flags == NETDEV_DOWN || flags == NETDEV_UP) {
++      bool down = (flags == NETDEV_DOWN);
++      net_device *dev = (net_device *)v;
++      Vector<AnyDevice *> es;
++      to_device_map.lock(true);
++      to_device_map.lookup_all(dev, down, es);
++      for (int i = 0; i < es.size(); i++)
++          ((ToDevice *)(es[i]))->change_device(down ? 0 : dev);
++      to_device_map.unlock(true);
++    } else if (flags == NETDEV_CHANGE) {
++      net_device *dev = (net_device *)v;
++      Vector<AnyDevice *> es;
++      to_device_map.lock(false);
++      to_device_map.lookup_all(dev, true, es);
++      for (int i = 0; i < es.size(); i++)
++          ((ToDevice *)(es[i]))->tx_wake_queue(dev);
++      to_device_map.unlock(false);
++    }
++    return 0;
++}
++}
++
++static String
++ToDevice_read_calls(Element *f, void *)
++{
++    ToDevice *td = (ToDevice *)f;
++    return
++      String(td->_rejected) + " packets rejected\n" +
++      String(td->_hard_start) + " hard start xmit\n" +
++      String(td->_busy_returns) + " device busy returns\n" +
++      String(td->_npackets) + " packets sent\n" +
++      String(td->_runs) + " calls to run_task()\n" +
++      String(td->_pulls) + " pulls\n" +
++#if CLICK_DEVICE_STATS
++      String(td->_pull_cycles) + " cycles pull\n" +
++      String(td->_time_clean) + " cycles clean\n" +
++      String(td->_time_freeskb) + " cycles freeskb\n" +
++      String(td->_time_queue) + " cycles queue\n" +
++      String(td->_perfcnt1_pull) + " perfctr1 pull\n" +
++      String(td->_perfcnt1_clean) + " perfctr1 clean\n" +
++      String(td->_perfcnt1_freeskb) + " perfctr1 freeskb\n" +
++      String(td->_perfcnt1_queue) + " perfctr1 queue\n" +
++      String(td->_perfcnt2_pull) + " perfctr2 pull\n" +
++      String(td->_perfcnt2_clean) + " perfctr2 clean\n" +
++      String(td->_perfcnt2_freeskb) + " perfctr2 freeskb\n" +
++      String(td->_perfcnt2_queue) + " perfctr2 queue\n" +
++      String(td->_activations) + " transmit activations\n"
++#else
++      String()
++#endif
++      ;
++}
++
++enum { H_COUNT, H_DROPS, H_PULL_CYCLES, H_TIME_QUEUE, H_TIME_CLEAN };
++
++static String
++ToDevice_read_stats(Element *e, void *thunk)
++{
++    ToDevice *td = (ToDevice *)e;
++    switch ((uintptr_t) thunk) {
++      case H_COUNT:
++      return String(td->_npackets);
++      case H_DROPS:
++      return String(td->_rejected);
++#if CLICK_DEVICE_THESIS_STATS || CLICK_DEVICE_STATS
++      case H_PULL_CYCLES:
++      return String(td->_pull_cycles);
++#endif
++#if CLICK_DEVICE_STATS
++      case H_TIME_QUEUE:
++      return String(td->_time_queue);
++      case H_TIME_CLEAN:
++      return String(td->_time_clean);
++#endif
++      default:
++      return String();
++    }
++}
++
++static int
++ToDevice_write_stats(const String &, Element *e, void *, ErrorHandler *)
++{
++  ToDevice *td = (ToDevice *)e;
++  td->reset_counts();
++  return 0;
++}
++
++void
++ToDevice::add_handlers()
++{
++    add_read_handler("calls", ToDevice_read_calls, 0);
++    add_read_handler("count", ToDevice_read_stats, (void *)H_COUNT);
++    add_read_handler("drops", ToDevice_read_stats, (void *)H_DROPS);
++    // XXX deprecated
++    add_read_handler("packets", ToDevice_read_stats, (void *)H_COUNT);
++#if CLICK_DEVICE_THESIS_STATS || CLICK_DEVICE_STATS
++    add_read_handler("pull_cycles", ToDevice_read_stats, (void *)H_PULL_CYCLES);
++#endif
++#if CLICK_DEVICE_STATS
++    add_read_handler("enqueue_cycles", ToDevice_read_stats, (void *)H_TIME_QUEUE);
++    add_read_handler("clean_dma_cycles", ToDevice_read_stats, (void *)H_TIME_CLEAN);
++#endif
++    add_write_handler("reset_counts", ToDevice_write_stats, 0);
++    add_task_handlers(&_task);
++}
++
++ELEMENT_REQUIRES(AnyDevice linuxmodule)
++EXPORT_ELEMENT(ToDevice)
+diff -Nurb click-1.6.0/elements/linuxmodule/tohost.cc click-1.6.0-27/elements/linuxmodule/tohost.cc
+--- click-1.6.0/elements/linuxmodule/tohost.cc 2007-08-31 11:21:55.000000000 -0400
++++ click-1.6.0-27/elements/linuxmodule/tohost.cc      2009-01-26 16:52:00.000000000 -0500
+@@ -143,7 +143,7 @@
+     // do not call eth_type_trans; it changes pkt_type! Instead, do its work
+     // directly.
+-    skb->mac.raw = skb->data;
++    skb->mac_header = skb->data;
+     skb_pull(skb, 14);
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
+diff -Nurb click-1.6.0/elements/linuxmodule/tohost.cc.orig click-1.6.0-27/elements/linuxmodule/tohost.cc.orig
+--- click-1.6.0/elements/linuxmodule/tohost.cc.orig    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/elements/linuxmodule/tohost.cc.orig 2007-08-31 11:21:55.000000000 -0400
+@@ -0,0 +1,230 @@
++// -*- mode: c++; c-basic-offset: 4 -*-
++/*
++ * tohost.{cc,hh} -- element sends packets to Linux for default processing
++ * Eddie Kohler, Robert Morris
++ *
++ * Copyright (c) 1999-2000 Massachusetts Institute of Technology
++ * Copyright (C) 2003 International Computer Science Institute
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, subject to the conditions
++ * listed in the Click LICENSE file. These conditions include: you must
++ * preserve this copyright notice, and you cannot mention the copyright
++ * holders in advertising related to the Software without their permission.
++ * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++ * notice is a summary of the Click LICENSE file; the license in that file is
++ * legally binding.
++ */
++
++#include <click/config.h>
++#include "tohost.hh"
++#include <click/confparse.hh>
++#include <click/error.hh>
++
++#include <click/cxxprotect.h>
++CLICK_CXX_PROTECT
++#include <net/dst.h>
++#include <linux/smp_lock.h>
++#include <linux/if_ether.h>
++#include <linux/etherdevice.h>
++#include <linux/netdevice.h>
++#if LINUX_VERSION_CODE >= 0x020400 && LINUX_VERSION_CODE < 0x020600
++# include <linux/brlock.h>
++#endif
++CLICK_CXX_UNPROTECT
++#include <click/cxxunprotect.h>
++
++// for watching when devices go offline
++static AnyDeviceMap to_host_map;
++static struct notifier_block device_notifier;
++extern "C" {
++static int device_notifier_hook(struct notifier_block *nb, unsigned long val, void *v);
++}
++
++void
++ToHost::static_initialize()
++{
++    to_host_map.initialize();
++    device_notifier.notifier_call = device_notifier_hook;
++    device_notifier.priority = 1;
++    device_notifier.next = 0;
++    register_netdevice_notifier(&device_notifier);
++}
++
++void
++ToHost::static_cleanup()
++{
++    unregister_netdevice_notifier(&device_notifier);
++}
++
++ToHost::ToHost()
++    : _sniffers(false), _drops(0)
++{
++}
++
++ToHost::~ToHost()
++{
++}
++
++int
++ToHost::configure(Vector<String> &conf, ErrorHandler *errh)
++{
++    bool allow_nonexistent = false, quiet = false;
++    if (cp_va_parse(conf, this, errh,
++                  cpOptional,
++                  cpString, "device name", &_devname,
++                  cpKeywords,
++                  "SNIFFERS", cpBool, "send packets to sniffers only?", &_sniffers,
++                  "QUIET", cpBool, "suppress up/down messages?", &quiet,
++                  "ALLOW_NONEXISTENT", cpBool, "allow nonexistent device?", &allow_nonexistent,
++                  cpEnd) < 0)
++      return -1;
++    set_device_flags(false, true, allow_nonexistent, quiet);
++    return 0;
++}
++
++int
++ToHost::initialize(ErrorHandler *errh)
++{
++    // We find the device here, rather than in 'initialize', to avoid warnings
++    // about "device down" with FromHost devices -- FromHost brings up its
++    // device during initialize().
++    return (_devname ? find_device(&to_host_map, errh) : 0);
++}
++
++void
++ToHost::cleanup(CleanupStage)
++{
++    clear_device(&to_host_map);
++}
++
++extern "C" {
++static int
++device_notifier_hook(struct notifier_block *nb, unsigned long flags, void *v)
++{
++#ifdef NETDEV_GOING_DOWN
++    if (flags == NETDEV_GOING_DOWN)
++      flags = NETDEV_DOWN;
++#endif
++    if (flags == NETDEV_DOWN || flags == NETDEV_UP) {
++      bool down = (flags == NETDEV_DOWN);
++      net_device *dev = (net_device *)v;
++      Vector<AnyDevice *> es;
++      to_host_map.lock(true);
++      to_host_map.lookup_all(dev, down, es);
++      for (int i = 0; i < es.size(); i++)
++          ((ToHost *)(es[i]))->set_device((down ? 0 : dev), &to_host_map, true);
++      to_host_map.unlock(true);
++    }
++    return 0;
++}
++}
++
++void
++ToHost::push(int port, Packet *p)
++{
++    struct sk_buff *skb = p->skb();
++  
++    // set device if specified
++    if (_dev)
++      skb->dev = _dev;
++
++    // check that device exists
++    if (!skb->dev) {
++      if (++_drops == 1)
++          click_chatter("%{element}: dropped a packet with null skb->dev", this);
++      p->kill();
++      return;
++    }
++
++    // remove PACKET_CLEAN bit -- packet is becoming dirty
++    skb->pkt_type &= PACKET_TYPE_MASK;
++
++    // do not call eth_type_trans; it changes pkt_type! Instead, do its work
++    // directly.
++    skb->mac.raw = skb->data;
++    skb_pull(skb, 14);
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
++    const ethhdr *eth = eth_hdr(skb);
++#else
++    const ethhdr *eth = skb->mac.ethernet;
++#endif
++    if (ntohs(eth->h_proto) >= 1536)
++      skb->protocol = eth->h_proto;
++    else {
++      const unsigned short *crap = (const unsigned short *)skb->data;
++      // "magic hack to spot IPX packets"
++      skb->protocol = (*crap == 0xFFFF ? htons(ETH_P_802_3) : htons(ETH_P_802_2));
++    }
++
++    // skb->dst may be set if the packet came from Linux originally. In this
++    // case, we must clear skb->dst so Linux finds the correct dst.
++    if (skb->dst) {
++      dst_release(skb->dst);
++      skb->dst = 0;
++    }
++
++    // get protocol to pass to Linux
++    int protocol = (_sniffers ? 0xFFFF : skb->protocol);
++
++    // pass packet to Linux
++#ifdef HAVE_NETIF_RECEIVE_SKB // from Linux headers
++    struct net_device *dev = skb->dev;
++    local_bh_disable();
++    dev_hold(dev);
++# if HAVE___NETIF_RECEIVE_SKB
++    __netif_receive_skb(skb, protocol, -1);
++# else
++    netif_receive_skb(skb, protocol, -1);
++# endif
++    dev_put(dev);
++    local_bh_enable();
++#else
++    // be nice to libpcap
++    if (skb->stamp.tv_sec == 0) {
++# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 18)
++      do_gettimeofday(&skb->stamp);
++# elif !defined(CONFIG_CPU_IS_SLOW)
++      get_fast_time(&skb->stamp);
++# else
++      skb->stamp = xtime;
++# endif
++    }
++
++# ifdef HAVE_CLICK_KERNEL
++    skb->h.raw = skb->nh.raw = skb->data;
++#  if LINUX_VERSION_CODE >= 0x020400
++    local_bh_disable();
++    br_read_lock(BR_NETPROTO_LOCK);
++    struct net_device *dev = skb->dev;
++    dev_hold(dev);
++    ptype_dispatch(skb, protocol);
++    dev_put(dev);
++    br_read_unlock(BR_NETPROTO_LOCK);
++    local_bh_enable();
++#  else
++    lock_kernel();
++    ptype_dispatch(skb, protocol);
++    unlock_kernel();
++#  endif
++# endif
++#endif
++}
++
++String
++ToHost::read_handler(Element *e, void *)
++{
++    ToHost *th = static_cast<ToHost *>(e);
++    return String(th->_drops);
++}
++
++void
++ToHost::add_handlers()
++{
++    add_read_handler("drops", read_handler, 0);
++}
++
++ELEMENT_REQUIRES(linuxmodule AnyDevice)
++EXPORT_ELEMENT(ToHost)
+diff -Nurb click-1.6.0/elements/standard/addressinfo.cc click-1.6.0-27/elements/standard/addressinfo.cc
+--- click-1.6.0/elements/standard/addressinfo.cc       2007-09-12 02:14:04.000000000 -0400
++++ click-1.6.0-27/elements/standard/addressinfo.cc    2009-01-21 13:08:40.000000000 -0500
+@@ -272,7 +272,7 @@
+     // if it's a device name, return a primary IP address
+ #if CLICK_LINUXMODULE
+ # if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0)
+-    net_device *dev = dev_get_by_name(s.c_str());
++    net_device *dev = dev_get_by_name(&init_net,s.c_str());
+     if (dev) {
+       bool found = false;
+       in_device *in_dev = in_dev_get(dev);
+@@ -383,7 +383,7 @@
+ # if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 0)
+ #  define dev_put(dev) /* nada */
+ # endif
+-    net_device *dev = dev_get_by_name(s.c_str());
++    net_device *dev = dev_get_by_name(&init_net,s.c_str());
+     if (dev && (dev->type == ARPHRD_ETHER || dev->type == ARPHRD_80211)) {
+       memcpy(store, dev->dev_addr, 6);
+       dev_put(dev);
+diff -Nurb click-1.6.0/elements/standard/addressinfo.cc.orig click-1.6.0-27/elements/standard/addressinfo.cc.orig
+--- click-1.6.0/elements/standard/addressinfo.cc.orig  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/elements/standard/addressinfo.cc.orig       2007-09-12 02:14:04.000000000 -0400
+@@ -0,0 +1,413 @@
++// -*- c-basic-offset: 4; related-file-name: "../../include/click/standard/addressinfo.hh" -*-
++/*
++ * addressinfo.{cc,hh} -- element stores address information
++ * Eddie Kohler
++ *
++ * Copyright (c) 2000 Mazu Networks, Inc.
++ * Copyright (c) 2004 The Regents of the University of California
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, subject to the conditions
++ * listed in the Click LICENSE file. These conditions include: you must
++ * preserve this copyright notice, and you cannot mention the copyright
++ * holders in advertising related to the Software without their permission.
++ * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++ * notice is a summary of the Click LICENSE file; the license in that file is
++ * legally binding.
++ */
++
++#include <click/config.h>
++#include <click/standard/addressinfo.hh>
++#include <click/nameinfo.hh>
++#include <click/glue.hh>
++#include <click/confparse.hh>
++#include <click/router.hh>
++#include <click/error.hh>
++#include <clicknet/ether.h>
++#if CLICK_NS
++# include <click/master.hh>
++#endif
++#if CLICK_USERLEVEL
++# include <unistd.h>
++#endif
++#if CLICK_USERLEVEL && defined(__linux__)
++# include <net/if.h>
++# include <sys/ioctl.h>
++# include <net/if_arp.h>
++# include <click/userutils.hh>
++# include <time.h>
++#elif CLICK_USERLEVEL && (defined(__APPLE__) || defined(__FreeBSD__))
++# include <sys/sysctl.h>
++# include <net/if.h>
++# include <net/if_dl.h>
++# include <net/if_types.h>
++# include <net/route.h>
++#endif
++#if CLICK_LINUXMODULE
++# include <click/cxxprotect.h>
++CLICK_CXX_PROTECT
++# include <linux/netdevice.h>
++# include <linux/rtnetlink.h>
++# include <linux/if_arp.h>
++# include <linux/inetdevice.h>
++CLICK_CXX_UNPROTECT
++# include <click/cxxunprotect.h>
++#endif
++CLICK_DECLS
++
++AddressInfo::AddressInfo()
++{
++}
++
++AddressInfo::~AddressInfo()
++{
++}
++
++int
++AddressInfo::configure(Vector<String> &conf, ErrorHandler *errh)
++{
++    int before = errh->nerrors();
++  
++    for (int i = 0; i < conf.size(); i++) {
++      Vector<String> parts;
++      cp_spacevec(conf[i], parts);
++      if (parts.size() == 0)
++          // allow empty arguments
++          continue;
++      if (parts.size() < 2)
++          errh->error("expected 'NAME [ADDRS]', got '%s'", conf[i].c_str());
++      
++      for (int j = 1; j < parts.size(); j++) {
++          uint8_t d[24];
++          if (cp_ip_address(parts[j], &d[0]))
++              NameInfo::define(NameInfo::T_IP_ADDR, this, parts[0], &d[0], 4);
++          else if (cp_ip_prefix(parts[j], &d[0], &d[4], false)) {
++              NameInfo::define(NameInfo::T_IP_PREFIX, this, parts[0], &d[0], 8);
++              if (*(uint32_t*)(&d[0]) & ~*((uint32_t*)(&d[4])))
++                  NameInfo::define(NameInfo::T_IP_ADDR, this, parts[0], &d[0], 4);
++          } else if (cp_ethernet_address(parts[j], &d[0]))
++              NameInfo::define(NameInfo::T_ETHERNET_ADDR, this, parts[0], &d[0], 6);
++#ifdef HAVE_IP6
++          else if (cp_ip6_address(parts[j], &d[0]))
++              NameInfo::define(NameInfo::T_IP6_ADDR, this, parts[0], &d[0], 16);
++          else if (cp_ip6_prefix(parts[j], &d[0], (int *) &d[16], false)) {
++              NameInfo::define(NameInfo::T_IP6_PREFIX, this, parts[0], &d[0], 16 + sizeof(int));
++              if (*((IP6Address*) &d[0]) & ~IP6Address::make_prefix(*(int*) &d[16]))
++                  NameInfo::define(NameInfo::T_IP6_ADDR, this, parts[0], &d[0], 16);
++          }
++#endif
++          else
++              errh->error("\"%s\" '%s' is not a recognizable address", parts[0].c_str(), parts[j].c_str());
++      }
++    }
++    
++    return (errh->nerrors() == before ? 0 : -1);
++}
++
++
++#if CLICK_USERLEVEL && !CLICK_NS && (defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__))
++# define CLICK_QUERY_NETDEVICE 1
++#endif
++
++#if CLICK_QUERY_NETDEVICE
++
++static bool
++query_netdevice(const String &s, unsigned char *store, int type, int len)
++    // type: should be 'e' (Ethernet) or 'i' (ipv4)
++{
++    // 5 Mar 2004 - Don't call ioctl for every attempt to look up an Ethernet
++    // device name, because this causes the kernel to try to load weird kernel
++    // modules.
++    static time_t read_time = 0;
++    static Vector<String> device_names;
++    static Vector<String> device_addrs;
++
++    // XXX magic time constant
++    if (!read_time || read_time + 30 < time(0)) {
++      device_names.clear();
++      device_addrs.clear();
++      
++# ifdef __linux__
++      int query_fd = socket(AF_INET, SOCK_DGRAM, 0);
++      if (query_fd < 0)
++          return false;
++      struct ifreq ifr;
++      
++      String f = file_string("/proc/net/dev");
++      const char *begin = f.begin(), *end = f.end();
++      while (begin < end) {
++          const char *colon = find(begin, end, ':');
++          const char *nl = find(begin, end, '\n');
++          if (colon > begin && colon < nl) {
++              const char *word = colon;
++              while (word > begin && !isspace(word[-1]))
++                  word--;
++              if ((size_t) (colon - word) < sizeof(ifr.ifr_name)) {
++                  // based on patch from Jose Vasconcellos
++                  // <jvasco@bellatlantic.net>
++                  String dev_name = f.substring(word, colon);
++                  strcpy(ifr.ifr_name, dev_name.c_str());
++                  if (ioctl(query_fd, SIOCGIFHWADDR, &ifr) >= 0
++                      && ifr.ifr_hwaddr.sa_family == ARPHRD_ETHER) {
++                      device_names.push_back(dev_name);
++                      device_addrs.push_back(String('e') + String(ifr.ifr_hwaddr.sa_data, 6));
++                  }
++                  if (ioctl(query_fd, SIOCGIFADDR, &ifr) >= 0) {
++                      device_names.push_back(dev_name);
++                      device_addrs.push_back(String('i') + String((const char *)&((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr, 4));
++                  }
++              }
++          }
++          begin = nl + 1;
++      }
++
++      close(query_fd);
++# elif defined(__APPLE__) || defined(__FreeBSD__)
++      // get list of interfaces (this code borrowed, with changes, from
++      // FreeBSD ifconfig(8))
++      int mib[8];
++      mib[0] = CTL_NET;
++      mib[1] = PF_ROUTE;
++      mib[2] = 0;
++      mib[3] = 0;             // address family
++      mib[4] = NET_RT_IFLIST;
++      mib[5] = 0;             // ifindex
++
++      size_t if_needed;
++      char* buf = 0;
++      while (!buf) {
++          if (sysctl(mib, 6, 0, &if_needed, 0, 0) < 0)
++              return false;
++          if ((buf = new char[if_needed]) == 0)
++              return false;
++          if (sysctl(mib, 6, buf, &if_needed, 0, 0) < 0) {
++              if (errno == ENOMEM) {
++                  delete[] buf;
++                  buf = 0;
++              } else
++                  return false;
++          }
++      }
++      
++      for (char* pos = buf; pos < buf + if_needed; ) {
++          // grab next if_msghdr
++          struct if_msghdr* ifm = reinterpret_cast<struct if_msghdr*>(pos);
++          if (ifm->ifm_type != RTM_IFINFO)
++              break;
++          int datalen = sizeof(struct if_data);
++#  if HAVE_IF_DATA_IFI_DATALEN
++          if (ifm->ifm_data.ifi_datalen)
++              datalen = ifm->ifm_data.ifi_datalen;
++#  endif
++          
++          // extract interface name from 'ifm'
++          struct sockaddr_dl* sdl = reinterpret_cast<struct sockaddr_dl*>(pos + sizeof(struct if_msghdr) - sizeof(struct if_data) + datalen);
++          String name(sdl->sdl_data, sdl->sdl_nlen);
++
++          // Ethernet address is stored in 'sdl'
++          if (sdl->sdl_type == IFT_ETHER && sdl->sdl_alen == 6) {
++              device_names.push_back(name);
++              device_addrs.push_back(String('e') + String((const char*)(LLADDR(sdl)), 6));
++          }
++          
++          // parse all addresses, looking for IP
++          pos += ifm->ifm_msglen;
++          while (pos < buf + if_needed) {
++              struct if_msghdr* nextifm = reinterpret_cast<struct if_msghdr*>(pos);
++              if (nextifm->ifm_type != RTM_NEWADDR)
++                  break;
++              
++              struct ifa_msghdr* ifam = reinterpret_cast<struct ifa_msghdr*>(nextifm);
++              char* sa_buf = reinterpret_cast<char*>(ifam + 1);
++              pos += nextifm->ifm_msglen;
++              for (int i = 0; i < RTAX_MAX && sa_buf < pos; i++) {
++                  if (!(ifam->ifam_addrs & (1 << i)))
++                      continue;
++                  struct sockaddr* sa = reinterpret_cast<struct sockaddr*>(sa_buf);
++                  if (sa->sa_len)
++                      sa_buf += 1 + ((sa->sa_len - 1) | (sizeof(long) - 1));
++                  else
++                      sa_buf += sizeof(long);
++                  if (i != RTAX_IFA)
++                      continue;
++                  if (sa->sa_family == AF_INET) {
++                      device_names.push_back(name);
++                      device_addrs.push_back(String('i') + String((const char *)&((struct sockaddr_in*)sa)->sin_addr, 4));
++                  }
++              }
++          }
++      }
++
++      delete[] buf;
++# endif /* defined(__APPLE__) || defined(__FreeBSD__) */
++      read_time = time(0);
++    }
++
++    for (int i = 0; i < device_names.size(); i++)
++      if (device_names[i] == s && device_addrs[i][0] == type) {
++          memcpy(store, device_addrs[i].data() + 1, len);
++          return true;
++      }
++
++    return false;
++}
++
++#endif /* CLICK_QUERY_NETDEVICE */
++
++
++bool
++AddressInfo::query_ip(String s, unsigned char *store, Element *e)
++{
++    int colon = s.find_right(':');
++    if (colon >= 0 && s.substring(colon).lower() != ":ip"
++      && s.substring(colon).lower() != ":ip4")
++      return false;
++    else if (colon >= 0)
++      s = s.substring(0, colon);
++  
++    if (NameInfo::query(NameInfo::T_IP_ADDR, e, s, store, 4))
++      return true;
++
++    // if it's a device name, return a primary IP address
++#if CLICK_LINUXMODULE
++# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0)
++    net_device *dev = dev_get_by_name(s.c_str());
++    if (dev) {
++      bool found = false;
++      in_device *in_dev = in_dev_get(dev);
++      if (in_dev) {
++          for_primary_ifa(in_dev) {
++              memcpy(store, &ifa->ifa_local, 4);
++              found = true;
++              break;
++          }
++          endfor_ifa(in_dev);
++          in_dev_put(in_dev);
++      }
++      dev_put(dev);
++      if (found)
++          return true;
++    }
++# endif
++#elif CLICK_NS
++    if (e) {
++      char tmp[255];
++      int r = simclick_sim_command(e->router()->master()->simnode(), SIMCLICK_IPADDR_FROM_NAME, s.c_str(), tmp, 255);
++      if (r >= 0 && tmp[0] && cp_ip_address(tmp, store))
++          return true;
++    }
++#elif CLICK_QUERY_NETDEVICE
++    if (query_netdevice(s, store, 'i', 4))
++      return true;
++#endif
++
++    return false;
++}
++
++bool
++AddressInfo::query_ip_prefix(String s, unsigned char *store,
++                           unsigned char *mask_store, Element *e)
++{
++    int colon = s.find_right(':');
++    if (colon >= 0 && s.substring(colon).lower() != ":ipnet"
++      && s.substring(colon).lower() != ":ip4net")
++      return false;
++    else if (colon >= 0)
++      s = s.substring(0, colon);
++
++    uint8_t data[8];
++    if (NameInfo::query(NameInfo::T_IP_PREFIX, e, s, &data[0], 8)) {
++      memcpy(store, &data[0], 4);
++      memcpy(mask_store, &data[4], 4);
++      return true;
++    }
++
++    return false;
++}
++
++
++#ifdef HAVE_IP6
++
++bool
++AddressInfo::query_ip6(String s, unsigned char *store, Element *e)
++{
++    int colon = s.find_right(':');
++    if (colon >= 0 && s.substring(colon).lower() != ":ip6")
++      return false;
++    else if (colon >= 0)
++      s = s.substring(0, colon);
++
++    return NameInfo::query(NameInfo::T_IP6_ADDR, e, s, store, 16);
++}
++
++bool
++AddressInfo::query_ip6_prefix(String s, unsigned char *store,
++                            int *bits_store, Element *e)
++{
++    int colon = s.find_right(':');
++    if (colon >= 0 && s.substring(colon).lower() != ":ip6net")
++      return false;
++    else if (colon >= 0)
++      s = s.substring(0, colon);
++
++    uint8_t data[16 + sizeof(int)];
++    if (NameInfo::query(NameInfo::T_IP6_PREFIX, e, s, data, 16 + sizeof(int))) {
++      memcpy(store, &data[0], 16);
++      *bits_store = *(int *) &data[16];
++      return true;
++    }
++
++    return false;
++}
++
++#endif /* HAVE_IP6 */
++
++
++bool
++AddressInfo::query_ethernet(String s, unsigned char *store, Element *e)
++{
++    int colon = s.find_right(':');
++    if (colon >= 0 && s.substring(colon).lower() != ":eth"
++      && s.substring(colon).lower() != ":ethernet")
++      return false;
++    else if (colon >= 0)
++      s = s.substring(0, colon);
++
++    if (NameInfo::query(NameInfo::T_ETHERNET_ADDR, e, s, store, 6))
++      return true;
++
++    // if it's a device name, return its Ethernet address
++#if CLICK_LINUXMODULE
++    // in the Linux kernel, just look at the device list
++# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 0)
++#  define dev_put(dev) /* nada */
++# endif
++    net_device *dev = dev_get_by_name(s.c_str());
++    if (dev && (dev->type == ARPHRD_ETHER || dev->type == ARPHRD_80211)) {
++      memcpy(store, dev->dev_addr, 6);
++      dev_put(dev);
++      return true;
++    } else if (dev)
++      dev_put(dev);
++#elif CLICK_NS
++    if (e) {
++      char tmp[255];
++      int r = simclick_sim_command(e->router()->master()->simnode(), SIMCLICK_MACADDR_FROM_NAME, s.c_str(), tmp, 255);
++      if (r >= 0 && tmp[0] && cp_ethernet_address(tmp, store))
++          return true;
++    }
++#elif CLICK_QUERY_NETDEVICE
++    if (query_netdevice(s, store, 'e', 6))
++      return true;
++#endif
++    
++    return false;
++}
++
++EXPORT_ELEMENT(AddressInfo)
++ELEMENT_HEADER(<click/standard/addressinfo.hh>)
++
++// template instance
++#include <click/vector.cc>
++CLICK_ENDDECLS
+diff -Nurb click-1.6.0/etc/libclick/Makefile click-1.6.0-27/etc/libclick/Makefile
+--- click-1.6.0/etc/libclick/Makefile  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/etc/libclick/Makefile       2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,81 @@
++# Warning: this file must be usable by regular make
++# (unlike the Makefiles in subdirectories).
++
++SHELL = /bin/sh
++
++
++PACKAGE = click
++VERSION = 1.6.0
++
++top_srcdir = ../..
++srcdir = .
++top_builddir = ../..
++subdir = etc/libclick
++conf_auxdir = $(top_srcdir)
++
++AUTOCONF = autoconf
++ACLOCAL = aclocal -I m4
++PERL = perl
++INSTALL = /usr/bin/install -c
++INSTALL_IF_CHANGED = $(top_builddir)/installch
++INSTALL_DATA = /usr/bin/install -c -m 644
++INSTALL_DATA_IF_CHANGED = $(top_builddir)/installch -m 644
++mkinstalldirs = $(conf_auxdir)/mkinstalldirs
++
++prefix = /d/click/click-1.6.0-27/inst
++exec_prefix = /d/click/click-1.6.0-27/inst
++bindir = /d/click/click-1.6.0-27/inst/bin
++
++all:
++      @echo This Makefile does not build anything.
++      @echo Its only important target is '`make dist'"'".
++
++Makefile: $(top_builddir)/config.status $(srcdir)/Makefile.in
++      cd $(top_builddir) && \
++        CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
++
++distdir = libclick-$(VERSION)
++top_distdir = $(distdir)
++
++clean:
++      -rm -rf $(distdir) $(distdir).tar.gz
++distclean: clean
++      -rm -f Makefile
++
++dist: $(distdir).tar.gz
++      -rm -rf $(distdir)
++$(distdir).tar.gz: distdir
++      tar czf $(distdir).tar.gz $(distdir)
++distdir: always
++      @if test `grep 'CLICK_VERSION=' $(top_srcdir)/configure.in` != `grep 'CLICK_VERSION=' $(srcdir)/lc-configure.in`; then \
++        echo 'ERROR: Bad libclick CLICK_VERSION!'; exit 1; \
++      fi
++      -rm -rf $(distdir)
++      mkdir $(distdir)
++      @-chmod 777 $(distdir)
++      @echo Copying library, documentation, configuration, and driver files...
++      @echo DISTFILES >>$(distdir)/DISTFILES
++      @for file in `cat $(srcdir)/DISTFILES`; do \
++        d=$(top_srcdir); \
++        sf=`echo "$$file:$$file:" | sed 's/^\([^:]*\):.*/\1/'`; \
++        df=`echo "$$file:$$file:" | sed 's/^[^:]*:\([^:]*\):.*/\1/'`; \
++        if test -d "$$d/$$sf"; then \
++          mkdir $(distdir)/$$df; \
++          chmod 777 $(distdir)/$$df; \
++        else \
++          test -f "$(distdir)/$$df" \
++          || ln $$d/$$sf $(distdir)/$$df 2>/dev/null \
++          || cp -p $$d/$$sf $(distdir)/$$df \
++          || echo "Could not copy $$d/$$sf!" 1>&2; \
++        fi; \
++        echo $$df >>$(distdir)/DISTFILES; \
++      done
++      cd $(distdir) && $(PERL) -pi -e 's/enable_linuxmodule=yes/enable_linuxmodule=no/;' configure.in
++      cd $(distdir) && $(ACLOCAL) && $(AUTOCONF)
++      cd $(distdir) && rm -rf autom4te*
++      echo configure >>$(distdir)/DISTFILES
++
++always:
++      @:
++
++.PHONY: all dist distdir always
+diff -Nurb click-1.6.0/etc/pkg-config.mk click-1.6.0-27/etc/pkg-config.mk
+--- click-1.6.0/etc/pkg-config.mk      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/etc/pkg-config.mk   2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,43 @@
++# pkg-config.mk -- build tools for Click
++# Eddie Kohler
++#
++# Copyright (c) 2006 Regents of the University of California
++#
++# Permission is hereby granted, free of charge, to any person obtaining a
++# copy of this software and associated documentation files (the "Software"),
++# to deal in the Software without restriction, subject to the conditions
++# listed in the Click LICENSE file. These conditions include: you must
++# preserve this copyright notice, and you cannot mention the copyright
++# holders in advertising related to the Software without their permission.
++# The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++# notice is a summary of the Click LICENSE file; the license in that file is
++# legally binding.
++
++CLICKCC = gcc -W -Wall
++CLICKCPP = gcc -W -Wall -E
++CLICKCXX = g++ -W -Wall 
++CLICKCXXCPP = g++ -W -Wall  -E
++
++CLICKAR_CREATE = ar cru
++CLICKRANLIB = ranlib
++CLICKSTRIP = strip
++
++CLICKKERNEL_CC = gcc -w -W -Wall
++CLICKKERNEL_CXX = g++ -w -W -Wall -fno-exceptions -fno-rtti  -D__SMP__
++
++CLICKCPPFLAGS = 
++CLICKCFLAGS = -g -O2
++CLICKCFLAGS_NDEBUG =  -O2
++CLICKCXXFLAGS = -g -O2
++CLICKCXXFLAGS_NDEBUG =  -O2
++CLICKDEPCFLAGS = -MD
++
++CLICKDEFS = -DHAVE_CONFIG_H
++CLICKINCLUDES = -I$(clickincludedir) -I$(clicksrcdir) 
++CLICKLDFLAGS = 
++CLICKLDMODULEFLAGS = -shared
++
++CLICKAUTOCONF = autoconf
++CLICKGMAKE = make
++CLICKINSTALL = /usr/bin/install -c
++
+diff -Nurb click-1.6.0/include/click/config-bsdmodule.h click-1.6.0-27/include/click/config-bsdmodule.h
+--- click-1.6.0/include/click/config-bsdmodule.h       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/include/click/config-bsdmodule.h    2009-01-19 15:07:24.000000000 -0500
+@@ -0,0 +1,52 @@
++/* include/click/config-bsdmodule.h.  Generated from config-bsdmodule.h.in by configure.  */
++/* Process this file with configure to produce config-bsdmodule.h. -*- mode: c -*- */
++#ifndef CLICK_CONFIG_BSDMODULE_H
++#define CLICK_CONFIG_BSDMODULE_H
++
++/* Define stuff under a FreeBSD module. */
++#ifndef __FreeBSD__
++# error "I must be compiled on a FreeBSD machine"
++#endif
++#define KERNEL 1
++#define _KERNEL 1
++#define KLD_MODULE 1
++
++/* Define if your BSD kernel has Click extensions. */
++/* #undef HAVE_CLICK_BSD_KERNEL */
++
++/* Define if your BSD kernel has polling extensions. */
++/* #undef HAVE_BSD_POLLING */
++
++/* Define if Click should use an adaptive scheduler to share the CPU(s) more
++   fairly with the kernel. */
++/* #undef HAVE_ADAPTIVE_SCHEDULER */
++
++/* Include integer and other type definitions. */
++#include <sys/types.h>
++
++/* Define assert macro. */
++#define assert(x) /* nada */
++
++/* Define likely and unlikely macros. */
++#define likely(x)     (x)
++#define unlikely(x)   (x)
++
++#ifdef __cplusplus
++
++/* Declare operator new. */
++void *operator new(size_t) throw ();
++void *operator new[](size_t) throw ();
++
++/* Provide placement new. */
++inline void *operator new(size_t, void *v) throw () { return v; }
++#define HAVE_PLACEMENT_NEW 1
++
++/* Define macros that surround Click declarations. */
++#define CLICK_DECLS           namespace Click {
++#define CLICK_ENDDECLS                }
++#define CLICK_USING_DECLS     using namespace Click;
++#define CLICK_NAME(name)      ::Click::name
++
++#endif /* __cplusplus */
++
++#endif /* CLICK_CONFIG_BSDMODULE_H */
+diff -Nurb click-1.6.0/include/click/config-linuxmodule.h click-1.6.0-27/include/click/config-linuxmodule.h
+--- click-1.6.0/include/click/config-linuxmodule.h     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/include/click/config-linuxmodule.h  2009-02-11 16:38:55.000000000 -0500
+@@ -0,0 +1,165 @@
++/* include/click/config-linuxmodule.h.  Generated from config-linuxmodule.h.in by configure.  */
++/* Process this file with configure to produce config-linuxmodule.h. -*- mode: c -*- */
++#ifndef CLICK_CONFIG_LINUXMODULE_H
++#define CLICK_CONFIG_LINUXMODULE_H
++
++/* Define stuff under a Linux module. */
++#ifndef __linux__
++# error "I must be compiled on a Linux machine"
++#endif
++#define __KERNEL__ 1
++#define MODULE 1
++
++/* Define if your Linux kernel is running in SMP mode. */
++#define __SMP__ 1
++
++/* Define if Click should use an adaptive scheduler to share the CPU(s) more
++   fairly with the kernel. */
++/* #undef HAVE_ADAPTIVE_SCHEDULER */
++
++/* Define if your Linux kernel has Click extensions. */
++#define HAVE_CLICK_KERNEL 1
++
++/* Define if your Linux kernel has Click transmit notification extensions. */
++/* #undef HAVE_CLICK_KERNEL_TX_NOTIFY */
++
++/* Define if fast checksum functions available. */
++#define HAVE_FAST_CHECKSUM 1
++
++/* Define if 'int64_t' is typedefed to 'long' in linuxmodule. */
++/* #undef HAVE_INT64_IS_LONG_LINUXMODULE */
++
++/* Define if 'int64_t' is typedefed to 'long long' in linuxmodule. */
++#define HAVE_INT64_IS_LONG_LONG_LINUXMODULE 1
++
++/* Define to enable assertion checking. Failed assertions will print a message
++   and optionally stop the router. */
++/* #undef HAVE_KERNEL_ASSERT */
++
++/* Define if you have the <asm/alternative.h> header file. */
++#define HAVE_LINUX_ASM_ALTERNATIVE_H 1
++
++/* Define if your Linux kernel architecture defines atomic_set_mask. */
++/* #undef HAVE_LINUX_ATOMIC_SET_MASK */
++
++/* Define if your Linux kernel has polling extensions. */
++#define HAVE_LINUX_POLLING 1
++
++/* Define if your Linux kernel has read_net_skbcount. */
++/* #undef HAVE_LINUX_READ_NET_SKBCOUNT */
++
++/* Define if 'struct skb_shared_info' has a 'gso_size' member. */
++/* #undef HAVE_LINUX_SKB_SHINFO_GSO_SIZE */
++
++/* Define if 'struct skb_shared_info' has an 'ip6_frag_id' member. */
++/* #undef HAVE_LINUX_SKB_SHINFO_IP6_FRAG_ID */
++
++/* Define if 'struct skb_shared_info' has a 'tso_size' member. */
++/* #undef HAVE_LINUX_SKB_SHINFO_TSO_SIZE */
++
++/* Define if 'struct skb_shared_info' has a 'ufo_size' member. */
++/* #undef HAVE_LINUX_SKB_SHINFO_UFO_SIZE */
++
++/* Define if 'struct sk_buff' has an 'fclone' member. */
++/* #undef HAVE_LINUX_SKBUFF_FCLONE */
++
++/* Define if 'struct sk_buff' has a 'security' member. */
++/* #undef HAVE_LINUX_SKBUFF_SECURITY */
++
++/* Define if your Linux kernel exposes strlen. */
++#define HAVE_LINUX_STRLEN_EXPOSED 1
++
++/* Define if your Linux kernel has tulip_interrupt_hook. */
++/* #undef HAVE_LINUX_TULIP_INTERRUPT_HOOK */
++
++/* Define if the Click linuxmodule is compiled for a 2.6 kernel. */
++#define HAVE_LINUXMODULE_2_6 1
++
++/* Define if you have the net_enable_timestamp function. */
++/* #undef HAVE_NET_ENABLE_TIMESTAMP */
++
++/* Define if you have the netif_tx_lock function. */
++/* #undef HAVE_NETIF_TX_LOCK */
++
++/* Define if fast checksum functions require correct alignment. */
++#ifndef __i386__
++# define FAST_CHECKSUM_ALIGNED 1
++#endif
++
++/* Include integer type definitions. */
++#include <click/cxxprotect.h>
++CLICK_CXX_PROTECT
++#include <linux/autoconf.h>
++#include <linux/types.h>
++CLICK_CXX_UNPROTECT
++#include <click/cxxunprotect.h>
++
++typedef ptrdiff_t intptr_t;
++//typedef unsigned long uintptr_t; /* XXX? */
++
++/* Define HAVE_INT64_IS_LONG based on HAVE_INT64_IS_LONG_LINUXMODULE. */
++#ifdef HAVE_INT64_IS_LONG_LINUXMODULE
++# define HAVE_INT64_IS_LONG HAVE_INT64_IS_LONG_LINUXMODULE
++#endif
++
++/* Define HAVE_INT64_IS_LONG_LONG based on HAVE_INT64_IS_LONG_LONG_LINUXMODULE. */
++#if HAVE_LONG_LONG && defined(HAVE_INT64_IS_LONG_LONG_LINUXMODULE)
++# define HAVE_INT64_IS_LONG_LONG HAVE_INT64_IS_LONG_LONG_LINUXMODULE
++#endif
++
++/* Define KBUILD symbols. */
++#if !defined(KBUILD_STR) && HAVE_LINUXMODULE_2_6
++# define KBUILD_STR(s)                #s
++# define KBUILD_BASENAME      KBUILD_STR(click)
++# define KBUILD_MODNAME               KBUILD_STR(click)
++#endif
++
++#ifdef __cplusplus
++
++/* Declare operator new. */
++void *operator new(size_t) throw ();
++void *operator new[](size_t) throw ();
++
++/* Provide placement new. */
++inline void *operator new(size_t, void *v) { return v; }
++#define HAVE_PLACEMENT_NEW 1
++
++/* Define macros that surround Click declarations. */
++#define CLICK_DECLS           /* */
++#define CLICK_ENDDECLS                /* */
++#define CLICK_USING_DECLS     /* */
++#define CLICK_NAME(name)      ::name
++
++/* Fix incompatibilities between some Linux versions and Click/C++. */
++
++/* Include integer type definitions. */
++#include <click/cxxprotect.h>
++CLICK_CXX_PROTECT
++#include <click/fixconfig.h>
++CLICK_CXX_UNPROTECT
++#include <click/cxxunprotect.h>
++
++
++#endif /* __cplusplus */
++
++/* Define assert macro. */
++# ifdef __cplusplus
++extern "C" {
++# endif
++void click_assert_failed(const char *file, int line, const char *problem_text);
++# ifdef __cplusplus
++}
++# endif
++
++#ifdef HAVE_KERNEL_ASSERT
++# define assert(x)    ((x) ? (void)0 : click_assert_failed(__FILE__, __LINE__, #x))
++#else
++# define assert(x)    /* nada */
++#endif
++
++/* Some architectures do not have builtin integer functions in kernel. */
++#if defined(__MIPSEL__) || defined(__MIPSEB__)
++# define HAVE_NO_INTEGER_BUILTINS 1
++#endif
++
++#endif /* CLICK_CONFIG_LINUXMODULE_H */
+diff -Nurb click-1.6.0/include/click/config-linuxmodule.h.orig click-1.6.0-27/include/click/config-linuxmodule.h.orig
+--- click-1.6.0/include/click/config-linuxmodule.h.orig        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/include/click/config-linuxmodule.h.orig     2009-01-19 15:07:24.000000000 -0500
+@@ -0,0 +1,155 @@
++/* include/click/config-linuxmodule.h.  Generated from config-linuxmodule.h.in by configure.  */
++/* Process this file with configure to produce config-linuxmodule.h. -*- mode: c -*- */
++#ifndef CLICK_CONFIG_LINUXMODULE_H
++#define CLICK_CONFIG_LINUXMODULE_H
++
++/* Define stuff under a Linux module. */
++#ifndef __linux__
++# error "I must be compiled on a Linux machine"
++#endif
++#define __KERNEL__ 1
++#define MODULE 1
++
++/* Define if your Linux kernel is running in SMP mode. */
++#define __SMP__ 1
++
++/* Define if Click should use an adaptive scheduler to share the CPU(s) more
++   fairly with the kernel. */
++/* #undef HAVE_ADAPTIVE_SCHEDULER */
++
++/* Define if your Linux kernel has Click extensions. */
++#define HAVE_CLICK_KERNEL 1
++
++/* Define if your Linux kernel has Click transmit notification extensions. */
++/* #undef HAVE_CLICK_KERNEL_TX_NOTIFY */
++
++/* Define if fast checksum functions available. */
++#define HAVE_FAST_CHECKSUM 1
++
++/* Define if 'int64_t' is typedefed to 'long' in linuxmodule. */
++#define HAVE_INT64_IS_LONG_LINUXMODULE 1
++
++/* Define if 'int64_t' is typedefed to 'long long' in linuxmodule. */
++#define HAVE_INT64_IS_LONG_LONG_LINUXMODULE 1
++
++/* Define to enable assertion checking. Failed assertions will print a message
++   and optionally stop the router. */
++/* #undef HAVE_KERNEL_ASSERT */
++
++/* Define if you have the <asm/alternative.h> header file. */
++#define HAVE_LINUX_ASM_ALTERNATIVE_H 1
++
++/* Define if your Linux kernel architecture defines atomic_set_mask. */
++/* #undef HAVE_LINUX_ATOMIC_SET_MASK */
++
++/* Define if your Linux kernel has polling extensions. */
++#define HAVE_LINUX_POLLING 1
++
++/* Define if your Linux kernel has read_net_skbcount. */
++/* #undef HAVE_LINUX_READ_NET_SKBCOUNT */
++
++/* Define if 'struct skb_shared_info' has a 'gso_size' member. */
++/* #undef HAVE_LINUX_SKB_SHINFO_GSO_SIZE */
++
++/* Define if 'struct skb_shared_info' has an 'ip6_frag_id' member. */
++/* #undef HAVE_LINUX_SKB_SHINFO_IP6_FRAG_ID */
++
++/* Define if 'struct skb_shared_info' has a 'tso_size' member. */
++/* #undef HAVE_LINUX_SKB_SHINFO_TSO_SIZE */
++
++/* Define if 'struct skb_shared_info' has a 'ufo_size' member. */
++/* #undef HAVE_LINUX_SKB_SHINFO_UFO_SIZE */
++
++/* Define if 'struct sk_buff' has an 'fclone' member. */
++/* #undef HAVE_LINUX_SKBUFF_FCLONE */
++
++/* Define if 'struct sk_buff' has a 'security' member. */
++/* #undef HAVE_LINUX_SKBUFF_SECURITY */
++
++/* Define if your Linux kernel exposes strlen. */
++#define HAVE_LINUX_STRLEN_EXPOSED 1
++
++/* Define if your Linux kernel has tulip_interrupt_hook. */
++/* #undef HAVE_LINUX_TULIP_INTERRUPT_HOOK */
++
++/* Define if the Click linuxmodule is compiled for a 2.6 kernel. */
++#define HAVE_LINUXMODULE_2_6 1
++
++/* Define if you have the net_enable_timestamp function. */
++/* #undef HAVE_NET_ENABLE_TIMESTAMP */
++
++/* Define if you have the netif_tx_lock function. */
++/* #undef HAVE_NETIF_TX_LOCK */
++
++/* Define if fast checksum functions require correct alignment. */
++#ifndef __i386__
++# define FAST_CHECKSUM_ALIGNED 1
++#endif
++
++/* Include integer type definitions. */
++#if !HAVE_LINUXMODULE_2_6
++# include <linux/autoconf.h>
++#endif
++#include <linux/types.h>
++typedef ptrdiff_t intptr_t;
++typedef unsigned long uintptr_t; /* XXX? */
++
++/* Define HAVE_INT64_IS_LONG based on HAVE_INT64_IS_LONG_LINUXMODULE. */
++#ifdef HAVE_INT64_IS_LONG_LINUXMODULE
++# define HAVE_INT64_IS_LONG HAVE_INT64_IS_LONG_LINUXMODULE
++#endif
++
++/* Define HAVE_INT64_IS_LONG_LONG based on HAVE_INT64_IS_LONG_LONG_LINUXMODULE. */
++#if HAVE_LONG_LONG && defined(HAVE_INT64_IS_LONG_LONG_LINUXMODULE)
++# define HAVE_INT64_IS_LONG_LONG HAVE_INT64_IS_LONG_LONG_LINUXMODULE
++#endif
++
++/* Define KBUILD symbols. */
++#if !defined(KBUILD_STR) && HAVE_LINUXMODULE_2_6
++# define KBUILD_STR(s)                #s
++# define KBUILD_BASENAME      KBUILD_STR(click)
++# define KBUILD_MODNAME               KBUILD_STR(click)
++#endif
++
++#ifdef __cplusplus
++
++/* Declare operator new. */
++void *operator new(size_t) throw ();
++void *operator new[](size_t) throw ();
++
++/* Provide placement new. */
++inline void *operator new(size_t, void *v) { return v; }
++#define HAVE_PLACEMENT_NEW 1
++
++/* Define macros that surround Click declarations. */
++#define CLICK_DECLS           /* */
++#define CLICK_ENDDECLS                /* */
++#define CLICK_USING_DECLS     /* */
++#define CLICK_NAME(name)      ::name
++
++/* Fix incompatibilities between some Linux versions and Click/C++. */
++#include <click/fixconfig.h>
++
++#endif /* __cplusplus */
++
++/* Define assert macro. */
++# ifdef __cplusplus
++extern "C" {
++# endif
++void click_assert_failed(const char *file, int line, const char *problem_text);
++# ifdef __cplusplus
++}
++# endif
++
++#ifdef HAVE_KERNEL_ASSERT
++# define assert(x)    ((x) ? (void)0 : click_assert_failed(__FILE__, __LINE__, #x))
++#else
++# define assert(x)    /* nada */
++#endif
++
++/* Some architectures do not have builtin integer functions in kernel. */
++#if defined(__MIPSEL__) || defined(__MIPSEB__)
++# define HAVE_NO_INTEGER_BUILTINS 1
++#endif
++
++#endif /* CLICK_CONFIG_LINUXMODULE_H */
+diff -Nurb click-1.6.0/include/click/config-ns.h click-1.6.0-27/include/click/config-ns.h
+--- click-1.6.0/include/click/config-ns.h      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/include/click/config-ns.h   2009-01-19 15:07:24.000000000 -0500
+@@ -0,0 +1,20 @@
++/* include/click/config-ns.h.  Generated from config-ns.h.in by configure.  */
++/* Process this file with configure to produce config-ns.h. -*- mode: c -*- */
++#ifndef CLICK_CONFIG_NS_H
++#define CLICK_CONFIG_NS_H
++
++#ifdef __cplusplus
++
++/* Define macros that surround Click declarations. */
++#define CLICK_DECLS           namespace Click {
++#define CLICK_ENDDECLS                }
++#define CLICK_USING_DECLS     using namespace Click;
++#define CLICK_NAME(name)      ::Click::name
++
++#endif /* __cplusplus */
++
++/* Include userlevel configuration. */
++#define CLICK_USERLEVEL 1
++#include <click/config-userlevel.h>
++
++#endif /* CLICK_CONFIG_NS_H */
+diff -Nurb click-1.6.0/include/click/config-userlevel.h click-1.6.0-27/include/click/config-userlevel.h
+--- click-1.6.0/include/click/config-userlevel.h       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/include/click/config-userlevel.h    2009-01-19 15:07:24.000000000 -0500
+@@ -0,0 +1,249 @@
++/* include/click/config-userlevel.h.  Generated from config-userlevel.h.in by configure.  */
++/* Process this file with configure to produce config-userlevel.h. -*- mode: c -*- */
++#ifndef CLICK_CONFIG_USERLEVEL_H
++#define CLICK_CONFIG_USERLEVEL_H
++
++/* Define if accept() uses socklen_t. */
++#define HAVE_ACCEPT_SOCKLEN_T 1
++
++/* Define if <pcap.h> uses bpf_timeval. */
++/* #undef HAVE_BPF_TIMEVAL */
++
++/* Define if you have the <byteswap.h> header file. */
++#define HAVE_BYTESWAP_H 1
++
++/* Define to 1 if you have the declaration
++   of 'madvise', and to 0 if you don't. */
++#define HAVE_DECL_MADVISE 1
++
++/* Define to 1 if you have the declaration
++   of 'pcap_setnonblock', and to 0 if you don't. */
++#define HAVE_DECL_PCAP_SETNONBLOCK 1
++
++/* Define if you have the <dlfcn.h> header file. */
++#define HAVE_DLFCN_H 1
++
++/* Define if dynamic linking is possible. */
++#define HAVE_DYNAMIC_LINKING 1
++
++/* Define if you have the ffs function. */
++#define HAVE_FFS 1
++
++/* Define if you have the ffsl function. */
++#define HAVE_FFSL 1
++
++/* Define if you have the ffsll function. */
++#define HAVE_FFSLL 1
++
++/* Floating point arithmetic is allowed. */
++#define HAVE_FLOAT_TYPES 1
++
++/* Define if you have the <grp.h> header file. */
++#define HAVE_GRP_H 1
++
++/* Define if the last argument to EV_SET has pointer type. */
++/* #undef HAVE_EV_SET_UDATA_POINTER */
++
++/* Define if 'struct if_data' has an 'ifi_datalen' member. */
++/* #undef HAVE_IF_DATA_IFI_DATALEN */
++
++/* Define if 'int64_t' is typedefed to 'long' at user level. */
++/* #undef HAVE_INT64_IS_LONG_USERLEVEL */
++
++/* Define if 'int64_t' is typedefed to 'long long' at user level. */
++#define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++
++/* Define if you have the <inttypes.h> header file. */
++#define HAVE_INTTYPES_H 1
++
++/* Define if you have the kqueue function. */
++/* #undef HAVE_KQUEUE */
++
++/* Define if your C library contains large file support. */
++#define HAVE_LARGE_FILE_SUPPORT 1
++
++/* Define if you have the <linux/if_tun.h> header file. */
++#define HAVE_LINUX_IF_TUN_H 1
++
++/* Define if you have the madvise function. */
++#define HAVE_MADVISE 1
++
++/* Define if you have the mmap function. */
++#define HAVE_MMAP 1
++
++/* Define if you have the <net/bpf.h> header file. */
++/* #undef HAVE_NET_BPF_H */
++
++/* Define if you have the <net/if_tap.h> header file. */
++/* #undef HAVE_NET_IF_TAP_H */
++
++/* Define if you have the <net/if_tun.h> header file. */
++/* #undef HAVE_NET_IF_TUN_H */
++
++/* Define if you have the <netdb.h> header file. */
++#define HAVE_NETDB_H 1
++
++/* Define if <new.h> exists and works. */
++/* #undef HAVE_NEW_H */
++
++/* Define if <new> exists and works. */
++#define HAVE_NEW_HDR 1
++
++/* Define if you have -lpcap and pcap.h. */
++#define HAVE_PCAP 1
++
++/* Define if you have the pcap_setnonblock function. */
++#define HAVE_PCAP_SETNONBLOCK 1
++
++/* Define if you have -lproper and prop.h, and proper operations should be
++   preferred to their non-proper counterparts. */
++/* #undef HAVE_PROPER */
++
++/* Define if you have a non-emulated <poll.h> header file. */
++#define HAVE_POLL_H 1
++
++/* Placement new is always provided below. */
++#define HAVE_PLACEMENT_NEW 1
++
++/* Define if you have the <pwd.h> header file. */
++#define HAVE_PWD_H 1
++
++/* Define if you have the sigaction function. */
++#define HAVE_SIGACTION 1
++
++/* Define if you have the snprintf function. */
++#define HAVE_SNPRINTF 1
++
++/* Define if 'struct sockaddr_in' has a 'sin_len' member. */
++/* #undef HAVE_SOCKADDR_IN_SIN_LEN */
++
++/* Define if you have the strerror function. */
++#define HAVE_STRERROR 1
++
++/* Define if you have the <strings.h> header file. */
++#define HAVE_STRINGS_H 1
++
++/* Define if you have the strtoul function. */
++#define HAVE_STRTOUL 1
++
++/* Define if you have the <sys/event.h> header file. */
++/* #undef HAVE_SYS_EVENT_H */
++
++/* Define if you have the <sys/mman.h> header file. */
++#define HAVE_SYS_MMAN_H 1
++
++/* Define if you have the tcgetpgrp function. */
++#define HAVE_TCGETPGRP 1
++
++/* Define if you have the <termio.h> header file. */
++#define HAVE_TERMIO_H 1
++
++/* Define if you have u_intXX_t types but not uintXX_t types. */
++/* #undef HAVE_U_INT_TYPES */
++
++/* Define if you have the <unistd.h> header file. */
++#define HAVE_UNISTD_H 1
++
++/* Define if a Click user-level driver might run multiple threads. */
++/* #undef HAVE_USER_MULTITHREAD */
++
++/* Define if you have the vsnprintf function. */
++#define HAVE_VSNPRINTF 1
++
++/* The size of a `off_t', as computed by sizeof. */
++#define SIZEOF_OFF_T 8
++
++
++/* Set feature test macros before anything is included. */
++#if HAVE_LARGE_FILE_SUPPORT && HAVE_INT64_TYPES
++# define _LARGEFILE_SOURCE 1
++# define _FILE_OFFSET_BITS 64
++#endif
++
++/* Include integer type definitions. */
++#ifdef HAVE_INTTYPES_H
++# include <inttypes.h>
++#endif
++#include <sys/types.h>
++
++/* Define uint types in terms of u_int types, if necessary. */
++#ifdef HAVE_U_INT_TYPES
++typedef u_int8_t uint8_t;
++typedef u_int16_t uint16_t;
++typedef u_int32_t uint32_t;
++# ifdef HAVE_INT64_TYPES
++typedef u_int64_t uint64_t;
++# endif
++typedef long intptr_t;                /* XXX? */
++typedef unsigned long uintptr_t;
++#endif
++
++/* Define HAVE_INT64_IS_LONG based on HAVE_INT64_IS_LONG_USERLEVEL. */
++#ifdef HAVE_INT64_IS_LONG_USERLEVEL
++# define HAVE_INT64_IS_LONG HAVE_INT64_IS_LONG_USERLEVEL
++#endif
++
++/* Define HAVE_INT64_IS_LONG_LONG based on HAVE_INT64_IS_LONG_LONG_USERLEVEL. */
++#ifdef HAVE_INT64_IS_LONG_LONG_USERLEVEL
++# define HAVE_INT64_IS_LONG_LONG HAVE_INT64_IS_LONG_LONG_USERLEVEL
++#endif
++
++/* Define HAVE_MULTITHREAD based on HAVE_USER_MULTITHREAD. */
++#ifdef HAVE_USER_MULTITHREAD
++# define HAVE_MULTITHREAD HAVE_USER_MULTITHREAD
++#endif
++
++/* Include assert macro. */
++#include <assert.h>
++
++/* Define likely and unlikely macros. */
++#if __GNUC__ >= 3
++# define likely(x)    __builtin_expect(!!(x), 1)
++# define unlikely(x)  __builtin_expect(!!(x), 0)
++#else
++# define likely(x)    (x)
++# define unlikely(x)  (x)
++#endif
++
++/* Define if mmap is allowed. */
++#if defined(HAVE_SYS_MMAN_H) && defined(HAVE_MMAP)
++# define ALLOW_MMAP 1
++#endif
++
++/* Prototype strerror if we don't have it. */
++#ifndef HAVE_STRERROR
++char *strerror(int errno);
++#endif
++
++/* Use nanosecond-granularity timestamps if they are enabled. */
++#ifdef HAVE_NANOTIMESTAMP_ENABLED
++#define HAVE_NANOTIMESTAMP 1
++#endif
++
++#ifdef __cplusplus
++
++/* Provide placement new. */
++#if HAVE_NEW_HDR
++# include <new>
++#elif HAVE_NEW_H
++# include <new.h>
++#else
++inline void *operator new(size_t, void *v) { return v; }
++#endif
++
++/* Prototype madvise if we have it, but not the prototype. */
++#if ALLOW_MMAP && HAVE_MADVISE && !HAVE_DECL_MADVISE
++extern "C" int madvise(void *addr, size_t len, int behav);
++#endif
++
++/* Define macros that surround Click declarations. */
++#ifndef CLICK_DECLS
++# define CLICK_DECLS          /* */
++# define CLICK_ENDDECLS               /* */
++# define CLICK_USING_DECLS    /* */
++# define CLICK_NAME(name)     ::name
++#endif
++
++#endif /* __cplusplus */
++
++#endif /* CLICK_CONFIG_USERLEVEL_H */
+diff -Nurb click-1.6.0/include/click/config.h click-1.6.0-27/include/click/config.h
+--- click-1.6.0/include/click/config.h 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/include/click/config.h      2009-01-19 15:07:24.000000000 -0500
+@@ -0,0 +1,168 @@
++/* include/click/config.h.  Generated from config.h.in by configure.  */
++/* Process this file with configure to produce config.h. -*- mode: c -*- */
++#ifndef CLICK_CONFIG_H
++#define CLICK_CONFIG_H
++
++/* Define to byte order of target machine. */
++#define CLICK_BYTE_ORDER 1234
++#define CLICK_BIG_ENDIAN      4321
++#define CLICK_LITTLE_ENDIAN   1234
++#define CLICK_NO_ENDIAN               0
++
++/* Define for Click memory allocation debugging. */
++/* #undef CLICK_DMALLOC */
++
++/* Version number of package */
++#define CLICK_VERSION "1.6.0"
++
++/* Define if PollDevice should run fast to get good benchmark numbers */
++/* #undef CLICK_WARP9 */
++
++/* Define if you have the __builtin_clz function. */
++#define HAVE___BUILTIN_CLZ 1
++
++/* Define if you have the __builtin_clzl function. */
++#define HAVE___BUILTIN_CLZL 1
++
++/* Define if you have the __builtin_clzll function. */
++#define HAVE___BUILTIN_CLZLL 1
++
++/* Define if you have the __builtin_ffs function. */
++#define HAVE___BUILTIN_FFS 1
++
++/* Define if you have the __builtin_ffsl function. */
++#define HAVE___BUILTIN_FFSL 1
++
++/* Define if you have the __builtin_ffsll function. */
++#define HAVE___BUILTIN_FFSLL 1
++
++/* Define if the va_list type is addressable. */
++#define HAVE_ADDRESSABLE_VA_LIST 1
++
++/* Define if right shift of signed integers acts by sign extension. */
++#define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++
++/* Define if the machine is indifferent to alignment. */
++#define HAVE_INDIFFERENT_ALIGNMENT 1
++
++/* Define if you want to use Intel-specific instructions. */
++/* #undef HAVE_INTEL_CPU */
++
++/* Define if 64-bit integer types are enabled. */
++#define HAVE_INT64_TYPES 1
++
++/* Define if IPv6 support is enabled. */
++/* #undef HAVE_IP6 */
++
++/* Define if IPsec support is enabled. */
++/* #undef HAVE_IPSEC */
++
++/* Define to 1 if the system has the type `long long'. */
++#define HAVE_LONG_LONG 1
++
++/* Define if nanosecond-granularity timestamps are enabled. */
++/* #undef HAVE_NANOTIMESTAMP_ENABLED */
++
++/* Define if you want to use the stride scheduler. */
++#define HAVE_STRIDE_SCHED 1
++
++/* Define to 1 since we have Strings. */
++#define HAVE_STRING 1
++
++/* Define to 1 if the system has the type `struct timespec'. */
++#define HAVE_STRUCT_TIMESPEC 1
++
++#ifdef HAVE_STRIDE_SCHED
++/* Define if you want task scheduling to use a heap, not a linked list. */
++/* #undef HAVE_TASK_HEAP */
++#endif
++
++/* The size of a `int', as computed by sizeof. */
++#define SIZEOF_INT 4
++
++/* The size of a `long', as computed by sizeof. */
++#define SIZEOF_LONG 4
++
++/* The size of a `long long', as computed by sizeof. */
++#define SIZEOF_LONG_LONG 8
++
++/* The size of a `struct timespec', as computed by sizeof. */
++#define SIZEOF_STRUCT_TIMESPEC 8
++
++/* The size of a `struct timeval', as computed by sizeof. */
++#define SIZEOF_STRUCT_TIMEVAL 8
++
++/* Define if you want to run multithreaded Click. */
++/* #undef __MTCLICK__ */
++#define NUM_CLICK_CPUS 1
++
++#ifndef __cplusplus
++/* Define inline, if necessary. C only. */
++/* #undef inline */
++#endif
++
++#ifdef __cplusplus
++/* Explicit template instances? */
++#if __GNUC__ == 2 && __GNUC_MINOR__ < 90
++#define EXPLICIT_TEMPLATE_INSTANCES 1
++#endif
++#endif /* __cplusplus */
++
++/* Define macros for declaring packed structures. */
++#ifdef __GNUC__
++#define CLICK_PACKED_STRUCTURE(open, close) open close __attribute__((packed))
++#define CLICK_SIZE_PACKED_STRUCTURE(open, close) open close __attribute__((packed))
++#else
++#define CLICK_PACKED_STRUCTURE(open, close) _Cannot_pack_structure__Use_GCC
++#define CLICK_SIZE_PACKED_STRUCTURE(open, close) open close
++#endif
++
++/* Define macro for deprecated functions. */
++#if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ == 0)
++#define CLICK_DEPRECATED
++#else
++#define CLICK_DEPRECATED __attribute__((deprecated))
++#endif
++
++/* Define ARCH_IS_BIG_ENDIAN based on CLICK_BYTE_ORDER. */
++#if CLICK_BYTE_ORDER == CLICK_BIG_ENDIAN
++#define ARCH_IS_BIG_ENDIAN    1
++#elif CLICK_BYTE_ORDER == CLICK_LITTLE_ENDIAN
++#define ARCH_IS_BIG_ENDIAN    0
++#endif
++
++/* EXPORT_ELEMENT, ELEMENT_REQUIRES, ELEMENT_PROVIDES, ELEMENT_HEADER,
++   ELEMENT_LIBS, and ELEMENT_MT_SAFE are noops. */
++#define EXPORT_ELEMENT(x)
++#define ELEMENT_REQUIRES(x)
++#define ELEMENT_PROVIDES(x)
++#define ELEMENT_HEADER(x)
++#define ELEMENT_LIBS(x)
++#define ELEMENT_MT_SAFE(x)
++
++/* Assume CLICK_USERLEVEL unless otherwise defined. */
++#if !defined(CLICK_USERLEVEL) && !defined(CLICK_TOOL) && !defined(CLICK_LINUXMODULE) && !defined(CLICK_BSDMODULE)
++# define CLICK_USERLEVEL 1
++#endif
++
++/* Define stuff under a Linux module. */
++#ifdef CLICK_LINUXMODULE
++# include <click/config-linuxmodule.h>
++#endif
++
++/* Define stuff under a FreeBSD module. */
++#ifdef CLICK_BSDMODULE
++# include <click/config-bsdmodule.h>
++#endif
++
++/* Define stuff under nsclick. */
++#ifdef CLICK_NS
++# include <click/config-ns.h>
++#endif
++
++/* Define stuff under tools or a user-level driver. */
++#if defined(CLICK_USERLEVEL) || defined(CLICK_TOOL)
++# include <click/config-userlevel.h>
++#endif
++
++#endif /* CLICK_CONFIG_H */
+diff -Nurb click-1.6.0/include/click/cxxprotect.h click-1.6.0-27/include/click/cxxprotect.h
+--- click-1.6.0/include/click/cxxprotect.h     2007-07-16 19:47:50.000000000 -0400
++++ click-1.6.0-27/include/click/cxxprotect.h  2009-02-11 15:24:13.000000000 -0500
+@@ -11,6 +11,8 @@
+ #define namespace     xxx_namespace
+ #endif
++#define CXX_PROTECTED
++
+ #ifndef CLICK_CXX_PROTECT
+ # ifdef __cplusplus
+ #  define CLICK_CXX_PROTECT   extern "C" {
+diff -Nurb click-1.6.0/include/click/cxxprotect.h.orig click-1.6.0-27/include/click/cxxprotect.h.orig
+--- click-1.6.0/include/click/cxxprotect.h.orig        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/include/click/cxxprotect.h.orig     2007-07-16 19:47:50.000000000 -0400
+@@ -0,0 +1,22 @@
++#ifdef __cplusplus
++#define new           xxx_new
++#define this          xxx_this
++#define delete                xxx_delete
++#define class         xxx_class
++#define virtual               xxx_virtual
++#define typename      xxx_typename
++#define private               xxx_private
++#define protected     xxx_protected
++#define public                xxx_public
++#define namespace     xxx_namespace
++#endif
++
++#ifndef CLICK_CXX_PROTECT
++# ifdef __cplusplus
++#  define CLICK_CXX_PROTECT   extern "C" {
++#  define CLICK_CXX_UNPROTECT }
++# else
++#  define CLICK_CXX_PROTECT   /* nothing */
++#  define CLICK_CXX_UNPROTECT /* nothing */
++# endif
++#endif
+diff -Nurb click-1.6.0/include/click/cxxunprotect.h click-1.6.0-27/include/click/cxxunprotect.h
+--- click-1.6.0/include/click/cxxunprotect.h   2007-07-16 19:47:50.000000000 -0400
++++ click-1.6.0-27/include/click/cxxunprotect.h        2009-02-11 15:24:33.000000000 -0500
+@@ -1,3 +1,4 @@
++#undef CXX_PROTECTED
+ #ifdef __cplusplus
+ #undef new
+ #undef this
+diff -Nurb click-1.6.0/include/click/cxxunprotect.h.orig click-1.6.0-27/include/click/cxxunprotect.h.orig
+--- click-1.6.0/include/click/cxxunprotect.h.orig      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/include/click/cxxunprotect.h.orig   2007-07-16 19:47:50.000000000 -0400
+@@ -0,0 +1,12 @@
++#ifdef __cplusplus
++#undef new
++#undef this
++#undef delete
++#undef class
++#undef virtual
++#undef typename
++#undef private
++#undef protected
++#undef public
++#undef namespace
++#endif
+diff -Nurb click-1.6.0/include/click/glue.hh.orig click-1.6.0-27/include/click/glue.hh.orig
+--- click-1.6.0/include/click/glue.hh.orig     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/include/click/glue.hh.orig  2007-09-12 18:24:50.000000000 -0400
+@@ -0,0 +1,420 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/glue.cc" -*-
++#ifndef CLICK_GLUE_HH
++#define CLICK_GLUE_HH
++// Removes many common #include <header>s and abstracts differences between
++// kernel and user space, and between operating systems.
++
++// HEADERS
++
++#if CLICK_LINUXMODULE
++
++# define _LOOSE_KERNEL_NAMES 1 /* define ino_t, off_t, etc. */
++# undef __KERNEL_STRICT_NAMES
++# ifndef __OPTIMIZE__
++#  define __OPTIMIZE__ 1 /* get ntohl() macros. otherwise undefined. */
++# endif
++# include <click/cxxprotect.h>
++CLICK_CXX_PROTECT
++# ifdef WANT_MOD_USE_COUNT
++#  define __NO_VERSION__
++#  include <linux/module.h>
++#  define HAVE_MOD_USE_COUNT 1
++# endif
++# include <linux/kernel.h>
++# include <linux/version.h>
++# include <linux/string.h>
++# include <linux/skbuff.h>
++# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
++#  include <linux/malloc.h>
++#  include <linux/vmalloc.h>
++#  include <linux/interrupt.h>
++# else
++#  include <linux/hardirq.h>
++# endif
++# include <linux/ctype.h>
++# include <linux/time.h>
++# include <linux/errno.h>
++CLICK_CXX_UNPROTECT
++# include <click/cxxunprotect.h>
++
++#elif CLICK_BSDMODULE
++
++# include <click/cxxprotect.h>
++CLICK_CXX_PROTECT
++# include <sys/ctype.h>
++# include <sys/systm.h>
++# include <sys/time.h>
++# include <sys/param.h>
++# include <sys/kernel.h>
++# include <sys/mbuf.h>
++# include <sys/malloc.h>
++# include <sys/libkern.h>
++# include <sys/proc.h>
++# include <sys/sysproto.h>
++CLICK_CXX_UNPROTECT
++# include <click/cxxunprotect.h>
++
++#else /* CLICK_USERLEVEL */
++
++# include <stdio.h>
++# include <stdlib.h>
++# include <string.h>
++# include <ctype.h>
++# include <errno.h>
++# include <limits.h>
++# include <sys/socket.h>
++# include <netinet/in.h>
++# include <sys/time.h>
++# ifdef CLICK_NS
++extern "C" int simclick_gettimeofday(struct timeval *);
++# endif
++
++#endif
++
++
++// DEBUGGING OUTPUT
++extern "C" {
++void click_chatter(const char *fmt, ...);
++}
++
++
++// DEBUG MALLOC
++
++#if CLICK_DMALLOC && (CLICK_LINUXMODULE || CLICK_BSDMODULE)
++extern uint32_t click_dmalloc_where;
++# define CLICK_DMALLOC_REG(s) do { const unsigned char *__str = reinterpret_cast<const unsigned char *>(s); click_dmalloc_where = (__str[0]<<24) | (__str[1]<<16) | (__str[2]<<8) | __str[3]; } while (0)
++#else
++# define CLICK_DMALLOC_REG(s)
++#endif
++
++
++// LALLOC
++
++#if CLICK_LINUXMODULE
++# define CLICK_LALLOC(size)   (click_lalloc((size)))
++# define CLICK_LFREE(p, size) (click_lfree((p), (size)))
++extern "C" {
++void *click_lalloc(size_t size);
++void click_lfree(volatile void *p, size_t size);
++}
++#else
++# define CLICK_LALLOC(size)   ((void *)(new uint8_t[(size)]))
++# define CLICK_LFREE(p, size) delete[] ((uint8_t *)(p))
++#endif
++
++
++// RANDOMNESS
++
++CLICK_DECLS
++extern void click_random_srandom(); // srand(), but use true randomness
++CLICK_ENDDECLS
++
++#if CLICK_LINUXMODULE
++extern "C" {
++extern uint32_t click_random_seed;
++extern void srandom(uint32_t);
++#define       RAND_MAX        2147483647
++inline uint32_t
++random()
++{
++    click_random_seed = click_random_seed*69069L + 1;
++    return (click_random_seed ^ jiffies) & RAND_MAX;
++}
++}
++#endif
++
++
++// SORTING
++
++int click_qsort(void *base, size_t n, size_t size, int (*compar)(const void *, const void *, void *), void *thunk);
++int click_qsort(void *base, size_t n, size_t size, int (*compar)(const void *, const void *));
++
++
++// OTHER
++
++#if CLICK_LINUXMODULE
++
++// current processor
++# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
++#  define click_current_processor()   (current_thread_info()->cpu)
++# else
++#  define click_current_processor()   (current->processor)
++# endif
++
++// provide a definition for net_device for kernel compatibility
++# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 0)
++typedef struct device net_device;
++#  define dev_get_by_name dev_get
++# endif
++
++extern "C" {
++
++long strtol(const char *, char **, int);
++
++inline unsigned long
++strtoul(const char *nptr, char **endptr, int base)
++{
++    return simple_strtoul(nptr, endptr, base);
++}
++
++# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) && __GNUC__ == 2 && __GNUC_MINOR__ == 96
++int click_strcmp(const char *, const char *);
++
++inline int
++strcmp(const char *a, const char *b)
++{
++    return click_strcmp(a, b);
++}
++# endif
++
++}
++
++#elif CLICK_BSDMODULE
++
++/* Char-type glue */
++
++# define _U   0x01    /* upper */
++# define _L   0x02    /* lower */
++# define _D   0x04    /* digit */
++# define _C   0x08    /* cntrl */
++# define _P   0x10    /* punct */
++# define _S   0x20    /* white space (space/lf/tab) */
++# define _X   0x40    /* hex digit */
++# define _SP  0x80    /* hard space (0x20) */
++
++extern unsigned char _ctype[];
++
++# define __ismask(x)  (_ctype[(int)(unsigned char)(x)])
++# define isalnum(c)   ((__ismask(c)&(_U|_L|_D)) != 0)
++
++# define strchr(s, c) index(s, c)
++
++# define memmove(dst, src, len)               bcopy((src), (dst), (len))
++
++typedef struct ifnet net_device;
++
++#else /* not CLICK_LINUXMODULE || CLICK_BSDMODULE */
++
++// provide a definition for net_device
++typedef struct device net_device;
++
++#endif /* CLICK_LINUXMODULE */
++
++
++// COMPILE-TIME ASSERTION CHECKING
++
++#define static_assert(c) switch (c) case 0: case (c):
++
++
++// TIMEVALS AND JIFFIES
++
++#if CLICK_LINUXMODULE
++# define click_gettimeofday(tvp)      (do_gettimeofday(tvp))
++# define click_jiffies()              ((unsigned)jiffies)
++# define CLICK_HZ                     HZ
++#elif CLICK_BSDMODULE
++# define click_gettimeofday(tvp)      (getmicrotime(tvp))
++# define click_jiffies()              ((unsigned)ticks)
++# define CLICK_HZ                     hz
++#else
++#ifndef CLICK_NS
++# define click_gettimeofday(tvp)      (gettimeofday(tvp, (struct timezone *)0))
++#else
++# define click_gettimeofday(tvp)      (simclick_gettimeofday(tvp))
++#endif
++CLICK_DECLS
++unsigned click_jiffies();
++CLICK_ENDDECLS
++# define CLICK_HZ                     100
++#endif
++
++
++// TIMEVAL OPERATIONS
++
++#ifndef timercmp
++// Convenience macros for operations on timevals.
++// NOTE: 'timercmp' does not work for >= or <=.
++# define timerisset(tvp)      ((tvp)->tv_sec || (tvp)->tv_usec)
++# define timerclear(tvp)      ((tvp)->tv_sec = (tvp)->tv_usec = 0)
++# define timercmp(a, b, CMP)                  \
++  (((a)->tv_sec == (b)->tv_sec) ?             \
++   ((a)->tv_usec CMP (b)->tv_usec) :          \
++   ((a)->tv_sec CMP (b)->tv_sec))
++#endif
++#ifndef timeradd
++# define timeradd(a, b, result)                                                     \
++  do {                                                                              \
++    (result)->tv_sec = (a)->tv_sec + (b)->tv_sec;                           \
++    (result)->tv_usec = (a)->tv_usec + (b)->tv_usec;                        \
++    if ((result)->tv_usec >= 1000000)                                       \
++      {                                                                             \
++      ++(result)->tv_sec;                                                   \
++      (result)->tv_usec -= 1000000;                                         \
++      }                                                                             \
++  } while (0)
++#endif
++#ifndef timersub
++# define timersub(a, b, result)                                                     \
++  do {                                                                              \
++    (result)->tv_sec = (a)->tv_sec - (b)->tv_sec;                           \
++    (result)->tv_usec = (a)->tv_usec - (b)->tv_usec;                        \
++    if ((result)->tv_usec < 0) {                                            \
++      --(result)->tv_sec;                                                   \
++      (result)->tv_usec += 1000000;                                         \
++    }                                                                       \
++  } while (0)
++#endif
++
++#ifndef CLICK_TIMEVAL_OPERATORS
++
++inline struct timeval
++make_timeval(int sec, int usec)
++{
++    struct timeval tv;
++    tv.tv_sec = sec;
++    tv.tv_usec = usec;
++    return tv;
++}
++
++inline bool
++operator==(const struct timeval &a, const struct timeval &b)
++{
++    return a.tv_sec == b.tv_sec && a.tv_usec == b.tv_usec;
++}
++
++inline bool
++operator!=(const struct timeval &a, const struct timeval &b)
++{
++    return a.tv_sec != b.tv_sec || a.tv_usec != b.tv_usec;
++}
++
++inline bool
++operator<(const struct timeval &a, const struct timeval &b)
++{
++    return a.tv_sec < b.tv_sec || (a.tv_sec == b.tv_sec && a.tv_usec < b.tv_usec);
++}
++
++inline bool
++operator<=(const struct timeval &a, const struct timeval &b)
++{
++    return a.tv_sec < b.tv_sec || (a.tv_sec == b.tv_sec && a.tv_usec <= b.tv_usec);
++}
++
++inline bool
++operator>=(const struct timeval &a, const struct timeval &b)
++{
++    return a.tv_sec > b.tv_sec || (a.tv_sec == b.tv_sec && a.tv_usec >= b.tv_usec);
++}
++
++inline bool
++operator>(const struct timeval &a, const struct timeval &b)
++{
++    return a.tv_sec > b.tv_sec || (a.tv_sec == b.tv_sec && a.tv_usec > b.tv_usec);
++}
++
++inline struct timeval &
++operator+=(struct timeval &a, const struct timeval &b)
++{
++    a.tv_sec += b.tv_sec;
++    a.tv_usec += b.tv_usec;
++    if (a.tv_usec >= 1000000) {
++      a.tv_sec++;
++      a.tv_usec -= 1000000;
++    }
++    return a;
++}
++
++inline struct timeval &
++operator-=(struct timeval &a, const struct timeval &b)
++{
++    a.tv_sec -= b.tv_sec;
++    a.tv_usec -= b.tv_usec;
++    if (a.tv_usec < 0) {
++      a.tv_sec--;
++      a.tv_usec += 1000000;
++    }
++    return a;
++}
++
++inline struct timeval
++operator+(struct timeval a, const struct timeval &b)
++{
++    a += b;
++    return a;
++}
++
++inline struct timeval
++operator-(struct timeval a, const struct timeval &b)
++{
++    a -= b;
++    return a;
++}
++
++#endif
++
++CLICK_DECLS
++class StringAccum;
++StringAccum &operator<<(StringAccum &, const struct timeval &);
++CLICK_ENDDECLS
++
++
++// BYTE ORDER
++
++#if CLICK_BYTE_ORDER == CLICK_LITTLE_ENDIAN
++# define le16_to_cpu(x) (x)
++# define cpu_to_le16(x) (x)
++# define le32_to_cpu(x) (x)
++# define cpu_to_le32(x) (x)
++#elif CLICK_BYTE_ORDER == CLICK_BIG_ENDIAN && defined(__APPLE__)
++# include <machine/byte_order.h>
++# define le16_to_cpu(x) NXSwapShort((x))
++# define cpu_to_le16(x) NXSwapShort((x))
++# define le32_to_cpu(x) NXSwapInt((x))
++# define cpu_to_le32(x) NXSwapInt((x))
++#elif CLICK_BYTE_ORDER == CLICK_BIG_ENDIAN && HAVE_BYTESWAP_H
++# include <byteswap.h>
++# define le16_to_cpu(x) bswap_16((x))
++# define cpu_to_le16(x) bswap_16((x))
++# define le32_to_cpu(x) bswap_32((x))
++# define cpu_to_le32(x) bswap_32((x))
++#else
++/* leave them undefined */
++#endif
++
++
++// CYCLE COUNTS
++
++CLICK_DECLS
++
++#if HAVE_INT64_TYPES
++typedef uint64_t click_cycles_t;
++#else
++typedef uint32_t click_cycles_t;
++#endif
++
++inline click_cycles_t
++click_get_cycles()
++{
++#if CLICK_LINUXMODULE && HAVE_INT64_TYPES && __i386__
++    uint64_t x;
++    __asm__ __volatile__ ("rdtsc" : "=A" (x));
++    return x;
++#elif CLICK_LINUXMODULE && HAVE_INT64_TYPES && __x86_64__
++    uint32_t xlo, xhi;
++    __asm__ __volatile__ ("rdtsc" : "=a" (xlo), "=d" (xhi));
++    return xlo | (((uint64_t) xhi) << 32);
++#elif CLICK_LINUXMODULE && __i386__
++    uint32_t xlo, xhi;
++    __asm__ __volatile__ ("rdtsc" : "=a" (xlo), "=d" (xhi));
++    return xhi ? 0xFFFFFFFF : xlo;
++#elif CLICK_BSDMODULE
++    return rdtsc();
++#else
++    // add other architectures here
++    return 0;
++#endif
++}
++
++CLICK_ENDDECLS
++
++#endif
+diff -Nurb click-1.6.0/include/click/packet.hh click-1.6.0-27/include/click/packet.hh
+--- click-1.6.0/include/click/packet.hh        2007-09-07 16:11:26.000000000 -0400
++++ click-1.6.0-27/include/click/packet.hh     2009-01-27 10:13:43.000000000 -0500
+@@ -452,7 +452,7 @@
+ Packet::mac_header() const
+ {
+ #if CLICK_LINUXMODULE
+-    return skb()->mac.raw;
++    return skb_mac_header(skb());
+ #else
+     return _mac;
+ #endif
+@@ -462,7 +462,7 @@
+ Packet::network_header() const
+ {
+ #if CLICK_LINUXMODULE
+-    return skb()->nh.raw;
++    return skb_network_header(skb());
+ #else
+     return _nh;
+ #endif
+@@ -472,7 +472,7 @@
+ Packet::transport_header() const
+ {
+ #if CLICK_LINUXMODULE
+-    return skb()->h.raw;
++    return skb_transport_header(skb());
+ #else
+     return _h;
+ #endif
+@@ -567,7 +567,7 @@
+ # if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 13)
+     memcpy(&skb()->stamp, &timestamp, 8);
+ # else
+-    skb_set_timestamp(skb(), &timestamp.timeval());
++    memcpy(&skb()->tstamp, &timestamp, 8);
+ # endif
+ #else
+     _timestamp = timestamp;
+@@ -904,7 +904,7 @@
+ Packet::set_mac_header(const unsigned char *h)
+ {
+ #if CLICK_LINUXMODULE /* Linux kernel module */
+-    skb()->mac.raw = const_cast<unsigned char *>(h);
++    skb()->mac_header = const_cast<unsigned char *>(h);
+ #else                         /* User-space and BSD kernel module */
+     _mac = const_cast<unsigned char *>(h);
+ #endif
+@@ -914,8 +914,8 @@
+ Packet::set_mac_header(const unsigned char *h, uint32_t len)
+ {
+ #if CLICK_LINUXMODULE /* Linux kernel module */
+-    skb()->mac.raw = const_cast<unsigned char *>(h);
+-    skb()->nh.raw = const_cast<unsigned char *>(h) + len;
++    skb()->mac_header = const_cast<unsigned char *>(h);
++    skb()->network_header = const_cast<unsigned char *>(h) + len;
+ #else                         /* User-space and BSD kernel module */
+     _mac = const_cast<unsigned char *>(h);
+     _nh = const_cast<unsigned char *>(h) + len;
+@@ -956,8 +956,8 @@
+ Packet::set_network_header(const unsigned char *h, uint32_t len)
+ {
+ #if CLICK_LINUXMODULE /* Linux kernel module */
+-    skb()->nh.raw = const_cast<unsigned char *>(h);
+-    skb()->h.raw = const_cast<unsigned char *>(h) + len;
++    skb()->network_header = const_cast<unsigned char *>(h);
++    skb()->transport_header = const_cast<unsigned char *>(h) + len;
+ #else                         /* User-space and BSD kernel module */
+     _nh = const_cast<unsigned char *>(h);
+     _h = const_cast<unsigned char *>(h) + len;
+@@ -968,7 +968,7 @@
+ Packet::set_network_header_length(uint32_t len)
+ {
+ #if CLICK_LINUXMODULE /* Linux kernel module */
+-    skb()->h.raw = skb()->nh.raw + len;
++    skb()->transport_header = skb()->network_header + len;
+ #else                         /* User-space and BSD kernel module */
+     _h = _nh + len;
+ #endif
+@@ -1076,9 +1076,9 @@
+   _h += (_h ? shift : 0);
+ #else
+   struct sk_buff *mskb = skb();
+-  mskb->mac.raw += (mskb->mac.raw ? shift : 0);
+-  mskb->nh.raw += (mskb->nh.raw ? shift : 0);
+-  mskb->h.raw += (mskb->h.raw ? shift : 0);
++  mskb->mac_header += (mskb->mac_header ? shift : 0);
++  mskb->network_header += (mskb->network_header ? shift : 0);
++  mskb->transport_header += (mskb->transport_header ? shift : 0);
+ #endif
+ }
+diff -Nurb click-1.6.0/include/click/packet.hh.orig click-1.6.0-27/include/click/packet.hh.orig
+--- click-1.6.0/include/click/packet.hh.orig   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/include/click/packet.hh.orig        2007-09-07 16:11:26.000000000 -0400
+@@ -0,0 +1,1171 @@
++// -*- related-file-name: "../../lib/packet.cc" -*-
++#ifndef CLICK_PACKET_HH
++#define CLICK_PACKET_HH
++#include <click/ipaddress.hh>
++#include <click/ip6address.hh>
++#include <click/glue.hh>
++#include <click/timestamp.hh>
++#if CLICK_LINUXMODULE
++# include <click/skbmgr.hh>
++#else
++# include <click/atomic.hh>
++#endif
++struct click_ether;
++struct click_ip;
++struct click_icmp;
++struct click_ip6;
++struct click_tcp;
++struct click_udp;
++
++#if CLICK_NS
++# include <click/simclick.h>
++#endif
++
++
++CLICK_DECLS
++
++class IP6Address;
++class WritablePacket;
++
++class Packet { public:
++
++  // PACKET CREATION
++  enum { DEFAULT_HEADROOM = 28, MIN_BUFFER_LENGTH = 64 };
++  
++  static WritablePacket *make(uint32_t);
++  static WritablePacket *make(const char *, uint32_t);
++  static WritablePacket *make(const unsigned char *, uint32_t);
++  static WritablePacket *make(uint32_t, const unsigned char *, uint32_t, uint32_t);
++  
++#if CLICK_LINUXMODULE
++  // Packet::make(sk_buff *) wraps a Packet around an existing sk_buff.
++  // Packet now owns the sk_buff (ie we don't increment skb->users).
++  static Packet *make(struct sk_buff *);
++  struct sk_buff *skb()                       { return (struct sk_buff *)this; }
++  const struct sk_buff *skb() const   { return (const struct sk_buff*)this; }
++#elif CLICK_BSDMODULE
++  // Packet::make(mbuf *) wraps a Packet around an existing mbuf.
++  // Packet now owns the mbuf.
++  static Packet *make(struct mbuf *);
++  struct mbuf *m()                    { return _m; }
++  const struct mbuf *m() const                { return (const struct mbuf *)_m; }
++  struct mbuf *steal_m();
++#else                 /* User-space */
++  static WritablePacket *make(unsigned char *, uint32_t, void (*destructor)(unsigned char *, size_t));
++#endif
++
++    inline void kill();
++
++    inline bool shared() const;
++    Packet *clone();
++    WritablePacket *uniqueify();
++  
++    inline const unsigned char *data() const;
++    inline const unsigned char *end_data() const;
++    inline uint32_t length() const;
++    inline uint32_t headroom() const;
++    inline uint32_t tailroom() const;
++    inline const unsigned char *buffer() const;
++    inline const unsigned char *end_buffer() const;
++    inline uint32_t buffer_length() const;
++  
++    WritablePacket *push(uint32_t nb);        // Add more space before packet.
++    WritablePacket *push_mac_header(uint32_t nb);
++    Packet *nonunique_push(uint32_t nb);
++    void pull(uint32_t nb);           // Get rid of initial bytes.
++    WritablePacket *put(uint32_t nb); // Add bytes to end of pkt.
++    Packet *nonunique_put(uint32_t nb);
++    void take(uint32_t nb);           // Delete bytes from end of pkt.
++
++    Packet *shift_data(int offset, bool free_on_failure = true);
++#if CLICK_USERLEVEL
++    inline void shrink_data(const unsigned char *, uint32_t length);
++    inline void change_headroom_and_length(uint32_t headroom, uint32_t length);
++#endif
++
++    // HEADER ANNOTATIONS
++    inline const unsigned char *mac_header() const;
++    inline void set_mac_header(const unsigned char *);
++    inline void set_mac_header(const unsigned char *, uint32_t);
++    inline int mac_header_offset() const;
++    inline uint32_t mac_header_length() const;
++    inline int mac_length() const;
++
++    inline const unsigned char *network_header() const;
++    inline void set_network_header(const unsigned char *, uint32_t);
++    inline void set_network_header_length(uint32_t);
++    inline int network_header_offset() const;
++    inline uint32_t network_header_length() const;
++    inline int network_length() const;
++
++    inline const unsigned char *transport_header() const;
++    inline int transport_header_offset() const;
++    inline int transport_length() const;
++
++    // CONVENIENCE HEADER ANNOTATIONS
++    inline const click_ether *ether_header() const;
++    inline void set_ether_header(const click_ether *);
++  
++    inline const click_ip *ip_header() const;
++    inline void set_ip_header(const click_ip *, uint32_t);
++    inline int ip_header_offset() const;
++    inline uint32_t ip_header_length() const;
++
++    inline const click_ip6 *ip6_header() const;
++    inline void set_ip6_header(const click_ip6 *);
++    inline void set_ip6_header(const click_ip6 *, uint32_t);
++    inline int ip6_header_offset() const;
++    inline uint32_t ip6_header_length() const;
++
++    inline const click_icmp *icmp_header() const;
++    inline const click_tcp *tcp_header() const;
++    inline const click_udp *udp_header() const;
++
++    // LINKS
++    inline Packet *next() const;
++    inline Packet *&next();
++    inline void set_next(Packet *p);
++  
++    // ANNOTATIONS
++
++ private:
++  struct Anno;
++#if CLICK_LINUXMODULE /* Linux kernel module */
++  const Anno *anno() const            { return (const Anno *)skb()->cb; }
++  Anno *anno()                                { return (Anno *)skb()->cb; }
++#else                         /* User-space and BSD kernel module */
++  const Anno *anno() const            { return (const Anno *)_cb; }
++  Anno *anno()                                { return (Anno *)_cb; }
++#endif
++  public:
++
++    enum PacketType {         // must agree with if_packet.h
++      HOST = 0, BROADCAST = 1, MULTICAST = 2, OTHERHOST = 3, OUTGOING = 4,
++      LOOPBACK = 5, FASTROUTE = 6
++    };
++
++    enum { ADDR_ANNO_SIZE = 16 };
++
++    uint8_t *addr_anno()                      { return anno()->addr.c; }
++    const uint8_t *addr_anno() const  { return anno()->addr.c; }
++    IPAddress dst_ip_anno() const;
++    void set_dst_ip_anno(IPAddress);
++    const IP6Address &dst_ip6_anno() const;
++    void set_dst_ip6_anno(const IP6Address &);
++
++    inline const Timestamp &timestamp_anno() const;
++    inline Timestamp &timestamp_anno();
++    inline void set_timestamp_anno(const Timestamp &);
++
++    inline net_device *device_anno() const;
++    inline void set_device_anno(net_device *);
++
++    inline PacketType packet_type_anno() const;
++    inline void set_packet_type_anno(PacketType);
++    
++#if CLICK_LINUXMODULE
++# ifdef HAVE_INT64_TYPES
++  uint64_t perfctr_anno() const               { return anno()->perfctr; }
++  void set_perfctr_anno(uint64_t pc)  { anno()->perfctr = pc; }
++# endif
++
++#else                 /* User-space and BSD kernel module */
++
++#if CLICK_NS
++  class SimPacketinfoWrapper {
++  public:
++    simclick_simpacketinfo _pinfo;
++    SimPacketinfoWrapper() {
++      // The uninitialized value for the simulator packet data can't be 
++      // all zeros (0 is a valid packet id) or random junk out of memory
++      // since the simulator will look at this info to see if the packet
++      // was originally generated by it. Accidental collisions with other
++      // packet IDs or bogus packet IDs can cause weird things to happen. So we
++      // set it to all -1 here to keep the simulator from getting confused.
++      memset(&_pinfo,-1,sizeof(_pinfo));
++    }
++  };
++  simclick_simpacketinfo*  get_sim_packetinfo() {
++    return &(_sim_packetinfo._pinfo);
++  }
++  void set_sim_packetinfo(simclick_simpacketinfo* pinfo) { 
++    _sim_packetinfo._pinfo = *pinfo;
++  }
++#endif
++#endif
++
++  enum { USER_ANNO_SIZE = 24,
++       USER_ANNO_US_SIZE = 12,
++       USER_ANNO_S_SIZE = 12,
++       USER_ANNO_U_SIZE = 6,
++       USER_ANNO_I_SIZE = 6 };
++  
++  uint8_t user_anno_c(int i) const    { return anno()->user.c[i]; }
++  void set_user_anno_c(int i, uint8_t v) { anno()->user.c[i] = v; }
++  uint16_t user_anno_us(int i) const  { return anno()->user.us[i]; }
++  void set_user_anno_us(int i, uint16_t v) { anno()->user.us[i] = v; }
++  int16_t user_anno_s(int i) const    { return anno()->user.us[i]; }
++  void set_user_anno_s(int i, int16_t v) { anno()->user.s[i] = v; }
++  uint32_t user_anno_u(int i) const   { return anno()->user.u[i]; }
++  void set_user_anno_u(int i, uint32_t v) { anno()->user.u[i] = v; }
++  int32_t user_anno_i(int i) const    { return anno()->user.i[i]; }
++  void set_user_anno_i(int i, int32_t v) { anno()->user.i[i] = v; }
++
++  const uint8_t *all_user_anno() const        { return &anno()->user.c[0]; }
++  uint8_t *all_user_anno()            { return &anno()->user.c[0]; }
++  const uint32_t *all_user_anno_u() const { return &anno()->user.u[0]; }
++  uint32_t *all_user_anno_u()         { return &anno()->user.u[0]; }
++  
++  void clear_annotations();
++  void copy_annotations(const Packet *);
++
++    inline const unsigned char *buffer_data() const CLICK_DEPRECATED;
++  
++  private:
++
++    // Anno must fit in sk_buff's char cb[48].
++    struct Anno {
++      union {
++          char ch[ADDR_ANNO_SIZE];
++          uint8_t c[ADDR_ANNO_SIZE];
++          uint32_t ip4;
++      } addr;
++    
++      union {
++          uint8_t c[USER_ANNO_SIZE];
++          uint16_t us[USER_ANNO_US_SIZE];
++          int16_t s[USER_ANNO_S_SIZE];
++          uint32_t u[USER_ANNO_U_SIZE];
++          int32_t i[USER_ANNO_I_SIZE];
++      } user;
++      // flag allocations: see packet_anno.hh
++    
++#if (CLICK_LINUXMODULE || CLICK_BSDMODULE) && defined(HAVE_INT64_TYPES)
++      uint64_t perfctr;
++#endif
++    };
++
++#if !CLICK_LINUXMODULE
++    // User-space and BSD kernel module implementations.
++    atomic_uint32_t _use_count;
++    Packet *_data_packet;
++    /* mimic Linux sk_buff */
++    unsigned char *_head; /* start of allocated buffer */
++    unsigned char *_data; /* where the packet starts */
++    unsigned char *_tail; /* one beyond end of packet */
++    unsigned char *_end;  /* one beyond end of allocated buffer */
++# if CLICK_USERLEVEL
++    void (*_destructor)(unsigned char *, size_t);
++# endif
++    unsigned char _cb[48];
++    unsigned char *_mac;
++    unsigned char *_nh;
++    unsigned char *_h;
++    PacketType _pkt_type;
++    Timestamp _timestamp;
++# if CLICK_BSDMODULE
++    struct mbuf *_m;
++# endif
++    Packet *_next;
++# if CLICK_NS
++    SimPacketinfoWrapper _sim_packetinfo;
++# endif
++#endif
++  
++  Packet();
++  Packet(const Packet &);
++  ~Packet();
++  Packet &operator=(const Packet &);
++
++#if !CLICK_LINUXMODULE
++  Packet(int, int, int)                       { }
++  static WritablePacket *make(int, int, int);
++  bool alloc_data(uint32_t, uint32_t, uint32_t);
++#endif
++#if CLICK_BSDMODULE
++  static void assimilate_mbuf(Packet *p);
++  void assimilate_mbuf();
++#endif
++
++  inline void shift_header_annotations(int32_t shift);
++  WritablePacket *expensive_uniqueify(int32_t extra_headroom, int32_t extra_tailroom, bool free_on_failure);
++  WritablePacket *expensive_push(uint32_t nbytes);
++  WritablePacket *expensive_put(uint32_t nbytes);
++  
++  friend class WritablePacket;
++
++};
++
++
++class WritablePacket : public Packet { public:
++  
++    inline unsigned char *data() const;
++    inline unsigned char *end_data() const;
++    inline unsigned char *buffer() const;
++    inline unsigned char *end_buffer() const;
++    inline unsigned char *mac_header() const;
++    inline click_ether *ether_header() const;
++    inline unsigned char *network_header() const;
++    inline click_ip *ip_header() const;
++    inline click_ip6 *ip6_header() const;
++    inline unsigned char *transport_header() const;
++    inline click_icmp *icmp_header() const;
++    inline click_tcp *tcp_header() const;
++    inline click_udp *udp_header() const;
++
++    inline unsigned char *buffer_data() const CLICK_DEPRECATED;
++    
++ private:
++
++    WritablePacket()                          { }
++    WritablePacket(const Packet &)            { }
++    ~WritablePacket()                         { }
++
++    friend class Packet;
++  
++};
++
++
++
++inline const unsigned char *
++Packet::data() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->data;
++#else
++    return _data;
++#endif
++}
++
++inline const unsigned char *
++Packet::end_data() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->tail;
++#else
++    return _tail;
++#endif
++}
++
++inline uint32_t
++Packet::length() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->len;
++#else
++    return _tail - _data;
++#endif
++}
++
++inline uint32_t
++Packet::headroom() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->data - skb()->head;
++#else
++    return _data - _head;
++#endif
++}
++
++inline uint32_t
++Packet::tailroom() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->end - skb()->tail;
++#else
++    return _end - _tail;
++#endif
++}
++
++inline const unsigned char *
++Packet::buffer() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->head;
++#else
++    return _head;
++#endif
++}
++
++inline const unsigned char *
++Packet::end_buffer() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->end;
++#else
++    return _end;
++#endif
++}
++
++inline uint32_t
++Packet::buffer_length() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->end - skb()->head;
++#else
++    return _end - _head;
++#endif
++}
++
++inline const unsigned char *
++Packet::buffer_data() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->head;
++#else
++    return _head;
++#endif
++}
++
++
++inline Packet *
++Packet::next() const
++{
++#if CLICK_LINUXMODULE
++    return (Packet *)(skb()->next);
++#else
++    return _next;
++#endif
++}
++
++inline Packet *&
++Packet::next()
++{
++#if CLICK_LINUXMODULE
++    return (Packet *&)(skb()->next);
++#else
++    return _next;
++#endif
++}
++
++inline void
++Packet::set_next(Packet *p)
++{
++#if CLICK_LINUXMODULE
++    skb()->next = p->skb();
++#else
++    _next = p;
++#endif
++}
++
++inline const unsigned char *
++Packet::mac_header() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->mac.raw;
++#else
++    return _mac;
++#endif
++}
++
++inline const unsigned char *
++Packet::network_header() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->nh.raw;
++#else
++    return _nh;
++#endif
++}
++
++inline const unsigned char *
++Packet::transport_header() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->h.raw;
++#else
++    return _h;
++#endif
++}
++
++inline const click_ether *
++Packet::ether_header() const
++{
++    return reinterpret_cast<const click_ether *>(mac_header());
++}
++
++inline const click_ip *
++Packet::ip_header() const
++{
++    return reinterpret_cast<const click_ip *>(network_header());
++}
++
++inline const click_ip6 *
++Packet::ip6_header() const
++{
++    return reinterpret_cast<const click_ip6 *>(network_header());
++}
++
++inline const click_icmp *
++Packet::icmp_header() const
++{
++    return reinterpret_cast<const click_icmp *>(transport_header());
++}
++
++inline const click_tcp *
++Packet::tcp_header() const
++{
++    return reinterpret_cast<const click_tcp *>(transport_header());
++}
++
++inline const click_udp *
++Packet::udp_header() const
++{
++    return reinterpret_cast<const click_udp *>(transport_header());
++}
++
++inline int
++Packet::mac_length() const
++{
++    return end_data() - mac_header();
++}
++
++inline int
++Packet::network_length() const
++{
++    return end_data() - network_header();
++}
++
++inline int
++Packet::transport_length() const
++{
++    return end_data() - transport_header();
++}
++
++inline const Timestamp &
++Packet::timestamp_anno() const
++{
++#if CLICK_LINUXMODULE
++# if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 13)
++    return *(const Timestamp *) &skb()->stamp;
++# else
++    return *(const Timestamp *) &skb()->tstamp;
++# endif
++#else
++    return _timestamp;
++#endif
++}
++
++inline Timestamp &
++Packet::timestamp_anno()
++{
++#if CLICK_LINUXMODULE
++# if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 13)
++    return *(Timestamp *) &skb()->stamp;
++# else
++    return *(Timestamp *) &skb()->tstamp;
++# endif
++#else
++    return _timestamp;
++#endif
++}
++
++inline void
++Packet::set_timestamp_anno(const Timestamp &timestamp)
++{
++#if CLICK_LINUXMODULE
++# if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 13)
++    memcpy(&skb()->stamp, &timestamp, 8);
++# else
++    skb_set_timestamp(skb(), &timestamp.timeval());
++# endif
++#else
++    _timestamp = timestamp;
++#endif
++}
++
++inline net_device *
++Packet::device_anno() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->dev;
++#elif CLICK_BSDMODULE
++    if (m())
++      return m()->m_pkthdr.rcvif;
++    else
++      return 0;
++#else
++    return 0;
++#endif
++}
++
++inline void
++Packet::set_device_anno(net_device *dev)
++{
++#if CLICK_LINUXMODULE
++    skb()->dev = dev;
++#elif CLICK_BSDMODULE
++    if (m())
++      m()->m_pkthdr.rcvif = dev;
++#else
++    (void) dev;
++#endif
++}
++
++inline Packet::PacketType
++Packet::packet_type_anno() const
++{
++#if CLICK_LINUXMODULE
++    return (PacketType)(skb()->pkt_type & PACKET_TYPE_MASK);
++#else
++    return _pkt_type;
++#endif
++}
++
++inline void
++Packet::set_packet_type_anno(PacketType p)
++{
++#if CLICK_LINUXMODULE
++    skb()->pkt_type = (skb()->pkt_type & PACKET_CLEAN) | p;
++#else
++    _pkt_type = p;
++#endif
++}
++
++inline WritablePacket *
++Packet::make(uint32_t len)
++{
++  return make(DEFAULT_HEADROOM, (const unsigned char *)0, len, 0);
++}
++
++inline WritablePacket *
++Packet::make(const char *s, uint32_t len)
++{
++  return make(DEFAULT_HEADROOM, (const unsigned char *)s, len, 0);
++}
++
++inline WritablePacket *
++Packet::make(const unsigned char *s, uint32_t len)
++{
++  return make(DEFAULT_HEADROOM, (const unsigned char *)s, len, 0);
++}
++
++#if CLICK_LINUXMODULE
++inline Packet *
++Packet::make(struct sk_buff *skb)
++{
++  if (atomic_read(&skb->users) == 1) {
++    skb_orphan(skb);
++    return reinterpret_cast<Packet *>(skb);
++  } else {
++    Packet *p = reinterpret_cast<Packet *>(skb_clone(skb, GFP_ATOMIC));
++    atomic_dec(&skb->users);
++    return p;
++  }
++}
++#endif
++
++
++inline void
++Packet::kill()
++{
++#if CLICK_LINUXMODULE
++    struct sk_buff *b = skb();
++    b->next = b->prev = 0;
++# if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 15)
++    b->list = 0;
++# endif
++    skbmgr_recycle_skbs(b);
++#else
++    if (_use_count.dec_and_test())
++      delete this;
++#endif
++}
++
++
++#if CLICK_BSDMODULE           /* BSD kernel module */
++inline void
++Packet::assimilate_mbuf(Packet *p)
++{
++  struct mbuf *m = p->m();
++
++  if (!m) return;
++
++  p->_head = (unsigned char *)
++           (m->m_flags & M_EXT    ? m->m_ext.ext_buf :
++            m->m_flags & M_PKTHDR ? m->m_pktdat :
++                                    m->m_dat);
++  p->_data = (unsigned char *)m->m_data;
++  p->_tail = (unsigned char *)(m->m_data + m->m_len);
++  p->_end = p->_head + (
++              m->m_flags & M_EXT    ? MCLBYTES :
++              m->m_flags & M_PKTHDR ? MHLEN :
++                                      MLEN);
++}
++
++inline void
++Packet::assimilate_mbuf()
++{
++  assimilate_mbuf(this);
++}
++
++inline Packet *
++Packet::make(struct mbuf *m)
++{
++  if (!(m->m_flags & M_PKTHDR))
++    panic("trying to construct Packet from a non-packet mbuf");
++
++  Packet *p = new Packet;
++  if (m->m_pkthdr.len != m->m_len) {
++    /* click needs contiguous data */
++    // click_chatter("m_pulldown, Click needs contiguous data");
++
++    if (m_pulldown(m, 0, m->m_pkthdr.len, NULL) == NULL)
++      panic("m_pulldown failed");
++  }
++  p->_m = m;
++  assimilate_mbuf(p);
++
++  return p;
++}
++#endif
++
++inline bool
++Packet::shared() const
++{
++#if CLICK_LINUXMODULE
++    return skb_cloned(const_cast<struct sk_buff *>(skb()));
++#else
++    return (_data_packet || _use_count > 1);
++#endif
++}
++
++inline WritablePacket *
++Packet::uniqueify()
++{
++  if (!shared())
++    return static_cast<WritablePacket *>(this);
++  else
++    return expensive_uniqueify(0, 0, true);
++}
++
++inline WritablePacket *
++Packet::push(uint32_t nbytes)
++{
++  if (headroom() >= nbytes && !shared()) {
++    WritablePacket *q = (WritablePacket *)this;
++#if CLICK_LINUXMODULE /* Linux kernel module */
++    __skb_push(q->skb(), nbytes);
++#else                         /* User-space and BSD kernel module */
++    q->_data -= nbytes;
++# if CLICK_BSDMODULE
++    q->m()->m_data -= nbytes;
++    q->m()->m_len += nbytes;
++    q->m()->m_pkthdr.len += nbytes;
++# endif
++#endif
++    return q;
++  } else
++    return expensive_push(nbytes);
++}
++
++inline Packet *
++Packet::nonunique_push(uint32_t nbytes)
++{
++  if (headroom() >= nbytes) {
++#if CLICK_LINUXMODULE /* Linux kernel module */
++    __skb_push(skb(), nbytes);
++#else                         /* User-space and BSD kernel module */
++    _data -= nbytes;
++# if CLICK_BSDMODULE
++    m()->m_data -= nbytes;
++    m()->m_len += nbytes;
++    m()->m_pkthdr.len += nbytes;
++# endif
++#endif
++    return this;
++  } else
++    return expensive_push(nbytes);
++}
++
++/* Get rid of some bytes at the start of a packet */
++inline void
++Packet::pull(uint32_t nbytes)
++{
++  if (nbytes > length()) {
++    click_chatter("Packet::pull %d > length %d\n", nbytes, length());
++    nbytes = length();
++  }
++#if CLICK_LINUXMODULE /* Linux kernel module */
++  __skb_pull(skb(), nbytes);
++#else                         /* User-space and BSD kernel module */
++  _data += nbytes;
++# if CLICK_BSDMODULE
++  m()->m_data += nbytes;
++  m()->m_len -= nbytes;
++  m()->m_pkthdr.len -= nbytes;
++# endif
++#endif
++}
++
++inline WritablePacket *
++Packet::put(uint32_t nbytes)
++{
++  if (tailroom() >= nbytes && !shared()) {
++    WritablePacket *q = (WritablePacket *)this;
++#if CLICK_LINUXMODULE /* Linux kernel module */
++    __skb_put(q->skb(), nbytes);
++#else                         /* User-space and BSD kernel module */
++    q->_tail += nbytes;
++# if CLICK_BSDMODULE
++    q->m()->m_len += nbytes;
++    q->m()->m_pkthdr.len += nbytes;
++# endif
++#endif
++    return q;
++  } else
++    return expensive_put(nbytes);
++}
++
++inline Packet *
++Packet::nonunique_put(uint32_t nbytes)
++{
++  if (tailroom() >= nbytes) {
++#if CLICK_LINUXMODULE /* Linux kernel module */
++    __skb_put(skb(), nbytes);
++#else                         /* User-space and BSD kernel module */
++    _tail += nbytes;
++# if CLICK_BSDMODULE
++    m()->m_len += nbytes;
++    m()->m_pkthdr.len += nbytes;
++# endif
++#endif
++    return this;
++  } else
++    return expensive_put(nbytes);
++}
++
++/* Get rid of some bytes at the end of a packet */
++inline void
++Packet::take(uint32_t nbytes)
++{
++  if (nbytes > length()) {
++    click_chatter("Packet::take %d > length %d\n", nbytes, length());
++    nbytes = length();
++  }
++#if CLICK_LINUXMODULE /* Linux kernel module */
++  skb()->tail -= nbytes;
++  skb()->len -= nbytes;
++#else                         /* User-space and BSD kernel module */
++  _tail -= nbytes;
++# if CLICK_BSDMODULE
++  m()->m_len -= nbytes;
++  m()->m_pkthdr.len -= nbytes;
++# endif
++#endif
++}
++
++#if CLICK_USERLEVEL
++inline void
++Packet::shrink_data(const unsigned char *d, uint32_t length)
++{
++  assert(_data_packet);
++  if (d >= _head && d + length >= d && d + length <= _end) {
++    _head = _data = const_cast<unsigned char *>(d);
++    _tail = _end = const_cast<unsigned char *>(d + length);
++  }
++}
++
++inline void
++Packet::change_headroom_and_length(uint32_t headroom, uint32_t length)
++{
++  if (headroom + length <= buffer_length()) {
++    _data = _head + headroom;
++    _tail = _data + length;
++  }
++}
++#endif
++
++inline const IP6Address &
++Packet::dst_ip6_anno() const
++{
++    return *reinterpret_cast<const IP6Address *>(anno()->addr.ch);
++}
++
++inline void
++Packet::set_dst_ip6_anno(const IP6Address &a)
++{
++    memcpy(anno()->addr.ch, &a, 16);
++}
++
++inline IPAddress 
++Packet::dst_ip_anno() const
++{
++    return IPAddress(anno()->addr.ip4);
++}
++
++inline void 
++Packet::set_dst_ip_anno(IPAddress a)
++{ 
++    anno()->addr.ip4 = a.addr(); 
++}
++
++inline void
++Packet::set_mac_header(const unsigned char *h)
++{
++#if CLICK_LINUXMODULE /* Linux kernel module */
++    skb()->mac.raw = const_cast<unsigned char *>(h);
++#else                         /* User-space and BSD kernel module */
++    _mac = const_cast<unsigned char *>(h);
++#endif
++}
++
++inline void
++Packet::set_mac_header(const unsigned char *h, uint32_t len)
++{
++#if CLICK_LINUXMODULE /* Linux kernel module */
++    skb()->mac.raw = const_cast<unsigned char *>(h);
++    skb()->nh.raw = const_cast<unsigned char *>(h) + len;
++#else                         /* User-space and BSD kernel module */
++    _mac = const_cast<unsigned char *>(h);
++    _nh = const_cast<unsigned char *>(h) + len;
++#endif
++}
++
++inline void
++Packet::set_ether_header(const click_ether *h)
++{
++    set_mac_header(reinterpret_cast<const unsigned char *>(h), 14);
++}
++
++inline WritablePacket *
++Packet::push_mac_header(uint32_t nbytes)
++{
++    WritablePacket *q;
++    if (headroom() >= nbytes && !shared()) {
++      q = (WritablePacket *)this;
++#if CLICK_LINUXMODULE /* Linux kernel module */
++      __skb_push(q->skb(), nbytes);
++#else                         /* User-space and BSD kernel module */
++      q->_data -= nbytes;
++# if CLICK_BSDMODULE
++      q->m()->m_data -= nbytes;
++      q->m()->m_len += nbytes;
++      q->m()->m_pkthdr.len += nbytes;
++# endif
++#endif
++    } else if ((q = expensive_push(nbytes)))
++      /* nada */;
++    else
++      return 0;
++    q->set_mac_header(q->data(), nbytes);
++    return q;
++}
++
++inline void
++Packet::set_network_header(const unsigned char *h, uint32_t len)
++{
++#if CLICK_LINUXMODULE /* Linux kernel module */
++    skb()->nh.raw = const_cast<unsigned char *>(h);
++    skb()->h.raw = const_cast<unsigned char *>(h) + len;
++#else                         /* User-space and BSD kernel module */
++    _nh = const_cast<unsigned char *>(h);
++    _h = const_cast<unsigned char *>(h) + len;
++#endif
++}
++
++inline void
++Packet::set_network_header_length(uint32_t len)
++{
++#if CLICK_LINUXMODULE /* Linux kernel module */
++    skb()->h.raw = skb()->nh.raw + len;
++#else                         /* User-space and BSD kernel module */
++    _h = _nh + len;
++#endif
++}
++
++inline void
++Packet::set_ip_header(const click_ip *iph, uint32_t len)
++{
++    set_network_header(reinterpret_cast<const unsigned char *>(iph), len);
++}
++
++inline void
++Packet::set_ip6_header(const click_ip6 *ip6h, uint32_t len)
++{
++    set_network_header(reinterpret_cast<const unsigned char *>(ip6h), len);
++}
++
++inline void
++Packet::set_ip6_header(const click_ip6 *ip6h)
++{
++    set_ip6_header(ip6h, 40);
++}
++
++inline int
++Packet::mac_header_offset() const
++{
++    return mac_header() - data();
++}
++
++inline uint32_t
++Packet::mac_header_length() const
++{
++    return network_header() - mac_header();
++}
++
++inline int
++Packet::network_header_offset() const
++{
++    return network_header() - data();
++}
++
++inline uint32_t
++Packet::network_header_length() const
++{
++    return transport_header() - network_header();
++}
++
++inline int
++Packet::ip_header_offset() const
++{
++    return network_header_offset();
++}
++
++inline uint32_t
++Packet::ip_header_length() const
++{
++    return network_header_length();
++}
++
++inline int
++Packet::ip6_header_offset() const
++{
++    return network_header_offset();
++}
++
++inline uint32_t
++Packet::ip6_header_length() const
++{
++    return network_header_length();
++}
++
++inline int
++Packet::transport_header_offset() const
++{
++    return transport_header() - data();
++}
++
++inline void
++Packet::clear_annotations()
++{
++  memset(anno(), '\0', sizeof(Anno));
++  set_packet_type_anno(HOST);
++  set_device_anno(0);
++  set_timestamp_anno(Timestamp());
++  set_mac_header(0);
++  set_network_header(0, 0);
++  set_next(0);
++}
++
++inline void
++Packet::copy_annotations(const Packet *p)
++{
++  *anno() = *p->anno();
++  set_packet_type_anno(p->packet_type_anno());
++  set_device_anno(p->device_anno());
++  set_timestamp_anno(p->timestamp_anno());
++}
++
++inline void
++Packet::shift_header_annotations(int32_t shift)
++{
++#if CLICK_USERLEVEL || CLICK_BSDMODULE
++  _mac += (_mac ? shift : 0);
++  _nh += (_nh ? shift : 0);
++  _h += (_h ? shift : 0);
++#else
++  struct sk_buff *mskb = skb();
++  mskb->mac.raw += (mskb->mac.raw ? shift : 0);
++  mskb->nh.raw += (mskb->nh.raw ? shift : 0);
++  mskb->h.raw += (mskb->h.raw ? shift : 0);
++#endif
++}
++
++
++inline unsigned char *
++WritablePacket::data() const
++{
++    return const_cast<unsigned char *>(Packet::data());
++}
++
++inline unsigned char *
++WritablePacket::end_data() const
++{
++    return const_cast<unsigned char *>(Packet::end_data());
++}
++
++inline unsigned char *
++WritablePacket::buffer() const
++{
++    return const_cast<unsigned char *>(Packet::buffer());
++}
++
++inline unsigned char *
++WritablePacket::end_buffer() const
++{
++    return const_cast<unsigned char *>(Packet::end_buffer());
++}
++
++inline unsigned char *
++WritablePacket::buffer_data() const
++{
++    return const_cast<unsigned char *>(Packet::buffer());
++}
++
++inline unsigned char *
++WritablePacket::mac_header() const
++{
++    return const_cast<unsigned char *>(Packet::mac_header());
++}
++
++inline unsigned char *
++WritablePacket::network_header() const
++{
++    return const_cast<unsigned char *>(Packet::network_header());
++}
++
++inline unsigned char *
++WritablePacket::transport_header() const
++{
++    return const_cast<unsigned char *>(Packet::transport_header());
++}
++
++inline click_ether *
++WritablePacket::ether_header() const
++{
++    return const_cast<click_ether *>(Packet::ether_header());
++}
++
++inline click_ip *
++WritablePacket::ip_header() const
++{
++    return const_cast<click_ip *>(Packet::ip_header());
++}
++
++inline click_ip6 *
++WritablePacket::ip6_header() const
++{
++    return const_cast<click_ip6 *>(Packet::ip6_header());
++}
++
++inline click_icmp *
++WritablePacket::icmp_header() const
++{
++    return const_cast<click_icmp *>(Packet::icmp_header());
++}
++
++inline click_tcp *
++WritablePacket::tcp_header() const
++{
++    return const_cast<click_tcp *>(Packet::tcp_header());
++}
++
++inline click_udp *
++WritablePacket::udp_header() const
++{
++    return const_cast<click_udp *>(Packet::udp_header());
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/include/click/pathvars.h click-1.6.0-27/include/click/pathvars.h
+--- click-1.6.0/include/click/pathvars.h       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/include/click/pathvars.h    2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,39 @@
++/* include/click/pathvars.h.  Generated from pathvars.h.in by configure.  */
++/* Process this file with configure to produce pathvars.h. -*- mode: c -*- */
++#ifndef CLICK_PATHVARS_H
++#define CLICK_PATHVARS_H
++
++/* Directory for binaries. */
++#define CLICK_BINDIR "/d/click/click-1.6.0-27/inst/bin"
++
++/* Directory for packages and kernel module. */
++#define CLICK_LIBDIR "/d/click/click-1.6.0-27/inst/lib"
++
++/* Directory for shared files. */
++#define CLICK_DATADIR "/d/click/click-1.6.0-27/inst/share/click"
++
++/* FreeBSD kernel include directory. */
++#define FREEBSD_INCLUDEDIR "/usr/include"
++
++/* Define if the BSD kernel module driver was compiled. */
++/* #undef HAVE_BSDMODULE_DRIVER */
++
++/* Define if the Click kernel module should provide clickfs. */
++#define HAVE_CLICKFS 1
++
++/* Define if the expat library is available. */
++#define HAVE_EXPAT 1
++
++/* Define if the Click linuxmodule is compiled for a 2.6 kernel. */
++#define HAVE_LINUXMODULE_2_6 1
++
++/* Define if the Linux kernel module driver was compiled. */
++#define HAVE_LINUXMODULE_DRIVER 1
++
++/* Define if the user-level driver was compiled. */
++#define HAVE_USERLEVEL_DRIVER 1
++
++/* Directory containing Linux sources. */
++#define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++
++#endif
+diff -Nurb click-1.6.0/include/clicknet/ip.h click-1.6.0-27/include/clicknet/ip.h
+--- click-1.6.0/include/clicknet/ip.h  2007-07-16 19:47:50.000000000 -0400
++++ click-1.6.0-27/include/clicknet/ip.h       2009-01-19 16:01:43.000000000 -0500
+@@ -5,6 +5,7 @@
+ #include <click/cxxprotect.h>
+ CLICK_CXX_PROTECT
+ #if CLICK_LINUXMODULE
++#include <linux/autoconf.h>
+ # include <net/checksum.h>
+ # include <linux/in.h>
+ #else
+diff -Nurb click-1.6.0/include/clicknet/ip.h.orig click-1.6.0-27/include/clicknet/ip.h.orig
+--- click-1.6.0/include/clicknet/ip.h.orig     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/include/clicknet/ip.h.orig  2007-07-16 19:47:50.000000000 -0400
+@@ -0,0 +1,156 @@
++/* -*- mode: c; c-basic-offset: 4 -*- */
++#ifndef CLICKNET_IP_H
++#define CLICKNET_IP_H
++/* get struct in_addr */
++#include <click/cxxprotect.h>
++CLICK_CXX_PROTECT
++#if CLICK_LINUXMODULE
++# include <net/checksum.h>
++# include <linux/in.h>
++#else
++# include <sys/types.h>
++# include <netinet/in.h>
++#endif
++
++/*
++ * <clicknet/ip.h> -- IP header definitions, based on one of the BSDs.
++ *
++ * Relevant RFCs include:
++ *   RFC791   Internet Protocol
++ *   RFC3168  The Addition of Explicit Congestion Notification (ECN) to IP
++ */
++
++struct click_ip {
++#if CLICK_BYTE_ORDER == CLICK_BIG_ENDIAN
++    unsigned  ip_v : 4;               /* 0     version == 4                */
++    unsigned  ip_hl : 4;              /*       header length               */
++#elif CLICK_BYTE_ORDER == CLICK_LITTLE_ENDIAN
++    unsigned  ip_hl : 4;              /* 0     header length               */
++    unsigned  ip_v : 4;               /*       version == 4                */
++#else
++#   error "unknown byte order"
++#endif
++    uint8_t   ip_tos;                 /* 1     type of service             */
++#define IP_DSCPMASK   0xFC            /*         diffserv code point       */
++#define IP_ECNMASK    0x03            /*         ECN code point            */
++#define   IP_ECN_NOT_ECT  0x00                /*         not ECN capable transport */
++#define   IP_ECN_ECT1   0x01          /*         ECN capable transport     */
++#define   IP_ECN_ECT2   0x02          /*         ECN capable transport     */
++#define   IP_ECN_CE     0x03          /*         ECN congestion exp'd      */
++    uint16_t  ip_len;                 /* 2-3   total length                */
++    uint16_t  ip_id;                  /* 4-5   identification              */
++    uint16_t  ip_off;                 /* 6-7   fragment offset field       */
++#define       IP_RF           0x8000          /*         reserved fragment flag    */
++#define       IP_DF           0x4000          /*         don't fragment flag       */
++#define       IP_MF           0x2000          /*         more fragments flag       */
++#define       IP_OFFMASK      0X1FFF          /*         mask for fragmenting bits */
++    uint8_t   ip_ttl;                 /* 8     time to live                */
++    uint8_t   ip_p;                   /* 9     protocol                    */
++    uint16_t  ip_sum;                 /* 10-11 checksum                    */
++    struct in_addr ip_src;            /* 12-15 source address              */
++    struct in_addr ip_dst;            /* 16-19 destination address         */
++};
++
++/* ip_protocol */
++#define IP_PROTO_ICMP         1
++#define IP_PROTO_IGMP         2
++#define IP_PROTO_GGP          3
++#define IP_PROTO_IPIP         4
++#define IP_PROTO_ST           5
++#define IP_PROTO_TCP          6
++#define IP_PROTO_UCL          7
++#define IP_PROTO_EGP          8
++#define IP_PROTO_IGP          9
++#define IP_PROTO_BBN          10
++#define IP_PROTO_NVPII                11
++#define IP_PROTO_PUP          12
++#define IP_PROTO_ARGUS                13
++#define IP_PROTO_EMCON                14
++#define IP_PROTO_XNET         15
++#define IP_PROTO_CHAOS                16
++#define IP_PROTO_UDP          17
++#define IP_PROTO_MUX          18
++#define IP_PROTO_DCN          19
++#define IP_PROTO_HMP          20
++#define IP_PROTO_PRM          21
++#define IP_PROTO_XNS          22
++#define IP_PROTO_TRUNK1               23
++#define IP_PROTO_TRUNK2               24
++#define IP_PROTO_LEAF1                25
++#define IP_PROTO_LEAF2                26
++#define IP_PROTO_RDP          27
++#define IP_PROTO_IRTP         28
++#define IP_PROTO_ISOTP4               29
++#define IP_PROTO_NETBLT               30
++#define IP_PROTO_MFENSP               31
++#define IP_PROTO_MERIT                32
++#define IP_PROTO_DCCP         33
++#define IP_PROTO_ICMP6          58
++#define IP_PROTO_CFTP         62
++#define IP_PROTO_SATNET               64
++#define IP_PROTO_MITSUBNET    65
++#define IP_PROTO_RVD          66
++#define IP_PROTO_IPPC         67
++#define IP_PROTO_SATMON               69
++#define IP_PROTO_IPCV         71
++#define IP_PROTO_BRSATMON     76
++#define IP_PROTO_WBMON                78
++#define IP_PROTO_WBEXPAK      79
++#define IP_PROTO_SCTP         132
++
++#define IP_PROTO_NONE         257
++#define IP_PROTO_TRANSP               258
++#define IP_PROTO_TCP_OR_UDP   256
++#define IP_PROTO_PAYLOAD      259
++
++#define       IPOPT_EOL               0       /* end of option list */
++#define       IPOPT_NOP               1       /* no operation */
++#define IPOPT_RR              7       /* record packet route */
++#define IPOPT_TS              68      /* timestamp */
++#define IPOPT_SECURITY                130     /* provide s,c,h,tcc */
++#define IPOPT_LSRR            131     /* loose source route */
++#define IPOPT_SATID           136     /* satnet id */
++#define IPOPT_SSRR            137     /* strict source route */
++#define IPOPT_RA              148     /* router alert */
++
++#define IP_ISFRAG(iph)          (((iph)->ip_off & htons(IP_MF | IP_OFFMASK)) != 0)
++#define IP_FIRSTFRAG(iph) (((iph)->ip_off & htons(IP_OFFMASK)) == 0)
++
++
++/* checksum functions */
++
++#if !CLICK_LINUXMODULE
++uint16_t click_in_cksum(const unsigned char *addr, int len);
++uint16_t click_in_cksum_pseudohdr_raw(uint32_t csum, uint32_t src, uint32_t dst, int proto, int packet_len);
++#else
++# define click_in_cksum(addr, len) \
++              ip_compute_csum((unsigned char *)(addr), (len))
++# define click_in_cksum_pseudohdr_raw(csum, src, dst, proto, transport_len) \
++              csum_tcpudp_magic((src), (dst), (transport_len), (proto), ~(csum) & 0xFFFF)
++#endif
++uint16_t click_in_cksum_pseudohdr_hard(uint32_t csum, const struct click_ip *iph, int packet_len);
++
++/* use if you're not sure whether there are source routing options */
++static inline uint16_t
++click_in_cksum_pseudohdr(uint32_t csum, const struct click_ip *iph,
++                       int transport_len)
++{
++    if (iph->ip_hl == 5)
++      return click_in_cksum_pseudohdr_raw(csum, iph->ip_src.s_addr, iph->ip_dst.s_addr, iph->ip_p, transport_len);
++    else
++      return click_in_cksum_pseudohdr_hard(csum, iph, transport_len);
++}
++
++static inline void
++click_update_in_cksum(uint16_t *csum, uint16_t old_hw, uint16_t new_hw)
++{
++    /* incrementally update IP checksum according to RFC1624:
++       new_sum = ~(~old_sum + ~old_halfword + new_halfword) */
++    uint32_t sum = (~*csum & 0xFFFF) + (~old_hw & 0xFFFF) + new_hw;
++    sum = (sum & 0xFFFF) + (sum >> 16);
++    *csum = ~(sum + (sum >> 16));
++}
++
++CLICK_CXX_UNPROTECT
++#include <click/cxxunprotect.h>
++#endif
+Files click-1.6.0/inst/bin/click and click-1.6.0-27/inst/bin/click differ
+Files click-1.6.0/inst/bin/click-align and click-1.6.0-27/inst/bin/click-align differ
+diff -Nurb click-1.6.0/inst/bin/click-buildtool click-1.6.0-27/inst/bin/click-buildtool
+--- click-1.6.0/inst/bin/click-buildtool       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/bin/click-buildtool    2009-02-05 10:20:40.000000000 -0500
+@@ -0,0 +1,1326 @@
++#! /bin/sh
++
++# click-buildtool -- build tools for Click
++# Eddie Kohler
++#
++# Copyright (c) 2000-2001 Massachusetts Institute of Technology
++# Copyright (c) 2000-2006 Mazu Networks, Inc.
++# Copyright (c) 2001-2003 International Computer Science Institute
++# Copyright (c) 2004-2007 Regents of the University of California
++#
++# Permission is hereby granted, free of charge, to any person obtaining a
++# copy of this software and associated documentation files (the "Software"),
++# to deal in the Software without restriction, subject to the conditions
++# listed in the Click LICENSE file. These conditions include: you must
++# preserve this copyright notice, and you cannot mention the copyright
++# holders in advertising related to the Software without their permission.
++# The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++# notice is a summary of the Click LICENSE file; the license in that file is
++# legally binding.
++
++prefix=/d/click/click-1.6.0-27/inst
++exec_prefix=/d/click/click-1.6.0-27/inst
++bindir=/d/click/click-1.6.0-27/inst/bin
++datarootdir=/d/click/click-1.6.0-27/inst/share
++datadir=/d/click/click-1.6.0-27/inst/share
++clickdatadir=/d/click/click-1.6.0-27/inst/share/click
++LINUXMODULE_2_6=1
++gmake=make
++
++verbose=""
++elem2=""
++default_provisions="i686 i386 i586 int64 linux linux_2_6 pcap"
++driver_provisions=" userlevel linuxmodule"
++
++trap "exit 1" HUP
++
++# find a good version of awk
++if test -x /usr/bin/gawk; then
++    awk=gawk
++elif test -x /usr/bin/nawk; then
++    awk=nawk
++else
++    awk=awk
++fi
++
++echo_n () {
++      # suns can't echo -n, and Mac OS X can't echo "x\c"
++      echo "$@" | tr -d '
++'
++}
++
++
++############
++# FINDELEM #
++############
++
++findelem_usage () {
++    echo "Usage: click-buildtool findelem [-a] [-V] [-p PREFIX] < [FILES AND DIRECTORIES]
++Try 'click-buildtool findelem --help' for more information." 1>&2
++    exit 1
++}
++
++elementmap_provisions () {
++    elementmap="$1"
++    grep "^<elementmap \|^<entry " <"$elementmap" | $awk '/ name="([^"]*)"/ {
++  sub(/.* name="/, "", $0);
++  sub(/".*/, "", $0);
++  prov[$0] = 1;
++}
++/ provides="([^"]*)"/ {
++  sub(/.* provides="/, "", $0);
++  sub(/".*/, "", $0);
++  split($0, d, / +/);
++  for (j in d) prov[d[j]] = 1;
++}
++END {
++  # delete references to drivers
++  delete prov["userlevel"]; delete prov["linuxmodule"]; 
++  delete prov["bsdmodule"]; delete prov["ns"];
++  for (j in prov) print j;
++}'
++}
++
++findelem () {
++    pfx=
++    all=
++    provisions=
++    filenames=
++    standards=
++    unprovisions='false 0'
++    while [ x"$1" != x ]; do
++    case $1 in
++    -S|--s|--st|--sta|--stan|--stand|--standa|--standar|--standard|--standards)
++      standards=1; shift 1;;
++    -p|--pre|--pref|--prefi|--prefix)
++      if test $# -lt 2; then findelem_usage; fi
++      shift 1; pfx="$1/"; shift 1;;
++    -p*)
++      pfx="`echo "$1" | sed 's/^-p//'`"/; shift 1;;
++    --pre=*|--pref=*|--prefi=*|--prefix=*)
++      pfx="`echo "$1" | sed 's/^[^=]*=//'`"/; shift 1;;
++    -f|--filenames)
++      filenames=f; shift 1;;
++    -F|--filename-|--filename-p|--filename-pa|--filename-pai|--filename-pair|--filename-pairs)
++      filenames=F; shift 1;;
++    -V|--verb|--verbo|--verbos|--verbose)
++      verbose=1; shift 1;;
++    -a|--a|--al|--all)
++      all=1; shift 1;;
++    -r|--pro|--prov|--provi|--provid|--provide)
++      if test $# -lt 2; then findelem_usage; fi
++      shift 1; provisions="$1
++$provisions"; shift 1;;
++    -r*)
++      provisions="`echo "$1" | sed 's/^-r//'`
++$provisions"; shift 1;;
++    --pro=*|--prov=*|--provi=*|--provid=*|--provide=*)
++      provisions="`echo "$1" | sed 's/^[^=]*=//'`
++$provisions"; shift 1;;
++    -x|--u|--un|--unp|--unpr|--unpro|--unprov|--unprovi|--unprovid|--unprovide)
++      if test $# -lt 2; then findelem_usage; fi
++      shift 1; unprovisions="$1
++$unprovisions"; shift 1;;
++    -x*)
++      unprovisions="`echo "$1" | sed 's/^-x//'`
++$unprovisions"; shift 1;;
++    --u=*|--un=*|--unp=*|--unpr=*|--unpro=*|--unprov=*|--unprovi=*|--unprovid=*|--unprovide=*)
++      unprovisions="`echo "$1" | sed 's/^[^=]*=//'`
++$unprovisions"; shift 1;;
++    -e|--e|--el|--ele|--elem|--eleme|--elemen|--element|--elementm|--elementma|--elementmap)
++      if test $# -lt 2; then findelem_usage; fi
++      shift 1; provisions="`elementmap_provisions "$1"`
++$provisions"; shift 1;;
++    -e*)
++      emap="`echo "$1" | sed 's/^-e//'`"
++      provisions="`elementmap_provisions "$emap"`
++$provisions"; shift 1;;
++    --e=*|--el=*|--ele=*|--elem=*|--eleme=*|--elemen=*|--element=*|--elementm=*|--elementma=*|--elementmap=*)
++      emap="`echo '$1' | sed 's/^[^=]*=//'`"
++      provisions="`elementmap_provisions "$emap"`
++$provisions"; shift 1;;
++    -P|--pa|--pac|--pack|--packa|--packag|--package)
++      provisions="`elementmap_provisions "${clickdatadir}/elementmap.xml"`
++$provisions"; shift 1;;
++    -h|--h|--he|--hel|--help)
++      cat <<'EOF' 1>&2
++'Click-buildtool findelem' locates valid Click element source code. It starts
++with a collection of source code, then eliminates files whose requirements
++are not available until reaching a stable set of sources. It expects a list of
++files and directories on standard input. Directories are searched for .cc/.c
++source files. Only files containing EXPORT_ELEMENT() or ELEMENT_PROVIDES() are
++considered. The initial list of available requirements is the list of
++requirements specified with '-r', plus the list of EXPORT_ELEMENT() and
++ELEMENT_PROVIDES() keywords.
++
++Usage: click-buildtool findelem [OPTIONS] < [FILES AND DIRECTORIES]
++
++Options:
++  -a, --all                  Include all subdirectories of 'elements' rather
++                             than reading standard input, and pretend all
++                             requirements are available (except for '-x').
++  -V, --verbose              Print more information about dependency checking.
++  -p, --prefix PREFIX        Prepend PREFIX to every file and/or directory.
++  -r, --provide REQ          Provide requirement(s) in REQ.
++  -e, --elementmap EMAP      Provide requirement(s) from EMAP.
++  -P, --package              Provide requirement(s) from default elementmap.
++  -S, --standards            Mark standard elements as available.
++  -x, --unprovide REQ        Mark requirement(s) REQ as unavailable.
++  -f, --filenames            Output filenames only.
++  -F, --filename-pairs       Output "sourcefile:headerfile" pairs for elements.
++  -h, --help                 Print this message and exit.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++      exit 0;;
++    *)
++      findelem_usage;;
++    esac
++    done
++
++    if test -n "$verbose" -a -n "$pfx"; then
++      echo "Prefix: $pfx" 1>&2
++    fi
++
++    # add defaults to provisions
++    provisions="$provisions $default_provisions"
++
++    # add standards to provisions if necessary
++    if test "x$standards" != x; then
++      provisions="$provisions AddressInfo AlignmentInfo ErrorElement PortInfo ScheduleInfo Storage"
++    fi
++
++    # expand provisions and unprovisions: require one per line
++    provisions=`echo "$provisions" | tr -s ' \011\015\014\013' '\012'`
++    unprovisions=`echo "$unprovisions" | tr -s ' \011\015\014\013' '\012'`
++    if test -n "$verbose" -a -n "$provisions"; then
++      echo 1>&2
++      echo "Provisions: $provisions" 1>&2
++    fi
++    if test -n "$verbose" -a -n "$unprovisions"; then
++      echo 1>&2
++      echo "Unprovisions: $unprovisions" 1>&2
++    fi
++
++    # expand list of files
++    if test -n "$all"; then
++      fdir=${pfx}
++      test -d ${pfx}elements && fdir=${pfx}elements
++      first_files=`cd $fdir >/dev/null && ls`
++      bad_first_files=`echo "$first_files
++$unprovisions" | sort | uniq -d`
++      first_files=`echo "$first_files
++$bad_first_files" | sort | uniq -u`
++    else
++      first_files=`cat`
++    fi
++
++    files=""
++    for i in $first_files; do
++      ppfx="$pfx"
++      if test -d "${pfx}elements/$i" && echo "$i" | grep -v '^\.' >/dev/null; then
++          ppfx="${pfx}elements/"
++      fi
++      if test -d "${ppfx}$i"; then
++          files="$files
++"`find ${ppfx}$i -follow \( -name \*.cc -o -name \*.c \) -print | grep -v '/[.,][^/]*$'`
++      elif test -r "${ppfx}$i"; then
++          files="$files
++${ppfx}$i"
++      fi
++    done
++    files=`echo "$files" | sort | uniq | grep .`
++
++    # die if no files
++    if test -z "$files"; then
++      echo "no files found" 1>&2
++      exit 1
++    fi
++
++    # if '$all', then accept all dependencies except the unprovisions
++    dep_test='<='
++    if test -n "$all"; then
++      dep_test='<'
++    fi
++
++    # check dependencies: generate a list of bad files, then remove those files
++    # from the list of good files
++
++    # first remove files that provide an unprovision
++    awk_exports=`echo "$unprovisions" | sed 's/\(..*\)/dep["\1"]=-1;/'`
++    bad_files=`egrep '^EXPORT_ELEMENT|^ELEMENT_PROVIDES' $files | sed 's/EXPORT_ELEMENT[      ]*(\(.*\)).*/\1/
++s/ELEMENT_PROVIDES[   ]*(\(.*\)).*/\1/' | $awk -F: 'BEGIN {OFS="";'"$awk_exports"'}
++{
++  split($2, deps, / +/);
++  for (j in deps) {
++    if (dep[deps[j]] < 0) {
++      print $1;
++      break;
++    }
++  }
++}' | sort | uniq`
++    if test -n "$verbose" -a -n "$bad_files"; then
++      echo 1>&2
++      echo "Files: $files" 1>&2
++      echo 1>&2
++      echo "Bad files: $bad_files" 1>&2
++    fi
++    if test -n "$bad_files"; then
++      files=`echo "$files
++$bad_files" | sort | uniq -u`
++    fi
++
++    # then cycle, removing files that require something not provided
++    while true; do
++      provides=`egrep '^EXPORT_ELEMENT|^ELEMENT_PROVIDES' $files | sed 's/.*(\(.*\)).*/\1/' | tr ' \011' '\012'`
++      awk_exports=`echo "$provides"'
++'"$provisions" | sed 's/\(..*\)/dep["\1"]=1;/'`"
++"`echo "$unprovisions" | sed 's/\(..*\)/dep["\1"]=-1;/'`
++      new_bad_files=`grep '^ELEMENT_REQUIRES' $files | sed 's/ELEMENT_REQUIRES[       ]*(\(.*\)).*/\1/' | $awk -F: 'BEGIN {OFS="";'"$awk_exports"'dep["true"]=1; dep["1"]=1;}
++{
++  split($2, deps, / +/);
++  for (j in deps) {
++    i = deps[j]
++    if (dep[i] <= 0) {
++      bad = 1;
++      split(i, or_deps, /\|+/);
++      for (k in or_deps) {
++      if (!(dep[or_deps[k]] '"$dep_test"' 0))
++        bad = 0;
++      }
++      if (bad) {
++      print $1;
++      break;
++      }
++    }
++  }
++}' | sort | uniq`
++      if test -n "$verbose"; then
++          echo 1>&2
++          echo "Files: $files" 1>&2
++          echo 1>&2
++          echo "Bad files: $new_bad_files" 1>&2
++      fi
++      if test -z "$new_bad_files"; then
++          break
++      else
++          files=`echo "$files
++$new_bad_files" | sort | uniq -u`
++          bad_files="$new_bad_files
++$bad_files"
++      fi
++    done
++
++    header_files=`echo "$files" | sed 's/\.cc/\.hh/'`
++
++    # generate output
++    if test "$filenames" = f; then
++      outscriptlet=i
++    elif test "$filenames" = F; then
++      outscriptlet='i, ":", header[i]'
++    else
++      echo "# Generated by 'click-buildtool findelem' on" `date`
++      outscriptlet='i, "\t", header[i], "\t", ex'
++    fi
++
++    egrep '^ELEMENT_PROVIDES|^EXPORT_ELEMENT|^ELEMENT_HEADER|^ELEMENT_LIBS|^class|^[  ]*const *char *\* *class_name|^[        ]*static *void *static_[ic]|^}' $files $header_files /dev/null 2>/dev/null | $awk -F: 'BEGIN {
++  OFS = ""; cur_class = ""; line_warned = 0; nexports = 0
++}
++/:class[      ]/ {
++  sub(/^class[        ]*/, "", $2);
++  sub(/[      ]*$/, "", $2);
++  cur_class = $2;
++  next
++}
++/:}/ {
++  cur_class = "";
++  next
++}
++/:EXPORT_ELEMENT/ {
++  sub(/.*EXPORT_ELEMENT[      ]*\([   ]*/, "", $2);
++  sub(/[      ]*\).*/, "", $2);
++  if (exports[$1] != "") {
++    exports[$1] = exports[$1] " " $2
++  } else {
++    exports[$1] = $2; nexports++
++  }
++  next
++}
++/:ELEMENT_PROVIDES/ {
++  if (!($1 in exports)) {
++    exports[$1] = ""; nexports++
++  }
++  next
++}
++/:ELEMENT_HEADER/ {
++  sub(/.*ELEMENT_HEADER[      ]*\(/, "", $2)
++  sub(/\).*/, "", $2)
++  header[$1] = $2
++  next
++}
++/:ELEMENT_LIBS/ {
++  sub(/.*ELEMENT_LIBS[        ]*\(\(?/, "", $2)
++  sub(/\)?\).*/, "", $2)
++  gsub(/[     ][      ]*/, ";", $2)
++  gsub(/-L;/, "-L", $2)
++  libs[$1] = $2
++  next
++}
++/class_name.*return[  ]"/ {
++  sub(/.*return[      ]*"/, "", $0);
++  sub(/".*/, "", $0);
++  class_name[cur_class] = $0
++  next
++}
++/class_name/ {
++  print $1, ": ", cur_class, "::class_name method malformed" | "cat 1>&2"
++  if (++line_warned == 1)
++    print "  (class_name methods must be written on a single line.)" | "cat 1>&2"
++}
++/static_initialize/ {
++  static_initialize[cur_class] = 1
++  next
++}
++/static_cleanup/ {
++  static_cleanup[cur_class] = 1
++  next
++}
++END {
++  if (nexports == 0)
++    print "click-buildtool: No elements found" | "cat 1>&2"
++  if (line_warned || nexports == 0)
++    system("kill -HUP '$$'")
++  for (i in exports) {
++    ex = exports[i]
++    if (ex == "") {
++      print i
++    } else {
++      if (header[i] == "") {
++      header[i] = "\"" i "\""; sub(/\.cc/, ".hh", header[i])
++      }
++      split(ex, exes, / /); ex = ""
++      for (j in exes) {
++        dash = index(exes[j], "-")
++      if (dash == 0) {
++        dash = length(exes[j]);
++          if (class_name[exes[j]] == "")
++            exes[j] = exes[j] "-" exes[j];
++          else
++            exes[j] = exes[j] "-" class_name[exes[j]];
++        }
++      ex = ex exes[j] " ";
++      klass = substr(exes[j], 1, dash)
++        if (static_initialize[klass]) {
++        ex = ex klass "-!si ";
++        static_initialize[klass] = 0
++      }
++        if (static_cleanup[klass]) {
++        ex = ex klass "-!sc ";
++        static_cleanup[klass] = 0
++      }
++      }
++      if (libs[i])
++      ex = ex "-!lib" libs[i] " ";
++      print '"$outscriptlet"'
++    }
++  }
++}' | sort
++
++  exit $?
++}
++
++
++
++##########################
++# ELEM2MAKE/ELEM2PACKAGE #
++##########################
++
++elem2xxx_usage () {
++    echo_n "Usage: click-buildtool elem2$elem2 [-p PREFIX] [-V]" 1>&2
++    if test "$elem2" = package; then echo_n " PKGNAME" 1>&2; fi
++    echo " < elements.conf
++Try 'click-buildtool elem2$elem2 --help' for more information." 1>&2
++    exit 1
++}
++
++elem2make () {
++    driver=""
++    makevar=""
++    date=`date`
++    linux26=x
++    while [ x"$1" != x ]; do
++    case $1 in
++    -t|--d|--dr|--dri|--driv|--drive|--driver)
++      if test $# -lt 2; then elem2xxx_usage; fi
++      shift 1; driver="$1"; shift 1;;
++    -t*)
++      driver=`echo "$1" | sed 's/^-D//'`; shift 1;;
++    --d=*|--dr=*|--dri=*|--driv=*|--drive=*|--driver=*)
++      driver=`echo "$1" | sed 's/^[^=]*=//'`; shift 1;;
++    --t|--ta|--tar|--targ|--targe|--target)
++      if test $# -lt 2; then elem2xxx_usage; fi
++      shift 1; driver="$1"; shift 1;;
++    --t=*|--ta=*|--tar=*|--targ=*|--targe=*|--target=*)
++      driver=`echo "$1" | sed 's/^[^=]*=//'`; shift 1;;
++    -v|--m|--ma|--mak|--make|--make-|--make-v|--make-va|--make-var|--make-vari|--make-varia|--make-variab|--make-variabl|--make-variable)
++      if test $# -lt 2; then elem2xxx_usage; fi
++      shift 1; makevar="$1"; shift 1;;
++    -v*)
++      makevar=`echo "$1" | sed 's/^-v//'`; shift 1;;
++    --m=*|--ma=*|--mak=*|--make=*|--make-=*|--make-v=*|--make-va=*|--make-var=*|--make-vari=*|--make-varia=*|--make-variab=*|--make-variabl=*|--make-variable=*)
++      makevar=`echo "$1" | sed 's/^[^=]*=//'`; shift 1;;
++    -x|--e|--ex|--exc|--excl|--exclu|--exclud|--exclude)
++        if test $# -lt 2; then elem2xxx_usage; fi
++      shift 1
++      for i in $1; do excludes=";/^$i"' \\$'"/d$excludes"; done
++      shift 1;;
++    -x*)
++      this_exclude=`echo "$1" | sed 's/^-p//'`
++      for i in $this_exclude; do excludes=";/^$i"' \\$'"/d$excludes"; done
++      shift 1;;
++    --e=*|--ex=*|--exc=*|--excl=*|--exclu=*|--exclud=*|--exclude=*)
++      this_exclude=`echo "$1" | sed 's/^[^=]*=//'`
++      for i in $this_exclude; do excludes=";/^$i"' \\$'"/d$excludes"; done
++      shift 1;;
++    --l|--li|--lin|--linu|--linux|--linux2|--linux26)
++      linux26=1; shift 1;;
++    --no-l|--no-li|--no-lin|--no-linu|--no-linux|--no-linux2|--no-linux26)
++      linux26=0; shift 1;;
++    -V|--verb|--verbo|--verbos|--verbose)
++      verbose=1; shift 1;;
++    -h|--h|--he|--hel|--help)
++      cat <<'EOF' 1>&2
++'Click-buildtool elem2make' reads an 'elements.conf' file generated by
++'click-buildtool findelem' on the standard input, and writes a Makefile
++fragment defining the ELEMENT_OBJS variable to the standard output.
++
++Usage: click-buildtool elem2make [-t DRIVER] [-V] < elements.conf
++
++Options:
++  -t, --driver DRIVER      Set target driver to DRIVER ('userlevel',
++                           'linuxmodule', 'bsdmodule', 'ns', or 'tool').
++  -v, --make-variable N    Use make variable N.
++      --linux26            Generate Linux 2.6-style makefile fragment.
++  -x, --exclude FILE       Do not include FILE.
++  -V, --verbose            Print more information.
++  -h, --help               Print this message and exit.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++      exit 0;;
++    *)
++      elem2xxx_usage;;
++    esac
++    done
++
++    L=
++    defmakevar="ELEMENT_OBJS"
++    if test -n "$driver"; then
++      if test "$driver" = 'user' -o "$driver" = 'userlevel'; then
++          L=u
++      elif test "$driver" = 'kernel' -o "$driver" = 'linuxmodule'; then
++          L=k
++          test "$linux26" = x && linux26="$LINUXMODULE_2_6"
++      elif test "$driver" = 'bsdmodule'; then
++          L=b
++      elif test "$driver" = 'ns' -o "$driver" = 'nsmodule'; then
++          L=n
++      elif test "$driver" = 'tool'; then
++          L=t
++      else
++          echo "Unknown driver $driver" 1>&2
++          exit 1
++      fi
++    fi
++    osuffix=".${L}o"
++    if test -z "$makevar"; then
++      makevar=$defmakevar
++    fi
++
++    # expand list of files
++    elemconf=`cat`
++    files=`echo "$elemconf" | grep -v '^#' | sed 's/[         ].*//'`
++
++    # find libraries
++    libs=`echo "$elemconf" | sed '/-!lib/!d;s/^.*-!lib//g;s/;/ /g' | grep .`
++    if test -n "$libs"; then
++      libs=`echo "$libs" | sed 's/^\([^ ][^ ]*\) *$/\1 \1/'`
++      while echo "$libs" | grep ' [^ ].* [^ ]' >/dev/null; do
++          libs=`echo "$libs" | sed '/ [^ ].* [^ ]/s/^\([^ ][^ ]*\)  *\([^ ][^ ]*\) /\1 \2\\
++\2 /'`
++      done
++    fi
++    test -n "$libs" && libs=`echo "$libs" | tsort`
++
++    # massage awk script based on Linux 2.6 or not
++    if test "$linux26" = 1; then
++      set_subdir_scriptlet='
++          if (dir != "" && substr(dir, 1, 1) == "/")
++              subdirs[dirid] = dir;
++          else
++              subdirs[dirid] = "$(obj)/" dir;
++        '
++      pattern_scriptlet='$(addprefix $(obj)/,$('"$makevar"'__", i, ")): $(obj)/%'"$osuffix"
++      ccaction='      $(call if_changed_dep,cxxcompile)'
++      caction='       $(call if_changed_dep,ccompile)'
++    else
++      set_subdir_scriptlet='subdirs[dirid] = dir;'
++      pattern_scriptlet='$('"$makevar"'__", i, "): %'"$osuffix"
++      ccaction='      $(call cxxcompile,-c $< -o $@,CXX)'
++      caction='       $(call ccompile,-c $< -o $@,CC)'
++      if test -n "$L"; then
++          ccaction="$ccaction"'\n     $(FIXDEP)'
++          caction="$caction"'\n       $(FIXDEP)'
++      fi
++    fi
++
++    # output
++    echo "# Generated by 'click-buildtool elem2make' on" `date`
++    echo "$files" | $awk '
++BEGIN { OFS = ""
++    action["c"] = "'"$caction"'";
++    action["cc"] = "'"$ccaction"'";
++}
++{   filetype = ($0 ~ /\.c$/ ? "c" : "cc");
++    sub(/\.cc*$/, "'"$osuffix"'");
++    i = match($0, /\/[^\/]*$/);
++    if (i == 0) {
++      dir = "";
++      file = $0;
++    } else {
++      dir = substr($0, 1, RSTART);
++      file = substr($0, RSTART + 1);
++    }
++    decdir = filetype dir;
++    if (decdir in subdirid)
++      dirid = subdirid[decdir];
++    else {
++      dirid = nsubdirs++;
++      subdirid[decdir] = dirid;
++      subdirtype[dirid] = filetype;
++      '"$set_subdir_scriptlet"'
++    }
++    elements[dirid] = elements[dirid] file " \\\n";
++}
++END {
++    for (i = 0; i < nsubdirs; i++) {
++      print "'"$makevar"'__", i, " = \\\n", elements[i];
++      allsubdirs = allsubdirs "$('"$makevar"'__" i ") \\\n";
++    }
++    print "'"$makevar"' = \\\n", allsubdirs;
++    for (i = 0; i < nsubdirs; i++) {
++      print "'"$pattern_scriptlet"': ", subdirs[i], "%.", subdirtype[i];
++      print action[subdirtype[i]];
++    }
++}' | sed "$excludes"
++    echo
++    
++    if test -n "$libs"; then
++      libvar=`echo $makevar | sed 's/OBJS$/LIBS/'`
++      echo $libvar = $libs
++    fi
++}
++
++elem2xxx () {
++    package=""
++    date=`date`
++    standards=''
++    includes=''
++    while [ x"$1" != x ]; do
++    case $1 in
++    -S|--s|--st|--sta|--stan|--stand|--standa|--standar|--standard|--standards)
++      standards=1; shift 1;;
++    -V|--verb|--verbo|--verbos|--verbose)
++      verbose=1; shift 1;;
++    -i|--i|--in|--inc|--incl|--inclu|--includ|--include)
++      if test $# -lt 2; then elem2xxx_usage; fi
++      includes="$includes print '#include $2';"; shift 2;;
++    -i*)
++      this_include=`echo "$1" | sed 's/^-i//'`
++      includes="$includes print '#include $this_include';"; shift 1;;
++    --i=*|--in=*|--inc=*|--incl=*|--inclu=*|--includ=*|--include=*)
++      this_include=`echo "$1" | sed 's/^[^=]*=//'`
++      includes="$includes print '#include $this_include';"; shift 1;;
++    -h|--h|--he|--hel|--help)
++      if test "$elem2" = export; then
++          cat <<'EOF' 1>&2
++'Click-buildtool elem2export' reads an 'elements.conf' file generated by
++'click-buildtool findelem' on the standard input, examines those files for
++exported elements, and writes a C++ source file defining the 
++click_export_elements() function to the standard output.
++
++Usage: click-buildtool elem2export [-V] < elements.conf
++EOF
++      elif test "$elem2" = package; then
++          cat <<'EOF' 1>&2
++'Click-buildtool elem2package' reads an 'elements.conf' file generated by
++'click-buildtool findelem' on the standard input, examines those files for
++exported elements, and writes a C++ source file suitable for creating a
++dynamically linked package with those elements to the standard output. PKGNAME
++is the name of the package.
++
++Usage: click-buildtool elem2package [-p PREFIX] [-V] PKGNAME < elements.conf
++EOF
++      fi
++      cat <<'EOF' 1>&2
++
++Options:
++  -S, --standards          Export standard required elements as well.
++  -i, --include HDR        Emit "#include HDR" at top of file.
++  -V, --verbose            Print more information.
++  -h, --help               Print this message and exit.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++      exit 0;;
++    -*)
++      elem2xxx_usage;;
++    *)
++      if test -z "$package" -a "$elem2" = package; then package="$1"; shift 1; else elem2xxx_usage; fi;;
++    esac
++    done
++
++    # set up awk program
++    if test -n "$package"; then
++      includes="  $includes "'print "#define WANT_MOD_USE_COUNT 1\n#include <click/config.h>\n#include <click/package.hh>\n#include <click/glue.hh>";
++  for (file in INCLUDES) {
++    if (file != "-") print "#include ", file;
++  }'
++      awk_program='BEGIN {
++  OFS = ""; nrebecca = 0; packname="'"$package"'";
++}
++/^#/ { next; }
++{
++  if (NF == 1)
++    next;
++  INCLUDES[$2] = 1;
++  for (i = 3; i <= NF; i++) {
++    split($i, ans, /-/);
++    if (ans[2] == "!si")
++      B = B "  " ans[1] "::static_initialize();\n";
++    else if (ans[2] == "!sc")
++      C = C "  " ans[1] "::static_cleanup();\n";
++    else if (ans[2] !~ /^!/) {
++      B = B "  hatred_of_rebecca[" nrebecca "] = click_add_element_type(\"" ans[2] "\", beetlemonkey, " nrebecca ");\n"
++      C = C "  click_remove_element_type(hatred_of_rebecca[" nrebecca "]);\n";
++      D = D "   case " nrebecca ": return new " ans[1] ";\n";
++      nrebecca++;
++    }
++  }
++}
++END {
++  print "/* Generated by \"click-buildtool elem2package\" on '"$date"' */";
++  print "/* Package name: ", packname, " */\n";
++'"$includes"'
++  print "\nCLICK_USING_DECLS";
++  print "static int hatred_of_rebecca[", nrebecca, "];";
++  print "static Element *\nbeetlemonkey(uintptr_t heywood)\n{\n  switch (heywood) {\n", D, "   default: return 0;\n  }\n}\n";
++  print "#ifdef CLICK_LINUXMODULE\n#define click_add_element_type(n, f, t) click_add_element_type((n), (f), (t), THIS_MODULE)\n#endif";
++  print "#ifdef CLICK_BSDMODULE\nstatic int\nmodevent(module_t, int t, void *)\n{\n  if (t == MOD_LOAD) {\n#else\nextern \"C\" int\ninit_module()\n{\n#endif";
++  print "  click_provide(\"", packname, "\");\n", B, "  CLICK_DMALLOC_REG(\"nXXX\");\n  return 0;";
++  print "#ifdef CLICK_BSDMODULE\n  } else if (t == MOD_UNLOAD) {\n#else\n}\nextern \"C\" void\ncleanup_module()\n{\n#endif";
++  print C, "  click_unprovide(\"", packname, "\");";
++  print "#ifdef CLICK_BSDMODULE\n  return 0;\n  } else\n    return 0;\n}\nstatic moduledata_t modinfo = {\n  \"", packname, "\", modevent, 0\n};\nDECLARE_MODULE(", packname, ", modinfo, SI_SUB_PSEUDO, SI_ORDER_ANY);\n#else\n}\n#endif";
++}
++'
++
++    else
++      includes="$includes"'  print "#include <click/config.h>\n#include <click/package.hh>";
++  for (file in INCLUDES) {
++    if (file != "-") print "#include ", file;
++  }'
++      awk_program='BEGIN {
++  OFS = ""; nrebecca = 0;
++}
++/^#/ { next; }
++{
++  if (NF == 1)
++    next;
++  INCLUDES[$2] = 1;
++  for (i = 3; i <= NF; i++) {
++    split($i, ans, /-/);
++    if (ans[2] == "!si")
++      B = B "  " ans[1] "::static_initialize();\n";
++    else if (ans[2] == "!sc")
++      C = C "  " ans[1] "::static_cleanup();\n";
++    else if (ans[2] !~ /^!/) {
++      B = B "  (void) click_add_element_type(\"" ans[2] "\", beetlemonkey, " nrebecca ");\n";
++      D = D "   case " nrebecca ": return new " ans[1] ";\n";
++    }
++    nrebecca++;
++  }
++}
++END {
++  print "/* Generated by \"click-buildtool elem2export\" on '"$date"' */\n";
++'"$includes"'
++  print "CLICK_USING_DECLS";
++  print "static Element *\nbeetlemonkey(uintptr_t heywood)\n{\n  switch (heywood) {\n", D, "   default: return 0;\n  }\n}\n";
++  print "#ifdef CLICK_LINUXMODULE\n#define click_add_element_type(n, f, t) click_add_element_type((n), (f), (t), 0)\n#endif";
++  print "void\nclick_export_elements()\n{\n", B, "  CLICK_DMALLOC_REG(\"nXXX\");\n}\n";
++  print "void\nclick_unexport_elements()\n{\n", C, "}";
++}
++'
++    fi
++
++    # Actually generate the command!
++    if test -z "$standards"; then
++      $awk "$awk_program"
++    else
++      cat <<EOF >/tmp/click-buildtool-standards.$$
++-     <click/standard/addressinfo.hh> AddressInfo-AddressInfo
++-     <click/standard/alignmentinfo.hh>       AlignmentInfo-AlignmentInfo
++-     <click/standard/errorelement.hh>        ErrorElement-ErrorElement
++-     <click/standard/portinfo.hh>    PortInfo-PortInfo
++-     <click/standard/scheduleinfo.hh>        ScheduleInfo-ScheduleInfo
++EOF
++      cat - /tmp/click-buildtool-standards.$$ | $awk "$awk_program"
++      /bin/rm -f /tmp/click-buildtool-standards.$$
++    fi
++}
++
++
++
++############
++# PROVIDES #
++############
++
++provides_usage () {
++    echo "Usage: click-buildtool provides [REQS]" 1>&2
++    echo "Try 'click-buildtool provides --help' for more information." 1>&2
++    exit 1
++}
++
++provides () {
++    provisions="$default_provisions
++$driver_provisions
++"`elementmap_provisions ${clickdatadir}/elementmap.xml`
++    requirements=""
++    stdin=n; query=n; print=n
++    while [ x"$1" != x ]; do
++    case $1 in
++    -q|--q|--qu|--que|--quer|--query)
++      query=y; shift 1;;
++    -l|--pri|--prin|--print)
++      print=y; shift 1;;
++    -r|--pro|--prov|--provi|--provid|--provide)
++      if test $# -lt 2; then provides_usage; fi
++      shift 1; provisions="$1
++$provisions"; shift 1;;
++    -r*)
++      provisions=`echo "$1" | sed 's/^-r//'`"
++$provisions"; shift 1;;
++    --p=*|--pr=*|--pro=*|--prov=*|--provi=*|--provid=*|--provide=*)
++      provisions=`echo "$1" | sed 's/^[^=]*=//'`"
++$provisions"; shift 1;;
++    -e|--e|--el|--ele|--elem|--eleme|--elemen|--element|--elementm|--elementma|--elementmap)
++      if test $# -lt 2; then provides_usage; fi
++      shift 1; provisions=`elementmap_provisions $1`"
++$provisions"; shift 1;;
++    -e*)
++      emap=`echo "$1" | sed 's/^-e//'`
++      provisions=`elementmap_provisions $emap`"
++$provisions"; shift 1;;
++    --e=*|--el=*|--ele=*|--elem=*|--eleme=*|--elemen=*|--element=*|--elementm=*|--elementma=*|--elementmap=*)
++      emap=`echo "$1" | sed 's/^[^=]*=//'`
++      provisions=`elementmap_provisions $emap`"
++$provisions"; shift 1;;
++    -h|--h|--he|--hel|--help)
++      cat <<'EOF' 1>&2
++'Click-buildtool provides' exits with status 0 if the Click installation
++provides all requirement(s) in REQ arguments, and status 1 otherwise.
++
++Usage: click-buildtool provides [OPTIONS] [REQ...]
++
++Options:
++  -q, --query              Print provisions to standard output.
++  -r, --provide REQ        Provide requirement(s) in REQ.
++  -e, --elementmap EMAP    Provide requirement(s) from EMAP.
++  -l, --print              Print 0 (REQs not provided) or 1 (REQs provided).
++  -h, --help               Print this message and exit.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++      exit 0;;
++    -)
++      stdin=y; shift 1;;
++    -*)
++      provides_usage;;
++    *)
++      requirements="$1
++$requirements"; shift 1;;
++    esac
++    done
++
++    [ $stdin = y ] && requirements="`cat` $requirements"
++    provisions="`echo "$provisions" | tr -s ' \011\015\014\013' '\012' | grep . | sort | uniq`"
++    [ $query = y ] && echo "$provisions"
++    requirements="`echo "$requirements" | tr -s ' \011\015\014\013' '\012' | grep . | sort | uniq`"
++    awk_provisions="`echo "$provisions" | sed 's/\(..*\)/dep["\1"]=1;/'`"
++    echo "$requirements" | $awk -F: 'BEGIN {
++'"$awk_provisions"'
++}
++/./ { if (!dep[$1]) exit 1; }' >/dev/null 2>&1
++    status=$?
++    [ $print = y ] && expr 1 - $status
++    exit $status
++}
++
++
++#############
++# QUIETLINK #
++#############
++
++quietlink_usage () {
++    echo "Usage: click-buildtool quietlink" 1>&2
++    echo "Try 'click-buildtool quietlink --help' for more information." 1>&2
++    exit 1
++}
++
++quietlink () {
++    while [ x"$1" != x ]; do
++    case $1 in
++    -h|--h|--he|--hel|--help)
++      cat <<'EOF' 1>&2
++'Click-buildtool quietlink' quiets the GNU linker when linking an element
++package. Specifically, it removes undefined reference complaints.
++
++Usage: ld ... 2>&1 | click-buildtool quietlink
++
++Options:
++  -h, --help                 Print this message and exit.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++      exit 0;;
++    *)
++      quietlink_usage;;
++    esac
++    done
++
++    $awk -F: 'BEGIN {
++  context = ""
++}
++/: In function/ {
++  context = $0
++  next
++}
++/: undefined reference to/ {
++  next
++}
++/: more undefined references to/ {
++  next
++}
++{
++  if (context != "") {
++    print context
++    context = ""
++  }
++  print $0
++}' 1>&2
++}
++
++
++
++##########
++# PREFIX #
++##########
++
++prefix_usage () {
++    echo "Usage: click-buildtool prefix" 1>&2
++    echo "Try 'click-buildtool prefix --help' for more information." 1>&2
++    exit 1
++}
++
++prefix () {
++    while [ x"$1" != x ]; do
++    case $1 in
++    -h|--h|--he|--hel|--help)
++      cat <<'EOF' 1>&2
++'Click-buildtool prefix' prints the Click prefix directory.
++
++Usage: click-buildtool prefix
++
++Options:
++  -h, --help                 Print this message and exit.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++      exit 0;;
++    *)
++      prefix_usage;;
++    esac
++    done
++    echo $prefix
++}
++
++
++
++############
++# KVERSION #
++############
++
++kversion_usage () {
++    echo_n "Usage: click-buildtool kversion [--gpl] > kversion.c" 1>&2
++    echo "Try 'click-buildtool kversion --help' for more information." 1>&2
++    exit 1
++}
++
++kversion () {
++    gpl=0
++    linux26=$LINUXMODULE_2_6
++    while [ x"$1" != x ]; do
++    case $1 in
++    --g|--gp|--gpl)
++      gpl=1; shift 1;;
++    -h|--h|--he|--hel|--help)
++      cat <<'EOF' 1>&2
++'Click-buildtool kversion' writes a kversion.c file, to be used for building
++a Click kernel package, on the standard output.
++
++Usage: click-buildtool kversion [--gpl] > kversion.c
++
++Options:
++      --gpl                The package is dual-licensed BSD/GPL (otherwise
++                           no license).
++  -h, --help               Print this message and exit.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++      exit 0;;
++    *)
++      kversion_usage;;
++    esac
++    done
++
++    cat <<EOF
++#include <click/config.h>
++#include <linux/version.h>
++#include <linux/module.h>
++
++/* a new version of EXPORT_NO_SYMBOLS that works */
++const int __ksymtab_nothing[0] __attribute__((section("__ksymtab"))) = { };
++EOF
++    test $gpl = 1 && cat <<EOF
++
++#ifdef MODULE_LICENSE
++MODULE_LICENSE("Dual BSD/GPL");
++#endif
++EOF
++}
++
++
++
++##########
++# KBUILD #
++##########
++
++kbuild_usage () {
++    echo_n "Usage: click-buildtool kbuild > Kbuild" 1>&2
++    echo "Try 'click-buildtool kbuild --help' for more information." 1>&2
++    exit 1
++}
++
++kbuild () {
++    while [ x"$1" != x ]; do
++    case $1 in
++    -h|--h|--he|--hel|--help)
++      cat <<'EOF' 1>&2
++'Click-buildtool kbuild' writes a Kbuild file, to be used for building
++a Click kernel package for Linux 2.6 kernels, on the standard output.
++
++Usage: click-buildtool kbuild > Kbuild
++
++Options:
++  -h, --help               Print this message and exit.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++      exit 0;;
++    *)
++      kversion_usage;;
++    esac
++    done
++
++    echo "include ${clickdatadir}/pkg-linuxmodule-26.mk"
++}
++
++
++
++###############
++# MAKEPACKAGE #
++###############
++
++makepackage_usage () {
++    echo "Usage: click-buildtool makepackage [-t DRIVER] PACKAGENAME SRCFILES..." 1>&2
++    echo "Try 'click-buildtool makepackage for more information." 1>&2
++    exit 1
++}
++
++makepackage () {
++    driver=""
++    date=`date`
++    dir=
++    pkg=
++    srcs=
++    quiet=
++    cflags=
++    while [ x"$1" != x ]; do
++    case $1 in
++    -t|--d|--dr|--dri|--driv|--drive|--driver)
++      test $# -lt 2 && makepackage_usage
++      shift 1; driver="$1"; shift 1;;
++    -t*)
++      driver=`echo "$1" | sed 's/^-D//'`; shift 1;;
++    --dr=*|--dri=*|--driv=*|--drive=*|--driver=*)
++      driver=`echo "$1" | sed 's/^[^=]*=//'`; shift 1;;
++    --t|--ta|--tar|--targ|--targe|--target)
++        test $# -lt 2 && makepackage_usage
++      shift 1; driver="$1"; shift 1;;
++    --t=*|--ta=*|--tar=*|--targ=*|--targe=*|--target=*)
++      driver=`echo "$1" | sed 's/^[^=]*=//'`; shift 1;;
++    -C|--di|--dir|--dire|--direc|--direct|--directo|--director|--directory)
++        test $# -lt 2 && makepackage_usage
++      shift 1; dir="$1"; shift 1;;
++    -C*)
++      dir="`echo "$1" | sed 's/^-C//'`"/; shift 1;;
++    --di=*|--dir=*|--dire=*|--direc=*|--direct=*|--directo=*|--director=*|--directory=*)
++      dir="`echo "$1" | sed 's/^[^=]*=//'`"/; shift 1;;
++    -q|--q|--qu|--qui|--quie|--quiet)
++      quiet="-s"; shift 1;;
++    -h|--h|--he|--hel|--help)
++      cat <<'EOF' 1>&2
++'Click-buildtool makepackage' builds a Click package for the specified
++driver from sources listed on the command line.
++
++Usage: click-buildtool makepackage [-t DRIVER] PACKAGENAME SRCFILES...
++
++Options:
++  -t, --driver DRIVER      Set target driver to DRIVER ('userlevel',
++                           'linuxmodule', 'bsdmodule', 'ns', or 'tool').
++  -q, --quiet              Build quietly (may be ignored).
++  -C, --directory DIR      Switch to DIR directory before building.
++  -h, --help               Print this message and exit.
++  -[other options]         Passed to the C/C++ compiler.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++      exit 0;;
++    -*)
++      cflags="$cflags $1"; shift 1;;
++    *)
++      if test -z "$pkg"; then
++          pkg="$1"; shift 1
++      else
++          srcs="$srcs
++$1"; shift 1
++      fi;;
++    esac
++    done
++
++    test -z "$srcs" && makepackage_usage
++
++    objs=
++    objsvar=OBJS
++    if test -z "$driver" -o "$driver" = 'user' -o "$driver" = 'userlevel'; then
++      L=u
++    elif test "$driver" = 'kernel' -o "$driver" = 'linuxmodule'; then
++      L=k
++    elif test "$driver" = 'bsdmodule'; then
++      L=b
++    elif test "$driver" = 'ns' -o "$driver" = 'nsmodule'; then
++      L=n
++    elif test "$driver" = 'tool'; then
++      L=t
++    else
++      echo "Unknown driver $driver" 1>&2
++      exit 1
++    fi
++    osuffix=".${L}o"
++
++    if test -n "$dir"; then cd "$dir"; fi
++    echo > ${L}elements.conf
++    echo "$srcs" | grep . | elem2make -t $driver > ${L}elements.mk
++    echo "PACKAGE_OBJS :=" >> ${L}elements.mk
++
++    echo "package = $pkg
++
++srcdir = .
++top_srcdir = .
++builddir = .
++top_builddir = .
++PACKAGE_CFLAGS = $cflags
++PACKAGE_CXXFLAGS = $cflags
++
++include ${clickdatadir}/config.mk
++include ${clickdatadir}/pkg-Makefile" > Makefile
++    
++    test -z "$quiet" && echo "+" $gmake $pkg$osuffix
++    $gmake $quiet $pkg$osuffix
++}
++
++
++
++#########
++# KSYMS #
++#########
++
++ksyms_usage () {
++    echo "Usage: click-buildtool ksyms OBJ... > KSYMS" 1>&2
++    echo "Try 'click-buildtool ksyms --help' for more information." 1>&2
++    exit 1
++}
++
++ksyms () {
++    driver=""
++    date=`date`
++    dir=
++    objs=
++    exclude=
++    while [ x"$1" != x ]; do
++    case $1 in
++    -C|--di|--dir|--dire|--direc|--direct|--directo|--director|--directory)
++        test $# -lt 2 && ksyms_usage
++      shift 1; dir="$1"; shift 1;;
++    -C*)
++      dir="`echo "$1" | sed 's/^-C//'`"/; shift 1;;
++    --di=*|--dir=*|--dire=*|--direc=*|--direct=*|--directo=*|--director=*|--directory=*)
++      dir="`echo "$1" | sed 's/^[^=]*=//'`"/; shift 1;;
++    -x|--e|--ex|--exc|--excl|--exclu|--exclud|--exclude)
++      test $# -lt 2 && ksyms_usage
++      shift 1; exclude="$exclude
++$1"; shift 1;;
++    -x*)
++      exclude="$exclude
++`echo "$1" | sed 's/^-x//'`"; shift 1;;
++    --e=*|--ex=*|--exc=*|--excl=*|--exclu=*|--exclud=*|--exclude=*)
++      exclude="$exclude
++`echo "$1" | sed 's/^[^=]*=//'`"; shift 1;;
++    -h|--h|--he|--hel|--help)
++      cat <<'EOF' 1>&2
++'Click-buildtool ksyms' creates a C file that exports all symbols for the
++Click objects listed on the command line.
++
++Usage: click-buildtool ksyms OBJ... > KSYMS
++
++Options:
++  -x, --exclude=FILE       Ignore OBJ even if it is supplied as an argument.
++  -C, --directory DIR      Switch to DIR directory before running.
++  -h, --help               Print this message and exit.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++      exit 0;;
++    *)
++      objs="$objs
++$1"; shift 1;;
++    esac
++    done
++
++    test -z "$objs" && ksyms_usage
++    objs=`echo "$objs" | sort | uniq`
++    test -n "$exclude" && objs=`echo "$objs
++$exclude" | sort | uniq -u`
++
++    if test -n "$dir"; then cd "$dir"; fi
++    echo "// Created by 'click-buildtool ksyms' on $date"
++    echo "#include <click/config.h>"
++    echo "#include <linux/version.h>"
++    echo "#include <linux/module.h>"
++    nm -g $objs | $awk '
++BEGIN {
++    printed["init_module"] = printed["cleanup_module"] = 1;
++}
++/^[   ]/ { 
++    next 
++}
++/........[    ][ABCDGRSTVW]/ {
++    x = $3;
++    if (x ~ /^[_A-Za-z][_A-Za-z0-9]*$/ && !printed[x]) {
++      printed[x] = 1;
++      if (x != "click_assert_failed")
++          print "extern char " x "[];";
++      print "EXPORT_SYMBOL(" x ");";
++    }
++}'
++}
++
++
++
++################
++# MAIN PROGRAM #
++################
++
++if test $# = 0; then
++    # force usage message
++    set crapfunc
++fi
++
++while [ x"$1" != x ]; do
++case $1 in
++  --vers|--versi|--versio|--version)
++     cat <<'EOF'
++click-buildtool (Click) 1.6.0
++Copyright (c) 2000-2001 Massachusetts Institute of Technology
++Copyright (c) 2000-2004 Mazu Networks, Inc.
++Copyright (c) 2001-2003 International Computer Science Institute
++Copyright (c) 2004-2007 Regents of the University of California
++This is free software; see the source for copying conditions.
++There is NO warranty, not even for merchantability or fitness for a
++particular purpose.
++EOF
++     exit 0;;
++  -V|--verb|--verbo|--verbos|--verbose)
++     verbose=1; shift 1;;
++  -h|--h|--he|--hel|--help)
++     cat <<'EOF' 1>&2
++'Click-buildtool' is a set of tools used when building Click. For information
++on a particular tool, run 'click-buildtool TOOLNAME --help'.
++
++Usage: click-buildtool elem2make [-V] [-p PREFIX] < [ELEMENTS]
++   or: click-buildtool elem2export [-V] [-p PREFIX] < [ELEMENTS]
++   or: click-buildtool elem2package [-V] [-p PREFIX] PACKAGENAME < [ELEMENTS]
++   or: click-buildtool findelem [-a] [-V] [-p PREFIX] < [FILES AND DIRECTORIES]
++   or: click-buildtool makepackage [-t DRIVER] PACKAGENAME SRCFILES...
++   or: click-buildtool prefix
++   or: click-buildtool provides [REQS]
++   or: click-buildtool quietlink
++   or: click-buildtool kbuild
++   or: click-buildtool kversion [--gpl]
++   or: click-buildtool ksyms OBJS > KSYMSFILE
++
++Options:
++  -V, --verbose            Print more information.
++  -h, --help               Print this message and exit.
++      --version            Print version number and exit.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++     exit 0;;
++  findelem)
++     shift 1; findelem "$@"; exit 0;;
++  elem2make)
++     elem2="make"; shift 1; elem2make "$@"; exit 0;;
++  elem2export)
++     elem2="export"; shift 1; elem2xxx "$@"; exit 0;;
++  elem2package)
++     elem2="package"; shift 1; elem2xxx "$@"; exit 0;;
++  makepackage)
++     shift 1; makepackage "$@"; exit 0;;
++  prefix)
++     shift 1; prefix "$@"; exit 0;;
++  provides)
++     shift 1; provides "$@"; exit 0;;
++  quietlink)
++     shift 1; quietlink "$@"; exit 0;;
++  kversion)
++     shift 1; kversion "$@"; exit 0;;
++  kbuild)
++     shift 1; kbuild "$@"; exit 0;;
++  ksyms)
++     shift 1; ksyms "$@"; exit 0;;
++  *)
++     echo "Usage: click-buildtool TOOLNAME [ARGUMENTS]
++Try 'click-buildtool --help' for more information." 1>&2
++     exit 1;;
++esac
++done
+Files click-1.6.0/inst/bin/click-check and click-1.6.0-27/inst/bin/click-check differ
+Files click-1.6.0/inst/bin/click-combine and click-1.6.0-27/inst/bin/click-combine differ
+diff -Nurb click-1.6.0/inst/bin/click-compile click-1.6.0-27/inst/bin/click-compile
+--- click-1.6.0/inst/bin/click-compile 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/bin/click-compile      2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,302 @@
++#! /bin/sh
++
++# click-compile.in -- script compiles Click elements
++# Eddie Kohler
++#
++# Copyright (c) 1999 Massachusetts Institute of Technology
++# Copyright (c) 2001 International Computer Science Institute
++# Copyright (c) 2005 Regents of the University of California
++#
++# Permission is hereby granted, free of charge, to any person obtaining a
++# copy of this software and associated documentation files (the "Software"),
++# to deal in the Software without restriction, subject to the conditions
++# listed in the Click LICENSE file. These conditions include: you must
++# preserve this copyright notice, and you cannot mention the copyright
++# holders in advertising related to the Software without their permission.
++# The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++# notice is a summary of the Click LICENSE file; the license in that file is
++# legally binding.
++
++prefix=/d/click/click-1.6.0-27/inst
++exec_prefix=/d/click/click-1.6.0-27/inst
++includedir=/d/click/click-1.6.0-27/inst/include
++libdir=/d/click/click-1.6.0-27/inst/lib
++datarootdir=/d/click/click-1.6.0-27/inst/share
++datadir=/d/click/click-1.6.0-27/inst/share
++srcdir=${datadir}/click/src
++linuxdir=/d/kernels/linux-2.6.27.10-clickport
++freebsd_includedir=/usr/include
++CLICK_VERSION=1.6.0
++
++# determine mode
++directory=.
++driver=
++package=NONE
++cflags=
++compileflag=-c
++quiet=
++gpl=y
++while true; do
++    bad=x
++    case $1 in
++      -t|--dr|--dri|--driv|--drive|--driver)
++      driver=$2; shift 2;;
++      -t*)
++        driver=`echo "$1" | sed 's/^-t//'`; shift 1;;
++      --dr=*|--dri=*|--driv=*|--drive=*|--driver=*)
++      driver=`echo "$1" | sed 's/[-a-z]*=//'`; shift 1;;
++      --c|--cf|--cfl|--cfla|--cflag|--cflags|--de|--def|--defs)
++      echo   -I$includedir
++      exit 0;;
++      --l|--li|--lib|--libs)
++      echo -L$libdir -lclick  -lpcap -ldl 
++      exit 0;;
++      --toolc|--toolcf|--toolcfl|--toolcfla|--toolcflag|--toolcflags)
++      echo -DCLICK_TOOL -I$includedir
++      exit 0;;
++      --tooll|--toolli|--toollib|--toollibs)
++      echo -L$libdir -lclicktool -ldl 
++      exit 0;;
++      --o|--ot|--oth|--othe|--other|--otherl|--otherli|--otherlib|--otherlibs)
++      echo  -lpcap -ldl 
++      exit 0;;
++      -d|--di|--dir|--dire|--direc|--direct|--directo|--director|--directory)
++      directory=$2; shift 2;;
++      -d*)
++      directory=`echo "$1" | sed 's/^-d//'`; shift 1;;
++      --di=*|--dir=*|--dire=*|--direc=*|--direct=*|--directo=*|--director=*|--directory=*)
++      directory=`echo "$1" | sed 's/^[^=]*=//'`; shift 1;;
++      --t|--ta|--tar|--targ|--targe|--target)
++        echo "click-compile: '--target' is obsolete; change your script to use '--driver'" 1>&2
++      driver=$2; shift 2;;
++      --t=*|--ta=*|--tar=*|--targ=*|--targe=*|--target=*)
++        echo "click-compile: '--target' is obsolete; change your script to use '--driver'" 1>&2
++      driver=`echo "$1" | sed 's/[-a-z]*=//'`; shift 1;;
++      -p|--p|--pa|--pac|--pack|--packa|--packag|--package)
++      package=$2; shift 2;;
++      -p*)
++      package=`echo "$1" | sed 's/^-p//'`; shift 1;;
++      --p=*|--pa=*|--pac=*|--pack=*|--packa=*|--packag=*|--package=*)
++      package=`echo "$1" | sed 's/[-a-z]*=//'`; shift 1;;
++      -q|--q|--qu|--qui|--quie|--quiet)
++      quiet=y; shift 1;;
++      --no-g|--no-gp|--no-gpl)
++      gpl=n; shift 1;;
++      -h|--h|--he|--hel|--help)
++      cat <<'EOF'
++'Click-compile' compiles a Click source file, or outputs any compiler options
++relevant for userlevel Click drivers.
++
++Usage: click-compile -t DRIVER [OPTIONS] SOURCEFILE...
++
++Options:
++      --defs              Outputs preprocessor options for userlevel drivers.
++      --libs              Outputs link options for userlevel drivers.
++      --otherlibs         Like '--libs' minus the Click library.
++      --toolcflags        Outputs C/C++ flags options for tools.
++      --toollibs          Outputs link options for tools.
++  -t, --driver DRIVER     Sets target driver to 'bsdmodule', 'linuxmodule',
++                          'userlevel', 'ns', or 'tool'.
++  -p, --package PACKAGE   Build a dynamically loadable package named PACKAGE.
++  -d, --directory DIR     Change to directory DIR.
++  -q, --quiet             Be quiet (don't echo commands or print warnings).
++      --no-gpl            Omit "BSD/GPL" declaration from kernel package.
++  -h, --help              Print this message and exit.
++  -v, --version           Print version number and exit.
++  Other options are passed to the compiler unchanged.
++
++Report bugs to <click@pdos.lcs.mit.edu>.
++EOF
++      exit 0;;
++      -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
++      echo click-compile '(Click)' $CLICK_VERSION
++      cat <<"EOF"
++Copyright (C) 1999-2001 Massachusetts Institute of Technology
++Copyright (C) 2002 International Computer Science Institute
++Copyright (C) 2004 Regents of the University of California
++This is free software; see the source for copying conditions.
++There is NO warranty, not even for merchantability or fitness for any
++particular purpose.
++EOF
++      exit 0;;
++      -*)
++      if test "$1" = -E -o "$1" = -c -o "$1" = -S; then
++          compileflag=$1
++      else
++          cflags="$cflags '$1'"
++      fi
++      shift 1;;
++      *)
++      bad=;;
++    esac
++    if test -z "$bad"; then break; fi
++done
++
++cd $directory
++
++# test directory function
++test_dir () {
++    test -d "$1" -a -d "$1/elements" -a -d "$1/lib"
++}
++
++# analyze CLICKPATH to find sources
++path=${CLICKPATH-:}
++tried_defaults=
++include_source=
++while true; do
++    case $path in
++      :*)
++      if test -z "$tried_defaults" && test_dir "$srcdir"; then
++          include_source="-I$srcdir"
++      else
++          tried_defaults=y
++      fi
++      path=`echo "$path" | sed 's/://'`
++      ;;
++      *:*)
++      dir=`echo "$path" | sed 's/:.*//'`
++      if test_dir "$dir"; then include_source="-I$dir"; fi
++      path=`echo "$path" | sed 's/[^:]*://'`
++      ;;
++      *:)
++      dir=`echo "$path" | sed 's/:.*//'`
++      if test_dir "$dir"; then include_source="-I$dir"; fi
++      path=":"
++      ;;
++      *)
++      if test_dir "$path"; then include_source="-I$path"; fi
++      path=""
++      ;;
++    esac
++    if test -z "$path" -o -n "$include_source"; then break; fi
++done
++
++if test ! -d "$includedir"; then
++    echo "click-compile: Cannot find Click include directory!" 1>&2
++    echo "  (Have you installed Click yet?)" 1>&2
++    exit 1
++elif test -z "$include_source"; then
++    if test -z "$quiet"; then
++      echo "click-compile: warning: cannot find full Click source" 1>&2
++    fi
++fi
++
++
++case $driver in
++  u|us|use|user|userl|userle|userlev|userleve|userlevel)
++    idefs="-DHAVE_CONFIG_H -DCLICK_USERLEVEL"
++    iincludes="${include_source} -I${includedir}"
++    icppflags=""
++    icxxflags="-fPIC -g -O2 -MD"
++    icflags="-fPIC -g -O2 -MD"
++    command="${CXX-g++ -W -Wall } ${DEFS-$idefs} ${INCLUDES-$iincludes} ${CPPFLAGS-$icppflags} ${CXXFLAGS-$icxxflags} $cflags $compileflag"
++    c_command="${CC-gcc -W -Wall} ${DEFS-$idefs} ${INCLUDES-$iincludes} ${CPPFLAGS-$icppflags} ${CFLAGS-$icflags} $cflags $compileflag"
++    driver=userlevel;;
++  k|ke|ker|kern|kerne|kernel|l|li|lin|linu|linux|linuxm|linuxmo|linuxmod|linuxmodu|linuxmodul|linuxmodule)
++    idefs="-DHAVE_CONFIG_H -DCLICK_LINUXMODULE"
++    iincludes="${include_source} -I${includedir} -I${linuxdir}/include"
++    icppflags=""
++    icxxflags=" -O2 -MD"
++    icflags=" -O2 -MD"
++    command="${CXX-g++ -w -W -Wall -fno-exceptions -fno-rtti  -D__SMP__} ${DEFS-$idefs} ${INCLUDES-$iincludes} ${CPPFLAGS-$icppflags} ${CXXFLAGS-$icxxflags} $cflags $compileflag"
++    c_command="${CC-gcc -W -Wall} ${DEFS-$idefs} ${INCLUDES-$iincludes} ${CPPFLAGS-$icppflags} ${CFLAGS-$icflags} $cflags $compileflag"
++    driver=linuxmodule;;
++  b|bs|bsd|bsdm|bsdmo|bsdmod|bsdmodu|bsdmodul|bsdmodule)
++    idefs="-DHAVE_CONFIG_H -DCLICK_BSDMODULE"
++    iincludes="-nostdinc ${include_source} -I${includedir}"
++    icppflags=""
++    icxxflags=" -O2 -MD"
++    icflags=" -O2 -MD"
++    command="${CXX-g++ -w -W -Wall -fno-exceptions -fno-rtti  -D__SMP__} ${DEFS-$idefs} ${INCLUDES-$iincludes} ${CPPFLAGS-$icppflags} ${CXXFLAGS-$icxxflags} $cflags $compileflag"
++    c_command="${CC-gcc -W -Wall} ${DEFS-$idefs} ${INCLUDES-$iincludes} ${CPPFLAGS-$icppflags} ${CFLAGS-$icflags} $cflags $compileflag"
++    driver=bsdmodule;;
++  ns|nsm|nsmo|nsmod|nsmodu|nsmodul|nsmodule)
++    idefs="-DHAVE_CONFIG_H -DCLICK_NS"
++    iincludes="${include_source} -I${includedir}"
++    icppflags=""
++    icxxflags="-fPIC -g -O2 -MD"
++    icflags="-fPIC -g -O2 -MD"
++    command="${CXX-g++ -W -Wall } ${DEFS-$idefs} ${INCLUDES-$iincludes} ${CPPFLAGS-$icppflags} ${CXXFLAGS-$icxxflags} $cflags $compileflag"
++    c_command="${CC-gcc -W -Wall} ${DEFS-$idefs} ${INCLUDES-$iincludes} ${CPPFLAGS-$icppflags} ${CFLAGS-$icflags} $cflags $compileflag"
++    driver=ns;;
++  t|to|too|tool)
++    idefs="-DHAVE_CONFIG_H -DCLICK_TOOL"
++    iincludes="${include_source} -I${includedir}"
++    icppflags=""
++    icxxflags="-fPIC -g -O2 -MD"
++    icflags="-fPIC -g -O2 -MD"
++    command="${CXX-g++ -W -Wall } ${DEFS-$idefs} ${INCLUDES-$iincludes} ${CPPFLAGS-$icppflags} ${CXXFLAGS-$icxxflags} $cflags $compileflag"
++    c_command="${CC-gcc -W -Wall} ${DEFS-$idefs} ${INCLUDES-$iincludes} ${CPPFLAGS-$icppflags} ${CFLAGS-$icflags} $cflags $compileflag"
++    driver=tool;;
++  "")
++    echo "click-compile: you must specify a driver" 1>&2; exit 1;;
++  *)
++    echo "click-compile: acceptable drivers are 'userlevel', 'linuxmodule'," 1>&2
++    echo "click-compile:   'bsdmodule', and 'tool'" 1>&2; exit 1;;
++esac
++
++exec_command () {
++    if test -z "$quiet"; then
++      echo "$@" 1>&2
++    fi
++    eval "$@" || exit 1
++}
++
++compile_file () {
++    option=
++    source="$1"; shift
++    if test -r "$source"; then
++      option=`head -n 5 $source | grep '^/\*\* click-compile:' | sed -e 's/\/\*\* click-compile://g' -e 's/\*\///g'`
++    fi
++    exec_command $command $option $source "$@"
++}
++
++# do stuff
++if test "x$package" != "xNONE"; then
++    command="$command -DCLICK_PACKAGE"
++    files=; rmfiles=
++    trap 'rm -f $rmfiles' 0
++    trap 'rm -f $rmfiles; exit 1' 1 2 15
++    for file; do
++      if echo "$file" | grep '\.cc*$' >/dev/null 2>&1; then
++          objfile=`echo "$file" | sed 's/\.c*$/'"$$"'\.o/;s/^.*\///'`
++          compile_file $file -o $objfile
++          rmfiles="$rmfiles $objfile "`echo $objfile | sed 's/\.o/\.d/'`
++      else
++          objfile="$file"
++      fi
++      files="$files $objfile"
++    done
++    if test $driver = linuxmodule; then
++      vfile=kernelversion$$
++      test -f $vfile.c && echo "click-compile: A file '$vfile.c' already exists in this directory!" 1>&2 && echo "click-compile: You must remove it, or run me somewhere else." 1>&2 && exit 1
++      files="$files $vfile.o"
++      rmfiles="$rmfiles $vfile.o $vfile.c $vfile.d"
++      cat > $vfile.c <<EOF
++#include <click/config.h>
++#include <linux/module.h>
++/* a new version of EXPORT_NO_SYMBOLS that works */
++const int __ksymtab_nothing[0] __attribute__((section("__ksymtab"))) = { };
++EOF
++      if test $gpl = y; then
++          cat >> $vfile.c <<EOF
++#ifdef MODULE_LICENSE
++MODULE_LICENSE("Dual BSD/GPL");
++#endif
++EOF
++      fi
++      c_command_nowarn=`echo $c_command | sed 's/-W[-a-z]*//g'`
++      exec_command $c_command_nowarn $vfile.c
++      exec_command "ld -r -o $package $cflags $files"
++      exit 0
++    elif test $driver = userlevel -o $driver = tool -o $driver = ns; then
++      exec_command "${CXX-g++ -W -Wall } ${CXXFLAGS-$icxxflags} -shared -o $package $cflags $files"
++      exit 0
++    elif test $driver = bsdmodule; then
++      exec_command "ld -Bshareable -o $package $cflags $files"
++      exit 0
++    fi
++else
++    exec_command "$command $@"
++    exit 0
++fi
+Files click-1.6.0/inst/bin/click-devirtualize and click-1.6.0-27/inst/bin/click-devirtualize differ
+diff -Nurb click-1.6.0/inst/bin/click-elem2man click-1.6.0-27/inst/bin/click-elem2man
+--- click-1.6.0/inst/bin/click-elem2man        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/bin/click-elem2man     2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,1484 @@
++#! /usr/bin/perl -w
++
++# click-elem2man -- creates man pages from structured comments in element
++# source code
++# Eddie Kohler
++# Robert Morris - original make-faction-html script
++#
++# Copyright (c) 1999-2001 Massachusetts Institute of Technology
++# Copyright (c) 2001-2003 International Computer Science Institute
++# Copyright (c) 2006 Regents of the University of California
++#
++# Permission is hereby granted, free of charge, to any person obtaining a
++# copy of this software and associated documentation files (the "Software"),
++# to deal in the Software without restriction, subject to the conditions
++# listed in the Click LICENSE file. These conditions include: you must
++# preserve this copyright notice, and you cannot mention the copyright
++# holders in advertising related to the Software without their permission.
++# The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++# notice is a summary of the Click LICENSE file; the license in that file is
++# legally binding.
++
++my($verbose) = 0;
++
++# information stored about each Click element, indexed by C++ class name
++my(%processing, %deprecated, %portcount, %docrequires, %requires, $PREFIX);
++
++my(%section_break) =
++    ( 'head1' => 1, 'c' => 1, 's' => 1,
++      'io' => 1, 'processing' => 1, 'drivers' => 1,
++      'd' => 1, 'n' => 1, 'e' => 1, 'h' => 1, 'a' => 1, 'title' => 1,
++      'deprecated' => 1, 'package' => 1 );
++my(%section_takes_args) =
++    ( 'head1' => 1, 'c' => 0, 's' => 2,
++      'io' => 2, 'processing' => 2, 'drivers' => 2,
++      'd' => 0, 'n' => 0, 'e' => 0, 'h' => 1, 'a' => 2, 'title' => 1,
++      'deprecated' => 1, 'package' => 2 );
++my(%section_takes_text) =
++    ( 'head1' => 2, 'c' => 1, 's' => 1,
++      'io' => 2, 'processing' => 2, 'drivers' => 2,
++      'd' => 1, 'n' => 1, 'e' => 1, 'h' => 1, 'a' => 2, 'title' => 0,
++      'deprecated' => 0, 'package' => 1 );
++my(%xsection_takes_args) =
++    ( 'head1' => 1, 'head2' => 1, 'item' => 1, 'over' => 1, 'back' => 0,
++      'for' => 1, 'begin' => 1, 'end' => 1, 'start!' => 1, 'name!' => 1,
++      'end!' => 0, 'text' => 0 );
++my(%infosection_name) =
++    ( 'package' => 'Package', 'io' => 'Ports', 'processing' => 'Processing',
++      'drivers' => 'Drivers' );
++
++my $section = 'n';
++my $package;
++my $uninstall = 0;
++my(@all_outnames, %all_outsections, %summaries_by_section, %all_roff_summaries);
++
++my(%processing_constants) =
++    ( 'AGNOSTIC' => 'a/a', 'PUSH' => 'h/h', 'PULL' => 'l/l',
++      'PUSH_TO_PULL' => 'h/l', 'PULL_TO_PUSH' => 'l/h' );
++my(%processing_text) =
++    ( 'a/a' => 'agnostic', 'h/h' => 'push', 'l/l' => 'pull',
++      'h/l' => 'push inputs, pull outputs',
++      'l/h' => 'pull inputs, push outputs',
++      'a/ah' => 'agnostic, but output 1 is push' );
++
++my(@section_headers) =
++    ( 'basicsources'          => 'Basic Sources and Sinks',
++      'classification'                => 'Basic Classification and Selection',
++      'basictransfer'         => 'Basic Packet Transfer',
++      'counters'              => 'Counters',
++      'timestamps'            => 'Timestamps',
++      'basicmod'              => 'Basic Packet Modification',
++      'storage'                       => 'Packet Storage',
++      'aqm'                   => 'Active Queue Management',
++      'scheduling'            => 'Packet Scheduling',
++      'shaping'                       => 'Traffic Shaping',
++      'information'           => 'Information Elements',
++      'netdevices'            => 'Network Devices',
++      'comm'                  => 'Host and Socket Communication',
++      'ethernet'              => 'Ethernet',
++      'arp'                   => 'ARP',
++      'ip'                    => 'IPv4',
++      'iproute'                       => 'IPv4 Routing',
++      'icmp'                  => 'ICMP',
++      'nat'                   => 'Network Address Translation',
++      'tcp'                   => 'TCP',
++      'udp'                   => 'UDP',
++      'app'                   => 'Applications',
++      'traces'                        => 'Trace Manipulation',
++      'ipmeasure'             => 'TCP/IP Measurement',
++      'aggregates'            => 'Aggregates',
++      'ip6'                   => 'IPv6',
++      'ipsec'                 => 'IPsec',
++      'crc'                   => 'CRCs',
++      'paint'                 => 'Paint Annotations',
++      'annotations'           => 'Annotations',
++      'debugging'             => 'Debugging',
++      'control'                       => 'Control',
++      'smpclick'              => 'Multithreaded Click',
++      'test'                  => 'Regression Tests'
++      );
++my(%section_headers);
++for (my $i = 0; $i < @section_headers; $i += 2) {
++    $section_headers{$section_headers[$i]} = $section_headers[$i+1];
++}
++
++my(%default_packages) =
++    ( 'analysis'              => 'analysis (core)',
++      'app'                   => 'app (core)',
++      'aqm'                   => 'aqm (core)',
++      'bsdmodule'             => 'bsdmodule (core)',
++      'ethernet'              => 'ethernet (core)',
++      'etherswitch'           => 'etherswitch (core)',
++      'grid'                  => 'grid (core)',
++      'icmp'                  => 'icmp (core)',
++      'ip'                    => 'ip (core)',
++      'ip6'                   => 'ip6 (core)',
++      'ipsec'                 => 'ipsec (core)',
++      'linuxmodule'           => 'linuxmodule (core)',
++      'local'                 => 'local (core)',
++      'ns'                    => 'ns (core)',
++      'radio'                 => 'radio (core)',
++      'simple'                        => 'simple (core)',
++      'standard'              => 'standard (core)',
++      'tcpudp'                        => 'tcpudp (core)',
++      'test'                  => 'test (core)',
++      'userlevel'             => 'userlevel (core)',
++      'wifi'                  => 'wifi (core)'
++      );
++
++# find date
++my($today) = '';
++if (localtime =~ /\w*\s+(\w*)\s+(\d*)\s+\S*\s+(\d*)/) {
++  $today = "$2/$1/$3";
++}
++
++# Unrolling [^A-Z>]|[A-Z](?!<) gives:    // MRE pp 165.
++my $nonest = '(?:[^A-Z>]*(?:[A-Z](?!<)[^A-Z>]*)*)';
++
++
++# XXX one paragraph at a time
++
++my($Filename, $PrimaryElement, @Related, %RelatedSource, @Over, $Begun);
++
++
++############
++## shared ##
++
++sub textize_add_links ($$) {
++    my($t, $selfref) = @_;
++    my($pos);
++
++    # embolden & manpageize
++    foreach my $r (@Related) {
++      my $l = length($r);
++      my $result = ($r eq $PrimaryElement ? "$selfref<$r>" : "L<$r>");
++      for ($pos = index($t, $r); $pos >= 0; $pos = index($t, $r, $pos + 1)) {
++          if (($pos == 0 || substr($t, $pos - 1, 1) =~ /^[^\w@\/<]$/s)
++              && (substr($t, $pos + $l, 1) =~ /^[^\w@\/]$/s)) {
++              substr($t, $pos, $l) = $result;
++              $pos += 2 + $l;
++          }
++      }
++    }
++    $t;
++}
++
++sub quote_unquoted_gt ($) {
++    my($t) = @_;
++    my($tt, $nest, $pos) = ('', 0);
++    for ($pos = index($t, ">"); $pos >= 0; $pos = index($t, ">")) {
++      my($w) = substr($t, 0, $pos);
++      $nest++ while $w =~ m|[A-Z]<|g;
++      if ($nest) {
++          $tt .= $w . ">";
++          $nest--;
++      } else {
++          $tt .= $w . "E<gt>";
++      }
++      $t = substr($t, $pos + 1);
++    }
++    $tt . $t;
++}
++
++
++###########
++## nroff ##
++
++my $nroff_prologue = <<'EOD;';
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++EOD;
++chomp $nroff_prologue;
++
++my(%nroff_podentities) =
++    ( 'lt' => '<', 'gt' => '>', 'amp' => '&', 'solid' => '/',
++      'verbar' => '|', 'eq' => '=', 'star' => '*', 'lparen' => '(',
++      'rparen' => ')', 'lbrack' => '[', 'rbrack' => ']', 'lbrace' => '{',
++      'rbrace' => '}' );
++
++sub nroff_quote ($) {
++    my($x) = @_;
++    $x =~ tr/\000-\177/\200-\377/;
++    $x;
++}
++
++sub nroff_unentity ($) {
++    my($x) = @_;
++    $x =~ tr/\200-\377/\000-\177/;
++    if ($x =~ /^\d+$/) {
++      chr($x);
++    } elsif ($nroff_podentities{$x}) {
++      $nroff_podentities{$x};
++    } else {
++      print STDERR "click-elem2man: $Filename: unknown entity E<$x>\n";
++      "";
++    }
++}
++
++sub nroff_fixfP ($$) {
++    my($x, $f) = @_;
++    $x =~ s/\\fP/\\f$f/g;
++    $x;
++}
++
++sub nroffize_text ($) {
++    my($t) = @_;
++    my($s);
++
++    # embolden & manpageize
++    $t = textize_add_links($t, 'L');
++  
++    $t =~ s/\\/\\\\/g;
++    $t =~ s/^\./\\&./gm;
++    $t =~ s/^'/\\&'/gm;
++    $t =~ s/^\s*$/.PP\n/gm;
++    $t =~ s/^\.PP\n(?:\.PP\n)+/.PP\n/gm;
++    $t =~ s{\A\s*(?:\.PP\n)?}{}s;
++    if (@Over > 0) {
++      $t =~ s/^\.PP$/.IP \"\" $Over[-1]/gm;
++    }
++
++    # get rid of entities
++    $t =~ s{[\200-\377]}{"E<" . ord($1) . ">"}ge;
++    $t =~ s{(E<[^>]*>)}{nroff_quote($1)}ge;
++  
++    my $maxnest = 10;
++    while ($maxnest-- && $t =~ /[A-Z]</) {
++    
++      # can't do C font here
++      $t =~ s/([BI])<($nonest)>/"\\f$1" . nroff_fixfP($2, $1) . "\\fP"/eg;
++      $t =~ s/[PU]<($nonest)>/$1/g;
++    
++      # files and filelike refs in italics
++      $t =~ s/F<($nonest)>/I<$1>/g;
++    
++      # LREF: man page references
++      $t =~ s{L<($nonest)\(([\dln])\)>(\S*)(\s*)}{\n.M $1 $2 $3\n}g;
++    
++      $t =~ s/V<($nonest)>//g;
++    
++      # LREF: a la HREF L<show this text|man/section>
++      $t =~ s{L<($nonest)>(\S*)(\s*)}{
++          if (($s = $RelatedSource{$1})) {
++              "\n.M $1 \"$s\" $2\n";
++          } else {
++              my $i = index($1, "|");
++              ($i >= 0 ? substr($1, 0, $i) . $2 . $3 : "\\fB$1\\fP$2$3");
++          }
++      }eg;
++    
++      $t =~ s/Z<>/\\&/g;
++      $t =~ s/N<>(\n?)/\n.br\n/g;
++
++      # comes last because not subject to reprocessing
++      $t =~ s/C<($nonest)>/"\\f(CW" . nroff_fixfP($1, 'R') . "\\fP"/eg;
++    }
++
++    # replace entities
++    $t =~ s/\305\274([^\276]*)\276/nroff_unentity($1)/ge;
++  
++    # fix fonts
++    $t =~ s/\\fP/\\fR/g;
++
++    # fix manual
++    $t =~ s/\n\.M (\S+) \"(\S+)\" (\(\2\))/\n.M $1 \"$2\" /sg;
++    
++    $t =~ s/\n+/\n/sg;
++    $t =~ s/^\n+//;
++    $t =~ s/\n+$//;
++
++    $t;
++}
++
++sub nroffize ($) {
++    my($t) = @_;
++    # $t cannot contain \t, as all \ts have been expanded to spaces below
++
++    #$t =~ s{\n[ \r]+$}{\n}gm;
++
++    if ($t =~ /^ /m) {
++      # worry about verbatims
++      $t =~ s/^( .*)\n(\n+)(?= )/$1 . "\n" . (" \n" x length($2))/mge;
++      my(@x) = split(/(^ .*$)/m, $t);
++      my($o, $i) = '';
++      for ($i = 0; $i < @x; $i += 2) {
++          if ($x[$i]) {
++              $o .= nroffize_text($x[$i]) . "\n";
++          }
++          if ($x[$i+1]) {
++              $x[$i+1] =~ s/\\/\\e/g;
++              $o .= ".nf\n\\&" . $x[$i+1] . "\n.fi\n.PP\n";
++          }
++      }
++      $o =~ s/\n\.fi\n\.PP\n\n\.nf\n/\n/g;
++      if (@Over > 0) {
++          $o =~ s/^\.PP$/.IP \"\" $Over[-1]/gm;
++      }
++      $o;
++    } else {
++      nroffize_text($t);
++    }
++}
++
++sub nroff_do_section ($$$) {
++    my($name, $args, $text) = @_;
++    if (!exists($xsection_takes_args{$name})) {
++      print STDERR "click-elem2man: $Filename: unknown section '=$name' ignored\n";
++      return;
++    }
++    print STDERR "click-elem2man: $Filename: section '=$name' requires arguments\n"
++      if ($xsection_takes_args{$name} && !$args);
++
++    # handle '=begin' .. '=end'
++    if ($name eq 'end') {
++      undef $Begun;
++    } elsif ($Begun && ($Begun eq 'man' || $Begun eq 'roff')) {
++      print OUT '=', $name, ($args ? ' ' . $args : ''), "\n", $text;
++      return;
++    } elsif ($Begun) {
++      return;
++    }
++  
++    if ($name eq 'head1') {
++      print OUT ".SH \"", nroffize($args), "\"\n";
++    } elsif ($name eq 'head2') {
++      print OUT ".SS \"", nroffize($args), "\"\n";
++    } elsif ($name eq 'over') {
++      if ($args =~ /^\s*(\d+)\s*$/s) {
++          print OUT ".RS $Over[-1]\n" if @Over;
++          push @Over, $1;
++      } else {
++          print STDERR "click-elem2man: $Filename: bad arguments to '=over'\n";
++      }
++    } elsif ($name eq 'item') {
++      if (@Over == 0) {
++          print STDERR "click-elem2man: $Filename: '=item' outside any '=over' section\n";
++      } else {
++          print OUT ".IP \"", nroffize($args), "\" $Over[-1]\n";
++      }
++    } elsif ($name eq 'back') {
++      my($overarg);
++      if ($args =~ /^\s*(\d+)\s*$/s) {
++          $overarg = $1;
++      } elsif ($args !~ /^\s*$/s) {
++          print STDERR "click-elem2man: $Filename: bad arguments to '=back'\n";
++      }
++      if (@Over == 0) {
++          print STDERR "click-elem2man: $Filename: too many '=back's\n";
++      } else {
++          my($over) = pop @Over;
++          print OUT ".RE\n" if @Over;
++          print OUT (@Over ? ".IP \"\" $Over[-1]\n" : ".PP\n");
++          print STDERR "click-elem2man: $Filename: '=back $overarg' paired with '=over $over'\n"
++              if defined($overarg) && $over != $overarg;
++      }
++    } elsif ($name eq 'for') {
++      my($fortext);
++      if ($text =~ /^(.*)\n\s*\n(.*)$/s) {
++          ($fortext, $text) = ($1, $2);
++      } else {
++          ($fortext, $text) = ($text, '');
++      }
++      if ($args =~ /^\s*(man|roff)\s*(.*)/) {
++          print OUT $2, $fortext;
++      }
++    } elsif ($name eq 'begin') {
++      $Begun = $args;
++      $Begun =~ s/^\s*(\S+).*/$1/;
++      if ($Begun eq 'man' || $Begun eq 'roff') {
++          print OUT $text;
++      }
++      return;
++    } elsif ($name eq 'start!') {
++      print OUT <<"EOD;";
++.\\" -*- mode: nroff -*-
++.\\" Generated by 'click-elem2man' from '$Filename'
++$nroff_prologue
++.TH "\U$text\E" $args "$today" "Click"
++EOD;
++      return;
++    } elsif ($name eq 'name!') {
++      print OUT <<"EOD;";
++.SH "NAME"
++$args \\- $text
++EOD;
++      return;
++    } elsif ($name eq 'end!') {
++      return;
++    }
++
++    print OUT nroffize($text), "\n";
++    print OUT "\n" if $name eq 'head1';
++}
++
++
++##############
++## dokuwiki ##
++
++my($dokuwiki_dl);
++
++my(%dokuwiki_podentities) =
++    ( 'lt' => '<', 'gt' => "\xFF\xFF", 'amp' => '&', 'solid' => '/',
++      'verbar' => '|', 'eq' => '=', 'star' => '*', 'lparen' => '(',
++      'rparen' => ')', 'lbrack' => '[', 'rbrack' => ']', 'lbrace' => '{',
++      'rbrace' => '}' );
++my($dokuwiki_sensitive_char) = "[!%'\\(\\)\\*\\+/?\\[\\\\\\]_\\{\\}]";
++
++sub dokuwiki_unentity ($) {
++    my($x) = @_;
++    if ($x =~ /^\d+$/) {
++      $x = pack 'U', $x;
++      if ($x =~ /\A$dokuwiki_sensitive_char\Z/) {
++          "%%$x%%";
++      } else {
++          $x;
++      }
++    } elsif ($dokuwiki_podentities{$x}) {
++      $dokuwiki_podentities{$x};
++    } else {
++      print STDERR "click-elem2man: $Filename: unknown entity E<$x>\n";
++      "";
++    }
++}
++
++sub dokuwiki_quotedbl ($) {
++    my($x) = @_;
++    $x =~ s/^(.)/\%\%$1\%\%/;
++    $x;
++}
++
++sub dokuwiki_surround ($$) {
++    my($text, $chr) = @_;
++    my($re) = "\\$chr\\$chr";
++    $text =~ s{$re}{}g;
++    "$chr$chr$text$chr$chr";
++}
++
++sub dokuwikiize_text ($) {
++    my($t) = @_;
++
++    # embolden & manpageize
++    $t = textize_add_links($t, 'P');
++    
++    # get rid of entities
++    $t =~ s{E<([^>]*)>}{dokuwiki_unentity($1)}ge;
++    $t =~ s{($dokuwiki_sensitive_char)}{^$1^}g;
++
++    my $maxnest = 10;
++    while ($maxnest-- && $t =~ /[A-Z]</) {
++    
++      # can't do C font here
++      $t =~ s/B<($nonest)>/dokuwiki_surround($1, "*")/eg;
++      $t =~ s.I<($nonest)>.dokuwiki_surround($1, "/").eg;
++      $t =~ s.U<($nonest)>.dokuwiki_surround($1, "_").eg;
++      $t =~ s/P<($nonest)>/$1/g;
++      $t =~ s/C<($nonest)>/dokuwiki_surround($1, "'")/eg;
++    
++      # files and filelike refs in italics
++      $t =~ s/F<($nonest)>/I<$1>/g;
++    
++      # LREF: man page references
++      $t =~ s{L<($nonest)\^\(\^[\dln]\^\)\^>}{[[$1]]}g;
++      $t =~ s{L<($nonest)>\^\(\^[\dln]\^\)\^}{[[$1]]}g;
++    
++      # LREF: a la HREF L<show this text|man/section>
++      $t =~ s{L<($nonest)\|($nonest)>}{[[$2|$1]]}g;
++      $t =~ s{L<($nonest)>}{[[$1]]}g;
++
++      $t =~ s/V<($nonest)>//g;
++      $t =~ s/Z<>//g;
++      $t =~ s/N<>(\n?)/\\\\ /g;
++    }
++    
++    $t =~ s/\n+/\n/sg;
++    $t =~ s/^\n+//;
++    $t =~ s/\n+$//;
++    $t =~ s/\xFF\xFF/>/g;
++
++    $t =~ s{^(\s*)\^([?!])\^}{$1 . dokuwiki_quotedbl($2)}egm;
++    $t =~ s{($dokuwiki_sensitive_char)\^\1\^}{$1 . dokuwiki_quotedbl($1)}eg;
++    $t =~ s{\^($dokuwiki_sensitive_char)\^\1}{dokuwiki_quotedbl($1) . $1}eg;
++    $t =~ s{\^($dokuwiki_sensitive_char)\^}{$1}g;
++
++    # remove self references
++    $t =~ s{\[\[$PrimaryElement\]\]}{$PrimaryElement}g;
++
++    $t;
++}
++
++sub dokuwikiize ($) {
++    my($t) = @_;
++    # $t cannot contain \t, as all \ts have been expanded to spaces below
++
++    if ($t =~ /^ /m) {
++      # worry about verbatims
++      $t =~ s/^( .*)\n(\n+)(?= )/$1 . "\n" . (" \n" x length($2))/mge;
++      my(@x) = split(/(^ .*$)/m, $t);
++      my($o, $i) = '';
++      for ($i = 0; $i < @x; $i += 2) {
++          if ($x[$i]) {
++              $o .= dokuwikiize_text($x[$i]);
++              $o .= "\n" if $o !~ /\n\Z/;
++          }
++          if ($x[$i+1]) {
++              $o .= "  " . $x[$i+1] . "\n";
++          }
++      }
++      $o;
++    } else {
++      dokuwikiize_text($t);
++    }
++}
++
++sub dokuwiki_do_section ($$$) {
++    my($name, $args, $text) = @_;
++    if (!exists($xsection_takes_args{$name})) {
++      print STDERR "click-elem2man: $Filename: unknown section '=$name' ignored\n";
++      return;
++    }
++    print STDERR "click-elem2man: $Filename: section '=$name' requires arguments\n"
++      if ($xsection_takes_args{$name} && !$args);
++
++    # handle '=begin' .. '=end'
++    if ($name eq 'end') {
++      undef $Begun;
++    } elsif ($Begun && $Begun eq 'dokuwiki') {
++      print OUT '=', $name, ($args ? ' ' . $args : ''), "\n", $text;
++      return;
++    } elsif ($Begun) {
++      return;
++    }
++    
++    if ($name eq 'head1') {
++      print OUT "\n===== ", dokuwikiize($args), " =====\n\n";
++    } elsif ($name eq 'head2') {
++      print OUT "\n==== ", dokuwikiize($args), " ====\n\n";
++    } elsif ($name eq 'over') {
++      if ($args =~ /^\s*(\d+)\s*$/s) {
++          push @Over, $1;
++      } else {
++          print STDERR "click-elem2man: $Filename: bad arguments to '=over'\n";
++      }
++    } elsif ($name eq 'item') {
++      if (@Over == 0) {
++          print STDERR "click-elem2man: $Filename: '=item' outside any '=over' section\n";
++      } else {
++          print OUT "\n", ' ' x @Over, "? " if $dokuwiki_dl;
++          print OUT dokuwikiize("B<" . quote_unquoted_gt($args) . ">");
++          print OUT ($dokuwiki_dl ? "\n" : "\n\n");
++      }
++    } elsif ($name eq 'back') {
++      my($overarg);
++      if ($args =~ /^\s*(\d+)\s*$/s) {
++          $overarg = $1;
++      } elsif ($args !~ /^\s*$/s) {
++          print STDERR "click-elem2man: $Filename: bad arguments to '=back'\n";
++      }
++      if (@Over == 0) {
++          print STDERR "click-elem2man: $Filename: too many '=back's\n";
++      } else {
++          my($over) = pop @Over;
++          print STDERR "click-elem2man: $Filename: '=back $overarg' paired with '=over $over'\n"
++              if defined($overarg) && $over != $overarg;
++      }
++    } elsif ($name eq 'for') {
++      my($fortext);
++      if ($text =~ /^(.*)\n\s*\n(.*)$/s) {
++          ($fortext, $text) = ($1, $2);
++      } else {
++          ($fortext, $text) = ($text, '');
++      }
++      if ($args =~ /^\s*dokuwiki\s*(.*)/) {
++          print OUT $2, $fortext;
++      }
++    } elsif ($name eq 'begin') {
++      $Begun = $args;
++      $Begun =~ s/^\s*(\S+).*/$1/;
++      if ($Begun eq 'dokuwiki') {
++          print OUT $text;
++      }
++      return;
++    } elsif ($name eq 'start!') {
++      return;
++    } elsif ($name eq 'name!') {
++      print OUT <<"EOD;";
++====== $args Element Documentation ======
++
++===== NAME =====
++
++**$args** -- $text
++EOD;
++      return;
++    } elsif ($name eq 'end!') {
++      print OUT "\n\nGenerated by 'click-elem2man' from '$Filename' on $today.\n";
++      return;
++    }
++
++    print OUT ' ' x @Over, "! " if $text =~ /\S/ && @Over && $dokuwiki_dl;
++    print OUT dokuwikiize($text), "\n";
++    print OUT "\n" if $name eq 'head1';
++}
++
++
++###########
++## main  ##
++
++my $do_section_func = \&nroff_do_section;
++my $do_text_func = \&nroffize;
++my $filename_func;
++
++sub do_section ($$$) {
++    my($name, $args, $text) = @_;
++    my(@text) = split(/^(=\w.*)$/m, $text);
++    push @text, '' if !@text;
++    my($i);
++    @Over = ();
++    undef $Begun;
++    for ($i = 0; $i < @text; ) {
++      &$do_section_func($name, $args, $text[$i]);
++      ($name, $args) = ($text[$i+1] =~ /=(\w+)\s*(.*)/)
++          if ($i < @text - 1);
++      $i += 2;
++    }
++    &$do_section_func('back', '', '') while @Over;
++    print STDERR "click-elem2man: $Filename: '=begin' not closed by end of section\n"
++      if $Begun;
++}
++
++sub process_processing ($) {
++    my($t) = @_;
++    return undef if !defined($t);
++    if (exists($processing_constants{$t})) {
++      $t = $processing_constants{$t};
++    }
++    $t =~ tr/\" \t//d;
++    $t =~ s{\A([^/]*)\Z}{$1/$1};
++    $processing_text{$t};
++}
++
++sub process_one_portcount ($$) {
++    my($t, $type) = @_;
++    if ($t eq '0') {
++      "no ${type}s";
++    } elsif ($t eq '-') {
++      "any number of ${type}s";
++    } elsif ($t eq '1') {
++      "1 $type";
++    } elsif ($t eq '=') {
++      "the same number of ${type}s";
++    } elsif ($t =~ /^=(\++)$/) {
++      length($1) . " more $type";
++    } elsif ($t =~ /^0?-1$/) {
++      "at most 1 $type";
++    } elsif ($t =~ /^0?-(.*)/) {
++      "at most $1 ${type}s";
++    } elsif ($t =~ /^(\d+)-$/) {
++      "$1 or more ${type}s";
++    } else {
++      "$t ${type}s";
++    }
++}
++
++sub process_portcount ($) {
++    my($t) = @_;
++    $t = "$t/$t" if $t !~ /\//;
++    return 'none' if $t eq '0/0';
++    my($i, $o) = split(/\//, $t);
++    process_one_portcount($i, "input") . ", " . process_one_portcount($o, "output");
++}
++
++sub process_summary_section ($$) {
++    my($summary, $file) = @_;
++    my($i);
++    foreach $i (split(/,/, $summary)) {
++      $i =~ s/^\s*//;
++      $i =~ s/\s*$//;
++      $i = $section_headers{$i} if exists $section_headers{$i};
++      next if !$i;
++      push @{$summaries_by_section{$i}}, $file;
++    }
++}
++
++sub process_drivers ($) {
++    my($driv) = @_;
++    my(@d, $d);
++    foreach $d ('userlevel', 'linuxmodule', 'bsdmodule', 'ns') {
++      push @d, $d if $driv =~ /\b$d\b/;
++    }
++    join(', ', @d);
++}
++
++sub insert_section (\@\@\@$$$$) {
++    my($sn, $sa, $st, $i, $n, $a, $t) = @_;
++    splice @$sn, $i, 0, $n;
++    splice @$sa, $i, 0, $a;
++    splice @$st, $i, 0, $t;
++}
++
++sub insert_section2 (\@\@\@$$$\%@) {
++    my($sn, $sa, $st, $n, $a, $t, $fis, @x) = @_;
++    my($pos);
++    foreach $pos (@x) {
++      if (exists $fis->{$pos}) {
++          insert_section(@$sn, @$sa, @$st, $fis->{$pos} + 1, $n, $a, $t);
++          $fis->{$n} = $fis->{$pos} + 1;
++          return;
++      }
++    }
++}
++
++sub process_comment ($$) {
++    my($t, $filename) = @_;
++    my($i);
++    $Filename = $filename;
++
++    # split document into sections
++    my(@section_text, @section_args, @section_name, $bad_section, $ref);
++    $ref = \$bad_section;
++    while ($t =~ m{^=(\w+)( *)(.*)([\0-\377]*?)(?=^=\w|\Z)}mg) {
++      if ($section_break{$1}) {
++          insert_section(@section_name, @section_args, @section_text,
++                         @section_name, $1, $3, $4);
++          $ref = \$section_text[-1];
++      } else {
++          $$ref .= '=' . $1 . $2 . $3 . $4;
++      }
++    }
++
++    # check document for sectioning errors
++    print STDERR "click-elem2man: $Filename: warning: comment does not start with section\n"
++      if $bad_section;
++    my(%num_sections, %first_in_section);
++    foreach $i (0..$#section_name) {
++      my($n) = $section_name[$i];
++      print STDERR "click-elem2man: $Filename: warning: section '=$n' requires arguments\n"
++          if $section_takes_args{$n} == 1 && !$section_args[$i];
++      print STDERR "click-elem2man: $Filename: warning: section '=$n' arguments ignored\n"
++          if $section_takes_args{$n} == 0 && $section_args[$i];
++      print STDERR "click-elem2man: $Filename: warning: empty section '=$n'\n"
++          if $section_takes_text{$n} == 1 && !$section_text[$i];
++      print STDERR "click-elem2man: $Filename: warning: section '=$n' text ignored\n"
++          if $section_takes_text{$n} == 0 && $section_text[$i] =~ /\S/;
++      $num_sections{$n}++;
++      $first_in_section{$n} = $i if $num_sections{$n} == 1;
++    }
++    foreach $i ('a', 'c', 'd', 'n', 'e', 'title', 'io', 'processing', 'drivers') {
++      print STDERR "click-elem2man: $Filename: warning: multiple '=$i' sections; some may be ignored\n"
++          if $num_sections{$i} && $num_sections{$i} > 1;
++    }
++
++    # read class names from configuration arguments section
++    $i = $first_in_section{'c'};
++    if (!defined($i)) {
++      print STDERR "click-elem2man: $Filename: section '=c' missing; cannot continue\n";
++      return;
++    }
++    my(@classes, %classes);
++    while ($section_text[$i] =~ /^\s*(\w+)\(/mg) {
++      push @classes, $1 if !exists $classes{$1};
++      $classes{$1} = 1;
++    }
++    if (!@classes && $section_text[$i] =~ /^\s*([\w@]+)\s*$/) {
++      push @classes, $1;
++      $classes{$1} = 1;
++    }
++    if (!@classes) {
++      print STDERR "click-elem2man: $Filename: no class definitions\n    (did you forget '()' in the =c section?)\n";
++      return;
++    }
++    my($Title) = $classes[0];
++
++    # output filenames might be specified in 'title' section
++    my(@outfiles, @outsections, $title);
++    if (defined($first_in_section{'title'})) {
++      $title = $section_args[ $first_in_section{'title'} ];
++      if (!$title) {
++          print STDERR "click-elem2man: $Filename: '=title' section present, but empty\n";
++          return;
++      }
++      if ($title =~ /[^-.\w@+,]/) {
++          print STDERR "click-elem2man: $Filename: strange characters in '=title', aborting\n";
++          return;
++      }
++      foreach $i (split(/\s+/, $title)) {
++          if ($i =~ /^(.*)\((.*)\)$/) {
++              push @outfiles, $1;
++              push @outsections, $2;
++              $Title = $1;
++          } else {
++              push @outfiles, $i;
++              push @outsections, $section;
++              $Title = $i;
++          }
++      }
++    } else {
++      $title = join(', ', @classes);
++      @outfiles = @classes;
++      @outsections = ($section) x @classes;
++    }
++
++    # open new output file if necessary
++    my($main_outname);
++    if ($filename_func) {
++      $main_outname = &$filename_func($outfiles[0], $outsections[0]);
++      if ($uninstall) {
++          print STDERR "Uninstalled $main_outname\n" if $verbose;
++          unlink($main_outname);
++          open(OUT, ">/dev/null");
++      } elsif (open(OUT, ">$main_outname")) {
++          print STDERR "Writing to $main_outname\n" if $verbose;
++      } else {
++          print STDERR "$main_outname: $!\n";
++          return;
++      }
++    }
++    push @all_outfiles, $outfiles[0];
++    $all_outsections{$outfiles[0]} = $outsections[0];
++    $PrimaryElement = $outfiles[0];
++
++    # prepare related
++    %RelatedSource = ();
++    $i = $first_in_section{'a'};
++    if (defined($i)) {
++      $section_text[$i] = $section_args[$i] . $section_text[$i]
++          if $section_args[$i];
++      if ($section_text[$i] =~ /\A\s*(.*?)(\n\s*\n.*\Z|\Z)/s) {
++          my($bit, $last) = ($1, $2);
++          while ($bit =~ m{(\b[A-Z][-\w@.+=]+)([,\s]|\Z)}g) {
++              $RelatedSource{$1} = 'n';
++          }
++          $bit =~ s{([-\w@.+=]+)([,\s]|\Z)}{$1(n)$2}g;
++          while ($bit =~ m{([-\w@.+=]+\(([0-9ln])\))}g) {
++              $RelatedSource{$1} = $2;
++          }
++          $section_text[$i] = $bit . $last;
++      }
++    }
++    map(delete $RelatedSource{$_}, @outfiles);
++    @Related = sort { length($b) <=> length($a) } (keys %RelatedSource, @classes);
++
++    # front matter
++    my($oneliner) = (@classes == 1 ? "Click element" : "Click elements");
++    $i = $first_in_section{'s'};
++    my($summary_section) = '';
++    if (defined($i)) {
++      $summary_section = $section_args[$i];
++      process_summary_section($summary_section, $outfiles[0]);
++      $section_text[$i] =~ s/\n\s*\n/\n/g;
++      my($t) = &$do_text_func($section_text[$i]);
++      $oneliner .= ";\n" . $t;
++      $oneliner =~ s/\n(^\.)/ /g;
++      $all_roff_summaries{$outfiles[0]} = $t . "\n";
++    } else {
++      # avoid uninitialized value warns
++      $all_roff_summaries{$outfiles[0]} = '';
++    }
++
++    # deprecation
++    if (defined($first_in_section{'deprecated'})) {
++      $deprecated{$outfiles[0]} = $section_text[$first_in_section{'deprecated'}];
++    }
++
++    # package
++    if (!defined($first_in_section{'package'}) && defined($package)) { PACKAGE: {
++      my($pkg) = $package;
++      if ($pkg eq 'DEFAULT') {
++          $pkg = $1 if $Filename =~ m|\belements/(\w+)/|;
++          $pkg = 'standard' if $Filename =~ m|\binclude/click/standard/|;
++          last PACKAGE if $pkg eq 'DEFAULT';
++          $pkg = exists($default_packages{$pkg}) ? $default_packages{$pkg} : $pkg;
++      }
++      insert_section2(@section_name, @section_args, @section_text,
++                      'package', '', $pkg,
++                      %first_in_section, 'drivers', 'processing', 'io', 'c');
++    }}
++
++    # drivers
++    my($drivers);
++    if ($docrequires{$Title}
++      && ($drivers = process_drivers($docrequires{$Title}))
++      && !defined($first_in_section{'drivers'})) {
++      insert_section2(@section_name, @section_args, @section_text,
++                      'drivers', '', $drivers,
++                      %first_in_section, 'processing', 'io', 'c');
++    }
++      
++    # processing
++    if (!defined($first_in_section{'processing'})) { PROCESSING: {
++      # can we figure out the processing type?
++      last PROCESSING
++          if (defined($first_in_section{'io'}) && $section_text[$first_in_section{'io'}] =~ /None/i) || (defined($portcount{$Title}) && ($portcount{$Title} eq '0' || $portcount{$Title} eq '0/0'));
++      my($ptype) = process_processing($processing{$Title});
++      insert_section2(@section_name, @section_args, @section_text,
++                      'processing', '', $ptype,
++                      %first_in_section, 'io', 'c') if $ptype;
++    }}
++
++    # input/output
++    if (!defined($first_in_section{'io'})) { PORTCOUNT: {
++      last PORTCOUNT if !defined($portcount{$Title});
++      insert_section2(@section_name, @section_args, @section_text,
++                      'io', '', process_portcount($portcount{$Title}),
++                      %first_in_section, 'c');
++    }}
++
++    # initial sections
++    insert_section(@section_name, @section_args, @section_text,
++                 0, 'start!', $outsections[0], $title);
++    insert_section(@section_name, @section_args, @section_text,
++                 1, 'name!', $title, $oneliner);
++    insert_section(@section_name, @section_args, @section_text,
++                 @section_name, 'end!', $outsections[0], $title);    
++
++    # output
++    my($special_section) = 0;
++    for ($i = 0; $i < @section_text; $i++) {
++      my($s) = $section_name[$i];
++      my($x) = $section_text[$i];
++      my($was_special_section) = $special_section;
++      $special_section = 0;
++      
++      if ($s eq 'c') {
++          $x =~ s{(\S\s*)\n}{$1N<>\n}g;
++          $x =~ s{N<>\n*\z}{};
++          do_section('head1', 'SYNOPSIS', $x);
++      } elsif ($s eq 'package' || $s eq 'io' || $s eq 'processing'
++               || $s eq 'drivers') {
++          $x =~ s/\A\s+//;
++          $x =~ s/\s+\Z//;
++          do_section('text', '', 'B<' . $infosection_name{$s} . '>: ' . $x . 'N<>');
++      } elsif ($s eq 'io') {
++          do_section('head1', 'INPUTS AND OUTPUTS', $x);
++      } elsif ($s eq 'processing') {
++          do_section('head1', 'PROCESSING TYPE', $x);
++      } elsif ($s eq 'd') {
++          do_section('head1', 'DESCRIPTION', $x);
++      } elsif ($s eq 'n') {
++          do_section('head1', 'NOTES', $x);
++      } elsif ($s eq 'e') {
++          do_section('head1', 'EXAMPLES', $x);
++      } elsif ($s eq 'h') {
++          my($t) = "=over 5\n";
++          while ($i < @section_text && $section_name[$i] eq 'h') {
++              if ($section_args[$i] =~ /\A\s*(.*?)\s*"(.*?)"\s*\Z/
++                  || $section_args[$i] =~ /\A\s*(.*?)\s*(\S+)\s*\Z/) {
++                  $t .= "=item B<$1> ($2)\n";
++              } else {
++                  print STDERR "click-elem2man: $Filename: bad handler section arguments ('=h $section_args[$i]')\n";
++                  $t .= "=item B<$section_args[$i]>\n";
++              }
++              $t .= $section_text[$i] . "\n";
++              $i++;
++          }
++          $i--;
++          do_section('head1', 'ELEMENT HANDLERS', $t);
++      } elsif ($s eq 'a') {
++          do_section('head1', 'SEE ALSO', $x);
++      } elsif ($s eq 'title' || $s eq 's' || $s eq 'deprecated') {
++          # nada
++      } else {
++          do_section($s, $section_args[$i], $x);
++      }
++    }
++
++    # close output file & make links if appropriate
++    if ($filename_func) {
++      close OUT;
++      for ($i = 1; $i < @outfiles; $i++) {
++          my($outname) = &$filename_func($outfiles[$i], $outsections[$i]);
++          print STDERR "Unlinking $outname\n" if $verbose;
++          unlink($outname);
++          if ($uninstall) {
++              # do nothing
++          } elsif (link $main_outname, $outname) {
++              print STDERR "Linked $outname\n" if $verbose;
++              push @all_outfiles, $outfiles[$i];
++              $all_outsections{$outfiles[$i]} = $outsections[$i];
++              process_summary_section($summary_section, $outfiles[$i]);
++              $all_roff_summaries{$outfiles[$i]} = $all_roff_summaries{$outfiles[0]};
++          } else {
++              print STDERR "click-elem2man: $outname: $!\n";
++          }
++      }
++    }
++}
++
++sub process_file ($;$) {
++    my($filename, $text) = @_;
++
++    print STDERR "Attempting $filename...\n" if $verbose;
++    $filename = "include/$1" if !-e $filename && $filename =~ /^<(.*)>$/s;
++    $filename = "$PREFIX/$filename" if !-e $filename && defined($PREFIX);
++    return if !-e $filename;
++    print STDERR "Found $filename\n" if $verbose;
++    if (!defined($text)) {
++      if (!open(IN, $filename)) {
++          print STDERR "click-elem2man: $filename: $!\n";
++          return;
++      }
++      $text = <IN>;
++      close IN;
++    }
++
++    print "$filename??\n" if !defined $text;
++    foreach $_ (split(m{(/\*.*?\*/)}s, $text)) {
++      if (/^\/\*/m && /^[\/*\s]+=/m) {
++          s/^(.*?)\t/$1 . (' ' x (8 - (length($1) % 8)))/egm while /\t/;
++          s/^\/\*\s*//g;
++          s/\s*\*\/$//g;
++          s/^ ?\* ?//gm;
++          process_comment($_, $filename);
++      }
++    }
++}
++
++sub xmlunquote ($) {
++    my($x) = @_;
++    if ($x =~ /&/) {
++      $x =~ s/&lt;/</g;
++      $x =~ s/&gt;/>/g;
++      $x =~ s/&amp;/&/g;
++      $x =~ s/&#([0-9]+);/chr($1)/eg;
++      $x =~ s/&#x([0-9a-zA-Z]+);/chr(oct("0x$1"))/eg;
++    }
++    $x;
++}
++
++sub read_elementmap_text ($;$) {
++    my($text, $headerhash) = @_;
++    $headerhash = {} if !defined($headerhash);
++    local($_);
++    foreach $_ (split(/\n+/, $text)) {
++      next if !/^<entry\b/;
++      my($n) = (/\bname="(.*?)"/);
++      my($dn) = (/\bdocname="(.*?)"/);
++      my($p) = (/\bprocessing="(.*?)"/);
++      my($hf) = (/\bheaderfile="(.*?)"/);
++      my($pc) = (/\bportcount="(.*?)"/);
++      my($req) = (/\brequires="(.*?)"/);
++      if (defined($n) || defined($dn)) {
++          $dn = xmlunquote(defined($dn) ? $dn : $n);
++          $processing{$dn} = xmlunquote($p) if defined($p);
++          $portcount{$dn} = xmlunquote($pc) if defined($pc);
++          $req = defined($req) ? xmlunquote($req) : undef;
++          $docrequires{$dn} = $req if defined($req);
++
++          $n = $1 if defined($req) && !defined($n) && /\bprovides="(.*?)"/;
++          if (defined($n) && defined($req)) {
++              $n = xmlunquote($n);
++              $requires{$n} = [] if !defined $requires{$n};
++              push @{$requires{$n}}, $req;
++          }
++          
++          $headerhash->{xmlunquote($hf)} = 1 if defined($hf);
++      }
++    }
++}
++
++sub read_elementmap ($;$) {
++    my($fn, $headerhash) = @_;
++    open(E, $fn) || die "$fn: $!\n";
++    local($/) = undef;
++    read_elementmap_text(<E>, $headerhash);
++    close E;
++}
++
++sub process_file_set ($$) {
++    my($fn, $fnhash) = @_;
++    if (open(IN, ($fn eq '-' ? "<&STDIN" : $fn))) {
++      my(@a, @b, $t, $x);
++      $t = <IN>;
++      close IN;
++      
++      # Parse file; click-buildtool gets special treatment
++      if ($t =~ /\A#.*click-buildtool findelem/) {
++          $t =~ s/^#.*//mg;
++          foreach $_ (split(/\n+/, $t)) {
++              if (/^\S+\s+<(\S+?)>/) {
++                  $fnhash->{"include/$1"} = 1;
++              } elsif (/^\S+\s+"(\S+?)"/) {
++                  $fnhash->{$1} = 1;
++              } else {
++                  s/.cc$/.hh/;
++                  $fnhash->{$_} = 1;
++              }
++          }
++      } elsif ($t =~ /\A<\?xml/) {
++          read_elementmap_text($t, $fnhash);
++      } elsif ($t =~ /[\(\)]/) {
++          die if $fn eq '-';
++          $fnhash->{$fn} = 1;
++      } else {
++          $t =~ s/^#.*//mg;
++          foreach $_ (split(/\s+/, $t)) {
++              if ($t =~ /[*?\[]/) {
++                  foreach my $x (glob($t)) {
++                      $fnhash->{$x} = 1;
++                  }
++              } else {
++                  $fnhash->{$_} = 1;
++              }
++          }
++      }
++    } else {
++      print STDERR "click-elem2man: $fn: $!\n";
++    }
++}
++
++sub uniq (@) {
++    my(@a, $x);
++    foreach $x (@_) {
++      push @a, $x if !@a || $a[-1] ne $x;
++    }
++    @a;
++}
++
++
++sub driver_requirement ($) {
++    my($req) = @_;
++    my($d) = 0;
++    $d |= 1 if $req =~ /\buserlevel\b/;
++    $d |= 2 if $req =~ /\blinuxmodule\b/;
++    $d |= 4 if $req =~ /\bbsdmodule\b/;
++    $d |= 8 if $req =~ /\bns\b/;
++    $d ? $d : 15;
++}
++
++my(%requires_fixed);
++sub fix_one_requires ($) {
++    my($req) = @_;
++    my($driver) = driver_requirement($req);
++    
++    my($t, $i);
++    my($changes) = '';
++    foreach $t (split(/\s+/, $req)) {
++      if (defined($requires{$t})) {
++          my($treq) = $requires{$t};
++          if (!$requires_fixed{$t}) {
++              $requires_fixed{$t} = 1;
++              for ($i = 0; $i < @$treq; $i++) {
++                  $treq->[$i] = &fix_one_requires($treq->[$i]);
++              }
++          }
++          for ($i = 0; $i < @$treq; $i++) {
++              if ($driver & driver_requirement($treq->[$i])) {
++                  $changes .= " " . $treq->[$i];
++              }
++          }
++      }
++    }
++    
++    if ($changes) {
++      join(' ', uniq(sort {$a cmp $b} split(/\s+/, $req . $changes)));
++    } else {
++      $req;
++    }
++}
++
++sub fix_requires () {
++    my($k);
++    foreach $k (keys %docrequires) {
++      $docrequires{$k} = fix_one_requires($docrequires{$k});
++    }
++}
++
++
++# main program: parse options
++
++sub usage () {
++    print STDERR "Usage: click-elem2man [OPTIONS] FILES...
++Try 'click-elem2man --help' for more information.\n";
++    exit 1;
++}
++
++sub help () {
++    print STDERR <<"EOD;";
++'Click-elem2man' translates Click element documentation into manual pages.
++
++Usage: click-elem2man [-l | -L] [-d DIRECTORY] FILE...
++
++Each FILE is a Click header file, a list of Click header files, or the
++output of click-mkelemmap.  '-' means standard input.
++
++Options:
++  -f, --files FILE        Read header filenames from FILE.
++  -e, --elementmap EMAP   Read information about other elements from EMAP.
++  -d, --directory DIR     Place generated manual pages in directory DIR.
++  -P, --package PKG       Elements are in PKG package, or say 'DEFAULT'.
++  -l, --list              Generate the elements(n) manual page as well.
++  -L, --extend-list       Extend an existing elements(n) manual page.
++  -p, --prefix PFX        Look for header files in PFX after looking in '.'.
++      --dokuwiki          Generate dokuwiki source instead of manual pages.
++      --dokuwiki-dl       Generate dokuwiki source using dl plugin.
++  -u, --uninstall         Remove existing manual pages.
++  -h, --help              Print this message and exit.
++
++Report bugs to <click\@pdos.lcs.mit.edu>.
++EOD;
++    exit 0;
++}
++
++undef $/;
++my(@files, $fn, $elementlist, $any_files, $directory, $output_type);
++$output_type = 'nroff';
++
++while (@ARGV) {
++    $_ = shift @ARGV;
++    if (/^-d$/ || /^--directory$/) {
++      usage() if !@ARGV;
++      $directory = shift @ARGV;
++    } elsif (/^--directory=(.*)$/) {
++      $directory = $1;
++    } elsif (/^-P$/ || /^--package$/) {
++      usage() if !@ARGV;
++      $package = shift @ARGV;
++    } elsif (/^-V$/ || /^--verbose$/) {
++      $verbose = 1;
++    } elsif (/^--package=(.*)$/) {
++      $package = $1;
++    } elsif (/^-f$/ || /^--files$/) {
++      usage() if !@ARGV;
++      push @files, shift @ARGV;
++      $any_files = 1;
++    } elsif (/^--files=(.*)$/) {
++      push @files, $1;
++      $any_files = 1;
++    } elsif (/^-l$/ || /^--list$/) {
++      $elementlist = 1;
++    } elsif (/^-L$/ || /^--extend-list$/) {
++      $elementlist = 2;
++    } elsif (/^-e$/ || /^--elementmap$/) {
++      usage() if !@ARGV;
++      read_elementmap(shift @ARGV);
++    } elsif (/^--elementmap=(.*)$/) {
++      read_elementmap($1);
++    } elsif (/^-p$/ || /^--prefix$/) {
++      usage() if !@ARGV;
++      $PREFIX = shift @ARGV;
++    } elsif (/^--prefix=(.*)$/) {
++      $PREFIX = $1;
++    } elsif (/^-u$/ || /^--uninstall$/) {
++      $uninstall = 1;
++    } elsif (/^-h$/ || /^--help$/) {
++      help();
++    } elsif (/^--dokuwiki$/ || /^--doku$/) {
++      $do_section_func = \&dokuwiki_do_section;
++      $do_text_func = \&dokuwikiize;
++      $output_type = 'dokuwiki';
++    } elsif (/^--dokuwiki-dl$/) {
++      $do_section_func = \&dokuwiki_do_section;
++      $do_text_func = \&dokuwikiize;
++      $output_type = 'dokuwiki';
++      $dokuwiki_dl = 1;
++    } elsif (/^-./) {
++      usage();
++    } elsif (/^-$/) {
++      push @files, "-";
++      $any_files = 1;
++    } else {
++      push @files, glob($_);
++      $any_files = 1;
++    }
++}
++push @files, "-" if !$any_files;
++
++sub nroff_filename_func ($$) {
++    my($name, $sec) = @_;
++    "$directory/$name.$sec";
++}
++
++sub dokuwiki_filename_func ($$) {
++    my($name, $sec) = @_;
++    if ($sec eq 'n') {
++      "$directory/" . lc($name) . ".txt";
++    } else {
++      "$directory/" . lc($name) . "-$sec.txt";
++    }
++}
++
++if ($directory) {
++    $filename_func = ($output_type eq 'dokuwiki' ? \&dokuwiki_filename_func : \&nroff_filename_func);
++}
++
++umask(022);
++if ($uninstall) {
++    open(OUT, ">/dev/null");
++} elsif (!$directory) {
++    open(OUT, ">&STDOUT");
++}
++
++# read file sets
++my(%fnhash);
++foreach $fn (@files) {
++    process_file_set($fn, \%fnhash);
++}
++fix_requires();
++
++# process files
++foreach $fn (keys(%fnhash)) {
++    process_file($fn);
++}
++
++if ($uninstall || !$directory) {
++    close OUT;
++}
++
++
++# printing element list
++#
++
++sub read_elementlist ($) {
++    my($fn) = @_;
++  
++    local($/) = "\n";
++    if (!open(IN, $fn)) {
++      print STDERR "click-elem2man: $fn: $!\n";
++      return;
++    }
++
++    my($section, $active, $cur_name, $cur_section, %new_summary);
++    $active = 0;
++    while (<IN>) {
++      if (/^\.SS \"(.*)\"/) {
++          $section = $1;
++      } elsif (/^\.TP 20/) {
++          $active = 1;
++      } elsif ($active == 1 && /^\.M (\S+) (\S+)/) {
++          if (!exists $all_outsections{$1}) {
++              $active = 2;
++              $cur_name = $1;
++              $new_summary{$1} = 1;
++              $all_outsections{$1} = $2;
++              $all_roff_summaries{$1} = '';
++              push @{$summaries_by_section{$section}}, $1;
++              push @all_outfiles, $1;
++          } elsif ($new_summary{$1}) {
++              push @{$summaries_by_section{$section}}, $1;
++              $active = 3;
++          } else {
++              $active = 3;
++          }
++      } elsif (/^\.PD/) {
++          $active = 0;
++      } elsif (/^\.SH \"ALPHABETICAL/) {
++          last;
++      } elsif ($active == 2) {
++          $all_roff_summaries{$cur_name} .= $_;
++      }
++    }
++}
++
++my(%el_generated);
++sub one_elementlist (@) {
++    my($t);
++    $t .= ".PP\n.PD 0\n";
++    foreach $_ (sort { lc($a) cmp lc($b) } @_) {
++      $t .= ".TP 20\n.M " . $_ . " " . $all_outsections{$_};
++      $t .= " \" (deprecated)\"" if $deprecated{$_};
++      $t .= "\n";
++      $t .= $all_roff_summaries{$_} if $all_roff_summaries{$_};
++      $el_generated{$_} = 1;
++    }
++    $t . ".PD\n";
++}
++
++my(@Links, $Text);
++
++sub one_summary ($@) {
++    my($name, @elts) = @_;
++    print STDERR "click-elem2man: warning: category '", $name, "' begins with a lowercase letter (used in @elts)\n" if $name =~ /^[a-z]/;
++    my($a) = $name;
++    $a =~ s{([+\&\#\"\000-\037\177-\377])}{sprintf("%%%02X", $1)}eg;
++    $a =~ tr/ /+/;
++    my($x) = $name;
++    $x =~ s{ }{&nbsp;}g;
++    if (@elts) {
++      push @Links, "<a href=\"#$a\">$x</a>";
++      $Text .= ".SS \"$name\"\n";
++      $Text .= one_elementlist(@elts);
++    }
++}
++
++sub write_elementlist ($$) {
++    my($enamebase, $l_uninstall) = @_;
++    if ($filename_func) {
++      my($fn) = &$filename_func($enamebase, $section);
++      if ($l_uninstall) {
++          print STDERR "Removing $fn\n" if $verbose;
++          unlink($fn);
++          return;
++      }
++      if (!open(OUT, ">$fn")) {
++          print STDERR "click-elem2man: $fn: $!\n";
++          return;
++      }
++    } elsif ($uninstall) {
++      return;
++    }
++
++    print OUT <<"EOD;";
++.\\" -*- mode: nroff -*-
++.\\" Generated by 'click-elem2man'
++$nroff_prologue
++.TH "\U$enamebase\E" $section "$today" "Click"
++.SH "NAME"
++$enamebase \- documented Click element classes
++.SH "DESCRIPTION"
++This page lists all Click element classes that have manual page documentation.
++EOD;
++
++    $Text = "";
++    my(%did_section, $sec);
++    # erase 'Miscellaneous' section, if any
++    delete $summaries_by_section{'Miscellaneous'};
++    my($i) = 0;
++    foreach $sec ((map { $i++ % 2 ? ($_) : () } @section_headers),
++                (sort { lc($a) cmp lc($b) } keys(%summaries_by_section))) {
++      next if $did_section{$sec};
++      one_summary($sec, @{$summaries_by_section{$sec}});
++      $did_section{$sec} = 1;
++    }
++    one_summary('Miscellaneous', grep { !$el_generated{$_} } @all_outfiles);
++
++    my($links) = join("&nbsp;- ", @Links);
++    print OUT <<"EOD;";
++.\\"html <p><a href="#BY+FUNCTION"><b>By Function</b></a>:
++.\\"html $links<br>
++.\\"html <a href="#ALPHABETICAL+LIST"><b>Alphabetical List</b></a></p>
++EOD;
++
++    print OUT ".SH \"BY FUNCTION\"\n";
++    print OUT $Text;
++    print OUT ".SH \"ALPHABETICAL LIST\"\n";
++    print OUT one_elementlist(@all_outfiles);
++
++    close OUT if $filename_func;
++}
++
++sub read_main_elementlist () {
++    if ($filename_func) {
++      my($fn) = &$filename_func('elements', $section);
++      $fn = &$filename_func('elements-click', $section) if !-r $fn;
++      read_elementlist($fn) if -r $fn && $elementlist > 1;
++    }
++}
++
++if ($elementlist && @all_outfiles) {
++    # erase record of elements added on uninstall
++    if ($elementlist > 1 && $uninstall) {
++      %summaries_by_section = ();
++      @all_outfiles = ();
++    }
++
++    # package-specific elementlist
++    if (defined($package)) {
++      my($fename) = ($package eq "DEFAULT" ? "elements-click" : "elements-$package");
++      write_elementlist($fename, $uninstall);
++    }
++    read_main_elementlist();
++    write_elementlist("elements", 0);
++}
+Files click-1.6.0/inst/bin/click-fastclassifier and click-1.6.0-27/inst/bin/click-fastclassifier differ
+Files click-1.6.0/inst/bin/click-flatten and click-1.6.0-27/inst/bin/click-flatten differ
+diff -Nurb click-1.6.0/inst/bin/click-mkelemmap click-1.6.0-27/inst/bin/click-mkelemmap
+--- click-1.6.0/inst/bin/click-mkelemmap       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/bin/click-mkelemmap    2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,535 @@
++#! /usr/bin/perl -w
++
++# click-mkelemmap -- make map of element name to C++ class and file
++# Eddie Kohler
++#
++# Copyright (c) 1999-2001 Massachusetts Institute of Technology
++# Copyright (c) 2004-2006 Regents of the University of California
++#
++# Permission is hereby granted, free of charge, to any person obtaining a
++# copy of this software and associated documentation files (the "Software"),
++# to deal in the Software without restriction, subject to the conditions
++# listed in the Click LICENSE file. These conditions include: you must
++# preserve this copyright notice, and you cannot mention the copyright
++# holders in advertising related to the Software without their permission.
++# The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++# notice is a summary of the Click LICENSE file; the license in that file is
++# legally binding.
++
++my(%port_count_constants) =
++    ('PORTS_0_0' => '0/0', 'PORTS_0_1' => '0/1', 'PORTS_1_0' => '1/0',
++     'PORTS_1_1' => '1/1');
++my(%processing_constants) =
++    ('AGNOSTIC' => 'a/a', 'PUSH' => 'h/h', 'PULL' => 'l/l',
++     'PUSH_TO_PULL' => 'h/l', 'PULL_TO_PUSH' => 'l/h');
++my(%flow_code_constants) =
++    ('COMPLETE_FLOW' => 'x/x');
++my(@source_file, @header_file, @click_name, @cxx_name, @doc_name,
++   @parents, @port_count, @processing, @flow_code, @flags, @requirements,
++   @element_methods, @element_libs, @provisions,
++   %click_name_to_id, %cxx_name_to_id);
++my(@includes) = ( );
++
++sub driver_mask ($) {
++    my($m) = 0;
++    # XXX "|" syntax?
++    $m |= 1 if $_[0] =~ /\buserlevel\b/;
++    $m |= 2 if $_[0] =~ /\blinuxmodule\b/;
++    $m |= 4 if $_[0] =~ /\bbsdmodule\b/;
++    $m |= 8 if $_[0] =~ /\bns\b/;
++    ($m ? $m : 15);
++}
++
++sub filecontents ($) {
++    my $text = "";
++    if (open(IN, $_[0])) {
++      $text = <IN>;
++      close IN;
++    }
++    $text;
++}
++
++sub process_file ($) {
++    my($filename) = @_;
++    my($headername, $headerfile, $i, $comment);
++
++    if ($filename =~ /^(.*):"(.*)"$/) {
++      ($filename, $headername) = ($1, $2);
++      $headerfile = $headername;
++    } elsif ($filename =~ /^(.*):<(.*)>$/) {
++      ($filename, $headername) = ($1, "<$2>");
++      $headerfile = $2;
++    } else {
++      $headername = $filename;
++      $headername =~ s/\.cc$/.hh/;
++      $headerfile = $headername;
++    }
++
++    my($text) = "";
++    if ($headerfile =~ m|^/|) {
++      $text = filecontents($headerfile);
++    } else {
++      for ($i = 0; $i < @includes && $text eq ""; $i++) {
++          $text = filecontents($includes[$i] . "/" . $headerfile);
++      }
++    }
++    $headername = "" if $text eq "";
++
++    my $first;
++    $first = @cxx_name;
++    foreach $_ (split(m{^class(?=.*[\n\s]*\{)}m, $text)) {
++      my($cxx_class) = (/^\s*(\w+)(\s|:\s).*[\n\s]*\{/);
++      my($click_name) = (/class_name.*return\s*\"([^\"]+)\"/);
++      next if !$click_name;
++      push @cxx_name, $cxx_class;
++      push @source_file, $filename;
++      push @header_file, $headername;
++      $cxx_name_to_id{$cxx_class} = @cxx_name - 1 if $cxx_class;
++      if (/\A\s*\w*\s*:\s*([\w\s,]+)/) {
++          my $p = $1;
++          $p =~ s/\bpublic\b//g;
++          push @parents, [ split(/[\s,]+/, $p) ];
++      } else {
++          push @parents, [];
++      }
++      if (/class_name.*return\s*\"([^\"]+)\"/) {
++          push @click_name, $1;
++      } else {
++          push @click_name, "";
++      }
++      if (/port_count.*return\s*(.*?);/) {
++          my $p = $1;
++          $p = $port_count_constants{$p} if exists($port_count_constants{$p});
++          $p =~ tr/\" \t\r\n//d;
++          push @port_count, $p;
++      } else {
++          push @port_count, "";
++      }
++      if (/processing.*return\s*(.*?);/) {
++          my $p = $1;
++          $p = $processing_constants{$p} if exists($processing_constants{$p});
++          $p =~ tr/\" \t\r\n//d;
++          push @processing, $p;
++      } else {
++          push @processing, "";
++      }
++      if (/flow_code.*return\s*(.*?);/) {
++          my $p = $1;
++          $p = $flow_code_constants{$p} if exists($flow_code_constants{$p});
++          $p =~ tr/\" \t\r\n//d;
++          push @flow_code, $p;
++      } else {
++          push @flow_code, "";
++      }
++      if (/\bflags\(\).*return\s*"(.*?)";/) {
++          push @flags, $1;
++      } else {
++          push @flags, undef;
++      }
++      my($methods) = '';
++      $methods .= "static_initialize " if /\n\s*static\s+void\s+static_initialize/;
++      $methods .= "static_cleanup " if /\n\s*static\s+void\s+static_cleanup/;
++      $methods =~ s/\s+\Z//;
++      push @element_methods, $methods;
++    }
++
++    # process element documentation
++    my(%doc_titles);
++    foreach $comment (split(m{(/\*.*?\*/)}s, $text)) {
++      if ($comment =~ /^\/\*/ && $comment =~ /^[\/*\s]+=/) {
++          $comment =~ s/^\/\*\s*//g;
++          $comment =~ s/\s*\*\/$//g;
++          $comment =~ s/^ ?\* ?//gm;
++          my($title, $count);
++          while ($comment =~ m{^=(\w+)( *)(.*)([\0-\377]*?)(?=^=\w|\Z)}mg) {
++              if ($1 eq 'title') {
++                  $title = $3;
++              } elsif ($1 eq 'c') {
++                  $_ = $4;
++                  while (/^\s*(\w+)\(/mg) {
++                      $doc_titles{$1} = ($title ? $title : $1);
++                  }
++                  if (!%doc_titles && /^\s*([\w@]+)\s*$/) {
++                      $doc_titles{$1} = ($title ? $title : $1);
++                  }
++                  last;
++              }
++          }
++      }
++    }
++
++    # apply element documentation to element names
++    for ($i = $first; $i < @processing; $i++) {
++      push @doc_name, $doc_titles{$click_name[$i]};
++    }
++
++    # check titles
++    if (@processing == 0 && keys(%doc_titles) > 1) {
++      print STDERR "$filename: more than 1 documentation class for requirement\n";
++    }
++
++    # process ELEMENT_REQUIRES, ELEMENT_PROVIDES, and EXPORT_ELEMENT
++    if (!open(IN, $filename)) {
++      print STDERR "$filename: $!\n";
++      return;
++    }
++    $text = <IN>;
++    close IN;
++
++    my($req, $prov, $exp, $libs) = ('', '', '', '');
++    $req .= " " . $1 while $text =~ /^ELEMENT_REQUIRES\s*\((.*)\)/mg;
++    $prov .= " " . $1 while $text =~ /^ELEMENT_PROVIDES\s*\((.*)\)/mg;
++    $exp .= " " . $1 while $text =~ /^EXPORT_ELEMENT\s*\((.*)\)/mg;
++    $libs .= " " . $1 while $text =~ /^ELEMENT_LIBS\s*\((.*)\)/mg;
++    $req =~ s/^\s+//;
++    $prov =~ s/^\s+//;
++    $libs =~ s/^\s+//;
++
++    # make copies of classes as required
++    while ($exp =~ /(\S+)-(\S+)/g) {
++      my($cxx, $click) = ($1, $2);
++      for ($i = $first; $i < @processing; $i++) {
++          if ($cxx_name[$i] eq $cxx) {
++              push @click_name, $click;
++              push @cxx_name, $cxx;
++              push @doc_name, $doc_name[$i];
++              push @source_file, $source_file[$i];
++              push @header_file, $header_file[$i];
++              push @parents, $parents[$i];
++              push @port_count, $port_count[$i];
++              push @processing, $processing[$i];
++              push @flow_code, $flow_code[$i];
++              push @flags, $flags[$i];
++              push @element_methods, $element_methods[$i];
++              last;
++          }
++      }
++    }
++    
++    # add a fake class if there were no classes
++    if (@cxx_name == $first && $prov) {
++      push @click_name, "";
++      push @cxx_name, "";
++      push @doc_name, (%doc_titles ? keys(%doc_titles) : (""));
++      push @source_file, $filename;
++      push @header_file, $headername;
++      push @parents, [];
++      push @port_count, "";
++      push @processing, "";
++      push @flow_code, "";
++      push @flags, undef;
++      push @element_methods, "";
++    }
++
++    # apply requirements and provisions
++    for ($i = $first; $i < @processing; $i++) {
++      push @requirements, $req;
++      push @provisions, $prov;
++      push @element_libs, $libs;
++    
++      # check to see if overloading is valid
++      if ($click_name[$i] && exists($click_name_to_id{$click_name[$i]})) {
++          my($j) = $click_name_to_id{$click_name[$i]};
++          my($dm_a) = driver_mask($requirements[$i]);
++          my($dm_b) = driver_mask($requirements[$j]);
++          if (($dm_a & $dm_b) == 0) {
++              # ok
++          } else {
++              print STDERR "invalid multiple definition of element class '$click_name[$i]'\n";
++              print STDERR $header_file[$j], ": first definition here\n";
++              print STDERR $header_file[$i], ": second definition here\n";
++              print STDERR "(Two classes may share a name only if they work in disjoint drivers.\nAdd explicit ELEMENT_REQUIRES() statements.)\n";
++          }
++      }
++      $click_name_to_id{$click_name[$i]} = $i;
++    }
++}
++
++sub parents_port_count ($) {
++    my($classid) = @_;
++    return undef if !defined $classid;
++    if (!$port_count[$classid]) {
++      my($parent);
++      foreach $parent (@{$parents[$classid]}) {
++          if ($parent eq 'Element') {
++              $port_count[$classid] = '0/0';
++              last;
++          } elsif ($parent ne '') {
++              $port_count[$classid] = &parents_port_count($cxx_name_to_id{$parent});
++              last if $port_count[$classid];
++          }
++      }
++    }
++    return $port_count[$classid];
++}
++
++sub parents_processing ($) {
++    my($classid) = @_;
++    return undef if !defined $classid;
++    if (!$processing[$classid]) {
++      my($parent);
++      foreach $parent (@{$parents[$classid]}) {
++          if ($parent eq 'Element') {
++              $processing[$classid] = 'a/a';
++              last;
++          } elsif ($parent ne '') {
++              $processing[$classid] = &parents_processing($cxx_name_to_id{$parent});
++              last if $processing[$classid];
++          }
++      }
++    }
++    return $processing[$classid];
++}
++
++sub parents_flow_code ($) {
++    my($classid) = @_;
++    return undef if !defined $classid;
++    if (!$flow_code[$classid]) {
++      my($parent);
++      foreach $parent (@{$parents[$classid]}) {
++          if ($parent eq 'Element') {
++              $flow_code[$classid] = 'x/x';
++              last;
++          } elsif ($parent ne '') {
++              $flow_code[$classid] = &parents_flow_code($cxx_name_to_id{$parent});
++              last if $flow_code[$classid];
++          }
++      }
++    }
++    return $flow_code[$classid];
++}
++
++sub parents_flags ($) {
++    my($classid) = @_;
++    return undef if !defined $classid;
++    if (!defined $flags[$classid]) {
++      my($parent);
++      foreach $parent (@{$parents[$classid]}) {
++          if ($parent eq 'Element') {
++              last;
++          } elsif ($parent ne '') {
++              $flags[$classid] = &parents_flags($cxx_name_to_id{$parent});
++              last if defined $flags[$classid];
++          }
++      }
++    }
++    return $flags[$classid];
++}
++
++sub xml_quote ($) {
++    my($x) = @_;
++    $x =~ s/&/&amp;/g;
++    $x =~ s/</&lt;/g;
++    $x;
++}
++
++# main program: parse options
++sub read_files_from ($) {
++    my($fn) = @_;
++    if (open(IN, ($fn eq '-' ? "<&STDIN" : $fn))) {
++      my(@a, @b, $t);
++      $t = <IN>;
++      close IN;
++
++      # Parse file; click-buildtool gets special treatment
++      if ($t =~ /\A#.*click-(buildtool findelem|mkmindriver)/) {
++          $t =~ s/^#.*//mg;
++          @a = map {
++              if (/^(\S+)\s+(\S+)/) {
++                  "$1:$2";
++              } else {
++                  $_;
++              }
++          } split(/\n+/, $t);
++      } else {
++          $t =~ s/^#.*//mg;
++          @a = split(/\s+/, $t);
++      }
++      
++      foreach $t (@a) {
++          next if $t eq '';
++          if ($t =~ /[*?\[]/) {
++              push @b, glob($t);
++          } else {
++              push @b, $t;
++          }
++      }
++      
++      @b;
++    } else {
++      print STDERR "$fn: $!\n";
++      ();
++    }
++}
++
++sub long_option_match ($$$) {
++    my($have, $want, $len) = @_;
++    $have = $1 if $have =~ /^(--[^=]*)=/;
++    my($hl) = length($have);
++    ($hl <= length($want) && $hl >= $len && $have eq substr($want, 0, $hl));
++}
++
++sub help () {
++    print STDERR <<"EOD;";
++'Click-mkelemmap' creates an elementmap file from a collection of Click
++elements.
++
++Usage: click-mkelemmap [OPTIONS] [-f FILE | SRCFILE]...
++
++Each SRCFILE is a Click header file. '-' means standard input. Default is
++'-f -' if no '-f' or 'SRCFILE' options are supplied.
++
++Options:
++  -f, --files FILE        Read header filenames, or an 'elements.conf' file,
++                          from FILE.
++  -r, --provide PROV      Record provisions PROV in output.
++  -t, --drivers DRIVERS   Record drivers DRIVERS in output.
++      --dochref DOCSTR    Record documentation URL pattern DOCSTR in output.
++  -p, --prefix PFX        Remove PFX from filenames in output.
++  -I, --include DIR       Look for header files in DIR.
++  -s, --sourcedir DIR     Record DIR as source directory in output.
++  -h, --help              Print this message and exit.
++
++Report bugs to <click\@pdos.lcs.mit.edu>.
++EOD;
++    exit 0;
++}
++
++undef $/;
++my(@files, @provides, @drivers, $fn, $prefix, $any_files, $dochref, $sourcedir);
++$prefix = "";
++
++while (@ARGV) {
++    $_ = shift @ARGV;
++    if (long_option_match($_, '--files', 3) && /^[^=]*=(.*)$/) {
++      push @files, read_files_from($1);
++      $any_files = 1;
++    } elsif (/^-f$/ || long_option_match($_, '--files', 3)) {
++      die "not enough arguments" if !@ARGV;
++      push @files, read_files_from(shift @ARGV);
++      $any_files = 1;
++    } elsif (long_option_match($_, '--prefix', 5) && /^[^=]*=(.*)$/) {
++      $prefix = $1;
++      $prefix .= "/" if $prefix !~ m|/\Z|;
++    } elsif (/^-p$/ || long_option_match($_, '--prefix', 5)) {
++      die "not enough arguments" if !@ARGV;
++      $prefix = shift @ARGV;
++      $prefix .= "/" if $prefix !~ m|/\Z|;
++    } elsif (long_option_match($_, '--provide', 5) && /^[^=]*=(.*)$/) {
++      push @provides, split(/\s+/, $1);
++    } elsif (/^-r$/ || long_option_match($_, '--provide', 5)) {
++      die "not enough arguments" if !@ARGV;
++      push @provides, split(/\s+/, shift @ARGV);
++    } elsif (long_option_match($_, '--drivers', 4) && /^[^=]*=(.*)$/) {
++      push @drivers, split(/\s+/, $1);
++    } elsif (/^-t$/ || long_option_match($_, '--drivers', 4)) {
++      die "not enough arguments" if !@ARGV;
++      push @drivers, split(/\s+/, shift @ARGV);
++    } elsif (long_option_match($_, '--include', 3) && /^[^=]*=(.*)$/) {
++      push @includes, $prefix . $1;
++    } elsif (/^-I$/ || long_option_match($_, '--include', 3)) {
++      die "not enough arguments" if !@ARGV;
++      push @includes, $prefix . shift @ARGV;
++    } elsif (/^-I(.+)$/) {
++      push @includes, $prefix . $1;
++    } elsif (long_option_match($_, '--sourcedir', 3) && /^[^=]*=(.*)$/) {
++      $sourcedir = xml_quote($1);
++    } elsif (/^-s$/ || long_option_match($_, '--sourcedir', 3)) {
++      die "not enough arguments" if !@ARGV;
++      $sourcedir = xml_quote(shift @ARGV);
++    } elsif (/^-s(.+)$/) {
++      $sourcedir = xml_quote($1);
++    } elsif ((long_option_match($_, '--dochref', 4) || long_option_match($_, '--webdoc', 3))
++           && /^[^=]*=(.*)$/) {
++      die "repeated --dochref" if defined($dochref);
++      $dochref = $1;
++    } elsif (long_option_match($_, '--dochref', 4) || long_option_match($_, '--webdoc', 3)) {
++      die "not enough arguments" if !@ARGV;
++      die "repeated --dochref" if defined($dochref);
++      $dochref = shift @ARGV;
++    } elsif (/^-h$/ || long_option_match($_, '--help', 3)) {
++      help();
++    } elsif (/^-./) {
++      die "unknown option '$_'\n";
++    } elsif (/^-$/) {
++      push @files, "-";
++      $any_files = 1;
++    } else {
++      push @files, glob($_);
++      $any_files = 1;
++    }
++}
++push @files, read_files_from("-") if !$any_files;
++push @includes, ($prefix eq '' ? "." : $prefix);
++
++foreach $fn (@files) {
++    process_file($fn);
++}
++
++umask(022);
++open(OUT, ">&STDOUT");
++
++print OUT "<?xml version=\"1.0\" standalone=\"yes\"?>
++<?xml-stylesheet type=\"application/xml\" href=\"http://www.lcdf.org/click/xml/elementmap.xsl\"?>\n";
++print OUT "<?xml-stylesheet type=\"application/xml\" href=\"file://$sourcedir/etc/elementmap.xsl\"?>\n" if defined($sourcedir) && $sourcedir =~ m|^/|;
++print OUT "<elementmap xmlns=\"http://www.lcdf.org/click/xml/\"";
++print OUT " sourcedir=\"$sourcedir\"" if defined($sourcedir);
++print OUT " src=\"file://$sourcedir\"" if defined($sourcedir) && $sourcedir =~ m|^/|;
++print OUT " provides=\"", join(' ', @provides), "\"";
++print OUT " drivers=\"", join(' ', @drivers), "\"" if @drivers;
++print OUT " dochref=\"$dochref\"" if defined($dochref);
++print OUT ">\n";
++
++sub sorter {
++    my($xa, $xb) = ($click_name[$a], $click_name[$b]);
++    if ($xa && $xb) {
++      $xa cmp $xb;
++    } elsif ($xa || $xb) {
++      ($xa ? -1 : 1);
++    } else {
++      $provisions[$a] cmp $provisions[$b];
++    }
++}
++
++foreach $id (sort sorter 0..$#click_name) {
++    print OUT "<entry";
++
++    print OUT " name=\"", $click_name[$id], "\"" if $click_name[$id];
++    print OUT " cxxclass=\"", $cxx_name[$id], "\"" if $cxx_name[$id];
++    print OUT " docname=\"", $doc_name[$id], "\"" if $doc_name[$id];
++  
++    my($hf) = $header_file[$id];
++    $hf =~ s/^$prefix\/*// if $prefix;
++    print OUT " headerfile=\"", xml_quote($hf), "\"" if $hf;
++
++    my($sf) = $source_file[$id];
++    $sf =~ s/^$prefix\/*// if $prefix;
++    print OUT " sourcefile=\"", xml_quote($sf), "\"" if $sf;
++
++    my($pc) = $port_count[$id];
++    $pc = parents_port_count($id) if !$pc;
++    print OUT " portcount=\"", $pc, "\"" if $pc;
++
++    my($p) = $processing[$id];
++    $p = parents_processing($id) if !$p;
++    print OUT " processing=\"", $p, "\"" if $p;
++
++    my($flow) = $flow_code[$id];
++    $flow = parents_flow_code($id) if !$flow;
++    print OUT " flowcode=\"", $flow, "\"" if $flow;
++
++    my($flags) = $flags[$id];
++    $flags = parents_flags($id) if !defined($flags);
++    print OUT " flags=\"", $flags, "\"" if defined($flags);
++
++    print OUT " methods=\"", $element_methods[$id], "\"" if $element_methods[$id];
++  
++    print OUT " requires=\"", $requirements[$id], "\"" if $requirements[$id];
++    print OUT " provides=\"", $provisions[$id], "\"" if $provisions[$id];
++    print OUT " libs=\"", xml_quote($element_libs[$id]), "\"" if $element_libs[$id];
++
++    print OUT " />\n";
++}
++
++print OUT "</elementmap>\n";
++close OUT;
+Files click-1.6.0/inst/bin/click-mkmindriver and click-1.6.0-27/inst/bin/click-mkmindriver differ
+Files click-1.6.0/inst/bin/click-pretty and click-1.6.0-27/inst/bin/click-pretty differ
+Files click-1.6.0/inst/bin/click-uncombine and click-1.6.0-27/inst/bin/click-uncombine differ
+Files click-1.6.0/inst/bin/click-undead and click-1.6.0-27/inst/bin/click-undead differ
+Files click-1.6.0/inst/bin/click-xform and click-1.6.0-27/inst/bin/click-xform differ
+Files click-1.6.0/inst/bin/click2xml and click-1.6.0-27/inst/bin/click2xml differ
+diff -Nurb click-1.6.0/inst/bin/testie click-1.6.0-27/inst/bin/testie
+--- click-1.6.0/inst/bin/testie        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/bin/testie     2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,1206 @@
++#! /usr/bin/perl -w
++use Symbol 'qualify_to_ref';
++no locale;
++use bytes;
++require 5.006;
++
++($attempts, $internal_errors, $errors, $require_errors) = (0, 0, 0, 0);
++($preserve_temporaries, $expand_mode) = (0, 0);
++
++## utilities
++
++sub index2 ($$;$) {
++    my($result) = (defined($_[2]) ? index($_[0], $_[1], $_[2]) : index($_[0], $_[1]));
++    $result = length $_[0] if $result < 0;
++    $result;
++}
++
++sub shquote ($) {
++    my($t) = @_;
++    $t =~ s/\'/\'\"\'\"\'/g;
++    "'$t'";
++}
++
++sub min (@) {
++    my($m) = pop @_;
++    foreach my $mm (@_) {
++      $m = $mm if $mm < $m;
++    }
++    $m;
++}
++
++
++## read file
++
++package Testie;
++
++my %_special_filerefs = ('stdin' => 1, 'stdout' => 2, 'stderr' => 2);
++%_variables = ();
++
++# return filename
++sub filename ($) {
++    $_[0]->{'filename'};
++}
++
++# return line number text
++sub lineno ($$) {
++    my($tt, $lineno) = @_;
++    my($fn) = $tt->{'filename'};
++    $fn = 'line ' if !defined($fn);
++    $fn .= ':' if $fn !~ /[ :]$/;
++    "$fn$lineno";
++}
++
++# return a command at a given line number
++sub command_at ($$;$) {
++    my($tt, $lineno, $script_type) = @_;
++    return undef if !defined($lineno);
++    $lineno =~ s/^\s*|\s*$//g;
++    if ($lineno =~ /^(.*):(.*)$/) {
++      return undef if $1 ne $tt->{'filename'};
++      $lineno = $2;
++    } elsif ($lineno =~ /^line (.*)$/) {
++      $lineno = $2;
++    }
++
++    $script_type = 'script' if !defined($script_type);
++    my($lineno_arr) = $tt->{$script_type . '_lineno'};
++    for ($i = 0; $i < @$lineno_arr; $i++) {
++      return $tt->{$script_type}->[$i] if $lineno_arr->[$i] == $lineno;
++    }
++    undef;
++}
++
++# report an error
++sub file_err ($$) {
++    my($tt, $text) = @_;
++    $text .= "\n" if $text !~ /\n$/s;
++    print STDERR $tt->lineno($.), ': ', $text;
++    $tt->{'err'}++;
++}
++
++sub _shell_split (\@\@$$;$) {
++    my($arr, $lineno_arr, $text, $lineno, $rewrite_sub) = @_;
++    $rewrite_sub = sub { $_[0] } if !defined($rewrite_sub);
++    my($qf, $qb, $func, $out) = (0, 0, 0, '');
++    my($sq, $dq, $bq, $nl, $hh, $lb, $rb) = (-2, -2, -2, -2, -2, -2, -2);
++    my($first, $pos) = (0, 0);
++    $lineno -= ($text =~ tr/\n//);
++    
++    while ($pos < length $text) {
++      $sq = ::index2($text, "\'", $pos) if $sq < $pos;
++      $dq = ::index2($text, "\"", $pos) if $dq < $pos;
++      $bq = ::index2($text, "\`", $pos) if $bq < $pos;
++      $nl = ::index2($text, "\n", $pos) if $nl < $pos;
++      $hh = ::index2($text, "#", $pos) if $hh < $pos;
++      $lb = ::index2($text, "{", $pos) if $lb < $pos;
++      $rb = ::index2($text, "}", $pos) if $rb < $pos;
++      
++      if ($qf == 1) {
++          $qf = 0 if $sq < length $text;
++          $out .= substr($text, $pos, $sq + 1 - $pos);
++          $pos = $sq + 1;
++          next;
++      } elsif ($qf == 2) {
++          $qf = 0 if $dq < length $text;
++          $out .= $rewrite_sub->(substr($text, $pos, $dq - $pos), 2) . '"';
++          $pos = $dq + 1;
++          next;
++      }
++
++      # find minimum
++      my($min) = ::min($sq, $dq, $bq, $nl, $hh, $lb, $rb);
++      $out .= $rewrite_sub->(substr($text, $pos, $min - $pos), 0) . substr($text, $min, 1);
++      
++      if ($sq == $min) {
++          $qf = 1;
++          $pos = $sq + 1;
++      } elsif ($dq == $min) {
++          $qf = 2;
++          $pos = $dq + 1;
++      } elsif ($bq == $min) {
++          $qb = !$qb;
++          $pos = $bq + 1;
++      } elsif ($lb == $min) {
++          $func++;
++          $pos = $lb + 1;
++      } elsif ($rb == $min) {
++          $func--;
++          $pos = $rb + 1;
++      } elsif ($hh == $min) {
++          $out .= substr($text, $min + 1, $nl - $min);
++          $lineno++;
++          $pos = $nl + 1;
++      } elsif (!$qb && !$func && ($nl == $pos || substr($text, $nl - 1, 1) ne "\\")) {
++          push @$arr, $out;
++          push @$lineno_arr, $lineno;
++          $out = '';
++          $lineno += (substr($text, $first, $nl - $first + 1) =~ tr/\n//);
++          $first = $pos = $nl + 1;
++      } else {
++          $pos = $nl + 1;
++      }
++    }
++
++    if ($first < length $text) {
++      push @$arr, $out;
++      push @$lineno_arr, $lineno;
++    }
++    
++    if ($qf == 1) {
++      "unmatched single quote";
++    } elsif ($qf == 2) {
++      "unmatched double quote";
++    } elsif ($qb) {
++      "unmatched backquote";
++    } else {
++      "";
++    }
++}
++
++sub _read_text ($) {
++    my($fh) = @_;
++    my($r, $t) = ('');
++    while (defined($t = <$fh>)) {
++      last if $t =~ /^\%/;
++      $t =~ s/^\\\%/\%/;
++      $r .= $t;
++    }
++    ($r, $t);
++}
++
++sub _read_text_into ($$$) {
++    my($fh, $tt, $section) = @_;
++    my($r, $t) = _read_text($fh);
++    $tt->{$section} = '' if !defined($tt->{$section});
++    $tt->{$section} .= $r;
++    $t;
++}
++
++sub _read_script_section ($$$$) {
++    my($fh, $tt, $args, $script_type) = @_;
++    
++    my($lineno_type, $quiet_type) = ($script_type . '_lineno', $script_type . '_quietline');
++    $tt->{$lineno_type} = [] if !exists $tt->{$lineno_type};
++    $tt->{$quiet_type} = {} if !exists $tt->{$quiet_type};
++    
++    my($quiet);
++    if ($script_type eq 'require' & $args eq '-q') {
++      $quiet = 1;
++    } elsif ($args ne '') {
++      $tt->file_err("arguments to '\%$script_type' ignored");
++    }
++    #$tt->file_err("multiple '\%$script_type' sections defined") if $tt->{$script_type};
++    my($r, $t) = _read_text($fh);
++    my $count = @{$tt->{$lineno_type}};
++    my($what) = _shell_split(@{$tt->{$script_type}}, @{$tt->{$lineno_type}}, $r, $.);
++    $tt->file_err("$what in '\%$script_type'") if $what ne '';
++    while ($quiet && $count < @{$tt->{$lineno_type}}) {
++      my($line) = $tt->{$lineno_type}->[$count++];
++      $tt->{$quiet_type}->{$line} = 1;
++    }
++    $t;
++}
++
++sub braces_to_regex ($) {
++    my($x) = @_;
++    my(@a) = split(/(\{\{.*?\}\})/, $x);
++    my($d, $i) = '';
++    for ($i = 0; $i < @a; $i++) {
++      $d .= ($i % 2 ? substr($a[$i], 2, -2) : quotemeta($a[$i]));
++    }
++    $d;
++}
++
++sub _read_file_section ($$$$$) {
++    my($fh, $tt, $args, $secname, $prefix) = @_;
++    $args =~ s/\s+$//;
++
++    # split arguments to get fileref
++    my(@args) = split(/\s+/, $args);
++
++    # assert that we understand $secname
++    die if $secname ne 'file' && $secname ne 'expect' && $secname ne 'expectv' && $secname ne 'expectx' && $secname ne 'ignore' && $secname ne 'ignorex' && $secname ne 'ignorev';
++
++    # check for alternates and length
++    my($alternate, $delfirst, $regex_opts, $length) = (0, 0, '', undef);
++    while (@args) {
++      if ($args[0] eq '-a') {
++          $alternate = 1;
++      } elsif ($args[0] eq '-d') {
++          $delfirst = 1;
++      } elsif ($args[0] eq '-i') {
++          $regex_opts .= "(?i)";
++      } elsif ($args[0] =~ /^\+(\d+)$/) {
++          $length = $1;
++      } else {
++          last;
++      }
++      shift @args;
++    }
++
++    # make sure there are filerefs
++    if (!@args) {
++      push @args, "stdin" if $secname eq 'file';
++      push @args, "stdout" if $secname eq 'expect' || $secname eq 'expectv' || $secname eq 'expectx';
++      push @args, "all" if $secname eq 'ignore' || $secname eq 'ignorev' || $secname eq 'ignorex';
++    }
++
++    # complain about '%file -a'
++    if (($secname eq 'file' || $secname eq 'ignore' || $secname eq 'ignorev' || $secname eq 'ignorex') && $alternate) {
++      $tt->file_err("'\%file -a' is illegal");
++    } elsif (($secname eq 'file' || $secname eq 'expectv') && $regex_opts) {
++      $tt->file_err("'\%file -i' is illegal");
++    }
++    
++    # read contents
++    my($t, $file_data);
++    if (defined($length)) {
++      read $fh, $file_data, $length;
++      $tt->file_err("file too short") if length($file_data) != $length;
++      $t = <$fh>;
++    } else {
++      ($file_data, $t) = _read_text($fh);
++    }
++
++    # modify contents based on flags
++    $alternate = 1 if $secname eq 'ignore' || $secname eq 'ignorex' || $secname eq 'ignorev'; # 'ignore' always behaves like -a
++    if ($delfirst) {
++      $file_data =~ s{^.}{}mg;
++    }
++    if ($secname eq 'ignorev') {
++      $file_data =~ s{^(.+)}{quotemeta($1)}meg;
++    } elsif ($secname eq 'ignore') {
++      $file_data =~ s{^(.+)}{braces_to_regex($1)}meg;
++    }
++    if ($regex_opts && $secname eq 'expect') {
++      $file_data =~ s{\{\{}{\{\{$regex_opts}g;
++    } elsif ($regex_opts) {
++      $file_data =~ s{^(?=.)}{$regex_opts}mg;
++    }
++    
++    # stick contents where appropriate
++    my($fn);
++    foreach $fn (@args) {
++      if (($fn eq 'stdin' && $secname ne 'file')
++          || (($fn eq 'stdout' || $fn eq 'stderr') && $secname eq 'file')
++          || ($fn eq 'all' && ($secname ne 'ignore' && $secname ne 'ignorev' && $secname ne 'ignorex'))) {
++          $tt->file_err("'$fn' not meaningful for '\%$secname'");
++      }
++
++      my($hashkey) = $prefix . ":" . $fn;
++      if ($fn !~ m/^[A-Za-z_.0-9]+$/) {
++          $tt->file_err("fileref error: '$fn' contains illegal characters");
++      } elsif (!exists($tt->{$hashkey})) {
++          push @{$tt->{$secname}}, $fn;
++          $tt->{$hashkey} = [];
++      } elsif (!$alternate) {
++          $tt->file_err("'\%$secname $fn' already defined");
++      }
++
++      push @{$tt->{$hashkey}}, $file_data;
++      $tt->{"F:$fn"} = 1;
++    }
++
++    # return next line
++    $t;
++}
++
++sub _skip_section ($$) {
++    my($fh, $tt) = @_;
++    my($t);
++    while (defined($t = <$fh>)) {
++      last if $t =~ /^%/;
++    }
++    $t;
++}
++
++sub read (*;$) {
++    my($fh, $fn) = @_;
++    $fh = ::qualify_to_ref($fh, caller);
++    
++    my($tt) = bless { 'filename' => $fn, 'err' => 0, 'errprefix' => $fn . ": " }, Testie;
++    
++    my($t, $read_command) = (undef, 0);
++    $t = <$fh>;
++    while (defined($t)) {
++      if ($t =~ /^%\s*(\w+)\s*(.*?)\s*$/) {
++          my($command) = lc($1);
++          my($args) = $2;
++          if ($command eq 'script' || $command eq 'test') {
++              $t = _read_script_section($fh, $tt, $args, 'script');
++          } elsif ($command eq 'require') {
++              $t = _read_script_section($fh, $tt, $args, 'require');
++          } elsif ($command eq 'info') {
++              $tt->file_err("arguments to '\%info' ignored") if $args ne '';
++              $t = _read_text_into($fh, $tt, 'info');
++          } elsif ($command eq 'desc') {
++              $tt->file_err("arguments to '\%desc' ignored") if $args ne '';
++              $t = _read_text_into($fh, $tt, 'desc');
++          } elsif ($command eq 'cut') {
++              $t = _read_text_into($fh, $tt, 'cut');
++          } elsif ($command eq 'stdin' || $command eq 'input') {
++              $t = _read_file_section($fh, $tt, $args, 'file', 'f');
++          } elsif ($command eq 'file') {
++              $t = _read_file_section($fh, $tt, $args, 'file', 'f');
++          } elsif ($command eq 'stdout' || $command eq 'output') {
++              $t = _read_file_section($fh, $tt, $args, 'expect', 'e');
++          } elsif ($command eq 'stderr') {
++              $t = _read_file_section($fh, $tt, $args, 'expect', 'e');
++          } elsif ($command eq 'expect') {
++              $t = _read_file_section($fh, $tt, $args, 'expect', 'e');
++          } elsif ($command eq 'expectx') {
++              $t = _read_file_section($fh, $tt, $args, 'expectx', 'x');
++          } elsif ($command eq 'expectv' || $command eq 'expect_verbatim'
++                   || $command eq 'verbatim') {
++              $t = _read_file_section($fh, $tt, $args, 'expectv', 'v');
++          } elsif ($command eq 'ignore') {
++              $t = _read_file_section($fh, $tt, $args, 'ignore', 'i');
++          } elsif ($command eq 'ignorex') {
++              $t = _read_file_section($fh, $tt, $args, 'ignorex', 'i');
++          } elsif ($command eq 'ignorev') {
++              $t = _read_file_section($fh, $tt, $args, 'ignorev', 'i');
++          } elsif ($command eq 'eot') {
++              $tt->{'continue'} = 1;
++              last;
++          } elsif ($command eq 'eof') {
++              last;
++          } else {
++              $tt->file_err("unrecognized command '$command'");
++              $t = _skip_section($fh, $tt);
++          }
++          $read_command = 1;
++      } else {
++          if ($t =~ /^%/) {
++              $tt->file_err("bad '\%' command");
++          } elsif ($t !~ /^[\#!]/ && $t =~ /\S/) {
++              $tt->file_err("warning: garbage ignored") if $read_command;
++              $read_command = 0;
++          }
++          $t = <$fh>;
++      }
++    }
++
++    $tt;
++}
++
++sub have_file ($$) {
++    my($tt, $fileref) = @_;
++    exists($tt->{"F:$fileref"});
++}
++
++sub empty ($) {
++    my($tt) = @_;
++    !exists($tt->{'script'});
++}
++
++sub save_files ($&) {
++    my($tt, $fileref_subr) = @_;
++    foreach my $fn (@{$tt->{'file'}}) {
++      my($actual) = $fileref_subr->($fn);
++      next if !defined($actual);
++      open OUT, ">$actual" || die "$actual: $!\n";
++      print OUT $tt->{"f:$fn"}->[0];
++      close OUT;
++    }
++}
++
++sub script_text ($&$) {
++    my($tt, $fileref_subr, $script_type) = @_;
++    my($subbody, $var, $val) = '';
++
++    # add variables
++    while (($var, $val) = each %_variables) {
++      $var = quotemeta($var);
++      $val = quotemeta($val);
++      $subbody .= "\$t =~ s/(^|[^\\\\])\\\$$var\\b/\${1}$val/g;\n";
++      $subbody .= "\$t =~ s/(^|[^\\\\])\\\${$var}\\b/\${1}$val/g;\n";
++    }
++    
++    my($code) = eval("sub { my(\$t) = \@_; $subbody\$t; }");
++
++    my($t) = '';
++    if (!$::expand_mode) {
++      $t .= <<'EOD;';
++testie_failed () {
++    exitval=$?
++    test $exitval = 0 || (echo; echo testie_failure:$exitval) >&2
++    exit $exitval
++}
++trap testie_failed EXIT
++EOD;
++    }
++
++    my($scriptarr, $linenoarr) = ($tt->{$script_type}, $tt->{$script_type . "_lineno"});
++    foreach my $i (0..$#{$tt->{$script_type}}) {
++      my($ln, $text) = ($linenoarr->[$i], $scriptarr->[$i]);
++      $t .= "echo >&2; echo testie_lineno:$ln >&2\n" if !$::expand_mode;
++      my(@c, @d);
++      _shell_split(@c, @d, $text, 0, $code);
++      die if @c != 1;
++      chomp $c[0];
++      next if $c[0] =~ /^\s*$/s;
++      $c[0] =~ s,^(\s*)\./,$1../, if !$::expand_mode;
++      $t .= $c[0] . "\n";
++    }
++
++    $t;
++}
++
++sub output_error ($$$$) {
++    my($tt, $fileref_subr, $script_type, $verbose) = @_;
++    my($fp) = $tt->{'errprefix'};
++    
++    if (!open(ERR, $fileref_subr->('stderr'))) {
++      print STDERR $fp, $!, "\n";
++      $::internal_errors++;
++      return;
++    }
++    
++    my($errortext, $t, $lineno, $failure) = ('');
++    while ($t = <ERR>) {
++      if ($t =~ /^testie_lineno:(.*)$/) {
++          $lineno = $1;
++          $errortext = '';
++      } elsif ($t =~ /^testie_failure:(.*)$/) {
++          $failure = $1;
++      } else {
++          $errortext .= $t;
++      }
++    }
++    close ERR;
++
++    my($failure_text);
++    if (!defined($failure)) {
++      $failure_text = "undefined error";
++    } elsif ($failure == 1) {
++      $failure_text = "failure";
++    } else {
++      $failure_text = "error $failure";
++    }
++    if (defined($script_type) && $script_type eq 'require') {
++      $failure_text = "requirement $failure_text";
++      $::require_errors++;
++    } else {
++      $::errors++;
++    }
++
++    $errortext =~ s/\s*\Z//;
++    
++    my($cmd) = $tt->command_at($lineno, $script_type);
++    if ($fp =~ /: $/) {
++      chop $fp;
++    } else {
++      $lineno = "line $lineno";
++    }
++    $lineno = $tt->filename if !defined($cmd);
++
++    # exit early if quiet
++    return 1 if $tt->{$script_type . '_quietline'}->{$lineno} && !$verbose;
++    
++    if ($errortext =~ /^testie_error:/) {
++      while ($errortext =~ /^testie_error:([^\n]*)/g) {
++          print STDERR $fp, $lineno, ": ", $1, "\n";
++      }
++      $errortext =~ s/^testie_error:([^\n]*)//g;
++      $errortext =~ s/\s*//;
++      print STDERR $fp, $lineno, ": (There were other errors as well.)\n"
++          if $errortext ne '';
++    } elsif (!defined($cmd)) {
++      print STDERR $fp, $lineno, ": $failure_text at undefined point in script\n";
++    } else {
++      $cmd =~ s/^\s*|\s*$//g;
++      $cmd =~ s/([\000-\037])/'^' . chr(ord($1) + ord('@'))/eg;
++      $cmd =~ s/([\177-\377])/"\\" . sprintf("%03o", ord($1))/eg;
++      if (length($cmd) > 40) {
++          $cmd = substr($cmd, 0, 40) . "...";
++      }
++      print STDERR $fp, $lineno, ": $failure_text at '$cmd'\n";
++      while ($errortext =~ /([^\n]*)/g) {
++          print STDERR $fp, $lineno, ":   $1\n" if $1 ne '';
++      }
++    }
++
++    1;
++}
++
++sub _output_expectation_error ($$$$$) {
++    my($fp, $efn, $lineno, $wanted, $got) = @_;
++    
++    # output message
++    if ($efn eq 'stdout') {
++      print STDERR $fp, "standard output has unexpected value starting at line $lineno\n";
++    } elsif ($efn eq 'stderr') {
++      print STDERR $fp, "standard error has unexpected value starting at line $lineno\n";
++    } else {
++      print STDERR $fp, "file $efn has unexpected value starting at line $lineno\n";
++    }
++
++    # output '$wanted' and '$got' if possible
++    $wanted = "<end of file>" if $wanted eq "\376";
++    $wanted =~ s/\r?\n?\Z//;
++    $got = "<end of file>" if $got eq "\376";
++    $got =~ s/\r?\n?\Z//;
++    if ($wanted =~ /\A[\t\040-\176]*\Z/ && $got =~ /\A[\t\040-\176]*\Z/) {
++      print STDERR $fp, "$efn:$lineno: expected '$wanted'\n", $fp, "$efn:$lineno: but got  '$got'\n";
++    }
++
++    # maintain error count
++    $::errors++;
++}
++
++sub _check_one_expect ($$$) {
++    my($tt, $fileref_subr, $efn) = @_;
++    my($fp) = $tt->{'errprefix'};
++    my($xtp, $xtl, $xel);
++
++    # read file text
++    if (!open(IN, $fileref_subr->($efn))) {
++      print STDERR $fp, $efn, ": ", $!, "\n";
++      $::errors++;
++      return 0;
++    }
++    my($raw_text) = <IN>;
++    $raw_text = '' if !defined($raw_text);
++    close IN;
++
++    # prepare $ignores
++    my($ignores) = '';
++    $ignores .= join("\n", @{$tt->{"i:$efn"}}) . "\n" if exists($tt->{"i:$efn"});
++    $ignores .= join("\n", @{$tt->{"i:all"}}) . "\n" if exists($tt->{"i:all"});
++    # ignore testie messages
++    $ignores .= "testie_lineno:.*\ntestie_error:.*\n" if $efn eq 'stderr';
++    if ($ignores ne '') {
++      $ignores =~ s/([!\#<>])/\\$1/g;
++      $ignores =~ s{^([ \t]*\S[^\n]*)}{\$text =~ s<^$1\[ \\t\]*\$><\\377>mg;\n}mg;
++    }
++    
++    # now compare alternates
++    my($mode, $expect_marker) = (0, {});
++    foreach my $exp (@{$tt->{"v:$efn"}}, $expect_marker, @{$tt->{"e:$efn"}}, $expect_marker, @{$tt->{"x:$efn"}}) {
++      # check for change of mode
++      if (ref($exp)) {
++          $mode++;
++          next;
++      }
++      my($text) = $raw_text;
++
++      # escape in common case
++      return 0 if $text eq $exp;
++
++      # check that files really disagree (in later modes)
++      if ($mode > 0) {
++          # ignore differences in amounts of whitespace
++          $text =~ s/\s+\n/\n/g;
++          $text =~ s/\n\n+\Z/\n/;
++          $text =~ s/\A\n//;
++          $exp =~ s/\s+\n/\n/g;
++          $exp =~ s/\n\n\n+/\n\n/g;
++          $exp =~ s/\n\n+\Z/\n/;
++          return 0 if $text eq $exp;
++
++          # ignore explicitly ignored text
++          eval($ignores) if $ignores ne '';
++      }
++
++      # line-by-line comparison
++      my(@tl) = (split(/\n/, $text), "\376");
++      my(@el) = (split(/\n/, $exp), "\376");
++      my($tp, $ep) = (0, 0);
++      while ($tp < @tl && $ep < @el) {
++          
++          # a single blank line in $exp matches multiple blank lines
++          # in $text
++          if ($el[$ep] eq '' && $tl[$tp] eq '' && $mode > 0) {
++              $tp++ while $tl[$tp] eq '' || $tl[$tp] eq "\377";
++              $tp--;
++          }
++
++          # skip ignored lines
++          $tp++ while $tl[$tp] eq "\377";
++
++          # compare lines
++          if ($mode == 2) {
++              last if $tl[$tp] !~ m/\A$el[$ep]\Z/;
++          } elsif ($mode == 1 && $el[$ep] =~ /\{\{/) {
++              my($t, $re) = ($el[$ep], '');
++              while ($t =~ /\A(.*?)\{\{(.*?)\}\}(.*)\Z/) {
++                  $re .= quotemeta($1) . $2;
++                  $t = $3;
++              }
++              $re .= quotemeta($t);
++              last if $tl[$tp] !~ m/\A$re\Z/;
++          } elsif ($tl[$tp] ne $el[$ep]) {
++              last;
++          }
++          
++          $tp++, $ep++;
++      }
++      return 0 if $tp >= @tl || $ep >= @el;
++
++      ($xtp, $xel, $xtl) = ($tp + 1, $el[$ep], $tl[$tp])
++          if !defined($xtp) || $tp + 1 > $xtp;
++    }
++
++    # if we get here, none of the attempts matched
++    _output_expectation_error($fp, $efn, $xtp, $xel, $xtl);
++}
++    
++
++sub check_expects ($$) {
++    my($tt, $fileref_subr) = @_;
++    my($fp) = $tt->{'errprefix'};
++    local($/) = undef;
++    my($expectx) = 0;
++    my($tp, @tl, $ep, @el);
++
++    # check expected files
++    my(%done);
++    foreach my $efn (@{$tt->{'expect'}}, @{$tt->{'expectx'}}, @{$tt->{'expectv'}}) {
++      next if $done{$efn};
++      _check_one_expect($tt, $fileref_subr, $efn);
++      $done{$efn} = 1;
++    }
++
++    0;
++}
++
++
++package main;
++
++my($dir, @show, $show_stdout, $show_stderr, $any_tests_done, $can_setpgrp);
++my($SHELL) = "/bin/sh";
++
++sub script_fn_to_fn ($) {
++    my($fn) = @_;
++    $fn;
++}
++
++sub out_script_fn_to_fn ($) {
++    my($fn) = @_;
++    "$dir/$fn";
++}
++
++sub _shell ($$$$$) {
++    my($dir, $scriptfn, $stdin, $stdout, $stderr) = @_;
++    $scriptfn = "./$scriptfn" if $scriptfn !~ m|^/|;
++
++    # Create a new process group so we can (likely) kill any children
++    # processes the script carelessly left behind.  Thanks, Chuck Blake!
++    my($child_pid) = fork();
++    if (!defined($child_pid)) {
++      die "cannot fork: $!\n";
++    } elsif ($child_pid == 0) {
++      eval { setpgrp() };
++      chdir($dir);
++      open(STDIN, "<", $stdin) || die "$stdin: $!\n";
++      open(STDOUT, ">", $stdout) || die "$stdout: $!\n";
++      open(STDERR, ">", $stderr) || die "$stderr: $!\n";
++      exec $SHELL, "-e", $scriptfn;
++    } else {
++      waitpid($child_pid, 0); # assume it succeeds
++      my($result) = $?;
++      kill('HUP', -$child_pid); # kill any processes left behind
++      $result;
++    }
++}
++
++sub execute_test ($$$) {
++    my($tt, $fn, $verbose) = @_;
++    my($f);
++
++    # count attempt
++    $::attempts++;
++
++    # print description in superverbose mode
++    if ($verbose > 1) {
++      return 0 if $tt->empty;
++      print STDERR "\n" if $any_tests_done;
++      if ($tt->{'desc'}) {
++          my($desc) = $tt->{'desc'};
++          $desc =~ s/^(.*?)\t/$1 . (' ' x (8 - (length($1) % 8)))/egm
++              while $desc =~ /\t/;
++          $desc =~ s/^/  /;
++          print STDERR $fn, " Description:\n", $desc;
++      }
++      print STDERR $fn, " Results:\n";
++      $tt->{'errprefix'} = "  ";
++    }
++
++    # note that we're running the test in verbose mode
++    if ($verbose == 1) {
++      print STDERR $tt->{'errprefix'}, "Running...\n";
++    }
++
++    # check requirements
++    if (exists $tt->{'require'}) {
++      open(SCR, ">$dir/+require+") || die "$dir/+require+: $!\n";
++      print SCR $tt->script_text(\&script_fn_to_fn, 'require');
++      close SCR;
++
++      if (!$expand_mode) {
++          my($exitval) = _shell($dir, '+require+', '/dev/null', '/dev/null', script_fn_to_fn('stderr'));
++
++          # if it exited with a bad value, quit
++          if ($exitval) {
++              return $tt->output_error(\&out_script_fn_to_fn, 'require', $verbose);
++          } elsif ($verbose) {
++              print STDERR $tt->{'errprefix'}, "Requirements OK\n";
++          }
++      }
++    }
++
++    # save the files it names
++    $tt->save_files(\&out_script_fn_to_fn);
++
++    # save the script
++    open(SCR, ">$dir/+script+") || die "$dir/+script+: $!\n";
++    print SCR $tt->script_text(\&script_fn_to_fn, 'script');
++    close SCR;
++
++    # exit if expand mode
++    return 0 if ($expand_mode);
++    
++    # run the script
++    my($actual_stdin) = ($tt->have_file('stdin') ? script_fn_to_fn('stdin') : "/dev/null");
++    my($actual_stdout) = ($show_stdout || $tt->have_file('stdout') ? script_fn_to_fn('stdout') : "/dev/null");
++    my($actual_stderr) = script_fn_to_fn('stderr');
++    my($exitval) = _shell($dir, '+script+', $actual_stdin, $actual_stdout, $actual_stderr);
++    $any_tests_done = 1;
++
++    # echo files
++    foreach $f (@show) {
++      if (-r out_script_fn_to_fn($f)) {
++          print "$fn: $f\n", "=" x 79, "\n";
++          local($/) = undef;
++          open(X, out_script_fn_to_fn($f));
++          $_ = <X>;
++          close(X);
++          print $_, "=" x 79, "\n";
++      } else {
++          print "$fn: $f does not exist\n";
++      }
++    }
++
++    # if it exited with a bad value, quit
++    if ($exitval) {
++      return $tt->output_error(\&out_script_fn_to_fn, 'script', $verbose);
++    }
++
++    # check files
++    my $old_errors = $::errors;
++    if ($exitval = $tt->check_expects(\&out_script_fn_to_fn)) {
++      return $exitval;
++    }
++
++    if ($verbose && !$tt->empty && $old_errors == $::errors) {
++      print STDERR $tt->{'errprefix'}, "Success!\n";
++    }
++
++    0;
++}
++
++sub run_test (;$$) {
++    my($fn, $verbose) = @_;
++
++    # read the testie
++    my($tt, $display_fn, $close_in);
++    if (!defined($fn) || $fn eq '-') {
++      if (!open(IN, "<&=STDIN")) {
++          print STDERR "<stdin>: $!\n";
++          return -1;
++      }
++      $display_fn = "<stdin>";
++    } elsif (-d $fn) {
++      print STDERR "$fn: is a directory\n";
++      return -1;
++    } else {
++      if (!open(IN, "<", $fn)) {
++          print STDERR "$fn: $!\n";
++          return -1;
++      }
++      $display_fn = $fn;
++      $close_in = 1;
++    }
++
++    my($result, $suffix) = (0, '');
++    
++    while (1) {
++      $tt = Testie::read(IN, $display_fn . $suffix);
++      my($this_result) = execute_test($tt, $display_fn . $suffix, $verbose);
++      $result = $this_result if $this_result;
++      last if !$tt->{'continue'};
++      if (!($suffix =~ s/^<(\d+)>$/"<" . ($1+1) . ">"/e)) {
++          $suffix = "<2>";
++      }
++    }
++
++    close IN if $close_in;
++    $result;
++}
++
++$SIG{'INT'} = $SIG{'QUIT'} = $SIG{'TERM'} = $SIG{'__DIE__'} = sub {
++    system("/bin/rm -rf $dir 2>/dev/null") if !$preserve_temporaries;
++    exit(1);
++};
++
++
++
++sub help () {
++    print <<'EOD;';
++'Testie' is a simple test harness.
++
++Usage: testie [OPTIONS] [FILE]...
++
++Options:
++  VARIABLE=VALUE             Variable settings for test script.
++  -V, --verbose              Print information for successful tests.
++  -VV, --superverbose        Print %desc information for all tests.
++  -s, --show TESTIEFILE      Show contents of TESTIEFILE on completion.
++  --preserve-temporaries     Preserve temporary files.
++  -e, --expand               Expand test files into current directory.  
++  -v, --version              Print version information and exit.
++  --help                     Print this message and exit.
++
++Report bugs and suggestions to <kohler@icir.org>.
++EOD;
++    exit(0);
++}
++
++sub usage () {
++    print STDERR <<'EOD;';
++Usage: testie [-V] [--preserve-temporaries] [FILE]...
++Try 'testie --help' for more information.
++EOD;
++    exit(1);
++}
++
++sub print_version () {
++    print <<'EOD;';
++Testie 1.1
++Copyright (c) 2002-2003 International Computer Science Institute
++This is free software; see the source for copying conditions.
++There is NO warranty, not even for merchantability or fitness for a
++particular purpose.
++EOD;
++    exit(0);
++}
++
++sub argcmp ($$$;\$) {
++    my($arg, $opt, $min_match, $store) = @_;
++    $$store = undef if defined($store);
++    return 0 if substr($arg, 0, 2 + $min_match) ne substr($opt, 0, 2 + $min_match);
++    my($eq) = index($arg, '=');
++    my($last) = ($eq >= 0 ? $eq : length($arg));
++    return 0 if $last > length($opt) || substr($arg, 0, $last) ne substr($opt, 0, $last);
++    return 0 if !defined($store) && $eq >= 0;
++    $$store = substr($arg, $eq + 1) if defined($store) && $eq >= 0;
++    1;
++}
++
++
++# directory searching
++
++sub search_dir ($$) {
++    my($dir, $aref) = @_;
++    $dir =~ s/\/+$//;
++    if (!opendir(DIR, $dir)) {
++      print STDERR "$dir: $!\n";
++      return;
++    }
++    my(@f) = grep { !/^\.\.?$/ } readdir(DIR);
++    closedir(DIR);
++    foreach my $f (@f) {
++      if (-d "$dir/$f") {
++          &search_dir("$dir/$f", $aref);
++      } elsif ($f =~ /\.testie$/) {
++          push @$aref, "$dir/$f";
++      }
++    }
++}
++
++
++# argument processing
++
++$dir = "testie$$";
++
++my(@tests, $verbose, $arg);
++$verbose = 0;
++
++while (@ARGV) {
++    $_ = shift @ARGV;
++    if (/^([A-Za-z_]\w*)=(.*)$/s) {
++      $Testie::_variables{$1} = $2;
++    } elsif (/^-$/) {
++      push @tests, $_;
++    } elsif (!/^-/) {
++      if (-d $_) {
++          search_dir($_, \@tests);
++      } else {
++          push @tests, $_;
++      }
++    } elsif (/^-v$/ || argcmp($_, '--version', 4)) {
++      print_version;
++    } elsif (/^-V$/ || argcmp($_, '--verbose', 4)) {
++      $verbose = 1;
++    } elsif (/^-VV$/ || argcmp($_, '--superverbose', 2)) {
++      $verbose = 2;
++    } elsif (/^-e$/ || argcmp($_, '--expand', 1)) {
++      $expand_mode = 1;
++      $preserve_temporaries = 1;
++      $dir = ".";
++    } elsif (argcmp($_, '--help', 1)) {
++      help;
++    } elsif (argcmp($_, '--preserve-temporaries', 1)) {
++      $preserve_temporaries = 1;
++    } elsif (/^-s$/ || argcmp($_, '--show', 2)) {
++      usage if @ARGV == 0;
++      push @show, (shift @ARGV);
++    } elsif (/^-s(.+)$/) {
++      push @show, $1;
++    } elsif (argcmp($_, '--show', 2, $arg)) {
++      push @show, $arg;
++    } else {
++      usage;
++    }
++}
++
++if (-d $dir && !$expand_mode) {
++    print STDERR "warning: $dir directory exists; removing it\n";
++    system("/bin/rm -rf $dir");
++    -d $dir && die "cannot remove $dir directory: $!\n";
++}
++mkdir $dir || die "cannot create $dir directory: $!\n";
++
++# check @show for stdout/stderr
++foreach my $s (@show) {
++    $show_stdout = 1 if $s eq 'stdout';
++    $show_stderr = 1 if $s eq 'stderr';
++}
++
++push @tests, '-' if !@tests;
++foreach my $test (@tests) {
++    run_test($test, $verbose);
++}
++
++system("/bin/rm -rf $dir") if !$preserve_temporaries;
++if ($internal_errors > 0) {
++    exit(2);
++} elsif ($attempts == 0
++       || ($errors == 0 && $require_errors < $attempts)) {
++    exit(0);
++} else {
++    exit(1);
++}
++
++
++=pod
++
++=head1 NAME
++
++testie - simple test harness
++
++=head1 SYNOPSIS
++
++  testie [OPTIONS] [FILE]...
++
++=head1 DESCRIPTION
++
++Testie is a simple test harness. Each testie test file incorporates a shell
++script to be run and, optionally, input and expected output files for that
++script. Testie runs the script; the test fails if any of the script
++commands fail, or if the script generates unexpected output.
++
++To run testie, pass it one or more test filenames. It will print useful
++error messages for failed tests. Alternatively, give it directory names;
++the directories are recursively searched for 'F<*.testie>' files.
++
++Return status is 0 if all tests succeed, 1 if any test fails, and 2 if a
++test fails due to an internal error. Tests whose %require prerequisites
++fail do not affect the return status, except that if all tests'
++prerequisites fail, the return status is 1 instead of 0.
++
++=head1 OPTIONS
++
++=over 8
++
++=item I<VARIABLE>=I<VALUE>
++
++Provide a setting for I<VARIABLE>. Occurrences in the script of
++'C<$VARIABLE>' or 'C<${VARIABLE}>' will be replaced by I<VALUE>. Note that
++this is not an environment variable setting. Variable references to unset
++variables are left unchanged.
++
++=item -V, --verbose
++
++Print information to standard error about successful tests as well as
++unsuccessful tests.
++
++=item -VV, --superverbose
++
++Like --verbose, but use a slightly different format, and additionally print
++every test's %desc section before the test results.
++
++=item -v, --version
++
++Print version number information and exit.
++
++=item --help
++
++Print help information and exit.
++
++=item --preserve-temporaries
++
++Preserve the temporary directory created for the test.
++
++=item -s, --show FILE
++
++Echo the contents of FILE on completion. FILE should be one of the
++filenames specified by %file or %expect*, or 'stdout' or 'stderr'.
++
++=item -e, --expand
++
++Don't run the given test; instead, expand its files into the current
++directory.  The script is stored in a file called '+script+'.
++
++=back
++
++=head1 FILE FORMAT
++
++Testie test files consist of several sections, each introduced by a line
++starting with %. There must be, at least, a %script section.
++
++The %file and %expect* sections define input and/or output files by
++name. Testie runs its script in a private directory in F</tmp>; any files
++mentioned in %file or %expect* are placed in that directory.
++
++=over 8
++
++=item %script
++
++The shell script (in sh syntax) that controls the test. Testie will run
++each command in sequence. Every command in the script must succeed, with
++exit status 0, or the test will fail. The script's inputs and outputs are
++defined with the %file and %expect* sections.
++
++=item %require [-q]
++
++A shell script (in sh syntax) defining prerequisites that must be satisfied
++before the test can run. Every command in the script must succeed, with
++exit status 0, for the test to run. %require's output is not checked,
++however. The C<-q> flag tells testie not to print an error message if a
++requirement fails.
++
++=item %desc
++
++A short description of the test.  In --superverbose mode, its contents are
++printed before the test results.
++
++=item %info
++
++This section is ignored. It is intended for information about the test.
++
++=item %cut
++
++This section is ignored. It is intended to comment out obsolete parts of
++the test.
++
++=item %file [-d] [+LENGTH] FILENAME...
++
++Create an input file for the script. FILENAME can be 'stdin', which sets
++the script's standard input. If LENGTH is provided, the file data consists
++of the LENGTH bytes following this line. Otherwise, it consists of the data
++up to the next section. The C<-d> flag tells testie to delete the
++first character of each line in the section; this makes it possible to
++include files that have lines that start with %. FILENAME cannot contain
++slashes.
++
++=item %expectv [-a] [-d] [+LENGTH] FILENAME...
++
++An expected output file for the script. FILENAME can be 'stdout', for
++standard output. If LENGTH is provided, the file data consists of the
++LENGTH bytes following this line; otherwise, it consists of the data up to
++the next section.
++
++Testie will run the script, then compare the script's output file with the
++provided data. They must match exactly or the test fails.
++
++The C<-a> flag marks this expected output as an alternate. Testie will
++compare the script's output file with each provided alternate; the test
++succeeds if any of the alternates match. The C<-d> flag behaves as in
++%file.
++
++=item %expect [-a] [-d] [-i] [+LENGTH] FILENAME...
++
++An expected output file for the script. Arguments are as for %expectv.
++
++Testie will run the script, then compare the file generated by script
++with the provided data. The files are compared line-by-line. Testie
++ignores trailing whitespace on each line and in the files at large. It also
++ignores lines in the script output that match %ignore patterns (see below).
++Blank lines in the %expect data match one or more blank lines in the
++output. %expect lines can contain Perl regular expressions, enclosed by two
++sets of braces; so the %expect line
++
++    foo{{(bar)?}}
++
++matches either 'foo' or 'foobar'. The C<-i> flag makes any regular
++expressions case-insensitive.
++
++=item %expectx [-a] [-d] [-i] [+LENGTH] FILENAME...
++
++%expectx is just like %expect, except that every line is treated as a
++regular expression (so there is no need for the "{{ }}" escapes).
++
++=item %stdin [+LENGTH]
++
++Same as '%file stdin [ARGS]'.
++
++=item %stdout [-a] [-d] [-i] [+LENGTH]
++
++Same as '%expect stdout'.
++
++=item %stderr [-a] [-d] [-i] [+LENGTH]
++
++Same as '%expect stderr'.
++
++=item %ignorex [-d] [-i] [+LENGTH] [FILENAME]
++
++Each line in the %ignorex section is a Perl regular expression.  Lines in
++the supplied FILENAME that match any of those regular expressions will not
++be considered when comparing files with %expect[x] data.  The regular
++expression must match the whole line.  FILENAME may be 'all', in which case
++the regular expressions will apply to all %expect[x] files.
++
++=item %ignore, %ignorev
++
++Like '%ignorex', but '%ignore' parses regular expressions only inside
++double braces ("{{ }}"), and '%ignorev' lines must match exactly.
++
++=item %eot
++
++Marks the end of the current test.  The rest of the file will be parsed for
++additional tests.
++
++=item %eof
++
++The rest of the file is ignored.
++
++=back
++
++=head1 EXAMPLE
++
++This simple testie script checks that 'grep -c' works for a simple output
++file.
++
++  %script
++  grep -c B.
++  %stdin
++  Bfoo
++  B
++  %stdout
++  1
++
++=head1 AUTHOR
++
++Eddie Kohler, <kohler@cs.ucla.edu>
+Files click-1.6.0/inst/bin/xml2click and click-1.6.0-27/inst/bin/xml2click differ
+diff -Nurb click-1.6.0/inst/include/click/algorithm.hh click-1.6.0-27/inst/include/click/algorithm.hh
+--- click-1.6.0/inst/include/click/algorithm.hh        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/algorithm.hh     2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,24 @@
++#ifndef CLICK_ALGORITHM_HH
++#define CLICK_ALGORITHM_HH
++CLICK_DECLS
++
++template <class T>
++inline T *
++find(T *begin, T *end, const T &val)
++{
++    while (begin < end && *begin != val)
++      begin++;
++    return begin;
++}
++
++template <class T>
++inline const T *
++find(const T *begin, const T *end, const T &val)
++{
++    while (begin < end && *begin != val)
++      begin++;
++    return begin;
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/archive.hh click-1.6.0-27/inst/include/click/archive.hh
+--- click-1.6.0/inst/include/click/archive.hh  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/archive.hh       2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,29 @@
++// -*- c-basic-offset: 2; related-file-name: "../../lib/archive.cc" -*-
++#ifndef CLICK_ARCHIVE_HH
++#define CLICK_ARCHIVE_HH
++#include <click/string.hh>
++#include <click/vector.hh>
++CLICK_DECLS
++class ErrorHandler;
++
++struct ArchiveElement {
++  
++  String name;
++  int date;
++  int uid;
++  int gid;
++  int mode;
++  String data;
++
++  bool live() const                   { return name; }
++  bool dead() const                   { return !name; }
++  void kill()                         { name = String(); }
++  
++};
++
++int separate_ar_string(const String &, Vector<ArchiveElement> &,
++                     ErrorHandler * = 0);
++String create_ar_string(const Vector<ArchiveElement> &, ErrorHandler * = 0);
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/atomic.hh click-1.6.0-27/inst/include/click/atomic.hh
+--- click-1.6.0/inst/include/click/atomic.hh   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/atomic.hh        2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,433 @@
++// -*- c-basic-offset: 4 -*-
++#ifndef CLICK_ATOMIC_HH
++#define CLICK_ATOMIC_HH
++#if CLICK_LINUXMODULE
++# include <click/glue.hh>
++#endif
++CLICK_DECLS
++#if CLICK_LINUXMODULE
++# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0)
++#  define CLICK_ATOMIC_VAL    _val.counter
++# else
++#  define CLICK_ATOMIC_VAL    __atomic_fool_gcc(&_val)
++# endif
++# ifdef __SMP__
++#  define CLICK_ATOMIC_LOCK   "lock ; "
++# else
++#  define CLICK_ATOMIC_LOCK   /* nothing */
++# endif
++#else
++# define CLICK_ATOMIC_VAL     _val
++# if HAVE_MULTITHREAD && defined(__i386__)
++#  define CLICK_ATOMIC_X86    1
++#  define CLICK_ATOMIC_LOCK   "lock ; "
++# else
++#  define CLICK_ATOMIC_LOCK   /* nothing */
++# endif
++#endif
++
++/** @file <click/atomic.hh>
++ * @brief An atomic 32-bit integer.
++ */
++
++/** @class atomic_uint32_t
++ * @brief A 32-bit integer with support for atomic operations.
++ *
++ * The atomic_uint32_t class represents a 32-bit integer, with support for
++ * atomic operations.  The +=, -=, &=, |=, ++, and -- operations are
++ * implemented using atomic instructions.  There are also atomic swap(),
++ * fetch_and_add(), dec_and_test(), and compare_and_swap() operations.
++ *
++ * Because of some issues with compiler implementations, atomic_uint32_t has
++ * no explicit constructor; to set an atomic_uint32_t to a value, use
++ * operator=.
++ *
++ * The atomic_uint32_t only provides true atomic semantics when that has been
++ * implemented.  It has been implemented in the Linux kernel, and at userlevel
++ * (when --enable-multithread has been defined) for x86 machines.  In other
++ * situations, it's not truly atomic (because it doesn't need to be).
++ */
++class atomic_uint32_t { public:
++
++    // No constructors because, unfortunately, GCC generates worse code. Use
++    // operator= instead.
++  
++    inline uint32_t value() const;
++    inline operator uint32_t() const;
++  
++    inline atomic_uint32_t &operator=(uint32_t v);
++
++    inline atomic_uint32_t &operator+=(int32_t delta);
++    inline atomic_uint32_t &operator-=(int32_t delta);
++    inline atomic_uint32_t &operator|=(uint32_t mask);
++    inline atomic_uint32_t &operator&=(uint32_t mask);
++
++    inline void operator++();
++    inline void operator++(int);
++    inline void operator--();
++    inline void operator--(int);
++
++    inline uint32_t swap(uint32_t v);
++    inline uint32_t fetch_and_add(uint32_t delta);
++    inline bool dec_and_test();
++    inline bool compare_and_swap(uint32_t test_value, uint32_t new_value);
++  
++  private:
++
++#if CLICK_LINUXMODULE
++    atomic_t _val;
++#elif HAVE_MULTITHREAD
++    volatile uint32_t _val;
++#else
++    uint32_t _val;
++#endif
++
++};
++
++/** @brief  Return the value. */
++inline uint32_t
++atomic_uint32_t::value() const
++{
++#if CLICK_LINUXMODULE
++    return atomic_read(&_val);
++#else
++    return CLICK_ATOMIC_VAL;
++#endif
++}
++
++/** @brief  Return the value. */
++inline
++atomic_uint32_t::operator uint32_t() const
++{
++    return value();
++}
++
++/** @brief  Set the value to @a v. */
++inline atomic_uint32_t &
++atomic_uint32_t::operator=(uint32_t v)
++{
++#if CLICK_LINUXMODULE
++    atomic_set(&_val, v);
++#else
++    CLICK_ATOMIC_VAL = v;
++#endif
++    return *this;
++}
++
++/** @brief  Atomically add @a delta to the value. */
++inline atomic_uint32_t &
++atomic_uint32_t::operator+=(int32_t delta)
++{
++#if CLICK_LINUXMODULE
++    atomic_add(delta, &_val);
++#elif CLICK_ATOMIC_X86
++    asm volatile (CLICK_ATOMIC_LOCK "addl %1,%0"
++                : "=m" (CLICK_ATOMIC_VAL)
++                : "r" (delta), "m" (CLICK_ATOMIC_VAL)
++                : "cc");
++#else
++    CLICK_ATOMIC_VAL += delta;
++#endif
++    return *this;
++}
++
++/** @brief  Atomically subtract @a delta from the value. */
++inline atomic_uint32_t &
++atomic_uint32_t::operator-=(int32_t delta)
++{
++#if CLICK_LINUXMODULE
++    atomic_sub(delta, &_val);
++#elif CLICK_ATOMIC_X86
++    asm volatile (CLICK_ATOMIC_LOCK "subl %1,%0"
++                : "=m" (CLICK_ATOMIC_VAL)
++                : "r" (delta), "m" (CLICK_ATOMIC_VAL)
++                : "cc");
++#else
++    CLICK_ATOMIC_VAL -= delta;
++#endif
++    return *this;
++}
++
++/** @brief  Atomically bitwise-or the value with @a mask. */
++inline atomic_uint32_t &
++atomic_uint32_t::operator|=(uint32_t mask)
++{
++#if CLICK_LINUXMODULE && HAVE_LINUX_ATOMIC_SET_MASK
++    atomic_set_mask(mask, &_val);
++#elif CLICK_LINUXMODULE
++    unsigned long flags;
++    local_irq_save(flags);
++    CLICK_ATOMIC_VAL |= mask;
++    local_irq_restore(flags);
++#elif CLICK_ATOMIC_X86
++    asm volatile (CLICK_ATOMIC_LOCK "orl %1,%0"
++                : "=m" (CLICK_ATOMIC_VAL)
++                : "r" (mask), "m" (CLICK_ATOMIC_VAL)
++                : "cc");
++#else
++    CLICK_ATOMIC_VAL |= mask;
++#endif
++     return *this;
++}
++
++/** @brief  Atomically bitwise-and the value with @a mask. */
++inline atomic_uint32_t &
++atomic_uint32_t::operator&=(uint32_t mask)
++{
++#if CLICK_LINUXMODULE && HAVE_LINUX_ATOMIC_SET_MASK
++    atomic_clear_mask(~mask, &_val);
++#elif CLICK_LINUXMODULE
++    unsigned long flags;
++    local_irq_save(flags);
++    CLICK_ATOMIC_VAL &= mask;
++    local_irq_restore(flags);
++#elif CLICK_ATOMIC_X86
++    asm volatile (CLICK_ATOMIC_LOCK "andl %1,%0"
++                : "=m" (CLICK_ATOMIC_VAL)
++                : "r" (mask), "m" (CLICK_ATOMIC_VAL)
++                : "cc");
++#else
++    CLICK_ATOMIC_VAL &= mask;
++#endif
++    return *this;
++}
++
++/** @brief  Atomically increment the value. */
++inline void
++atomic_uint32_t::operator++()
++{
++#if CLICK_LINUXMODULE
++    atomic_inc(&_val);
++#elif CLICK_ATOMIC_X86
++    asm volatile (CLICK_ATOMIC_LOCK "incl %0"
++                : "=m" (CLICK_ATOMIC_VAL)
++                : "m" (CLICK_ATOMIC_VAL)
++                : "cc");
++#else
++    CLICK_ATOMIC_VAL++;
++#endif
++}
++
++/** @brief  Atomically increment the value. */
++inline void
++atomic_uint32_t::operator++(int)
++{
++#if CLICK_LINUXMODULE
++    atomic_inc(&_val);
++#elif CLICK_ATOMIC_X86
++    asm volatile (CLICK_ATOMIC_LOCK "incl %0"
++                : "=m" (CLICK_ATOMIC_VAL)
++                : "m" (CLICK_ATOMIC_VAL)
++                : "cc");
++#else
++    CLICK_ATOMIC_VAL++;
++#endif
++}
++
++/** @brief  Atomically decrement the value. */
++inline void
++atomic_uint32_t::operator--()
++{
++#if CLICK_LINUXMODULE
++    atomic_dec(&_val);
++#elif CLICK_ATOMIC_X86
++    asm volatile (CLICK_ATOMIC_LOCK "decl %0"
++                : "=m" (CLICK_ATOMIC_VAL)
++                : "m" (CLICK_ATOMIC_VAL)
++                : "cc");
++#else
++    CLICK_ATOMIC_VAL--;
++#endif
++}
++
++/** @brief  Atomically decrement the value. */
++inline void
++atomic_uint32_t::operator--(int)
++{
++#if CLICK_LINUXMODULE
++    atomic_dec(&_val);
++#elif CLICK_ATOMIC_X86
++    asm volatile (CLICK_ATOMIC_LOCK "decl %0"
++                : "=m" (CLICK_ATOMIC_VAL)
++                : "m" (CLICK_ATOMIC_VAL)
++                : "cc");
++#else
++    CLICK_ATOMIC_VAL--;
++#endif
++}
++
++/** @brief  Atomically assign the value to @a v, returning the old value.
++ *
++ * Behaves like this, but in one atomic step:
++ * @code
++ * uint32_t old_value = value();
++ * *this = v;
++ * return old_value;
++ * @endcode*/
++inline uint32_t
++atomic_uint32_t::swap(uint32_t v)
++{
++#if (CLICK_LINUXMODULE && (defined(__i386__) || defined(__arch_um__) || defined(__x86_64__))) || CLICK_ATOMIC_X86
++    asm ("xchgl %0,%1"
++       : "=r" (v), "=m" (CLICK_ATOMIC_VAL));
++    return v;
++#elif CLICK_LINUXMODULE
++    unsigned long flags;
++    local_irq_save(flags);
++    uint32_t old_value = value();
++    CLICK_ATOMIC_VAL = v;
++    local_irq_restore(flags);
++    return old_value;
++#else
++    uint32_t old_value = value();
++    CLICK_ATOMIC_VAL = v;
++    return old_value;
++#endif
++}
++
++/** @brief  Atomically add @a delta to the value, returning the old value.
++ *
++ * Behaves like this, but in one atomic step:
++ * @code
++ * uint32_t old_value = value();
++ * *this += delta;
++ * return old_value;
++ * @endcode */
++inline uint32_t
++atomic_uint32_t::fetch_and_add(uint32_t delta)
++{
++#if (CLICK_LINUXMODULE && (defined(__i386__) || defined(__arch_um__) || defined(__x86_64__))) || CLICK_ATOMIC_X86
++    asm volatile (CLICK_ATOMIC_LOCK "xaddl %0,%1"
++                : "=r" (delta), "=m" (CLICK_ATOMIC_VAL) 
++                : "0" (delta), "m" (CLICK_ATOMIC_VAL)
++                : "cc");
++    return delta;
++#elif CLICK_LINUXMODULE
++    unsigned long flags;
++    local_irq_save(flags);
++    uint32_t old_value = value();
++    CLICK_ATOMIC_VAL += delta;
++    local_irq_restore(flags);
++    return old_value;
++#else
++    uint32_t old_value = value();
++    CLICK_ATOMIC_VAL += delta;
++    return old_value;
++#endif
++}
++
++/** @brief  Atomically decrement the value, returning true if the new value
++ *        is 0.
++ *
++ * Behaves like this, but in one atomic step:
++ * @code
++ * --*this;
++ * return value() == 0;
++ * @endcode */
++inline bool
++atomic_uint32_t::dec_and_test()
++{
++#if CLICK_LINUXMODULE
++    return atomic_dec_and_test(&_val);
++#elif CLICK_ATOMIC_X86
++    uint8_t result;
++    asm volatile (CLICK_ATOMIC_LOCK "decl %0 ; sete %1"
++                : "=m" (CLICK_ATOMIC_VAL), "=qm" (result)
++                : "m" (CLICK_ATOMIC_VAL)
++                : "cc");
++    return result;
++#else
++    return (--CLICK_ATOMIC_VAL == 0);
++#endif
++}
++
++/** @brief  Perform a compare-and-swap operation.
++ *  @param  test_value  test value
++ *  @param  new_value   new value
++ *  @return True if the old value equaled @a test_value (in which case the
++ *        value was set to @a new_value), false otherwise.
++ *
++ * Behaves like this, but in one atomic step:
++ * @code
++ * uint32_t old_value = value();
++ * if (old_value == test_value)
++ *     *this = new_value;
++ * return old_value == test_value;
++ * @endcode */
++inline bool
++atomic_uint32_t::compare_and_swap(uint32_t test_value, uint32_t new_value)
++{
++#if (CLICK_LINUXMODULE && (defined(__i386__) || defined(__arch_um__) || defined(__x86_64__))) || CLICK_ATOMIC_X86
++    asm volatile (CLICK_ATOMIC_LOCK "cmpxchgl %2,%0 ; sete %%al"
++                : "=m" (CLICK_ATOMIC_VAL), "=a" (test_value)
++                : "r" (new_value), "m" (CLICK_ATOMIC_VAL), "a" (test_value)
++                : "cc");
++    return (uint8_t) test_value;
++#elif CLICK_LINUXMODULE
++    unsigned long flags;
++    local_irq_save(flags);
++    uint32_t old_value = value();
++    if (old_value == test_value)
++      CLICK_ATOMIC_VAL = new_value;
++    local_irq_restore(flags);
++    return old_value == test_value;
++#else
++    uint32_t old_value = value();
++    if (old_value == test_value)
++      CLICK_ATOMIC_VAL = new_value;
++    return old_value == test_value;
++#endif
++}
++
++inline uint32_t
++operator+(const atomic_uint32_t &a, const atomic_uint32_t &b)
++{
++    return a.value() + b.value();
++}
++
++inline uint32_t
++operator-(const atomic_uint32_t &a, const atomic_uint32_t &b)
++{
++    return a.value() - b.value();
++}
++
++inline bool
++operator==(const atomic_uint32_t &a, const atomic_uint32_t &b)
++{
++    return a.value() == b.value();
++}
++
++inline bool
++operator!=(const atomic_uint32_t &a, const atomic_uint32_t &b)
++{
++    return a.value() != b.value();
++}
++
++inline bool
++operator>(const atomic_uint32_t &a, const atomic_uint32_t &b)
++{
++    return a.value() > b.value();
++}
++
++inline bool
++operator<(const atomic_uint32_t &a, const atomic_uint32_t &b)
++{
++    return a.value() < b.value();
++}
++
++inline bool
++operator>=(const atomic_uint32_t &a, const atomic_uint32_t &b)
++{
++    return a.value() >= b.value();
++}
++
++inline bool
++operator<=(const atomic_uint32_t &a, const atomic_uint32_t &b)
++{
++    return a.value() <= b.value();
++}
++
++typedef atomic_uint32_t uatomic32_t;
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/bighashmap.cc click-1.6.0-27/inst/include/click/bighashmap.cc
+--- click-1.6.0/inst/include/click/bighashmap.cc       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/bighashmap.cc    2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,719 @@
++/*
++ * bighashmap.{cc,hh} -- a hash table template that supports removal
++ * Eddie Kohler
++ *
++ * Copyright (c) 2000 Mazu Networks, Inc.
++ * Copyright (c) 2003 International Computer Science Institute
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, subject to the conditions
++ * listed in the Click LICENSE file. These conditions include: you must
++ * preserve this copyright notice, and you cannot mention the copyright
++ * holders in advertising related to the Software without their permission.
++ * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++ * notice is a summary of the Click LICENSE file; the license in that file is
++ * legally binding.
++ */
++
++#ifndef CLICK_BIGHASHMAP_CC
++#define CLICK_BIGHASHMAP_CC
++
++CLICK_ENDDECLS
++#include <click/bighashmap.hh>
++#include <click/bighashmap_arena.hh>
++CLICK_DECLS
++
++#define BIGHASHMAP_REARRANGE_ON_FIND 1
++
++template <class K, class V>
++void
++HashMap<K, V>::initialize(HashMap_ArenaFactory *factory, size_t initial_nbuckets)
++{
++  _nbuckets = initial_nbuckets;
++  _buckets = new Elt *[_nbuckets];
++  for (size_t i = 0; i < _nbuckets; i++)
++    _buckets[i] = 0;
++  set_dynamic_resizing(true);
++
++  _n = 0;
++
++  set_arena(factory);
++}
++
++template <class K, class V>
++HashMap<K, V>::HashMap()
++  : _default_value(), _arena(0)
++{
++  initialize(0, DEFAULT_INITIAL_NBUCKETS);
++}
++
++template <class K, class V>
++HashMap<K, V>::HashMap(const V &def, HashMap_ArenaFactory *factory)
++  : _default_value(def), _arena(0)
++{
++  initialize(factory, DEFAULT_INITIAL_NBUCKETS);
++}
++
++template <class K, class V>
++void
++HashMap<K, V>::copy_from(const HashMap<K, V> &o)
++  // requires that 'this' is empty and has the same number of buckets as 'o'
++  // and the same resize policy
++{
++  for (size_t i = 0; i < _nbuckets; i++) {
++    Elt **pprev = &_buckets[i];
++    *pprev = 0;
++    for (const Elt *e = o._buckets[i]; e; e = e->next) {
++      Elt *ee = reinterpret_cast<Elt *>(_arena->alloc());
++      new(reinterpret_cast<void *>(&ee->key)) K(e->key);
++      new(reinterpret_cast<void *>(&ee->value)) V(e->value);
++      ee->next = 0;
++      *pprev = ee;
++      pprev = &ee->next;
++    }
++  }
++  _n = o._n;
++}
++
++template <class K, class V>
++HashMap<K, V>::HashMap(const HashMap<K, V> &o)
++  : _buckets(new Elt *[o._nbuckets]), _nbuckets(o._nbuckets),
++    _default_value(o._default_value), _capacity(o._capacity), _arena(o._arena)
++{
++  _arena->use();
++  copy_from(o);
++}
++
++template <class K, class V>
++HashMap<K, V> &
++HashMap<K, V>::operator=(const HashMap<K, V> &o)
++{
++  if (&o != this) {
++    clear();
++    _default_value = o._default_value;
++    if (_nbuckets < o._nbuckets)
++      resize0(o._nbuckets);
++    _nbuckets = o._nbuckets;
++    _capacity = o._capacity;
++    copy_from(o);
++  }
++  return *this;
++}
++
++template <class K, class V>
++HashMap<K, V>::~HashMap()
++{
++  for (size_t i = 0; i < _nbuckets; i++)
++    for (Elt *e = _buckets[i]; e; ) {
++      Elt *next = e->next;
++      e->key.~K();
++      e->value.~V();
++      _arena->free(e);
++      e = next;
++    }
++  delete[] _buckets;
++  _arena->unuse();
++}
++
++template <class K, class V>
++void
++HashMap<K, V>::set_dynamic_resizing(bool on)
++{
++  if (!on)
++    _capacity = 0x7FFFFFFF;
++  else if (_nbuckets >= MAX_NBUCKETS)
++    _capacity = 0x7FFFFFFE;
++  else
++    _capacity = DEFAULT_RESIZE_THRESHOLD * _nbuckets;
++}
++
++template <class K, class V>
++void
++HashMap<K, V>::set_arena(HashMap_ArenaFactory *factory)
++{
++  assert(empty());
++  if (_arena)
++    _arena->unuse();
++  _arena = HashMap_ArenaFactory::get_arena(sizeof(Elt), factory);
++  _arena->use();
++}
++
++template <class K, class V>
++inline size_t
++HashMap<K, V>::bucket(const K &key) const
++{
++  return ((size_t) hashcode(key)) % _nbuckets;
++}
++
++template <class K, class V>
++typename HashMap<K, V>::Pair *
++HashMap<K, V>::find_pair(const K &key) const
++{
++#if BIGHASHMAP_REARRANGE_ON_FIND
++  Elt *prev = 0;
++  size_t b = bucket(key);
++  for (Elt *e = _buckets[b]; e; prev = e, e = e->next)
++    if (e->key == key) {
++      if (prev) {
++        // move to front
++        prev->next = e->next;
++      e->next = _buckets[b];
++      _buckets[b] = e;
++      }
++      return e;
++    }
++  return 0;
++#else
++  for (Elt *e = _buckets[bucket(key)]; e; e = e->next)
++    if (e->key == key)
++      return e;
++  return 0;
++#endif
++}
++
++
++template <class K, class V>
++void
++HashMap<K, V>::resize0(size_t new_nbuckets)
++{
++  Elt **new_buckets = new Elt *[new_nbuckets];
++  for (size_t i = 0; i < new_nbuckets; i++)
++    new_buckets[i] = 0;
++
++  size_t old_nbuckets = _nbuckets;
++  Elt **old_buckets = _buckets;
++  _nbuckets = new_nbuckets;
++  _buckets = new_buckets;
++  if (dynamic_resizing())
++    set_dynamic_resizing(true);       // reset threshold
++  
++  for (size_t i = 0; i < old_nbuckets; i++)
++    for (Elt *e = old_buckets[i]; e; ) {
++      Elt *n = e->next;
++      size_t b = bucket(e->key);
++      e->next = new_buckets[b];
++      new_buckets[b] = e;
++      e = n;
++    }
++
++  delete[] old_buckets;
++}
++
++template <class K, class V>
++void
++HashMap<K, V>::resize(size_t want_nbuckets)
++{
++  size_t new_nbuckets = 1;
++  while (new_nbuckets < want_nbuckets && new_nbuckets < MAX_NBUCKETS)
++    new_nbuckets = ((new_nbuckets + 1) << 1) - 1;
++  assert(new_nbuckets > 0 && new_nbuckets <= MAX_NBUCKETS);
++  if (_nbuckets != new_nbuckets)
++    resize0(new_nbuckets);
++}
++
++template <class K, class V>
++bool
++HashMap<K, V>::insert(const K &key, const V &value)
++{
++  size_t b = bucket(key);
++  for (Elt *e = _buckets[b]; e; e = e->next)
++    if (e->key == key) {
++      e->value = value;
++      return false;
++    }
++
++  if (_n >= _capacity) {
++    resize(_nbuckets + 1);
++    b = bucket(key);
++  }
++  
++  if (Elt *e = reinterpret_cast<Elt *>(_arena->alloc())) {
++    new(reinterpret_cast<void *>(&e->key)) K(key);
++    new(reinterpret_cast<void *>(&e->value)) V(value);
++    e->next = _buckets[b];
++    _buckets[b] = e;
++    _n++;
++  }
++  return true;
++}
++
++template <class K, class V>
++bool
++HashMap<K, V>::remove(const K &key)
++{
++  size_t b = bucket(key);
++  Elt *prev = 0;
++  Elt *e = _buckets[b];
++  while (e && !(e->key == key)) {
++    prev = e;
++    e = e->next;
++  }
++  if (e) {
++    if (prev)
++      prev->next = e->next;
++    else
++      _buckets[b] = e->next;
++    e->key.~K();
++    e->value.~V();
++    _arena->free(e);
++    _n--;
++    return true;
++  } else
++    return false;
++}
++
++template <class K, class V>
++typename HashMap<K, V>::Pair *
++HashMap<K, V>::find_pair_force(const K &key, const V &default_value)
++{
++  size_t b = bucket(key);
++  for (Elt *e = _buckets[b]; e; e = e->next)
++    if (e->key == key)
++      return e;
++  if (_n >= _capacity) {
++    resize(_nbuckets + 1);
++    b = bucket(key);
++  }
++  if (Elt *e = reinterpret_cast<Elt *>(_arena->alloc())) {
++    new(reinterpret_cast<void *>(&e->key)) K(key);
++    new(reinterpret_cast<void *>(&e->value)) V(default_value);
++    e->next = _buckets[b];
++    _buckets[b] = e;
++    _n++;
++    return e;
++  } else
++    return 0;
++}
++
++template <class K, class V>
++void
++HashMap<K, V>::clear()
++{
++  for (size_t i = 0; i < _nbuckets; i++) {
++    for (Elt *e = _buckets[i]; e; ) {
++      Elt *next = e->next;
++      e->key.~K();
++      e->value.~V();
++      _arena->free(e);
++      e = next;
++    }
++    _buckets[i] = 0;
++  }
++  _n = 0;
++}
++
++template <class K, class V>
++void
++HashMap<K, V>::swap(HashMap<K, V> &o)
++{
++  Elt **t_elts;
++  V t_v;
++  size_t t_size;
++  HashMap_Arena *t_arena;
++
++  t_elts = _buckets; _buckets = o._buckets; o._buckets = t_elts;
++  t_size = _nbuckets; _nbuckets = o._nbuckets; o._nbuckets = t_size;
++  t_v = _default_value; _default_value = o._default_value; o._default_value = t_v;
++
++  t_size = _n; _n = o._n; o._n = t_size;
++  t_size = _capacity; _capacity = o._capacity; o._capacity = t_size;
++
++  t_arena = _arena; _arena = o._arena; o._arena = t_arena;
++}
++
++template <class K, class V>
++_HashMap_const_iterator<K, V>::_HashMap_const_iterator(const HashMap<K, V> *hm, bool begin)
++  : _hm(hm)
++{
++  size_t nb = _hm->_nbuckets;
++  typename HashMap<K, V>::Elt **b = _hm->_buckets;
++  for (_bucket = 0; _bucket < nb && begin; _bucket++)
++    if (b[_bucket]) {
++      _elt = b[_bucket];
++      return;
++    }
++  _elt = 0;
++}
++
++template <class K, class V>
++void
++_HashMap_const_iterator<K, V>::operator++(int)
++{
++  if (_elt->next)
++    _elt = _elt->next;
++  else {
++    size_t nb = _hm->_nbuckets;
++    typename HashMap<K, V>::Elt **b = _hm->_buckets;
++    for (_bucket++; _bucket < nb; _bucket++)
++      if (b[_bucket]) {
++      _elt = b[_bucket];
++      return;
++      }
++    _elt = 0;
++  }
++}
++
++#if 0
++static size_t
++HashMap_partition_elts(void **elts, size_t left, size_t right)
++{
++  void *pivot = elts[(left + right) / 2];
++
++  // loop invariant:
++  // elts[i] < pivot for all left_init <= i < left
++  // elts[i] > pivot for all right < i <= right_init
++  while (left < right) {
++    if (elts[left] < pivot)
++      left++;
++    else if (elts[right] > pivot)
++      right--;
++    else {
++      void *x = elts[left];
++      elts[left] = elts[right];
++      elts[right] = x;
++    }
++  }
++
++  return left;
++}
++
++void
++HashMap_qsort_elts(void **elts, size_t left, size_t right)
++{
++  if (left < right) {
++    size_t split = HashMap_partition_elts(elts, left, right);
++    HashMap_qsort_elts(elts, left, split);
++    HashMap_qsort_elts(elts, split, right);
++  }
++}
++#endif
++
++
++// void * partial specialization
++
++template <class K>
++void
++HashMap<K, void *>::initialize(HashMap_ArenaFactory *factory, size_t initial_nbuckets)
++{
++  _nbuckets = initial_nbuckets;
++  _buckets = new Elt *[_nbuckets];
++  for (size_t i = 0; i < _nbuckets; i++)
++    _buckets[i] = 0;
++  set_dynamic_resizing(true);
++
++  _n = 0;
++
++  set_arena(factory);
++}
++
++template <class K>
++HashMap<K, void *>::HashMap()
++  : _default_value(0), _arena(0)
++{
++  initialize(0, DEFAULT_INITIAL_NBUCKETS);
++}
++
++template <class K>
++HashMap<K, void *>::HashMap(void *def, HashMap_ArenaFactory *factory)
++  : _default_value(def), _arena(0)
++{
++  initialize(factory, DEFAULT_INITIAL_NBUCKETS);
++}
++
++template <class K>
++void
++HashMap<K, void *>::copy_from(const HashMap<K, void *> &o)
++{
++  for (size_t i = 0; i < _nbuckets; i++) {
++    Elt **pprev = &_buckets[i];
++    *pprev = 0;
++    for (const Elt *e = o._buckets[i]; e; e = e->next) {
++      Elt *ee = reinterpret_cast<Elt *>(_arena->alloc());
++      new(reinterpret_cast<void *>(&ee->key)) K(e->key);
++      ee->value = e->value;
++      ee->next = 0;
++      *pprev = ee;
++      pprev = &ee->next;
++    }
++  }
++  _n = o._n;
++}
++
++template <class K>
++HashMap<K, void *>::HashMap(const HashMap<K, void *> &o)
++  : _buckets(new Elt *[o._nbuckets]), _nbuckets(o._nbuckets),
++    _default_value(o._default_value), _capacity(o._capacity), _arena(o._arena)
++{
++  _arena->use();
++  copy_from(o);
++}
++
++template <class K>
++HashMap<K, void *> &
++HashMap<K, void *>::operator=(const HashMap<K, void *> &o)
++{
++  if (&o != this) {
++    clear();
++    _default_value = o._default_value;
++    if (_nbuckets < o._nbuckets)
++      resize0(o._nbuckets);
++    _nbuckets = o._nbuckets;
++    _capacity = o._capacity;
++    copy_from(o);
++  }
++  return *this;
++}
++
++template <class K>
++HashMap<K, void *>::~HashMap()
++{
++  for (size_t i = 0; i < _nbuckets; i++)
++    for (Elt *e = _buckets[i]; e; ) {
++      Elt *next = e->next;
++      e->key.~K();
++      _arena->free(e);
++      e = next;
++    }
++  delete[] _buckets;
++  _arena->unuse();
++}
++
++template <class K>
++void
++HashMap<K, void *>::set_dynamic_resizing(bool on)
++{
++  if (!on)
++    _capacity = 0x7FFFFFFF;
++  else if (_nbuckets >= MAX_NBUCKETS)
++    _capacity = 0x7FFFFFFE;
++  else
++    _capacity = DEFAULT_RESIZE_THRESHOLD * _nbuckets;
++}
++
++template <class K>
++void
++HashMap<K, void *>::set_arena(HashMap_ArenaFactory *factory)
++{
++  assert(empty());
++  if (_arena)
++    _arena->unuse();
++  _arena = HashMap_ArenaFactory::get_arena(sizeof(Elt), factory);
++  _arena->use();
++}
++
++template <class K>
++inline size_t
++HashMap<K, void *>::bucket(const K &key) const
++{
++  return ((size_t) hashcode(key)) % _nbuckets;
++}
++
++template <class K>
++typename HashMap<K, void *>::Pair *
++HashMap<K, void *>::find_pair(const K &key) const
++{
++#if BIGHASHMAP_REARRANGE_ON_FIND
++  Elt *prev = 0;
++  size_t b = bucket(key);
++  for (Elt *e = _buckets[b]; e; prev = e, e = e->next)
++    if (e->key == key) {
++      if (prev) {
++        // move to front
++        prev->next = e->next;
++      e->next = _buckets[b];
++      _buckets[b] = e;
++      }
++      return e;
++    }
++  return 0;
++#else
++  for (Elt *e = _buckets[bucket(key)]; e; e = e->next)
++    if (e->key == key)
++      return e;
++  return 0;
++#endif
++}
++
++
++template <class K>
++void
++HashMap<K, void *>::resize0(size_t new_nbuckets)
++{
++  Elt **new_buckets = new Elt *[new_nbuckets];
++  for (size_t i = 0; i < new_nbuckets; i++)
++    new_buckets[i] = 0;
++
++  size_t old_nbuckets = _nbuckets;
++  Elt **old_buckets = _buckets;
++  _nbuckets = new_nbuckets;
++  _buckets = new_buckets;
++  if (dynamic_resizing())
++    set_dynamic_resizing(true);       // reset threshold
++  
++  for (size_t i = 0; i < old_nbuckets; i++)
++    for (Elt *e = old_buckets[i]; e; ) {
++      Elt *n = e->next;
++      size_t b = bucket(e->key);
++      e->next = new_buckets[b];
++      new_buckets[b] = e;
++      e = n;
++    }
++
++  delete[] old_buckets;
++}
++
++template <class K>
++void
++HashMap<K, void *>::resize(size_t want_nbuckets)
++{
++  size_t new_nbuckets = 1;
++  while (new_nbuckets < want_nbuckets && new_nbuckets < MAX_NBUCKETS)
++    new_nbuckets = ((new_nbuckets + 1) << 1) - 1;
++  assert(new_nbuckets > 0 && new_nbuckets <= MAX_NBUCKETS);
++  if (_nbuckets != new_nbuckets)
++    resize0(new_nbuckets);
++}
++
++template <class K>
++bool
++HashMap<K, void *>::insert(const K &key, void *value)
++{
++  size_t b = bucket(key);
++  for (Elt *e = _buckets[b]; e; e = e->next)
++    if (e->key == key) {
++      e->value = value;
++      return false;
++    }
++
++  if (_n >= _capacity) {
++    resize(_nbuckets + 1);
++    b = bucket(key);
++  }
++  
++  if (Elt *e = reinterpret_cast<Elt *>(_arena->alloc())) {
++    new(reinterpret_cast<void *>(&e->key)) K(key);
++    e->value = value;
++    e->next = _buckets[b];
++    _buckets[b] = e;
++    _n++;
++  }
++  return true;
++}
++
++template <class K>
++bool
++HashMap<K, void *>::remove(const K &key)
++{
++  size_t b = bucket(key);
++  Elt *prev = 0;
++  Elt *e = _buckets[b];
++  while (e && !(e->key == key)) {
++    prev = e;
++    e = e->next;
++  }
++  if (e) {
++    if (prev)
++      prev->next = e->next;
++    else
++      _buckets[b] = e->next;
++    e->key.~K();
++    _arena->free(e);
++    _n--;
++    return true;
++  } else
++    return false;
++}
++
++template <class K>
++typename HashMap<K, void *>::Pair *
++HashMap<K, void *>::find_pair_force(const K &key, void *default_value)
++{
++  size_t b = bucket(key);
++  for (Elt *e = _buckets[b]; e; e = e->next)
++    if (e->key == key)
++      return e;
++  if (_n >= _capacity) {
++    resize(_nbuckets + 1);
++    b = bucket(key);
++  }
++  if (Elt *e = reinterpret_cast<Elt *>(_arena->alloc())) {
++    new(reinterpret_cast<void *>(&e->key)) K(key);
++    e->value = default_value;
++    e->next = _buckets[b];
++    _buckets[b] = e;
++    _n++;
++    return e;
++  } else
++    return 0;
++}
++
++template <class K>
++void
++HashMap<K, void *>::clear()
++{
++  for (size_t i = 0; i < _nbuckets; i++) {
++    for (Elt *e = _buckets[i]; e; ) {
++      Elt *next = e->next;
++      e->key.~K();
++      _arena->free(e);
++      e = next;
++    }
++    _buckets[i] = 0;
++  }
++  _n = 0;
++}
++
++template <class K>
++void
++HashMap<K, void *>::swap(HashMap<K, void *> &o)
++{
++  Elt **t_elts;
++  void *t_v;
++  size_t t_size;
++  HashMap_Arena *t_arena;
++
++  t_elts = _buckets; _buckets = o._buckets; o._buckets = t_elts;
++  t_size = _nbuckets; _nbuckets = o._nbuckets; o._nbuckets = t_size;
++  t_v = _default_value; _default_value = o._default_value; o._default_value = t_v;
++
++  t_size = _n; _n = o._n; o._n = t_size;
++  t_size = _capacity; _capacity = o._capacity; o._capacity = t_size;
++
++  t_arena = _arena; _arena = o._arena; o._arena = t_arena;
++}
++
++
++template <class K>
++_HashMap_const_iterator<K, void *>::_HashMap_const_iterator(const HashMap<K, void *> *hm, bool begin)
++  : _hm(hm)
++{
++  size_t nb = _hm->_nbuckets;
++  typename HashMap<K, void *>::Elt **b = _hm->_buckets;
++  for (_bucket = 0; _bucket < nb && begin; _bucket++)
++    if (b[_bucket]) {
++      _elt = b[_bucket];
++      return;
++    }
++  _elt = 0;
++}
++
++template <class K>
++void
++_HashMap_const_iterator<K, void *>::operator++(int)
++{
++  if (_elt->next)
++    _elt = _elt->next;
++  else {
++    size_t nb = _hm->_nbuckets;
++    typename HashMap<K, void *>::Elt **b = _hm->_buckets;
++    for (_bucket++; _bucket < nb; _bucket++)
++      if (b[_bucket]) {
++      _elt = b[_bucket];
++      return;
++      }
++    _elt = 0;
++  }
++}
++
++#endif
+diff -Nurb click-1.6.0/inst/include/click/bighashmap.hh click-1.6.0-27/inst/include/click/bighashmap.hh
+--- click-1.6.0/inst/include/click/bighashmap.hh       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/bighashmap.hh    2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,567 @@
++#ifndef CLICK_BIGHASHMAP_HH
++#define CLICK_BIGHASHMAP_HH
++#include <click/hashcode.hh>
++CLICK_DECLS
++class HashMap_Arena;
++class HashMap_ArenaFactory;
++
++// K AND V REQUIREMENTS:
++//
++//            K::K(const K &)
++//            k1 == k2
++// unsigned   hashcode(const K &)
++//                    If hashcode(k1) != hashcode(k2), then k1 != k2.
++//
++//            V::V() -- only used for default value
++//            V::V(const V &)
++// V &                V::operator=(const V &)
++
++template <class K, class V> class _HashMap_const_iterator;
++template <class K, class V> class _HashMap_iterator;
++
++template <class K, class V>
++class HashMap { public:
++
++  struct Pair;
++  
++  HashMap();
++  explicit HashMap(const V &, HashMap_ArenaFactory * = 0);
++  HashMap(const HashMap<K, V> &);
++  ~HashMap();
++
++  void set_arena(HashMap_ArenaFactory *);
++  
++  size_t size() const                 { return _n; }
++  bool empty() const                  { return _n == 0; }
++  size_t nbuckets() const             { return _nbuckets; }
++
++  Pair *find_pair(const K &) const;
++  inline V *findp(const K &) const;
++  inline const V &find(const K &, const V &) const;
++  inline const V &find(const K &) const;
++  inline const V &operator[](const K &) const;
++
++  Pair *find_pair_force(const K &, const V &);
++  Pair *find_pair_force(const K &k) { return find_pair_force(k, _default_value); }
++  V *findp_force(const K &k, const V &v) { if (Pair *p = find_pair_force(k, v)) return &p->value; else return 0; }
++  V &find_force(const K &k, const V &v) { return *findp_force(k, v); }
++  V *findp_force(const K &k)  { return findp_force(k, _default_value); }
++  V &find_force(const K &k)   { return *findp_force(k, _default_value); }
++  
++  bool insert(const K &, const V &);
++  bool remove(const K &);
++  void clear();
++
++  void swap(HashMap<K, V> &);
++
++  // iteration
++  typedef _HashMap_const_iterator<K, V> const_iterator;
++  typedef _HashMap_iterator<K, V> iterator;
++  inline const_iterator begin() const;
++  inline iterator begin();
++  inline const_iterator end() const;
++  inline iterator end();
++  
++  // dynamic resizing
++  void resize(size_t);
++  bool dynamic_resizing() const               { return _capacity < 0x7FFFFFFF; }
++  void set_dynamic_resizing(bool);
++
++  HashMap<K, V> &operator=(const HashMap<K, V> &);
++
++  struct Pair {
++    K key;
++    V value;
++  };
++
++  enum { MAX_NBUCKETS = 32767,
++       DEFAULT_INITIAL_NBUCKETS = 127,
++       DEFAULT_RESIZE_THRESHOLD = 2 };
++  
++ private:
++  
++    struct Elt : public Pair {
++      Elt *next;
++#if defined(__GNUC__) && __GNUC__ < 4
++      /* Shut up compiler about Pair lacking default constructor */
++      Elt(const Pair &p)              : Pair(p) { }
++#endif
++    };
++
++  Elt **_buckets;
++  size_t _nbuckets;
++  V _default_value;
++
++  size_t _n;
++  size_t _capacity;
++
++  HashMap_Arena *_arena;
++
++  void initialize(HashMap_ArenaFactory *, size_t);
++  void copy_from(const HashMap<K, V> &);
++  void resize0(size_t);
++  size_t bucket(const K &) const;
++
++  friend class _HashMap_iterator<K, V>;
++  friend class _HashMap_const_iterator<K, V>;
++  
++};
++
++template <class K, class V>
++class _HashMap_const_iterator { public:
++
++  bool live() const                   { return _elt; }
++  typedef bool (_HashMap_const_iterator::*unspecified_bool_type)() const;
++  inline operator unspecified_bool_type() const CLICK_DEPRECATED;
++  void operator++(int);
++  void operator++()                   { (*this)++; }
++  
++  typedef typename HashMap<K, V>::Pair Pair;
++  const Pair *pair() const            { return _elt; }
++
++  const K &key() const                        { return _elt->key; }
++  const V &value() const              { return _elt->value; }
++
++ private:
++
++  const HashMap<K, V> *_hm;
++  typename HashMap<K, V>::Elt *_elt;
++  size_t _bucket;
++
++  _HashMap_const_iterator(const HashMap<K, V> *m, bool begin);
++  friend class HashMap<K, V>;
++  friend class _HashMap_iterator<K, V>;
++
++};
++
++template <class K, class V>
++class _HashMap_iterator : public _HashMap_const_iterator<K, V> { public:
++
++  typedef _HashMap_const_iterator<K, V> inherited;
++
++  typedef typename HashMap<K, V>::Pair Pair;
++  Pair *pair() const  { return const_cast<Pair *>(inherited::pair()); }
++  V &value() const    { return const_cast<V &>(inherited::value()); }
++
++ private:
++  
++  _HashMap_iterator(HashMap<K, V> *m, bool begin) : inherited(m, begin) { }
++  friend class HashMap<K, V>;
++
++};
++
++template <class K, class V>
++inline typename HashMap<K, V>::const_iterator
++HashMap<K, V>::begin() const
++{
++  return const_iterator(this, true);
++}
++
++template <class K, class V>
++inline typename HashMap<K, V>::iterator
++HashMap<K, V>::begin()
++{
++  return iterator(this, true);
++}
++
++template <class K, class V>
++inline typename HashMap<K, V>::const_iterator
++HashMap<K, V>::end() const
++{
++  return const_iterator(this, false);
++}
++
++template <class K, class V>
++inline typename HashMap<K, V>::iterator
++HashMap<K, V>::end()
++{
++  return iterator(this, false);
++}
++
++template <class K, class V>
++inline V *
++HashMap<K, V>::findp(const K &key) const
++{
++  Pair *p = find_pair(key);
++  return (p ? &p->value : 0);
++}
++
++template <class K, class V>
++inline const V &
++HashMap<K, V>::find(const K &key, const V &default_value) const
++{
++  Pair *p = find_pair(key);
++  const V *v = (p ? &p->value : &default_value);
++  return *v;
++}
++
++template <class K, class V>
++inline const V &
++HashMap<K, V>::find(const K &key) const
++{
++  return find(key, _default_value);
++}
++
++template <class K, class V>
++inline const V &
++HashMap<K, V>::operator[](const K &key) const
++{
++  return find(key);
++}
++
++template <class K, class V>
++inline
++_HashMap_const_iterator<K, V>::operator unspecified_bool_type() const
++{
++    return live() ? &_HashMap_const_iterator::live : 0;
++}
++
++
++template <class K>
++class HashMap<K, void *> { public:
++
++  struct Pair;
++
++  HashMap();
++  explicit HashMap(void *, HashMap_ArenaFactory * = 0);
++  HashMap(const HashMap<K, void *> &);
++  ~HashMap();
++  
++  void set_arena(HashMap_ArenaFactory *);
++  
++  size_t size() const                 { return _n; }
++  bool empty() const                  { return _n == 0; }
++  size_t nbuckets() const             { return _nbuckets; }
++
++  Pair *find_pair(const K &) const;
++  inline void **findp(const K &) const;
++  inline void *find(const K &, void *) const;
++  inline void *find(const K &) const;
++  inline void *operator[](const K &) const;
++
++  Pair *find_pair_force(const K &, void *);
++  Pair *find_pair_force(const K &k) { return find_pair_force(k, _default_value); }
++  void **findp_force(const K &k, void *v) { if (Pair *p = find_pair_force(k, v)) return &p->value; else return 0; }
++  void *&find_force(const K &k, void *v) { return *findp_force(k, v); }
++  void **findp_force(const K &k) { return findp_force(k, _default_value); }
++  void *&find_force(const K &k)  { return *findp_force(k, _default_value); }
++  
++  bool insert(const K &, void *);
++  bool remove(const K &);
++  void clear();
++
++  void swap(HashMap<K, void *> &);
++
++  // iterators
++  typedef _HashMap_const_iterator<K, void *> const_iterator;
++  typedef _HashMap_iterator<K, void *> iterator;
++  inline const_iterator begin() const;
++  inline iterator begin();
++  inline const_iterator end() const;
++  inline iterator end();
++
++  // dynamic resizing
++  void resize(size_t);
++  bool dynamic_resizing() const               { return _capacity < 0x7FFFFFFF; }
++  void set_dynamic_resizing(bool);
++
++  HashMap<K, void *> &operator=(const HashMap<K, void *> &);
++
++  struct Pair {
++    K key;
++    void *value;
++  };
++  
++  enum { MAX_NBUCKETS = 32767,
++       DEFAULT_INITIAL_NBUCKETS = 127,
++       DEFAULT_RESIZE_THRESHOLD = 2 };
++  
++  private:
++  
++    struct Elt : public Pair {
++      Elt *next;
++#if defined(__GNUC__) && __GNUC__ < 4
++      /* Shut up compiler about Pair lacking default constructor */
++      Elt(const Pair &p)              : Pair(p) { }
++#endif
++    };
++
++  Elt **_buckets;
++  size_t _nbuckets;
++  void *_default_value;
++
++  size_t _n;
++  size_t _capacity;
++
++  HashMap_Arena *_arena;
++
++  void initialize(HashMap_ArenaFactory *, size_t);
++  void copy_from(const HashMap<K, void *> &);
++  void resize0(size_t);
++  size_t bucket(const K &) const;
++
++  friend class _HashMap_iterator<K, void *>;
++  friend class _HashMap_const_iterator<K, void *>;
++  
++};
++
++template <class K>
++class _HashMap_const_iterator<K, void *> { public:
++
++  bool live() const                   { return _elt; }
++  typedef bool (_HashMap_const_iterator::*unspecified_bool_type)() const;
++  inline operator unspecified_bool_type() const CLICK_DEPRECATED;
++  void operator++(int);
++  void operator++()                   { (*this)++; }
++  
++  typedef typename HashMap<K, void *>::Pair Pair;
++  const Pair *pair() const            { return _elt; }
++  
++  const K &key() const                        { return _elt->key; }
++  void *value() const                 { return _elt->value; }
++  
++ private:
++
++  const HashMap<K, void *> *_hm;
++  typename HashMap<K, void *>::Elt *_elt;
++  size_t _bucket;
++
++  _HashMap_const_iterator(const HashMap<K, void *> *, bool begin);
++  template <class, class> friend class _HashMap_const_iterator;
++  template <class, class> friend class _HashMap_iterator;
++  template <class, class> friend class HashMap;
++
++};
++
++template <class K>
++class _HashMap_iterator<K, void *> : public _HashMap_const_iterator<K, void *> { public:
++
++  typedef _HashMap_const_iterator<K, void *> inherited;
++
++  typedef typename HashMap<K, void *>::Pair Pair;
++  Pair *pair() const  { return const_cast<Pair *>(inherited::pair()); }
++  void *&value() const        { return this->_elt->value; }
++
++ private:
++
++  _HashMap_iterator(HashMap<K, void *> *m, bool begin) : inherited(m, begin) { }
++  template <class, class> friend class HashMap;
++
++};
++
++template <class K>
++inline typename HashMap<K, void *>::const_iterator
++HashMap<K, void *>::begin() const
++{
++  return const_iterator(this, true);
++}
++
++template <class K>
++inline typename HashMap<K, void *>::iterator
++HashMap<K, void *>::begin()
++{
++  return iterator(this, true);
++}
++
++template <class K>
++inline typename HashMap<K, void *>::const_iterator
++HashMap<K, void *>::end() const
++{
++  return const_iterator(this, false);
++}
++
++template <class K>
++inline typename HashMap<K, void *>::iterator
++HashMap<K, void *>::end()
++{
++  return iterator(this, false);
++}
++
++template <class K>
++inline void **
++HashMap<K, void *>::findp(const K &key) const
++{
++  Pair *p = find_pair(key);
++  return (p ? &p->value : 0);
++}
++
++template <class K>
++inline void *
++HashMap<K, void *>::find(const K &key, void *default_value) const
++{
++  Pair *p = find_pair(key);
++  return (p ? p->value : default_value);
++}
++
++template <class K>
++inline void *
++HashMap<K, void *>::find(const K &key) const
++{
++  return find(key, _default_value);
++}
++
++template <class K>
++inline void *
++HashMap<K, void *>::operator[](const K &key) const
++{
++  return find(key);
++}
++
++template <class K>
++inline
++_HashMap_const_iterator<K, void *>::operator unspecified_bool_type() const
++{
++    return live() ? &_HashMap_const_iterator::live : 0;
++}
++
++
++template <class K, class T>
++class HashMap<K, T *> : public HashMap<K, void *> { public:
++
++  typedef HashMap<K, void *> inherited;
++  struct Pair;
++  
++  HashMap()                           : inherited() { }
++  explicit HashMap(T *def, HashMap_ArenaFactory *factory = 0)
++                                      : inherited(def, factory) { }
++  HashMap(const HashMap<K, T *> &o) : inherited(o) { }
++  ~HashMap()                          { }
++  
++  void set_arena(HashMap_ArenaFactory *af) { inherited::set_arena(af); }
++  
++  // size_t size() const              inherited
++  // bool empty() const                       inherited
++  // size_t nbuckets() const          inherited
++  
++  Pair *find_pair(const K &k) const { return reinterpret_cast<Pair *>(inherited::find_pair(k)); }
++  T **findp(const K &k) const { return reinterpret_cast<T **>(inherited::findp(k)); }
++  T *find(const K &k, T *v) const { return reinterpret_cast<T *>(inherited::find(k, v)); }
++  T *find(const K &k) const { return reinterpret_cast<T *>(inherited::find(k)); }
++  T *operator[](const K &k) const { return reinterpret_cast<T *>(inherited::operator[](k)); }
++  
++  Pair *find_pair_force(const K &k, T *v) { return reinterpret_cast<Pair *>(inherited::find_pair_force(k, v)); }
++  Pair *find_pair_force(const K &k) { return reinterpret_cast<Pair *>(inherited::find_pair_force(k)); }
++  T **findp_force(const K &k, T *v) { return reinterpret_cast<T **>(inherited::findp_force(k, v)); }
++  T *&find_force(const K &k, T *v) { return *reinterpret_cast<T **>(inherited::findp_force(k, v)); }
++  T **findp_force(const K &k) { return reinterpret_cast<T **>(inherited::findp_force(k)); }
++  T *&find_force(const K &k) { return *reinterpret_cast<T **>(inherited::findp_force(k)); }
++  
++  bool insert(const K &k, T *v)               { return inherited::insert(k, v); }
++  // bool remove(const K &)           inherited
++  // void clear()                     inherited
++
++  void swap(HashMap<K, T *> &o)       { inherited::swap(o); }
++
++  // iteration
++  typedef _HashMap_const_iterator<K, T *> const_iterator;
++  typedef _HashMap_iterator<K, T *> iterator;  
++  inline const_iterator begin() const;
++  inline iterator begin();
++  inline const_iterator end() const;
++  inline iterator end();
++
++  // dynamic resizing methods         inherited
++
++  HashMap<K, T *> &operator=(const HashMap<K, T *> &o) { return static_cast<HashMap<K, T *> &>(inherited::operator=(o)); }
++
++  struct Pair {
++    K key;
++    T *value;
++  };
++  
++};
++
++template <class K, class T>
++class _HashMap_const_iterator<K, T *> { public:
++
++    typedef _HashMap_const_iterator<K, void *> inherited;
++
++    bool live() const         { return _i.live(); }
++    typedef typename inherited::unspecified_bool_type unspecified_bool_type;
++    inline operator unspecified_bool_type() const CLICK_DEPRECATED;
++    void operator++(int)      { _i.operator++(0); }
++    void operator++()         { _i.operator++(); }
++  
++    typedef typename HashMap<K, T *>::Pair Pair;
++    const Pair *pair() const { return reinterpret_cast<const Pair *>(_i.pair()); }
++  
++    const K &key() const      { return _i.key(); }
++    T *value() const          { return reinterpret_cast<T *>(_i.value()); }
++
++ private:
++
++    inherited _i;
++    
++    _HashMap_const_iterator(const HashMap<K, T *> *t, bool begin) : _i(t, begin) { }  
++    friend class _HashMap_iterator<K, T *>;
++    template <class, class> friend class HashMap;
++  
++};
++
++template <class K, class T>
++class _HashMap_iterator<K, T *> : public _HashMap_const_iterator<K, T *> { public:
++
++  typedef _HashMap_const_iterator<K, T *> inherited;
++
++  typedef typename HashMap<K, T *>::Pair Pair;
++  Pair *pair() const  { return const_cast<Pair *>(inherited::pair()); }
++  T *&value() const   { return pair()->value; }
++
++ private:
++  
++  _HashMap_iterator(HashMap<K, T *> *t, bool begin) : inherited(t, begin) { }
++  template <class, class> friend class HashMap;
++  
++};
++
++template <class K, class T>
++inline typename HashMap<K, T *>::const_iterator
++HashMap<K, T *>::begin() const
++{
++  return const_iterator(this, true);
++}
++
++template <class K, class T>
++inline typename HashMap<K, T *>::iterator
++HashMap<K, T *>::begin()
++{
++  return iterator(this, true);
++}
++
++template <class K, class T>
++inline typename HashMap<K, T *>::const_iterator
++HashMap<K, T *>::end() const
++{
++  return const_iterator(this, false);
++}
++
++template <class K, class T>
++inline typename HashMap<K, T *>::iterator
++HashMap<K, T *>::end()
++{
++  return iterator(this, false);
++}
++
++template <class K, class T>
++inline
++_HashMap_const_iterator<K, T *>::operator unspecified_bool_type() const
++{
++    return inherited::live() ? &inherited::live : 0;
++}
++
++template <class K, class V>
++inline bool
++operator==(const _HashMap_const_iterator<K, V> &a, const _HashMap_const_iterator<K, V> &b)
++{
++  return a.pair() == b.pair();
++}
++
++template <class K, class V>
++inline bool
++operator!=(const _HashMap_const_iterator<K, V> &a, const _HashMap_const_iterator<K, V> &b)
++{
++  return a.pair() != b.pair();
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/bighashmap_arena.hh click-1.6.0-27/inst/include/click/bighashmap_arena.hh
+--- click-1.6.0/inst/include/click/bighashmap_arena.hh 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/bighashmap_arena.hh      2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,98 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/bighashmap_arena.cc" -*-
++#ifndef CLICK_BIGHASHMAP_ARENA_HH
++#define CLICK_BIGHASHMAP_ARENA_HH
++CLICK_DECLS
++
++class HashMap_Arena { public:
++
++    HashMap_Arena(uint32_t element_size);
++
++    void use()                        { _refcount++; }
++    void unuse();
++
++    bool detached() const     { return _detached; }
++    void detach()             { _detached = true; }
++
++    void *alloc();
++    void free(void *);
++    
++  private:
++
++    struct Link {
++      Link *next;
++    };
++    Link *_free;
++
++    enum { NELEMENTS = 127 }; // not a power of 2 so we don't fall into a
++                              // too-large bucket
++    char *_cur_buffer;
++    int _buffer_pos;
++    
++    uint32_t _element_size;
++
++    char **_buffers;
++    int _nbuffers;
++    int _buffers_cap;
++
++    uint32_t _refcount;
++    bool _detached;
++    
++    ~HashMap_Arena();
++    void *hard_alloc();
++
++    friend class Link;                // shut up, compiler
++    
++};
++
++class HashMap_ArenaFactory { public:
++
++    HashMap_ArenaFactory();
++    virtual ~HashMap_ArenaFactory();
++
++    static void static_initialize();
++    static void static_cleanup();
++    
++    static HashMap_Arena *get_arena(uint32_t, HashMap_ArenaFactory * =0);
++    virtual HashMap_Arena *get_arena_func(uint32_t);
++    
++  private:
++
++    HashMap_Arena **_arenas[2];
++    int _narenas[2];
++
++    static HashMap_ArenaFactory *the_factory;
++    
++};
++
++inline void
++HashMap_Arena::unuse()
++{
++    _refcount--;
++    if (_refcount <= 0)
++      delete this;
++}
++
++inline void *
++HashMap_Arena::alloc()
++{
++    if (_free) {
++      void *ret = _free;
++      _free = _free->next;
++      return ret;
++    } else if (_buffer_pos > 0) {
++      _buffer_pos -= _element_size;
++      return _cur_buffer + _buffer_pos;
++    } else
++      return hard_alloc();
++}
++
++inline void
++HashMap_Arena::free(void *v)
++{
++    Link *link = reinterpret_cast<Link *>(v);
++    link->next = _free;
++    _free = link;
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/bitvector.hh click-1.6.0-27/inst/include/click/bitvector.hh
+--- click-1.6.0/inst/include/click/bitvector.hh        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/bitvector.hh     2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,248 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/bitvector.cc" -*-
++#ifndef CLICK_BITVECTOR_HH
++#define CLICK_BITVECTOR_HH
++#include <click/glue.hh>
++CLICK_DECLS
++
++class Bitvector { public:
++
++    class Bit;
++
++    Bitvector()                       : _max(-1), _data(&_f0), _f0(0), _f1(0) { }
++    explicit Bitvector(int);
++    explicit Bitvector(unsigned);
++    explicit Bitvector(bool b)        : _max(0), _data(&_f0), _f0(b), _f1(0) { }
++    Bitvector(int, bool);
++    Bitvector(unsigned, bool);
++    Bitvector(const Bitvector &);
++    ~Bitvector()              { if (_data != &_f0) delete[] _data; }
++
++    int size() const          { return _max + 1; }
++
++    bool zero() const;
++    
++    typedef bool (Bitvector::*unspecified_bool_type)() const;
++    operator bool() const     { return !zero() ? &Bitvector::zero : 0; }
++
++    Bit operator[](int);
++    bool operator[](int) const;
++    Bit force_bit(int);
++
++    void clear();
++    void resize(int n);
++
++    bool operator==(const Bitvector &) const;
++    bool operator!=(const Bitvector &) const;
++
++    Bitvector operator~() const;
++    Bitvector operator&(const Bitvector &) const;
++    Bitvector operator|(const Bitvector &) const;
++    Bitvector operator^(const Bitvector &) const;
++    Bitvector operator-(const Bitvector &) const;
++
++    Bitvector &operator=(const Bitvector &);
++    void negate();
++    Bitvector &operator&=(const Bitvector &);
++    Bitvector &operator|=(const Bitvector &);
++    Bitvector &operator^=(const Bitvector &);
++    Bitvector &operator-=(const Bitvector &);
++    Bitvector &assign(int, bool);
++
++    void or_at(const Bitvector &, int);
++    void or_with_difference(const Bitvector &, Bitvector &diff);
++    bool nonzero_intersection(const Bitvector &) const;
++
++    // expose the implementation
++    int max_word() const              { return (_max < 0 ? -1 : _max>>5); }
++    uint32_t *data_words()            { return _data; }
++    const uint32_t *data_words() const        { return _data; } 
++
++  private:
++    
++    enum { MAX_INLINE_BIT = 63, MAX_INLINE_WORD = 1 };
++
++    int _max;
++    uint32_t *_data;
++    uint32_t _f0;
++    uint32_t _f1;
++
++    void finish_copy_constructor(const Bitvector &);
++    void clear_last();
++    void resize_to_max(int, bool);
++
++};
++
++class Bitvector::Bit { public:
++
++    Bit(uint32_t &p, int off)         : _p(p), _mask(1U<<off) { }
++
++    typedef Bitvector::unspecified_bool_type unspecified_bool_type;
++    inline operator unspecified_bool_type() const {
++      return (_p & _mask) != 0 ? &Bitvector::zero : 0;
++    }
++
++    bool operator=(bool b);
++    bool operator=(const Bit &);
++
++  private:
++
++    uint32_t &_p;
++    uint32_t _mask;
++
++};
++
++
++inline
++Bitvector::Bitvector(int n)
++    : _max(n - 1), _data(&_f0), _f0(0), _f1(0)
++{
++    if (_max > MAX_INLINE_BIT)
++      resize_to_max(_max, false);
++}
++
++inline
++Bitvector::Bitvector(unsigned n)
++    : _max(n - 1), _data(&_f0), _f0(0), _f1(0)
++{
++    if (_max > MAX_INLINE_BIT)
++      resize_to_max(_max, false);
++}
++
++inline
++Bitvector::Bitvector(int n, bool b)
++    : _max(n - 1), _data(&_f0), _f0(0), _f1(0)
++{
++    if (_max > MAX_INLINE_BIT)
++      resize_to_max(_max, false);
++    if (b)
++      assign(n, b);
++}
++
++inline
++Bitvector::Bitvector(unsigned n, bool b)
++    : _max(n - 1), _data(&_f0), _f0(0), _f1(0)
++{
++    if (_max > MAX_INLINE_BIT)
++      resize_to_max(_max, false);
++    if (b)
++      assign(n, b);
++}
++
++inline
++Bitvector::Bitvector(const Bitvector &o)
++    : _max(o._max), _data(&_f0), _f0(o._data[0]), _f1(o._data[1])
++{
++    if (_max > MAX_INLINE_BIT)
++      finish_copy_constructor(o);
++}
++
++inline void
++Bitvector::resize(int n)
++{
++    if (n - 1 > MAX_INLINE_BIT)
++      resize_to_max(n - 1, true);
++    _max = n - 1;
++}
++
++inline bool
++Bitvector::Bit::operator=(bool b)
++{
++    if (b)
++      _p |= _mask;
++    else
++      _p &= ~_mask;
++    return b;
++}
++
++inline bool
++Bitvector::Bit::operator=(const Bit &o)
++{
++    return *this = (bool)o;
++}
++
++inline Bitvector::Bit
++Bitvector::operator[](int i)
++{
++    assert(i >= 0 && i <= _max);
++    return Bit(_data[i>>5], i&31);
++}
++
++inline Bitvector::Bit
++Bitvector::force_bit(int i)
++{
++    assert(i >= 0);
++    if (i > _max)
++      resize(i + 1);
++    return Bit(_data[i>>5], i&31);
++}
++
++inline bool
++Bitvector::operator[](int i) const
++{
++    assert(i >= 0 && i <= _max);
++    return (_data[i>>5] & (1<<(i&31))) != 0;
++}
++
++inline bool
++Bitvector::operator==(const Bitvector &o) const
++{
++    if (_max != o._max)
++      return false;
++    else if (_max <= MAX_INLINE_BIT)
++      return memcmp(_data, o._data, 8) == 0;
++    else
++      return memcmp(_data, o._data, (max_word() + 1)*4) == 0;
++}
++
++inline bool
++Bitvector::operator!=(const Bitvector &o) const
++{
++    return !(*this == o);
++}
++
++inline Bitvector &
++Bitvector::operator-=(const Bitvector &o)
++{
++    return *this &= ~o;
++}
++
++inline Bitvector
++Bitvector::operator~() const
++{
++    Bitvector m = *this;
++    m.negate();
++    return m;
++}
++
++inline Bitvector
++Bitvector::operator&(const Bitvector &o) const
++{
++    Bitvector m = *this;
++    m &= o;
++    return m;
++}
++
++inline Bitvector
++Bitvector::operator|(const Bitvector &o) const
++{
++    Bitvector m = *this;
++    m |= o;
++    return m;
++}
++
++inline Bitvector
++Bitvector::operator^(const Bitvector &o) const
++{
++    Bitvector m = *this;
++    m ^= o;
++    return m;
++}
++
++inline Bitvector
++Bitvector::operator-(const Bitvector &o) const
++{
++    return *this & ~o;
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/clp.h click-1.6.0-27/inst/include/click/clp.h
+--- click-1.6.0/inst/include/click/clp.h       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/clp.h    2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,152 @@
++#ifndef LCDF_CLP_H
++#define LCDF_CLP_H
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++/* clp.h - Public interface to CLP.
++ * This file is part of CLP, the command line parser package.
++ *
++ * Copyright (c) 1997-2006 Eddie Kohler, kohler@icir.org
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, subject to the conditions
++ * listed in the Click LICENSE file, which is available in full at
++ * http://www.pdos.lcs.mit.edu/click/license.html. The conditions include: you
++ * must preserve this copyright notice, and you cannot mention the copyright
++ * holders in advertising related to the Software without their permission.
++ * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++ * notice is a summary of the Click LICENSE file; the license in that file is
++ * legally binding. */
++
++
++/* Argument types */
++#define Clp_NoArg             0
++#define Clp_ArgString         1
++#define Clp_ArgStringNotOption        2
++#define Clp_ArgBool           3
++#define Clp_ArgInt            4
++#define Clp_ArgUnsigned               5
++#define Clp_ArgDouble         6
++
++#define Clp_FirstUserType     10
++
++/* Argument type flags */
++#define Clp_DisallowOptions   (1<<0)  /* Argument won't resemble an option */
++
++/* Flags for individual Clp_Options */
++#define Clp_Mandatory         (1<<0)  /* Has mandatory argument */
++#define Clp_Optional          (1<<1)  /* Has optional argument */
++#define Clp_Negate            (1<<2)  /* Allow --no-OPT */
++#define Clp_OnlyNegated               (1<<3)  /* Allow --no-OPT, but not --OPT */
++#define Clp_PreferredMatch    (1<<4)  /* Prefer --OPT to --OPTwhatever when
++                                         matching option prefixes */
++
++/* Option types for Clp_SetOptionChar */
++/*    Clp_NotOption           0 */
++#define Clp_Short             (1<<0)
++#define Clp_Long              (1<<1)
++#define Clp_ShortNegated      (1<<2)
++#define Clp_LongNegated               (1<<3)
++#define Clp_LongImplicit      (1<<4)
++
++/* Flags for Clp_AddStringListType */
++#define Clp_AllowNumbers      (1<<0)
++
++/* Return values from Clp_Next */
++#define Clp_NotOption         0
++#define Clp_Done              -1
++#define Clp_BadOption         -2
++#define Clp_Error             -3
++
++/* Sizes of clp->val */
++#define Clp_ValSize           40
++#define Clp_ValIntSize                10
++
++
++typedef struct Clp_Option Clp_Option;
++typedef struct Clp_Parser Clp_Parser;
++typedef struct Clp_Internal Clp_Internal;
++typedef struct Clp_ParserState Clp_ParserState;
++
++typedef int (*Clp_ArgParseFunc)(Clp_Parser *, const char *, int, void *);
++typedef void (*Clp_ErrorHandler)(const char *);
++
++
++struct Clp_Option {
++  
++  const char *long_name;
++  int short_name;
++  
++  int option_id;
++  
++  int arg_type;
++  int flags;
++  
++};
++
++
++struct Clp_Parser {
++  
++  int negated;
++  
++  int have_arg;
++  const char *arg;
++  
++  union {
++    int i;
++    unsigned u;
++    double d;
++    const char *s;
++    void *pv;
++#ifdef HAVE_INT64_TYPES
++    int64_t i64;
++    uint64_t u64;
++#endif
++    char cs[Clp_ValSize];
++    unsigned char ucs[Clp_ValSize];
++    int is[Clp_ValIntSize];
++    unsigned us[Clp_ValIntSize];
++  } val;
++  
++  Clp_Internal *internal;
++  
++};
++
++
++Clp_Parser *  Clp_NewParser(int argc, const char * const *argv,
++                            int nopt, Clp_Option *opt);
++void          Clp_DeleteParser(Clp_Parser *);
++
++Clp_ErrorHandler Clp_SetErrorHandler(Clp_Parser *, Clp_ErrorHandler);
++int           Clp_SetOptionChar(Clp_Parser *, int c, int option_type);
++
++int           Clp_AddType
++                      (Clp_Parser *, int type_id, int flags,
++                       Clp_ArgParseFunc func, void *user_data);
++int           Clp_AddStringListType
++                      (Clp_Parser *, int type_id, int flags, ...);
++int           Clp_AddStringListTypeVec
++                      (Clp_Parser *, int type_id, int flags,
++                       int n, char **str, int *val);
++
++const char *  Clp_ProgramName(Clp_Parser *);
++
++int           Clp_Next(Clp_Parser *);
++const char *  Clp_Shift(Clp_Parser *, int allow_dashes);
++int           Clp_SetOptionProcessing(Clp_Parser *, int option_processing);
++
++Clp_ParserState *Clp_NewParserState(void);
++void          Clp_DeleteParserState(Clp_ParserState *);
++void          Clp_SaveParser(Clp_Parser *, Clp_ParserState *);
++void          Clp_RestoreParser(Clp_Parser *, Clp_ParserState *);
++
++int           Clp_OptionError(Clp_Parser *, const char *, ...);
++int           Clp_CurOptionNameBuf(Clp_Parser *, char *buf, int buflen);
++const char *  Clp_CurOptionName(Clp_Parser *); /* uses static memory */
++
++#ifdef __cplusplus
++}
++#endif
++#endif
+diff -Nurb click-1.6.0/inst/include/click/config-bsdmodule.h click-1.6.0-27/inst/include/click/config-bsdmodule.h
+--- click-1.6.0/inst/include/click/config-bsdmodule.h  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/config-bsdmodule.h       2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,52 @@
++/* include/click/config-bsdmodule.h.  Generated from config-bsdmodule.h.in by configure.  */
++/* Process this file with configure to produce config-bsdmodule.h. -*- mode: c -*- */
++#ifndef CLICK_CONFIG_BSDMODULE_H
++#define CLICK_CONFIG_BSDMODULE_H
++
++/* Define stuff under a FreeBSD module. */
++#ifndef __FreeBSD__
++# error "I must be compiled on a FreeBSD machine"
++#endif
++#define KERNEL 1
++#define _KERNEL 1
++#define KLD_MODULE 1
++
++/* Define if your BSD kernel has Click extensions. */
++/* #undef HAVE_CLICK_BSD_KERNEL */
++
++/* Define if your BSD kernel has polling extensions. */
++/* #undef HAVE_BSD_POLLING */
++
++/* Define if Click should use an adaptive scheduler to share the CPU(s) more
++   fairly with the kernel. */
++/* #undef HAVE_ADAPTIVE_SCHEDULER */
++
++/* Include integer and other type definitions. */
++#include <sys/types.h>
++
++/* Define assert macro. */
++#define assert(x) /* nada */
++
++/* Define likely and unlikely macros. */
++#define likely(x)     (x)
++#define unlikely(x)   (x)
++
++#ifdef __cplusplus
++
++/* Declare operator new. */
++void *operator new(size_t) throw ();
++void *operator new[](size_t) throw ();
++
++/* Provide placement new. */
++inline void *operator new(size_t, void *v) throw () { return v; }
++#define HAVE_PLACEMENT_NEW 1
++
++/* Define macros that surround Click declarations. */
++#define CLICK_DECLS           namespace Click {
++#define CLICK_ENDDECLS                }
++#define CLICK_USING_DECLS     using namespace Click;
++#define CLICK_NAME(name)      ::Click::name
++
++#endif /* __cplusplus */
++
++#endif /* CLICK_CONFIG_BSDMODULE_H */
+diff -Nurb click-1.6.0/inst/include/click/config-linuxmodule.h click-1.6.0-27/inst/include/click/config-linuxmodule.h
+--- click-1.6.0/inst/include/click/config-linuxmodule.h        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/config-linuxmodule.h     2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,153 @@
++/* include/click/config-linuxmodule.h.  Generated from config-linuxmodule.h.in by configure.  */
++/* Process this file with configure to produce config-linuxmodule.h. -*- mode: c -*- */
++#ifndef CLICK_CONFIG_LINUXMODULE_H
++#define CLICK_CONFIG_LINUXMODULE_H
++
++/* Define stuff under a Linux module. */
++#ifndef __linux__
++# error "I must be compiled on a Linux machine"
++#endif
++#define __KERNEL__ 1
++#define MODULE 1
++
++/* Define if your Linux kernel is running in SMP mode. */
++#define __SMP__ 1
++
++/* Define if Click should use an adaptive scheduler to share the CPU(s) more
++   fairly with the kernel. */
++/* #undef HAVE_ADAPTIVE_SCHEDULER */
++
++/* Define if your Linux kernel has Click extensions. */
++#define HAVE_CLICK_KERNEL 1
++
++/* Define if your Linux kernel has Click transmit notification extensions. */
++/* #undef HAVE_CLICK_KERNEL_TX_NOTIFY */
++
++/* Define if fast checksum functions available. */
++#define HAVE_FAST_CHECKSUM 1
++
++/* Define if 'int64_t' is typedefed to 'long' in linuxmodule. */
++/* #undef HAVE_INT64_IS_LONG_LINUXMODULE */
++
++/* Define if 'int64_t' is typedefed to 'long long' in linuxmodule. */
++#define HAVE_INT64_IS_LONG_LONG_LINUXMODULE 1
++
++/* Define to enable assertion checking. Failed assertions will print a message
++   and optionally stop the router. */
++/* #undef HAVE_KERNEL_ASSERT */
++
++/* Define if you have the <asm/alternative.h> header file. */
++#define HAVE_LINUX_ASM_ALTERNATIVE_H 1
++
++/* Define if your Linux kernel architecture defines atomic_set_mask. */
++/* #undef HAVE_LINUX_ATOMIC_SET_MASK */
++
++/* Define if your Linux kernel has polling extensions. */
++#define HAVE_LINUX_POLLING 1
++
++/* Define if your Linux kernel has read_net_skbcount. */
++/* #undef HAVE_LINUX_READ_NET_SKBCOUNT */
++
++/* Define if 'struct skb_shared_info' has a 'gso_size' member. */
++/* #undef HAVE_LINUX_SKB_SHINFO_GSO_SIZE */
++
++/* Define if 'struct skb_shared_info' has an 'ip6_frag_id' member. */
++/* #undef HAVE_LINUX_SKB_SHINFO_IP6_FRAG_ID */
++
++/* Define if 'struct skb_shared_info' has a 'tso_size' member. */
++/* #undef HAVE_LINUX_SKB_SHINFO_TSO_SIZE */
++
++/* Define if 'struct skb_shared_info' has a 'ufo_size' member. */
++/* #undef HAVE_LINUX_SKB_SHINFO_UFO_SIZE */
++
++/* Define if 'struct sk_buff' has an 'fclone' member. */
++/* #undef HAVE_LINUX_SKBUFF_FCLONE */
++
++/* Define if 'struct sk_buff' has a 'security' member. */
++/* #undef HAVE_LINUX_SKBUFF_SECURITY */
++
++/* Define if your Linux kernel exposes strlen. */
++#define HAVE_LINUX_STRLEN_EXPOSED 1
++
++/* Define if your Linux kernel has tulip_interrupt_hook. */
++/* #undef HAVE_LINUX_TULIP_INTERRUPT_HOOK */
++
++/* Define if the Click linuxmodule is compiled for a 2.6 kernel. */
++#define HAVE_LINUXMODULE_2_6 1
++
++/* Define if you have the net_enable_timestamp function. */
++/* #undef HAVE_NET_ENABLE_TIMESTAMP */
++
++/* Define if you have the netif_tx_lock function. */
++/* #undef HAVE_NETIF_TX_LOCK */
++
++/* Define if fast checksum functions require correct alignment. */
++#ifndef __i386__
++# define FAST_CHECKSUM_ALIGNED 1
++#endif
++
++/* Include integer type definitions. */
++# include <linux/autoconf.h>
++#include <linux/types.h>
++typedef ptrdiff_t intptr_t;
++//typedef unsigned long uintptr_t; /* XXX? */
++
++/* Define HAVE_INT64_IS_LONG based on HAVE_INT64_IS_LONG_LINUXMODULE. */
++#ifdef HAVE_INT64_IS_LONG_LINUXMODULE
++# define HAVE_INT64_IS_LONG HAVE_INT64_IS_LONG_LINUXMODULE
++#endif
++
++/* Define HAVE_INT64_IS_LONG_LONG based on HAVE_INT64_IS_LONG_LONG_LINUXMODULE. */
++#if HAVE_LONG_LONG && defined(HAVE_INT64_IS_LONG_LONG_LINUXMODULE)
++# define HAVE_INT64_IS_LONG_LONG HAVE_INT64_IS_LONG_LONG_LINUXMODULE
++#endif
++
++/* Define KBUILD symbols. */
++#if !defined(KBUILD_STR) && HAVE_LINUXMODULE_2_6
++# define KBUILD_STR(s)                #s
++# define KBUILD_BASENAME      KBUILD_STR(click)
++# define KBUILD_MODNAME               KBUILD_STR(click)
++#endif
++
++#ifdef __cplusplus
++
++/* Declare operator new. */
++void *operator new(size_t) throw ();
++void *operator new[](size_t) throw ();
++
++/* Provide placement new. */
++inline void *operator new(size_t, void *v) { return v; }
++#define HAVE_PLACEMENT_NEW 1
++
++/* Define macros that surround Click declarations. */
++#define CLICK_DECLS           /* */
++#define CLICK_ENDDECLS                /* */
++#define CLICK_USING_DECLS     /* */
++#define CLICK_NAME(name)      ::name
++
++/* Fix incompatibilities between some Linux versions and Click/C++. */
++#include <click/fixconfig.h>
++
++#endif /* __cplusplus */
++
++/* Define assert macro. */
++# ifdef __cplusplus
++extern "C" {
++# endif
++void click_assert_failed(const char *file, int line, const char *problem_text);
++# ifdef __cplusplus
++}
++# endif
++
++#ifdef HAVE_KERNEL_ASSERT
++# define assert(x)    ((x) ? (void)0 : click_assert_failed(__FILE__, __LINE__, #x))
++#else
++# define assert(x)    /* nada */
++#endif
++
++/* Some architectures do not have builtin integer functions in kernel. */
++#if defined(__MIPSEL__) || defined(__MIPSEB__)
++# define HAVE_NO_INTEGER_BUILTINS 1
++#endif
++
++#endif /* CLICK_CONFIG_LINUXMODULE_H */
+diff -Nurb click-1.6.0/inst/include/click/config-ns.h click-1.6.0-27/inst/include/click/config-ns.h
+--- click-1.6.0/inst/include/click/config-ns.h 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/config-ns.h      2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,20 @@
++/* include/click/config-ns.h.  Generated from config-ns.h.in by configure.  */
++/* Process this file with configure to produce config-ns.h. -*- mode: c -*- */
++#ifndef CLICK_CONFIG_NS_H
++#define CLICK_CONFIG_NS_H
++
++#ifdef __cplusplus
++
++/* Define macros that surround Click declarations. */
++#define CLICK_DECLS           namespace Click {
++#define CLICK_ENDDECLS                }
++#define CLICK_USING_DECLS     using namespace Click;
++#define CLICK_NAME(name)      ::Click::name
++
++#endif /* __cplusplus */
++
++/* Include userlevel configuration. */
++#define CLICK_USERLEVEL 1
++#include <click/config-userlevel.h>
++
++#endif /* CLICK_CONFIG_NS_H */
+diff -Nurb click-1.6.0/inst/include/click/config-userlevel.h click-1.6.0-27/inst/include/click/config-userlevel.h
+--- click-1.6.0/inst/include/click/config-userlevel.h  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/config-userlevel.h       2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,249 @@
++/* include/click/config-userlevel.h.  Generated from config-userlevel.h.in by configure.  */
++/* Process this file with configure to produce config-userlevel.h. -*- mode: c -*- */
++#ifndef CLICK_CONFIG_USERLEVEL_H
++#define CLICK_CONFIG_USERLEVEL_H
++
++/* Define if accept() uses socklen_t. */
++#define HAVE_ACCEPT_SOCKLEN_T 1
++
++/* Define if <pcap.h> uses bpf_timeval. */
++/* #undef HAVE_BPF_TIMEVAL */
++
++/* Define if you have the <byteswap.h> header file. */
++#define HAVE_BYTESWAP_H 1
++
++/* Define to 1 if you have the declaration
++   of 'madvise', and to 0 if you don't. */
++#define HAVE_DECL_MADVISE 1
++
++/* Define to 1 if you have the declaration
++   of 'pcap_setnonblock', and to 0 if you don't. */
++#define HAVE_DECL_PCAP_SETNONBLOCK 1
++
++/* Define if you have the <dlfcn.h> header file. */
++#define HAVE_DLFCN_H 1
++
++/* Define if dynamic linking is possible. */
++#define HAVE_DYNAMIC_LINKING 1
++
++/* Define if you have the ffs function. */
++#define HAVE_FFS 1
++
++/* Define if you have the ffsl function. */
++#define HAVE_FFSL 1
++
++/* Define if you have the ffsll function. */
++#define HAVE_FFSLL 1
++
++/* Floating point arithmetic is allowed. */
++#define HAVE_FLOAT_TYPES 1
++
++/* Define if you have the <grp.h> header file. */
++#define HAVE_GRP_H 1
++
++/* Define if the last argument to EV_SET has pointer type. */
++/* #undef HAVE_EV_SET_UDATA_POINTER */
++
++/* Define if 'struct if_data' has an 'ifi_datalen' member. */
++/* #undef HAVE_IF_DATA_IFI_DATALEN */
++
++/* Define if 'int64_t' is typedefed to 'long' at user level. */
++/* #undef HAVE_INT64_IS_LONG_USERLEVEL */
++
++/* Define if 'int64_t' is typedefed to 'long long' at user level. */
++#define HAVE_INT64_IS_LONG_LONG_USERLEVEL 1
++
++/* Define if you have the <inttypes.h> header file. */
++#define HAVE_INTTYPES_H 1
++
++/* Define if you have the kqueue function. */
++/* #undef HAVE_KQUEUE */
++
++/* Define if your C library contains large file support. */
++#define HAVE_LARGE_FILE_SUPPORT 1
++
++/* Define if you have the <linux/if_tun.h> header file. */
++#define HAVE_LINUX_IF_TUN_H 1
++
++/* Define if you have the madvise function. */
++#define HAVE_MADVISE 1
++
++/* Define if you have the mmap function. */
++#define HAVE_MMAP 1
++
++/* Define if you have the <net/bpf.h> header file. */
++/* #undef HAVE_NET_BPF_H */
++
++/* Define if you have the <net/if_tap.h> header file. */
++/* #undef HAVE_NET_IF_TAP_H */
++
++/* Define if you have the <net/if_tun.h> header file. */
++/* #undef HAVE_NET_IF_TUN_H */
++
++/* Define if you have the <netdb.h> header file. */
++#define HAVE_NETDB_H 1
++
++/* Define if <new.h> exists and works. */
++/* #undef HAVE_NEW_H */
++
++/* Define if <new> exists and works. */
++#define HAVE_NEW_HDR 1
++
++/* Define if you have -lpcap and pcap.h. */
++#define HAVE_PCAP 1
++
++/* Define if you have the pcap_setnonblock function. */
++#define HAVE_PCAP_SETNONBLOCK 1
++
++/* Define if you have -lproper and prop.h, and proper operations should be
++   preferred to their non-proper counterparts. */
++/* #undef HAVE_PROPER */
++
++/* Define if you have a non-emulated <poll.h> header file. */
++#define HAVE_POLL_H 1
++
++/* Placement new is always provided below. */
++#define HAVE_PLACEMENT_NEW 1
++
++/* Define if you have the <pwd.h> header file. */
++#define HAVE_PWD_H 1
++
++/* Define if you have the sigaction function. */
++#define HAVE_SIGACTION 1
++
++/* Define if you have the snprintf function. */
++#define HAVE_SNPRINTF 1
++
++/* Define if 'struct sockaddr_in' has a 'sin_len' member. */
++/* #undef HAVE_SOCKADDR_IN_SIN_LEN */
++
++/* Define if you have the strerror function. */
++#define HAVE_STRERROR 1
++
++/* Define if you have the <strings.h> header file. */
++#define HAVE_STRINGS_H 1
++
++/* Define if you have the strtoul function. */
++#define HAVE_STRTOUL 1
++
++/* Define if you have the <sys/event.h> header file. */
++/* #undef HAVE_SYS_EVENT_H */
++
++/* Define if you have the <sys/mman.h> header file. */
++#define HAVE_SYS_MMAN_H 1
++
++/* Define if you have the tcgetpgrp function. */
++#define HAVE_TCGETPGRP 1
++
++/* Define if you have the <termio.h> header file. */
++#define HAVE_TERMIO_H 1
++
++/* Define if you have u_intXX_t types but not uintXX_t types. */
++/* #undef HAVE_U_INT_TYPES */
++
++/* Define if you have the <unistd.h> header file. */
++#define HAVE_UNISTD_H 1
++
++/* Define if a Click user-level driver might run multiple threads. */
++/* #undef HAVE_USER_MULTITHREAD */
++
++/* Define if you have the vsnprintf function. */
++#define HAVE_VSNPRINTF 1
++
++/* The size of a `off_t', as computed by sizeof. */
++#define SIZEOF_OFF_T 8
++
++
++/* Set feature test macros before anything is included. */
++#if HAVE_LARGE_FILE_SUPPORT && HAVE_INT64_TYPES
++# define _LARGEFILE_SOURCE 1
++# define _FILE_OFFSET_BITS 64
++#endif
++
++/* Include integer type definitions. */
++#ifdef HAVE_INTTYPES_H
++# include <inttypes.h>
++#endif
++#include <sys/types.h>
++
++/* Define uint types in terms of u_int types, if necessary. */
++#ifdef HAVE_U_INT_TYPES
++typedef u_int8_t uint8_t;
++typedef u_int16_t uint16_t;
++typedef u_int32_t uint32_t;
++# ifdef HAVE_INT64_TYPES
++typedef u_int64_t uint64_t;
++# endif
++typedef long intptr_t;                /* XXX? */
++typedef unsigned long uintptr_t;
++#endif
++
++/* Define HAVE_INT64_IS_LONG based on HAVE_INT64_IS_LONG_USERLEVEL. */
++#ifdef HAVE_INT64_IS_LONG_USERLEVEL
++# define HAVE_INT64_IS_LONG HAVE_INT64_IS_LONG_USERLEVEL
++#endif
++
++/* Define HAVE_INT64_IS_LONG_LONG based on HAVE_INT64_IS_LONG_LONG_USERLEVEL. */
++#ifdef HAVE_INT64_IS_LONG_LONG_USERLEVEL
++# define HAVE_INT64_IS_LONG_LONG HAVE_INT64_IS_LONG_LONG_USERLEVEL
++#endif
++
++/* Define HAVE_MULTITHREAD based on HAVE_USER_MULTITHREAD. */
++#ifdef HAVE_USER_MULTITHREAD
++# define HAVE_MULTITHREAD HAVE_USER_MULTITHREAD
++#endif
++
++/* Include assert macro. */
++#include <assert.h>
++
++/* Define likely and unlikely macros. */
++#if __GNUC__ >= 3
++# define likely(x)    __builtin_expect(!!(x), 1)
++# define unlikely(x)  __builtin_expect(!!(x), 0)
++#else
++# define likely(x)    (x)
++# define unlikely(x)  (x)
++#endif
++
++/* Define if mmap is allowed. */
++#if defined(HAVE_SYS_MMAN_H) && defined(HAVE_MMAP)
++# define ALLOW_MMAP 1
++#endif
++
++/* Prototype strerror if we don't have it. */
++#ifndef HAVE_STRERROR
++char *strerror(int errno);
++#endif
++
++/* Use nanosecond-granularity timestamps if they are enabled. */
++#ifdef HAVE_NANOTIMESTAMP_ENABLED
++#define HAVE_NANOTIMESTAMP 1
++#endif
++
++#ifdef __cplusplus
++
++/* Provide placement new. */
++#if HAVE_NEW_HDR
++# include <new>
++#elif HAVE_NEW_H
++# include <new.h>
++#else
++inline void *operator new(size_t, void *v) { return v; }
++#endif
++
++/* Prototype madvise if we have it, but not the prototype. */
++#if ALLOW_MMAP && HAVE_MADVISE && !HAVE_DECL_MADVISE
++extern "C" int madvise(void *addr, size_t len, int behav);
++#endif
++
++/* Define macros that surround Click declarations. */
++#ifndef CLICK_DECLS
++# define CLICK_DECLS          /* */
++# define CLICK_ENDDECLS               /* */
++# define CLICK_USING_DECLS    /* */
++# define CLICK_NAME(name)     ::name
++#endif
++
++#endif /* __cplusplus */
++
++#endif /* CLICK_CONFIG_USERLEVEL_H */
+diff -Nurb click-1.6.0/inst/include/click/config.h click-1.6.0-27/inst/include/click/config.h
+--- click-1.6.0/inst/include/click/config.h    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/config.h 2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,168 @@
++/* include/click/config.h.  Generated from config.h.in by configure.  */
++/* Process this file with configure to produce config.h. -*- mode: c -*- */
++#ifndef CLICK_CONFIG_H
++#define CLICK_CONFIG_H
++
++/* Define to byte order of target machine. */
++#define CLICK_BYTE_ORDER 1234
++#define CLICK_BIG_ENDIAN      4321
++#define CLICK_LITTLE_ENDIAN   1234
++#define CLICK_NO_ENDIAN               0
++
++/* Define for Click memory allocation debugging. */
++/* #undef CLICK_DMALLOC */
++
++/* Version number of package */
++#define CLICK_VERSION "1.6.0"
++
++/* Define if PollDevice should run fast to get good benchmark numbers */
++/* #undef CLICK_WARP9 */
++
++/* Define if you have the __builtin_clz function. */
++#define HAVE___BUILTIN_CLZ 1
++
++/* Define if you have the __builtin_clzl function. */
++#define HAVE___BUILTIN_CLZL 1
++
++/* Define if you have the __builtin_clzll function. */
++#define HAVE___BUILTIN_CLZLL 1
++
++/* Define if you have the __builtin_ffs function. */
++#define HAVE___BUILTIN_FFS 1
++
++/* Define if you have the __builtin_ffsl function. */
++#define HAVE___BUILTIN_FFSL 1
++
++/* Define if you have the __builtin_ffsll function. */
++#define HAVE___BUILTIN_FFSLL 1
++
++/* Define if the va_list type is addressable. */
++#define HAVE_ADDRESSABLE_VA_LIST 1
++
++/* Define if right shift of signed integers acts by sign extension. */
++#define HAVE_ARITHMETIC_RIGHT_SHIFT 1
++
++/* Define if the machine is indifferent to alignment. */
++#define HAVE_INDIFFERENT_ALIGNMENT 1
++
++/* Define if you want to use Intel-specific instructions. */
++/* #undef HAVE_INTEL_CPU */
++
++/* Define if 64-bit integer types are enabled. */
++#define HAVE_INT64_TYPES 1
++
++/* Define if IPv6 support is enabled. */
++/* #undef HAVE_IP6 */
++
++/* Define if IPsec support is enabled. */
++/* #undef HAVE_IPSEC */
++
++/* Define to 1 if the system has the type `long long'. */
++#define HAVE_LONG_LONG 1
++
++/* Define if nanosecond-granularity timestamps are enabled. */
++/* #undef HAVE_NANOTIMESTAMP_ENABLED */
++
++/* Define if you want to use the stride scheduler. */
++#define HAVE_STRIDE_SCHED 1
++
++/* Define to 1 since we have Strings. */
++#define HAVE_STRING 1
++
++/* Define to 1 if the system has the type `struct timespec'. */
++#define HAVE_STRUCT_TIMESPEC 1
++
++#ifdef HAVE_STRIDE_SCHED
++/* Define if you want task scheduling to use a heap, not a linked list. */
++/* #undef HAVE_TASK_HEAP */
++#endif
++
++/* The size of a `int', as computed by sizeof. */
++#define SIZEOF_INT 4
++
++/* The size of a `long', as computed by sizeof. */
++#define SIZEOF_LONG 4
++
++/* The size of a `long long', as computed by sizeof. */
++#define SIZEOF_LONG_LONG 8
++
++/* The size of a `struct timespec', as computed by sizeof. */
++#define SIZEOF_STRUCT_TIMESPEC 8
++
++/* The size of a `struct timeval', as computed by sizeof. */
++#define SIZEOF_STRUCT_TIMEVAL 8
++
++/* Define if you want to run multithreaded Click. */
++/* #undef __MTCLICK__ */
++#define NUM_CLICK_CPUS 1
++
++#ifndef __cplusplus
++/* Define inline, if necessary. C only. */
++/* #undef inline */
++#endif
++
++#ifdef __cplusplus
++/* Explicit template instances? */
++#if __GNUC__ == 2 && __GNUC_MINOR__ < 90
++#define EXPLICIT_TEMPLATE_INSTANCES 1
++#endif
++#endif /* __cplusplus */
++
++/* Define macros for declaring packed structures. */
++#ifdef __GNUC__
++#define CLICK_PACKED_STRUCTURE(open, close) open close __attribute__((packed))
++#define CLICK_SIZE_PACKED_STRUCTURE(open, close) open close __attribute__((packed))
++#else
++#define CLICK_PACKED_STRUCTURE(open, close) _Cannot_pack_structure__Use_GCC
++#define CLICK_SIZE_PACKED_STRUCTURE(open, close) open close
++#endif
++
++/* Define macro for deprecated functions. */
++#if __GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ == 0)
++#define CLICK_DEPRECATED
++#else
++#define CLICK_DEPRECATED __attribute__((deprecated))
++#endif
++
++/* Define ARCH_IS_BIG_ENDIAN based on CLICK_BYTE_ORDER. */
++#if CLICK_BYTE_ORDER == CLICK_BIG_ENDIAN
++#define ARCH_IS_BIG_ENDIAN    1
++#elif CLICK_BYTE_ORDER == CLICK_LITTLE_ENDIAN
++#define ARCH_IS_BIG_ENDIAN    0
++#endif
++
++/* EXPORT_ELEMENT, ELEMENT_REQUIRES, ELEMENT_PROVIDES, ELEMENT_HEADER,
++   ELEMENT_LIBS, and ELEMENT_MT_SAFE are noops. */
++#define EXPORT_ELEMENT(x)
++#define ELEMENT_REQUIRES(x)
++#define ELEMENT_PROVIDES(x)
++#define ELEMENT_HEADER(x)
++#define ELEMENT_LIBS(x)
++#define ELEMENT_MT_SAFE(x)
++
++/* Assume CLICK_USERLEVEL unless otherwise defined. */
++#if !defined(CLICK_USERLEVEL) && !defined(CLICK_TOOL) && !defined(CLICK_LINUXMODULE) && !defined(CLICK_BSDMODULE)
++# define CLICK_USERLEVEL 1
++#endif
++
++/* Define stuff under a Linux module. */
++#ifdef CLICK_LINUXMODULE
++# include <click/config-linuxmodule.h>
++#endif
++
++/* Define stuff under a FreeBSD module. */
++#ifdef CLICK_BSDMODULE
++# include <click/config-bsdmodule.h>
++#endif
++
++/* Define stuff under nsclick. */
++#ifdef CLICK_NS
++# include <click/config-ns.h>
++#endif
++
++/* Define stuff under tools or a user-level driver. */
++#if defined(CLICK_USERLEVEL) || defined(CLICK_TOOL)
++# include <click/config-userlevel.h>
++#endif
++
++#endif /* CLICK_CONFIG_H */
+diff -Nurb click-1.6.0/inst/include/click/confparse.hh click-1.6.0-27/inst/include/click/confparse.hh
+--- click-1.6.0/inst/include/click/confparse.hh        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/confparse.hh     2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,510 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/confparse.cc" -*-
++#ifndef CLICK_CONFPARSE_HH
++#define CLICK_CONFPARSE_HH
++/// @cond never
++#include <click/string.hh>
++#include <click/vector.hh>
++struct in_addr;
++CLICK_DECLS
++class ErrorHandler;
++class StringAccum;
++class Timestamp;
++#ifndef CLICK_TOOL
++class Element;
++class Router;
++class Handler;
++class HandlerCall;
++# define CP_VA_PARSE_ARGS_REST        Element*, ErrorHandler*, ...
++# define CP_OPT_CONTEXT               , Element* context = 0
++# define CP_CONTEXT           , Element* context
++# define CP_PASS_CONTEXT      , context
++#else
++# define CP_VA_PARSE_ARGS_REST        ErrorHandler*, ...
++# define CP_OPT_CONTEXT
++# define CP_CONTEXT
++# define CP_PASS_CONTEXT
++#endif
++#ifndef CLICK_COMPILING_CONFPARSE_CC
++# define CLICK_CONFPARSE_DEPRECATED CLICK_DEPRECATED
++#else
++# define CLICK_CONFPARSE_DEPRECATED /* */
++#endif
++#if __GNUC__ <= 3
++# define CP_SENTINEL
++#else
++# define CP_SENTINEL __attribute__((sentinel))
++#endif
++/// @endcond
++
++/// @name Argument Manipulation
++//@{
++const char* cp_skip_space(const char* begin, const char* end);
++const char* cp_skip_comment_space(const char* begin, const char* end);
++bool cp_eat_space(String &str);
++inline bool cp_is_space(const String &str);
++bool cp_is_word(const String &str);
++bool cp_is_click_id(const String &str);
++
++String cp_uncomment(const String &str);
++String cp_unquote(const String &str);
++const char* cp_process_backslash(const char* begin, const char* end, StringAccum &sa);
++String cp_quote(const String &str, bool allow_newlines = false);
++
++void cp_argvec(const String& str, Vector<String>& conf);
++String cp_unargvec(const Vector<String>& conf);
++
++void cp_spacevec(const String& str, Vector<String>& conf);
++String cp_pop_spacevec(String& str);
++String cp_unspacevec(const String* begin, const String* end);
++inline String cp_unspacevec(const Vector<String>& conf);
++//@}
++
++/// @name Direct Parsing Functions
++//@{
++enum CpErrors {
++    CPE_OK = 0,
++    CPE_FORMAT,
++    CPE_NEGATIVE,
++    CPE_OVERFLOW,
++    CPE_INVALID,
++    CPE_MEMORY,
++    CPE_NOUNITS
++};
++extern int cp_errno;
++
++// strings and words
++bool cp_string(const String& str, String* result, String *rest = 0);
++bool cp_word(const String& str, String* result, String *rest = 0);
++bool cp_keyword(const String& str, String* result, String *rest = 0);
++
++// numbers
++bool cp_bool(const String& str, bool* result);
++
++const char *cp_integer(const char* begin, const char* end, int base, int* result);
++const char *cp_integer(const char* begin, const char* end, int base, unsigned int* result);
++/// @cond never
++inline const unsigned char *cp_integer(const unsigned char* begin, const unsigned char* end, int base, unsigned int* result);
++/// @endcond
++
++#if SIZEOF_LONG == SIZEOF_INT
++// may be needed to simplify overloading 
++inline const char *cp_integer(const char* begin, const char* end, int base, long* result);
++inline const char *cp_integer(const char* begin, const char* end, int base, unsigned long* result);
++#elif SIZEOF_LONG != 8
++# error "long has an odd size"
++#endif
++
++#if HAVE_INT64_TYPES
++const char *cp_integer(const char* begin, const char* end, int base, int64_t* result);
++const char *cp_integer(const char* begin, const char* end, int base, uint64_t* result);
++/// @cond never
++inline const unsigned char *cp_integer(const unsigned char* begin, const unsigned char* end, int base, uint64_t* result);
++/// @endcond
++#endif
++
++bool cp_integer(const String& str, int base, int* result);
++bool cp_integer(const String& str, int base, unsigned int* result);
++#if SIZEOF_LONG == SIZEOF_INT
++inline bool cp_integer(const String& str, int base, long* result);
++inline bool cp_integer(const String& str, int base, unsigned long* result);
++#endif
++#ifdef HAVE_INT64_TYPES
++bool cp_integer(const String& str, int base, int64_t* result);
++bool cp_integer(const String& str, int base, uint64_t* result);
++#endif
++
++inline bool cp_integer(const String& str, int* result);
++inline bool cp_integer(const String& str, unsigned int* result);
++#if SIZEOF_LONG == SIZEOF_INT
++inline bool cp_integer(const String& str, long* result);
++inline bool cp_integer(const String& str, unsigned long* result);
++#endif
++#ifdef HAVE_INT64_TYPES
++inline bool cp_integer(const String& str, int64_t* result);
++inline bool cp_integer(const String& str, uint64_t* result);
++#endif
++
++#ifdef CLICK_USERLEVEL
++bool cp_file_offset(const String& str, off_t* result);
++#endif
++
++#define CP_REAL2_MAX_FRAC_BITS 28
++bool cp_real2(const String& str, int frac_bits, int32_t* result);
++bool cp_real2(const String& str, int frac_bits, uint32_t* result);
++bool cp_real10(const String& str, int frac_digits, int32_t* result);
++bool cp_real10(const String& str, int frac_digits, uint32_t* result);
++bool cp_real10(const String& str, int frac_digits, uint32_t* result_int, uint32_t* result_frac);
++#ifdef HAVE_FLOAT_TYPES
++bool cp_double(const String& str, double* result);
++#endif
++
++bool cp_seconds_as(const String& str, int frac_digits, uint32_t* result);
++bool cp_seconds_as_milli(const String& str, uint32_t* result);
++bool cp_seconds_as_micro(const String& str, uint32_t* result);
++bool cp_time(const String& str, Timestamp* result);
++bool cp_time(const String& str, struct timeval* result);
++
++bool cp_bandwidth(const String& str, uint32_t* result);
++
++// network addresses
++class IPAddress;
++class IPAddressList;
++bool cp_ip_address(const String& str, IPAddress* result  CP_OPT_CONTEXT);
++inline bool cp_ip_address(const String& str, struct in_addr* result  CP_OPT_CONTEXT);
++bool cp_ip_address(const String& str, unsigned char* result  CP_OPT_CONTEXT);
++bool cp_ip_prefix(const String& str, IPAddress* result_addr, IPAddress* result_mask, bool allow_bare_address  CP_OPT_CONTEXT);
++bool cp_ip_prefix(const String& str, unsigned char* result_addr, unsigned char* result_mask, bool allow_bare_address  CP_OPT_CONTEXT);
++bool cp_ip_prefix(const String& str, IPAddress* result_addr, IPAddress* result_mask  CP_OPT_CONTEXT);
++bool cp_ip_prefix(const String& str, unsigned char* result_addr, unsigned char* result_mask  CP_OPT_CONTEXT);
++bool cp_ip_address_list(const String& str, Vector<IPAddress>* result  CP_OPT_CONTEXT);
++
++#ifdef HAVE_IP6
++class IP6Address;
++bool cp_ip6_address(const String& str, IP6Address* result  CP_OPT_CONTEXT);
++bool cp_ip6_address(const String& str, unsigned char* result  CP_OPT_CONTEXT);
++bool cp_ip6_prefix(const String& str, IP6Address* result_addr, int* result_prefix, bool allow_bare_address  CP_OPT_CONTEXT);
++bool cp_ip6_prefix(const String& str, unsigned char* result_addr, int* result_prefix, bool allow_bare_address  CP_OPT_CONTEXT);
++bool cp_ip6_prefix(const String& str, unsigned char* result_addr, unsigned char* result_mask, bool allow_bare_address  CP_OPT_CONTEXT);
++bool cp_ip6_prefix(const String& str, IP6Address* result_addr, IP6Address* result_mask, bool allow_bare_address  CP_OPT_CONTEXT);
++#endif
++
++class EtherAddress;
++bool cp_ethernet_address(const String& str, EtherAddress* result  CP_OPT_CONTEXT);
++bool cp_ethernet_address(const String& str, unsigned char* result  CP_OPT_CONTEXT);
++
++bool cp_tcpudp_port(const String& str, int proto, uint16_t* result  CP_OPT_CONTEXT);
++
++#ifndef CLICK_TOOL
++Element *cp_element(const String& str, Element* context, ErrorHandler* errh=0);
++Element *cp_element(const String& str, Router* router, ErrorHandler* errh=0);
++bool cp_handler_name(const String& str, Element** result_element, String* result_hname, Element* context, ErrorHandler* errh=0);
++bool cp_handler(const String& str, int flags, Element** result_element, const Handler** result_handler, Element* context, ErrorHandler* errh=0);
++#endif
++
++#ifdef HAVE_IPSEC
++bool cp_des_cblock(const String& str, unsigned char* result);
++#endif
++
++#if CLICK_USERLEVEL
++bool cp_filename(const String& str, String* result);
++#endif
++//@}
++
++/// @name cp_va_kparse
++//@{
++int cp_va_kparse(const Vector<String>& conf, CP_VA_PARSE_ARGS_REST) CP_SENTINEL;
++int cp_va_kparse(const String& str, CP_VA_PARSE_ARGS_REST) CP_SENTINEL;
++int cp_va_space_kparse(const String& str, CP_VA_PARSE_ARGS_REST) CP_SENTINEL;
++int cp_va_kparse_keyword(const String& str, CP_VA_PARSE_ARGS_REST) CP_SENTINEL;
++int cp_va_kparse_remove_keywords(Vector<String>& conf, CP_VA_PARSE_ARGS_REST) CP_SENTINEL;
++
++int cp_assign_arguments(const Vector<String>& argv, const String *keys_begin, const String *keys_end, Vector<String>* values = 0);
++
++void cp_va_static_initialize();
++void cp_va_static_cleanup();
++
++/// @brief Type of flags for cp_va_kparse() items.
++enum CpKparseFlags {
++    cpkN = 0,         ///< Default flags
++    cpkM = 1,         ///< Argument is mandatory
++    cpkP = 2,         ///< Argument may be specified positionally
++    cpkC = 4,         ///< Argument presence should be confirmed
++    cpkNormal = cpkN,
++    cpkMandatory = cpkM,
++    cpkPositional = cpkP,
++    cpkConfirm = cpkC
++};
++
++/// @brief Type of argument type names for cp_va_kparse() items.
++typedef const char *CpVaParseCmd;
++
++extern const CpVaParseCmd
++    cpEnd,            ///< Use as argument name.  Ends cp_va argument list.
++    cpIgnoreRest,     ///< Use as argument name.  No result storage; causes cp_va_kparse to ignore unparsed arguments and any remaining items.
++    cpIgnore,         ///< No result storage (this argument is ignored).
++    cpArgument,               ///< Result storage String*, accepts any argument.
++    cpArguments,      ///< Result storage Vector<String>*, accepts any number of arguments with the same keyword.
++    cpString,         ///< Result storage String*, parsed by cp_string().
++    cpWord,           ///< Result storage String*, parsed by cp_word().
++    cpKeyword,                ///< Result storage String*, parsed by cp_keyword().
++    cpBool,           ///< Result storage bool*, parsed by cp_bool().
++    cpByte,           ///< Result storage unsigned char*, parsed by cp_integer().
++    cpShort,          ///< Result storage short*, parsed by cp_integer().
++    cpUnsignedShort,  ///< Result storage unsigned short*, parsed by cp_integer().
++    cpInteger,                ///< Result storage int32_t*, parsed by cp_integer().
++    cpUnsigned,               ///< Result storage uint32_t*, parsed by cp_integer().
++    cpNamedInteger,   ///< Parse parameter uint32_t nameinfo_type, result storage int32_t*, parsed by NameInfo::query_int.
++#ifdef HAVE_INT64_TYPES
++    cpInteger64,      ///< Result storage int64_t*, parsed by cp_integer().
++    cpUnsigned64,     ///< Result storage uint64_t*, parsed by cp_integer().
++#endif
++#ifdef CLICK_USERLEVEL
++    cpFileOffset,     ///< Result storage off_t*, parsed by cp_integer().
++#endif
++    cpUnsignedReal2,  ///< Parse parameter int frac_bits, result storage uint32_t*, parsed by cp_real2().
++    cpReal10,         ///< Parse parameter int frac_digits, result storage int32_t*, parsed by cp_real10().
++    cpUnsignedReal10, ///< Parse parameter int frac_digits, result storage uint32_t*, parsed by cp_real10().
++#ifdef HAVE_FLOAT_TYPES
++    cpDouble,         ///< Result storage double*, parsed by cp_double().
++#endif
++    cpSeconds,                ///< Result storage uint32_t*, parsed by cp_seconds_as() with frac_digits 0.
++    cpSecondsAsMilli, ///< Result storage uint32_t*, parsed by cp_seconds_as_milli().
++    cpSecondsAsMicro, ///< Result storage uint32_t*, parsed by cp_seconds_as_micro().
++    cpTimestamp,      ///< Result storage Timestamp*, parsed by cp_time().
++    cpTimeval,                ///< Result storage struct timeval*, parsed by cp_time().
++    cpInterval,               ///< Result storage struct timeval*, parsed by cp_time().
++    cpBandwidth,      ///< Result storage uint32_t*, parsed by cp_bandwidth().
++    cpIPAddress,      ///< Result storage IPAddress* or equivalent, parsed by cp_ip_address().
++    cpIPPrefix,               ///< Result storage IPAddress* addr and IPAddress *mask, parsed by cp_ip_prefix().
++    cpIPAddressOrPrefix,///< Result storage IPAddress* addr and IPAddress *mask, parsed by cp_ip_prefix().
++    cpIPAddressList,  ///< Result storage Vector<IPAddress>*, parsed by cp_ip_address_list().
++    cpEthernetAddress,        ///< Result storage EtherAddress*, parsed by cp_ethernet_address().
++    cpTCPPort,                ///< Result storage uint16_t*, parsed by cp_tcpudp_port().
++    cpUDPPort,                ///< Result storage uint16_t*, parsed by cp_tcpudp_port().
++    cpElement,                ///< Result storage Element**, parsed by cp_element().
++    cpHandlerName,    ///< Result storage Element** and String*, parsed by cp_handler_name().
++    cpHandlerCallRead,        ///< Result storage HandlerCall*, parsed by HandlerCall.
++    cpHandlerCallWrite,       ///< Result storage HandlerCall*, parsed by HandlerCall.
++    cpHandlerCallPtrRead, ///< Result storage HandlerCall**, parsed by HandlerCall::reset_read.
++    cpHandlerCallPtrWrite, ///< Result storage HandlerCall**, parsed by HandlerCall::reset_write.
++    cpIP6Address,     ///< Result storage IP6Address* or equivalent, parsed by cp_ip6_address().
++    cpIP6Prefix,      ///< Result storage IP6Address* addr and IP6Address* mask, parsed by cp_ip6_prefix().
++    cpIP6AddressOrPrefix,///< Result storage IP6Address* addr and IP6Address* mask, parsed by cp_ip6_prefix().
++    cpDesCblock,      ///< Result storage uint8_t[8], parsed by cp_des_cblock().
++    cpFilename,               ///< Result storage String*, parsed by cp_filename().
++    cpOptional,               ///< cp_va_parse only: Following arguments are optional.
++    cpKeywords,               ///< cp_va_parse only: Following arguments are keywords.
++    cpConfirmKeywords,        ///< cp_va_parse only: Following arguments are confirmed keywords.
++    cpMandatoryKeywords,///< cp_va_parse only: Following arguments are mandatory keywords.
++    // old names, here for compatibility:
++    cpEtherAddress,   //                      EtherAddress*
++    cpReadHandlerCall,        //                      HandlerCall**
++    cpWriteHandlerCall;       //                      HandlerCall**
++//@}
++
++/// @name Unparsing
++//@{
++String cp_unparse_bool(bool value);
++String cp_unparse_real2(int32_t value, int frac_bits);
++String cp_unparse_real2(uint32_t value, int frac_bits);
++#ifdef HAVE_INT64_TYPES
++String cp_unparse_real2(int64_t value, int frac_bits);
++String cp_unparse_real2(uint64_t value, int frac_bits);
++#endif
++String cp_unparse_real10(int32_t value, int frac_digits);
++String cp_unparse_real10(uint32_t value, int frac_digits);
++String cp_unparse_milliseconds(uint32_t value);
++String cp_unparse_microseconds(uint32_t value);
++String cp_unparse_interval(const Timestamp& value);
++String cp_unparse_interval(const struct timeval& value);
++String cp_unparse_bandwidth(uint32_t value);
++//@}
++
++/// @name Legacy Functions
++//@{
++int cp_va_parse(const Vector<String>& conf, CP_VA_PARSE_ARGS_REST);
++int cp_va_parse(const String& str, CP_VA_PARSE_ARGS_REST);
++int cp_va_space_parse(const String& str, CP_VA_PARSE_ARGS_REST);
++int cp_va_parse_keyword(const String& str, CP_VA_PARSE_ARGS_REST);
++int cp_va_parse_remove_keywords(Vector<String>& conf, int first, CP_VA_PARSE_ARGS_REST);
++// Argument syntax:
++// cp_va_arg ::= cpEnd                // terminates argument list (not 0!)
++//    |   cpOptional | cpKeywords | cpIgnore...               // manipulators
++//    |   CpVaParseCmd cmd, const char *description,
++//      [Optional Helpers], Results
++//                            // Helpers and Results depend on 'cmd';
++//                            // see table above
++//    |   const char *keyword, CpVaParseCmd cmd, const char *description,
++//      [Optional Helpers], Results
++//                            // keyword argument, within cpKeywords or
++//                            // cpMandatoryKeywords
++//    |   const char *keyword, CpVaParseCmd cmd, const char *description,
++//      bool *keyword_given, [Optional Helpers], Results
++//                            // keyword argument, within cpConfirmKeywords
++// Returns the number of result arguments set, or negative on error.
++// Stores no values in the result arguments on error.
++//@}
++
++/// @name Argument Types for cp_va_kparse
++//@{
++struct cp_value;
++struct cp_argtype;
++
++typedef void (*cp_parsefunc)(cp_value* value, const String& arg,
++                           ErrorHandler* errh, const char* argdesc  CP_CONTEXT);
++typedef void (*cp_storefunc)(cp_value* value  CP_CONTEXT);
++
++struct cp_argtype {
++    const char* name;
++    cp_argtype* next;
++    cp_parsefunc parse;
++    cp_storefunc store;
++    void* user_data;
++    int flags;
++    const char* description;
++    int internal;
++    int use_count;
++};
++
++struct cp_value {
++    // set by cp_va_parse:
++    const cp_argtype* argtype;
++    const char* keyword;
++    const char* description CLICK_CONFPARSE_DEPRECATED;
++    int extra;
++    void* store;
++    void* store2;
++    bool* store_confirm;
++    // set by parsefunc, used by storefunc:
++    union {
++      bool b;
++      int32_t i;
++      uint32_t u;
++#ifdef HAVE_INT64_TYPES
++      int64_t i64;
++      uint64_t u64;
++#endif
++#ifdef HAVE_FLOAT_TYPES
++      double d;
++#endif
++      unsigned char address[16];
++      int is[4];
++#ifndef CLICK_TOOL
++      Element* element;
++#endif
++    } v, v2;
++    String v_string;
++    String v2_string;
++};
++
++enum { cpArgNormal = 0, cpArgStore2 = 1, cpArgExtraInt = 2, cpArgAllowNumbers = 4 };
++int cp_register_argtype(const char* name, const char* description, int flags,
++                      cp_parsefunc parsefunc, cp_storefunc storefunc,
++                      void* user_data = 0);
++void cp_unregister_argtype(const char* name);
++
++int cp_register_stringlist_argtype(const char* name, const char* description,
++                                 int flags);
++int cp_extend_stringlist_argtype(const char* name, ...);
++// Takes: const char* name, int value, ...., const char* ender = (const char*)0
++//@}
++
++/// @cond never
++bool cp_seconds_as(int want_power, const String& str, uint32_t* result) CLICK_DEPRECATED;
++
++#define cp_integer64 cp_integer
++#define cp_unsigned64 cp_integer
++#define cp_unsigned cp_integer
++#define cp_unsigned_real10 cp_real10
++#define cp_unsigned_real2 cp_real2
++/// @endcond
++
++/** @brief  Join the strings in @a conf with spaces and return the result.
++ *
++ *  This function does not quote or otherwise protect the strings in @a conf.
++ *  The caller should do that if necessary.
++ *  @sa cp_unspacevec(const String *, const String *) */
++inline String cp_unspacevec(const Vector<String>& conf)
++{
++    return cp_unspacevec(conf.begin(), conf.end());
++}
++
++/** @brief  Test if @a str is all spaces.
++ *  @return True when every character in @a str is a space. */
++inline bool cp_is_space(const String& str)
++{
++    return cp_skip_space(str.begin(), str.end()) == str.end();
++}
++
++/** @brief  Parse an integer from @a str in base 0.
++ *
++ *  Same as cp_integer(str, 0, result). */
++inline bool cp_integer(const String& str, int* result)
++{
++    return cp_integer(str, 0, result);
++}
++
++inline bool cp_integer(const String& str, unsigned int* result)
++{
++    return cp_integer(str, 0, result);
++}
++
++/// @cond never
++inline const unsigned char *cp_integer(const unsigned char *begin, const unsigned char *end, int base, unsigned int* result)
++{
++    return (const unsigned char *) cp_integer((const char *) begin, (const char *) end, base, result);
++}
++/// @endcond
++
++#ifdef HAVE_INT64_TYPES
++/// @cond never
++inline const unsigned char *cp_integer(const unsigned char *begin, const unsigned char *end, int base, uint64_t* result)
++{
++    return (const unsigned char *) cp_integer((const char *) begin, (const char *) end, base, result);
++}
++/// @endcond
++
++inline bool cp_integer(const String& str, uint64_t* result)
++{
++    return cp_integer(str, 0, result);
++}
++
++inline bool cp_integer(const String& str, int64_t* result)
++{
++    return cp_integer(str, 0, result);
++}
++#endif
++
++#if SIZEOF_LONG == SIZEOF_INT
++inline const char* cp_integer(const char* begin, const char* end, int base, long* result)
++{
++    return cp_integer(begin, end, base, reinterpret_cast<int*>(result));
++}
++
++inline bool cp_integer(const String& str, int base, long* result)
++{
++    return cp_integer(str, base, reinterpret_cast<int*>(result));
++}
++
++inline bool cp_integer(const String& str, long* result)
++{
++    return cp_integer(str, reinterpret_cast<int*>(result));
++}
++
++inline const char* cp_integer(const char* begin, const char* end, int base, unsigned long* result)
++{
++    return cp_integer(begin, end, base, reinterpret_cast<unsigned int*>(result));
++}
++
++inline bool cp_integer(const String& str, int base, unsigned long* result)
++{
++    return cp_integer(str, base, reinterpret_cast<unsigned int*>(result));
++}
++
++inline bool cp_integer(const String& str, unsigned long* result)
++{
++    return cp_integer(str, reinterpret_cast<unsigned int*>(result));
++}
++#endif
++
++inline bool cp_ip_address(const String& str, struct in_addr* ina  CP_CONTEXT)
++{
++    return cp_ip_address(str, reinterpret_cast<IPAddress*>(ina)  CP_PASS_CONTEXT);
++}
++
++/// @cond never
++inline bool cp_seconds_as(int want_power, const String &str, uint32_t *result)
++{
++    return cp_seconds_as(str, want_power, result);
++}
++
++#undef CP_VA_ARGS_REST
++#undef CP_OPT_CONTEXT
++#undef CP_CONTEXT
++#undef CP_PASS_CONTEXT
++#undef CLICK_CONFPARSE_DEPRECATED
++#undef CP_SENTINEL
++#define cpEnd ((CpVaParseCmd) 0)
++/// @endcond
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/crc32.h click-1.6.0-27/inst/include/click/crc32.h
+--- click-1.6.0/inst/include/click/crc32.h     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/crc32.h  2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,15 @@
++/* -*- related-file-name: "../../lib/crc32.c" -*- */
++#ifndef CLICK_CRC32_H
++#define CLICK_CRC32_H
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++unsigned long update_crc(unsigned long crc_accum,
++                         char *data_blk_ptr,
++                         int data_blk_size);
++
++#ifdef __cplusplus
++}
++#endif
++#endif
+diff -Nurb click-1.6.0/inst/include/click/cxxprotect.h click-1.6.0-27/inst/include/click/cxxprotect.h
+--- click-1.6.0/inst/include/click/cxxprotect.h        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/cxxprotect.h     2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,22 @@
++#ifdef __cplusplus
++#define new           xxx_new
++#define this          xxx_this
++#define delete                xxx_delete
++#define class         xxx_class
++#define virtual               xxx_virtual
++#define typename      xxx_typename
++#define private               xxx_private
++#define protected     xxx_protected
++#define public                xxx_public
++#define namespace     xxx_namespace
++#endif
++
++#ifndef CLICK_CXX_PROTECT
++# ifdef __cplusplus
++#  define CLICK_CXX_PROTECT   extern "C" {
++#  define CLICK_CXX_UNPROTECT }
++# else
++#  define CLICK_CXX_PROTECT   /* nothing */
++#  define CLICK_CXX_UNPROTECT /* nothing */
++# endif
++#endif
+diff -Nurb click-1.6.0/inst/include/click/cxxunprotect.h click-1.6.0-27/inst/include/click/cxxunprotect.h
+--- click-1.6.0/inst/include/click/cxxunprotect.h      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/cxxunprotect.h   2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,12 @@
++#ifdef __cplusplus
++#undef new
++#undef this
++#undef delete
++#undef class
++#undef virtual
++#undef typename
++#undef private
++#undef protected
++#undef public
++#undef namespace
++#endif
+diff -Nurb click-1.6.0/inst/include/click/dequeue.cc click-1.6.0-27/inst/include/click/dequeue.cc
+--- click-1.6.0/inst/include/click/dequeue.cc  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/dequeue.cc       2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,170 @@
++/*
++ * dequeue.{cc,hh} -- double-ended queue template class
++ * Douglas S. J. De Couto
++ * Based on code from Click Vector<> class (vector.{cc,hh}).
++ *
++ * Copyright (c) 2003 Massachusetts Institute of Technology
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, subject to the conditions
++ * listed in the Click LICENSE file. These conditions include: you must
++ * preserve this copyright notice, and you cannot mention the copyright
++ * holders in advertising related to the Software without their permission.
++ * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++ * notice is a summary of the Click LICENSE file; the license in that file is
++ * legally binding.
++ */
++
++#ifndef CLICK_DEQUEUE_CC
++#define CLICK_DEQUEUE_CC
++
++CLICK_ENDDECLS
++#include <click/dequeue.hh>
++CLICK_DECLS
++
++template <class T>
++DEQueue<T>::DEQueue(const DEQueue<T> &o)
++    : _l(0), _n(0), _cap(0), _head(0), _tail(0)
++{
++    *this = o;
++}
++
++template <class T>
++DEQueue<T>::~DEQueue()
++{
++    for (int i = _head, j = 0; j < _n; i = next_i(i), j++)
++      _l[i].~T();
++    CLICK_LFREE(_l, _cap * sizeof(T));
++}
++
++template <class T> DEQueue<T> &
++DEQueue<T>::operator=(const DEQueue<T> &o)
++{
++    if (&o != this) {
++      for (int i = _head, j = 0; j < _n; i = next_i(i), j++)
++          _l[i].~T();
++      _n = 0;
++      _head = 0;
++      _tail = 0;
++      if (reserve(o._n)) {
++          _n = o._n;
++          for (int i = 0, j = o._head; i < _n; i++, j = o.next_i(j))
++              new(velt(i)) T(o._l[j]);
++          _tail = _n;
++      }
++    }
++    return *this;
++}
++
++template <class T> DEQueue<T> &
++DEQueue<T>::assign(int n, const T &e)
++{
++    resize(0, e);
++    resize(n, e);
++    return *this;
++}
++
++template <class T> bool
++DEQueue<T>::reserve(int want)
++{
++    if (want < 0)
++      want = _cap > 0 ? _cap * 2 : 4;
++    if (want <= _cap)
++      return true;
++
++    T *new_l = (T *) CLICK_LALLOC(want * sizeof(T));
++    if (!new_l)
++      return false;
++  
++    for (int i = _head, j = 0; j < _n; j++, i = next_i(i)) {
++      new(velt(new_l, j)) T(_l[i]);
++      _l[i].~T();
++    }
++
++    CLICK_LFREE(_l, _cap * sizeof(T));
++
++    _l = new_l;
++    _cap = want;
++    _head = 0;
++    _tail = _n;
++    return true;
++}
++
++template <class T> void
++DEQueue<T>::shrink(int nn)
++{
++    // delete els from back of queue
++    if (nn < _n) {
++      int num_to_del = _n - nn;
++      for ( ; num_to_del > 0; _tail = prev_i(_tail), num_to_del--)
++          _l[prev_i(_tail)].~T();
++      _n = nn;
++    }
++}
++
++template <class T> void
++DEQueue<T>::resize(int nn, const T &e)
++{
++  // extra/excess els are added/removed to/from back of queue
++  if (nn <= _cap || reserve(nn)) {
++    // construct new els
++    for ( ; _n < nn; _tail = next_i(_tail), _n++)
++      new(velt(_tail)) T(e);
++
++    // delete excess els
++    for ( ; nn < _n; _tail = prev_i(_tail), _n--)
++      _l[prev_i(_tail)].~T();
++  }
++}
++
++template <class T> void
++DEQueue<T>::swap(DEQueue<T> &o)
++{
++  T *l = _l;
++  int n = _n;
++  int cap = _cap;
++  int head = _head;
++  int tail = _tail;
++  _l = o._l;
++  _n = o._n;
++  _cap = o._cap;
++  _head = o._head;
++  _tail = o._tail;
++  o._l = l;
++  o._n = n;
++  o._cap = cap;
++  o._head = head;
++  o._tail = tail;
++}
++
++template <class T> inline void
++DEQueue<T>::check_rep()
++{
++  // pushes go on to back (tail), pops come from front (head).
++  // elements closer to the tail have larger indices in the array
++  // (modulo total size).
++
++  // _head is index of front
++  // _tail is 1 + index of back, i.e. where next push goes
++
++  if (!_l) {
++    assert(_n == 0);
++    assert(_cap == 0);
++    assert(_head == 0);
++    assert(_tail == 0);
++  } else {
++    assert(_head >= 0);
++    assert(_head < _cap);
++    assert(_tail >= 0);
++    assert(_tail < _cap);
++    if (_n == _cap)
++      assert(_head == _tail);
++    else
++      assert(_n == (_tail >= _head ? _tail - _head : _cap - _head + _tail));
++  }      
++}
++
++
++
++#endif
+diff -Nurb click-1.6.0/inst/include/click/dequeue.hh click-1.6.0-27/inst/include/click/dequeue.hh
+--- click-1.6.0/inst/include/click/dequeue.hh  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/dequeue.hh       2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,146 @@
++// dequeue.hh
++// Douglas S. J. De Couto
++// 26 June 2003
++
++// Inspired by Click Vector<> and SimpleQueue code
++
++#ifndef CLICK_DEQUEUE_HH
++#define CLICK_DEQUEUE_HH
++#include <click/glue.hh>
++CLICK_DECLS
++
++template <class T>
++class DEQueue {
++
++public:
++  DEQueue()                      : _l(0), _n(0), _cap(0), _head(0), _tail(0) { }
++  explicit DEQueue(int capacity) : _l(0), _n(0), _cap(0), _head(0), _tail(0) { reserve(capacity); }
++  DEQueue(int n, const T &e)     : _l(0), _n(0), _cap(0), _head(0), _tail(0) { resize(n, e);      }
++  DEQueue(const DEQueue<T> &);
++  ~DEQueue();
++
++    inline void check_rep();
++
++  int size() const { return _n; }
++
++  const T &at(int i) const            { assert(i>=0 && i<_n); return _l[idx(i)]; }
++  const T &operator[](int i) const    { return at(i); }
++  const T &front() const                { return at(0); }
++  const T &back() const                       { return at(_n - 1); }
++  const T &at_u(int i) const          { return _l[idx(i)]; }
++  
++  T &at(int i)                                { assert(i>=0 && i<_n); return _l[idx(i)]; }
++  T &operator[](int i)                        { return at(i); }
++  T &front()                            { return at(0); }
++  T &back()                           { return at(_n - 1); }
++  T &at_u(int i)                      { return _l[idx(i)]; }
++
++    struct const_iterator {
++      const DEQueue &_q;
++      int _pos;
++
++      const_iterator(const DEQueue<T> &q, int p) : _q(q), _pos(p)  { }
++      const_iterator(const const_iterator &i) : _q(i._q), _pos(i._pos) { }
++      const_iterator &operator++() { _pos++; return *this; }
++      const_iterator &operator--() { _pos--; return *this; }
++      const_iterator operator++(int) { const_iterator t = *this; ++*this; return t; }
++      const_iterator operator--(int) { const_iterator t = *this; --*this; return t; }
++      const_iterator &operator+=(int n) { _pos += n; return *this; }
++      const_iterator &operator-=(int n) { _pos -= n; return *this; }
++      const T &operator[](int n) const { return _q[_pos + n]; }
++      bool operator==(const const_iterator &i) const { return _pos == i._pos && _q._l == i._q._l;  }
++      bool operator!=(const const_iterator &i) const { return _pos != i._pos || _q._l != i._q._l;  }
++      const T &operator*()  const { return _q[_pos];  }
++      const T *operator->() const { return &_q[_pos]; }
++    };
++
++    struct iterator : public const_iterator {
++      iterator(DEQueue<T> &q, int p) : const_iterator(q, p) { }
++      iterator(const iterator &i) : const_iterator(i._q, i._pos) { }
++      T &operator[](int n) const { return const_cast<T &>(const_iterator::operator[](n)); }
++      T &operator*() const { return const_cast<T &>(const_iterator::operator*()); }
++      T *operator->() const { return const_cast<T *>(const_iterator::operator->()); }
++    };
++  
++    iterator begin()                  { return iterator(*this, 0); }
++    const_iterator begin() const      { return const_iterator((DEQueue<T> &) *this, 0); }
++    iterator end()                    { return iterator(*this, _n); }
++    const_iterator end() const                { return const_iterator((DEQueue<T> &) *this, _n); }
++
++    inline void push_back(const T &);
++    inline void pop_back();
++  
++    inline void push_front(const T &);
++    inline void pop_front();
++
++  void clear()                          { shrink(0); }
++  bool reserve(int);
++  void resize(int nn, const T &e = T());
++
++  DEQueue<T> &operator=(const DEQueue<T> &);
++  DEQueue<T> &assign(int n, const T &e = T());
++  void swap(DEQueue<T> &);
++
++private:
++
++  T *_l;
++  int _n;
++  int _cap;
++  int _head;
++  int _tail;
++
++  int next_i(int i) const               { return (i != _cap - 1 ? i + 1 : 0); }
++  int prev_i(int i) const               { return (i != 0 ? i - 1 : _cap - 1); }
++  int idx(int i)    const               { return (i + _head) % _cap;  }
++
++  void *velt(int i) const             { return (void *) &_l[i]; }
++  static void *velt(T *l, int i)      { return (void *) &l[i];  }
++  void shrink(int nn);
++  
++  friend class iterator;
++  friend class const_iterator;
++
++};
++
++
++
++template <class T> inline void
++DEQueue<T>::push_front(const T &e)
++{
++    if (_n < _cap || reserve(-1)) {
++      _head = prev_i(_head);
++      new(velt(_head)) T(e);
++      _n++;
++    }
++}
++
++template <class T> inline void
++DEQueue<T>::pop_front()
++{
++    assert(_n > 0);
++    --_n;
++    _l[_head].~T();
++    _head = next_i(_head);
++}
++
++template <class T> inline void
++DEQueue<T>::push_back(const T &e)
++{
++    if (_n < _cap || reserve(-1)) {
++      new(velt(_tail)) T(e);
++      _n++;
++      _tail = next_i(_tail);
++    }
++}
++
++template <class T> inline void
++DEQueue<T>::pop_back()
++{
++    assert(_n > 0);
++    --_n;
++    _tail = prev_i(_tail);
++    _l[_tail].~T();
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/driver.hh click-1.6.0-27/inst/include/click/driver.hh
+--- click-1.6.0/inst/include/click/driver.hh   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/driver.hh        2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,37 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/driver.cc" -*-
++#ifndef CLICK_DRIVER_HH
++#define CLICK_DRIVER_HH
++#include <click/package.hh>
++
++#define CLICK_DEFAULT_PROVIDES        /* nada */
++
++#if CLICK_USERLEVEL
++CLICK_DECLS
++class Router;
++class Master;
++class ErrorHandler;
++class Lexer;
++class ArchiveElement;
++
++void click_static_initialize();
++void click_static_cleanup();
++
++Lexer *click_lexer();
++Router *click_read_router(String filename, bool is_expr, ErrorHandler * = 0, bool initialize = true, Master * = 0);
++
++String click_compile_archive_file(String package, const Vector<ArchiveElement> &archive, int ai, const String &target, const String &extra_flags, ErrorHandler *errh);
++
++CLICK_ENDDECLS
++#elif CLICK_TOOL
++CLICK_DECLS
++class ErrorHandler;
++class ArchiveElement;
++
++void click_static_initialize();
++
++String click_compile_archive_file(String package, const Vector<ArchiveElement> &archive, int ai, const String &target, const String &extra_flags, ErrorHandler *errh);
++
++CLICK_ENDDECLS
++#endif
++
++#endif
+diff -Nurb click-1.6.0/inst/include/click/element.hh click-1.6.0-27/inst/include/click/element.hh
+--- click-1.6.0/inst/include/click/element.hh  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/element.hh       2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,659 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/element.cc" -*-
++#ifndef CLICK_ELEMENT_HH
++#define CLICK_ELEMENT_HH
++#include <click/glue.hh>
++#include <click/vector.hh>
++#include <click/string.hh>
++#include <click/packet.hh>
++CLICK_DECLS
++class Router;
++class Master;
++class Task;
++class Timer;
++class Element;
++class ErrorHandler;
++class Bitvector;
++class Handler;
++
++/** @file <click/element.hh>
++ * @brief Click's Element class.
++ */
++
++#define CLICK_ELEMENT_PORT_COUNT_DEPRECATED CLICK_DEPRECATED
++
++// #define CLICK_STATS 5
++
++typedef int (*HandlerHook)(int operation, String&, Element*, const Handler*, ErrorHandler*);
++typedef String (*ReadHandlerHook)(Element*, void*);
++typedef int (*WriteHandlerHook)(const String&, Element*, void*, ErrorHandler*);
++
++class Element { public:
++    
++    Element();
++    virtual ~Element();
++    static int nelements_allocated;
++
++    // RUNTIME
++    virtual void push(int port, Packet*);
++    virtual Packet* pull(int port);
++    virtual Packet* simple_action(Packet*);
++
++    virtual bool run_task(Task *);    // return true iff did useful work
++    virtual void run_timer(Timer *);
++#if CLICK_USERLEVEL
++    virtual void selected(int fd);
++#endif
++
++    inline void checked_output_push(int port, Packet*) const;
++    
++    // ELEMENT CHARACTERISTICS
++    virtual const char *class_name() const = 0;
++
++    virtual const char *port_count() const;
++    static const char PORTS_0_0[];
++    static const char PORTS_0_1[];
++    static const char PORTS_1_0[];
++    static const char PORTS_1_1[];
++    
++    virtual const char *processing() const;
++    static const char AGNOSTIC[];
++    static const char PUSH[];
++    static const char PULL[];
++    static const char PUSH_TO_PULL[];
++    static const char PULL_TO_PUSH[];
++    
++    virtual const char *flow_code() const;
++    static const char COMPLETE_FLOW[];
++    
++    virtual const char *flags() const;
++
++    virtual void *cast(const char *);
++    
++    // CONFIGURATION, INITIALIZATION, AND CLEANUP
++    enum ConfigurePhase {
++      CONFIGURE_PHASE_FIRST = 0,
++      CONFIGURE_PHASE_INFO = 20,
++      CONFIGURE_PHASE_PRIVILEGED = 90,
++      CONFIGURE_PHASE_DEFAULT = 100,
++      CONFIGURE_PHASE_LAST = 2000
++    };
++    virtual int configure_phase() const;
++    
++    virtual int configure(Vector<String>&, ErrorHandler*);
++    
++    virtual void add_handlers();
++  
++    virtual int initialize(ErrorHandler*);
++    
++    virtual void take_state(Element *old_element, ErrorHandler*);
++    virtual Element *hotswap_element() const;
++
++    enum CleanupStage {
++      CLEANUP_NO_ROUTER,
++      CLEANUP_BEFORE_CONFIGURE = CLEANUP_NO_ROUTER,
++      CLEANUP_CONFIGURE_FAILED,
++      CLEANUP_CONFIGURED,
++      CLEANUP_INITIALIZE_FAILED,
++      CLEANUP_INITIALIZED,
++      CLEANUP_ROUTER_INITIALIZED,
++      CLEANUP_MANUAL
++    };
++    virtual void cleanup(CleanupStage);
++
++    static inline void static_initialize();
++    static inline void static_cleanup();
++
++    // ELEMENT ROUTER CONNECTIONS
++    String name() const;
++    String landmark() const;
++    virtual String declaration() const;
++  
++    inline Router *router() const;
++    inline int eindex() const;
++    inline int eindex(Router *r) const;
++    Master *master() const;
++
++    // INPUTS AND OUTPUTS
++    inline int nports(bool isoutput) const;
++    inline int ninputs() const;
++    inline int noutputs() const;
++
++    class Port;
++    inline const Port &port(bool isoutput, int port) const;
++    inline const Port &input(int port) const;
++    inline const Port &output(int port) const;
++
++    inline bool port_active(bool isoutput, int port) const;
++    inline bool input_is_push(int port) const;
++    inline bool input_is_pull(int port) const;
++    inline bool output_is_push(int port) const;
++    inline bool output_is_pull(int port) const;
++    void port_flow(bool isoutput, int port, Bitvector*) const;
++  
++    // LIVE RECONFIGURATION
++    virtual void configuration(Vector<String>&) const;
++    String configuration() const;
++  
++    virtual bool can_live_reconfigure() const;
++    virtual int live_reconfigure(Vector<String>&, ErrorHandler*);
++
++#if CLICK_USERLEVEL
++    // SELECT
++    enum { SELECT_READ = 1, SELECT_WRITE = 2 };
++    int add_select(int fd, int mask);
++    int remove_select(int fd, int mask);
++#endif
++
++    // HANDLERS
++    void add_read_handler(const String &name, ReadHandlerHook, void*);
++    void add_write_handler(const String &name, WriteHandlerHook, void*);
++    void set_handler(const String &name, int flags, HandlerHook, void* = 0, void* = 0);
++    int set_handler_flags(const String &name, int flags);
++    void add_task_handlers(Task*, const String& prefix = String());
++
++    static String read_positional_handler(Element*, void*);
++    static String read_keyword_handler(Element*, void*);
++    static int reconfigure_positional_handler(const String&, Element*, void*, ErrorHandler*);
++    static int reconfigure_keyword_handler(const String&, Element*, void*, ErrorHandler*);
++  
++    virtual int llrpc(unsigned command, void* arg);
++    int local_llrpc(unsigned command, void* arg);
++
++#if CLICK_STATS >= 2
++    // STATISTICS
++    int _calls; // Push and pull calls into this element.
++    uint64_t _self_cycles;  // Cycles spent in self and children.
++    uint64_t _child_cycles; // Cycles spent in children.
++#endif
++  
++    class Port { public:
++    
++      inline bool active() const;
++      inline Element* element() const;
++      inline int port() const;
++    
++      inline void push(Packet* p) const;
++      inline Packet* pull() const;
++
++#if CLICK_STATS >= 1
++      unsigned npackets() const       { return _packets; }
++#endif
++
++      private:
++    
++      Element* _e;
++      int _port;
++    
++#if CLICK_STATS >= 1
++      mutable unsigned _packets;      // How many packets have we moved?
++#endif
++#if CLICK_STATS >= 2
++      Element* _owner;                // Whose input or output are we?
++#endif
++
++      inline Port();
++      inline Port(Element*, Element*, int);
++      
++      friend class Element;
++    
++    };
++
++    // DEPRECATED
++    String id() const CLICK_DEPRECATED;
++
++    inline void set_ninputs(int) CLICK_ELEMENT_PORT_COUNT_DEPRECATED;
++    inline void set_noutputs(int) CLICK_ELEMENT_PORT_COUNT_DEPRECATED;
++    inline void add_input() CLICK_ELEMENT_PORT_COUNT_DEPRECATED;
++    inline void add_output() CLICK_ELEMENT_PORT_COUNT_DEPRECATED;
++    
++    virtual bool run_task() CLICK_DEPRECATED;
++    virtual void run_timer() CLICK_DEPRECATED;
++    
++  private:
++
++    enum { INLINE_PORTS = 4 };
++
++    Port* _ports[2];
++    Port _inline_ports[INLINE_PORTS];
++
++    int _nports[2];
++
++    Router* _router;
++    int _eindex;
++
++    Element(const Element &);
++    Element &operator=(const Element &);
++  
++    // METHODS USED BY ROUTER
++    inline void attach_router(Router* r, int n)       { _router = r; _eindex = n; }
++    
++    int set_nports(int, int);
++    int notify_nports(int, int, ErrorHandler *);
++    enum Processing { VAGNOSTIC, VPUSH, VPULL };
++    static int next_processing_code(const char*& p, ErrorHandler* errh);
++    void processing_vector(int* input_codes, int* output_codes, ErrorHandler*) const;
++
++    void initialize_ports(const int* input_codes, const int* output_codes);
++    int connect_port(bool isoutput, int port, Element*, int);
++    
++    void add_default_handlers(bool writable_config);
++
++    friend class Router;
++    
++};
++
++
++/** @brief Initialize static data for this element class.
++ *
++ * Elements that need to initialize global state, such as global hash tables
++ * or configuration parsing functions, should place that initialization code
++ * inside a static_initialize() static member function.  Click's build
++ * machinery will find that function and cause it to be called when the
++ * element code is loaded, before any elements of the class are created.
++ *
++ * static_initialize functions are called in an arbitrary and unpredictable
++ * order (not, for example, the configure_phase() order).  Element authors are
++ * responsible for handling static initialization dependencies.
++ *
++ * For Click to find a static_initialize declaration, it must appear inside
++ * the element class's class declaration on its own line and have the
++ * following prototype:
++ *
++ * @code
++ * static void static_initialize();
++ * @endcode
++ *
++ * It must also have public accessibility.
++ *
++ * @sa Element::static_cleanup
++ */
++inline void
++Element::static_initialize()
++{
++}
++
++/** @brief Clean up static data for this element class.
++ *
++ * Elements that need to free global state, such as global hash tables or
++ * configuration parsing functions, should place that code inside a
++ * static_cleanup() static member function.  Click's build machinery will find
++ * that function and cause it to be called when the element code is unloaded.
++ *
++ * static_cleanup functions are called in an arbitrary and unpredictable order
++ * (not, for example, the configure_phase() order, and not the reverse of the
++ * static_initialize order).  Element authors are responsible for handling
++ * static cleanup dependencies.
++ *
++ * For Click to find a static_cleanup declaration, it must appear inside the
++ * element class's class declaration on its own line and have the following
++ * prototype:
++ *
++ * @code
++ * static void static_cleanup();
++ * @endcode
++ *
++ * It must also have public accessibility.
++ *
++ * @sa Element::static_initialize
++ */
++inline void
++Element::static_cleanup()
++{
++}
++
++/** @brief Return the element's router. */
++inline Router*
++Element::router() const
++{
++    return _router;
++}
++
++/** @brief Return the element's index within its router.
++ * @invariant this == router()->element(eindex())
++ */
++inline int
++Element::eindex() const
++{
++    return _eindex;
++}
++
++/** @brief Return the element's index within router @a r.
++ * 
++ * Returns -1 if @a r != router(). */
++inline int
++Element::eindex(Router* r) const
++{
++    return (router() == r ? _eindex : -1);
++}
++
++/** @brief Return the number of input or output ports.
++ * @param isoutput false for input ports, true for output ports */
++inline int
++Element::nports(bool isoutput) const
++{
++    return _nports[isoutput];
++}
++
++/** @brief Return the number of input ports. */
++inline int
++Element::ninputs() const
++{
++    return _nports[0];
++}
++
++/** @brief Return the number of output ports. */
++inline int
++Element::noutputs() const
++{
++    return _nports[1];
++}
++
++/** @brief Sets the element's number of input ports (deprecated).
++ *
++ * @param ninputs number of input ports
++ *
++ * @deprecated The set_ninputs() function is deprecated.  Elements should
++ * instead use port_count() to define an acceptable range of input port
++ * counts.  Elements that called set_ninputs() from configure(), setting the
++ * number of input ports based on configuration arguments, should compare the
++ * desired number of ports to ninputs() and signal an error if they disagree.
++ *
++ * This function can be called from the constructor, notify_ninputs(),
++ * notify_noutputs(), or configure(), but not from initialize() or later.  */
++inline void
++Element::set_ninputs(int ninputs)
++{
++    set_nports(ninputs, _nports[1]);
++}
++
++/** @brief Sets the element's number of output ports (deprecated).
++ *
++ * @param noutputs number of output ports
++ *
++ * @deprecated The set_noutputs() function is deprecated.  Elements should
++ * instead use port_count() to define an acceptable range of output port
++ * counts.  Elements that called set_noutputs() from configure(), setting the
++ * number of output ports based on configuration arguments, should compare the
++ * desired number of ports to noutputs() and signal an error if they disagree.
++ *
++ * This function can be called from the constructor, notify_ninputs(),
++ * notify_noutputs(), or configure(), but not from initialize() or later.  */
++inline void
++Element::set_noutputs(int noutputs)
++{
++    set_nports(_nports[0], noutputs);
++}
++
++/** @brief Adds an input port (deprecated).
++ *
++ * @deprecated See the deprecation note at set_ninputs().
++ *
++ * An abbreviation for set_ninputs(ninputs() + 1).  Subject to the same
++ * restrictions as set_ninputs().
++ *
++ * @sa set_ninputs */
++inline void
++Element::add_input()
++{
++    set_nports(_nports[0] + 1, _nports[1]);
++}
++
++/** @brief Adds an output port (deprecated).
++ *
++ * @deprecated See the deprecation note at set_noutputs().
++ *
++ * An abbreviation for set_noutputs(noutputs() + 1).  Subject to the same
++ * restrictions as set_noutputs().
++ *
++ * @sa set_noutputs */
++inline void
++Element::add_output()
++{
++    set_nports(_nports[0], _nports[1] + 1);
++}
++
++/** @brief Return one of the element's ports.
++ * @param isoutput false for input ports, true for output ports
++ * @param port port number
++ *
++ * An assertion fails if @a p is out of range. */
++inline const Element::Port&
++Element::port(bool isoutput, int port) const
++{
++    assert((unsigned) port < (unsigned) _nports[isoutput]);
++    return _ports[isoutput][port];
++}
++
++/** @brief Return one of the element's input ports.
++ * @param port port number
++ *
++ * An assertion fails if @a port is out of range.
++ *
++ * @sa Port, port */
++inline const Element::Port&
++Element::input(int port) const
++{
++    return Element::port(false, port);
++}
++
++/** @brief Return one of the element's output ports.
++ * @param port port number
++ *
++ * An assertion fails if @a port is out of range.
++ *
++ * @sa Port, port */
++inline const Element::Port&
++Element::output(int port) const
++{
++    return Element::port(true, port);
++}
++
++/** @brief Check whether a port is active.
++ * @param isoutput false for input ports, true for output ports
++ * @param port port number
++ *
++ * Returns true iff @a port is in range and @a port is active.  Push outputs
++ * and pull inputs are active; pull outputs and push inputs are not.
++ *
++ * @sa Element::Port::active */
++inline bool
++Element::port_active(bool isoutput, int port) const
++{
++    return (unsigned) port < (unsigned) nports(isoutput)
++      && _ports[isoutput][port].active();
++}
++
++/** @brief Check whether output @a port is push.
++ *
++ * Returns true iff output @a port exists and is push.  @sa port_active */
++inline bool
++Element::output_is_push(int port) const
++{
++    return port_active(true, port);
++}
++
++/** @brief Check whether output @a port is pull.
++ *
++ * Returns true iff output @a port exists and is pull. */
++inline bool
++Element::output_is_pull(int port) const
++{
++    return (unsigned) port < (unsigned) nports(true)
++      && !_ports[1][port].active();
++}
++
++/** @brief Check whether input @a port is pull.
++ *
++ * Returns true iff input @a port exists and is pull.  @sa port_active */
++inline bool
++Element::input_is_pull(int port) const
++{
++    return port_active(false, port);
++}
++
++/** @brief Check whether input @a port is push.
++ *
++ * Returns true iff input @a port exists and is push. */
++inline bool
++Element::input_is_push(int port) const
++{
++    return (unsigned) port < (unsigned) nports(false)
++      && !_ports[0][port].active();
++}
++
++#if CLICK_STATS >= 2
++# define PORT_CTOR_INIT(o) , _packets(0), _owner(o)
++#else
++# if CLICK_STATS >= 1
++#  define PORT_CTOR_INIT(o) , _packets(0)
++# else
++#  define PORT_CTOR_INIT(o)
++# endif
++#endif
++
++inline
++Element::Port::Port()
++    : _e(0), _port(-2) PORT_CTOR_INIT(0)
++{
++}
++
++inline
++Element::Port::Port(Element* owner, Element* e, int p)
++    : _e(e), _port(p) PORT_CTOR_INIT(owner)
++{
++    (void) owner;
++}
++
++/** @brief Returns whether this port is active (a push output or a pull input).
++ *
++ * @sa Element::port_active
++ */
++inline bool
++Element::Port::active() const
++{
++    return _port >= 0;
++}
++    
++/** @brief Returns the element connected to this active port.
++ *
++ * Returns 0 if this port is not active(). */
++inline Element*
++Element::Port::element() const
++{
++    return _e;
++}
++
++/** @brief Returns the port number of the port connected to this active port.
++ *
++ * Returns < 0 if this port is not active(). */
++inline int
++Element::Port::port() const
++{
++    return _port;
++}
++
++/** @brief Push packet @a p over this port.
++ *
++ * Pushes packet @a p downstream through the router configuration by passing
++ * it to the next element's @link Element::push() push() @endlink function.
++ * Returns when the rest of the router finishes processing @a p.
++ *
++ * This port must be an active() push output port.  Usually called from
++ * element code like @link Element::output output(i) @endlink .push(p).
++ *
++ * When element code calls Element::Port::push(@a p), it relinquishes control
++ * of packet @a p.  When push() returns, @a p may have been altered or even
++ * freed by downstream elements.  Thus, you must not use @a p after pushing it
++ * downstream.  To push a copy and keep a copy, see Packet::clone().
++ *
++ * output(i).push(p) basically behaves like the following code, although it
++ * maintains additional statistics depending on how CLICK_STATS is defined:
++ *
++ * @code
++ * output(i).element()->push(output(i).port(), p);
++ * @endcode
++ */
++inline void
++Element::Port::push(Packet* p) const
++{
++    assert(_e);
++#if CLICK_STATS >= 1
++    _packets++;
++#endif
++#if CLICK_STATS >= 2
++    _e->input(_port)._packets++;
++    uint64_t c0 = click_get_cycles();
++    _e->push(_port, p);
++    uint64_t c1 = click_get_cycles();
++    uint64_t x = c1 - c0;
++    _e->_calls += 1;
++    _e->_self_cycles += x;
++    _owner->_child_cycles += x;
++#else
++    _e->push(_port, p);
++#endif
++}
++
++/** @brief Pull a packet over this port and return it.
++ *
++ * Pulls a packet from upstream in the router configuration by calling the
++ * previous element's @link Element::pull() pull() @endlink function.  When
++ * the router finishes processing, returns the result.
++ *
++ * This port must be an active() pull input port.  Usually called from element
++ * code like @link Element::input input(i) @endlink .pull().
++ *
++ * input(i).pull() basically behaves like the following code, although it
++ * maintains additional statistics depending on how CLICK_STATS is defined:
++ *
++ * @code
++ * input(i).element()->pull(input(i).port())
++ * @endcode
++ */
++inline Packet*
++Element::Port::pull() const
++{
++    assert(_e);
++#if CLICK_STATS >= 2
++    _e->output(_port)._packets++;
++    uint64_t c0 = click_get_cycles();
++    Packet *p = _e->pull(_port);
++    uint64_t c1 = click_get_cycles();
++    uint64_t x = c1 - c0;
++    _e->_calls += 1;
++    _e->_self_cycles += x;
++    _owner->_child_cycles += x;
++#else
++    Packet* p = _e->pull(_port);
++#endif
++#if CLICK_STATS >= 1
++    if (p)
++      _packets++;
++#endif
++    return p;
++}
++
++/** @brief Push packet @a p to output @a port, or kill it if @a port is out of
++ * range.
++ *
++ * @param port output port number
++ * @param p packet to push
++ *
++ * If @a port is in range (>= 0 and < noutputs()), then push packet @a p
++ * forward using output(@a port).push(@a p).  Otherwise, kill @a p with @a p
++ * ->kill().
++ *
++ * @note It is invalid to call checked_output_push() on a pull output @a port.
++ */
++inline void
++Element::checked_output_push(int port, Packet* p) const
++{
++    if ((unsigned) port < (unsigned) noutputs())
++      _ports[1][port].push(p);
++    else
++      p->kill();
++}
++
++#undef CONNECTION_CTOR_INIT
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/elemfilter.hh click-1.6.0-27/inst/include/click/elemfilter.hh
+--- click-1.6.0/inst/include/click/elemfilter.hh       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/elemfilter.hh    2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,54 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/elemfilter.cc" -*-
++#ifndef CLICK_ELEMFILTER_HH
++#define CLICK_ELEMFILTER_HH
++#include <click/element.hh>
++CLICK_DECLS
++
++class ElementFilter { public:
++
++    ElementFilter()                   { }
++    virtual ~ElementFilter()          { }
++
++    inline bool match_input(Element*, int port);
++    inline bool match_output(Element*, int port);
++    inline bool match_port(Element*, bool isoutput, int port);
++
++    enum PortType { NONE = -1, INPUT = 0, OUTPUT = 1 };
++    virtual bool check_match(Element* e, int port, PortType);
++
++    void filter(Vector<Element*>&);
++
++};
++
++class CastElementFilter : public ElementFilter { public:
++
++    CastElementFilter(const String&);
++    bool check_match(Element*, int, PortType);
++
++  private:
++
++    String _what;
++
++};
++
++
++inline bool
++ElementFilter::match_input(Element* e, int port)
++{
++    return check_match(e, port, INPUT);
++}
++
++inline bool
++ElementFilter::match_output(Element* e, int port)
++{
++    return check_match(e, port, OUTPUT);
++}
++
++inline bool
++ElementFilter::match_port(Element* e, bool isoutput, int port)
++{
++    return check_match(e, port, (PortType) isoutput);
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/error.hh click-1.6.0-27/inst/include/click/error.hh
+--- click-1.6.0/inst/include/click/error.hh    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/error.hh 2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,187 @@
++// -*- c-basic-offset: 2; related-file-name: "../../lib/error.cc" -*-
++#ifndef CLICK_ERROR_HH
++#define CLICK_ERROR_HH
++#include <click/string.hh>
++#if defined(CLICK_USERLEVEL) || defined(CLICK_TOOL)
++# include <stdio.h>
++#endif
++#include <stdarg.h>
++#if HAVE_ADDRESSABLE_VA_LIST
++# define VA_LIST_REF_T                va_list *
++# define VA_LIST_DEREF(val)   (*(val))
++# define VA_LIST_REF(val)     (&(val))
++#else
++# define VA_LIST_REF_T                va_list
++# define VA_LIST_DEREF(val)   (val)
++# define VA_LIST_REF(val)     (val)
++#endif
++CLICK_DECLS
++
++class ErrorHandler { public:
++  
++  enum Seriousness {
++    ERRVERBOSITY_CONTEXT= 0x8000,
++    ERRVERBOSITY_MAX  = 0xFFFF,
++    ERRVERBOSITY_DEFAULT= ERRVERBOSITY_MAX,
++    ERRVERBOSITY_MASK = 0x0000FFFF,
++    ERRVERBOSITY_SHIFT        = 16,
++
++    ERR_MIN_DEBUG     = 0x00000000,
++    ERR_MIN_MESSAGE   = 0x00010000,
++    ERR_MIN_WARNING   = 0x00020000,
++    ERR_MIN_ERROR     = 0x00030000,
++    ERR_MIN_FATAL     = 0x00040000,
++
++    // fatal() with no explicit exit status exits with this status
++    FATAL_EXITSTATUS  = 1,
++    
++    ERR_DEBUG         = ERR_MIN_DEBUG + ERRVERBOSITY_DEFAULT,
++    ERR_CONTEXT_MESSAGE       = ERR_MIN_MESSAGE + ERRVERBOSITY_CONTEXT,
++    ERR_MESSAGE               = ERR_MIN_MESSAGE + ERRVERBOSITY_DEFAULT,
++    ERR_WARNING               = ERR_MIN_WARNING + ERRVERBOSITY_DEFAULT,
++    ERR_CONTEXT_ERROR = ERR_MIN_ERROR + ERRVERBOSITY_CONTEXT,
++    ERR_ERROR         = ERR_MIN_ERROR + ERRVERBOSITY_DEFAULT,
++    ERR_FATAL         = ERR_MIN_FATAL + ERRVERBOSITY_DEFAULT + (FATAL_EXITSTATUS << ERRVERBOSITY_SHIFT)
++  };
++  
++  ErrorHandler()                      { }
++  virtual ~ErrorHandler()             { }
++  
++  static ErrorHandler *static_initialize(ErrorHandler *errh); // returns errh
++  static void static_cleanup();
++
++  static ErrorHandler *default_handler();
++  static ErrorHandler *silent_handler();
++ 
++  static bool has_default_handler(); 
++  static void set_default_handler(ErrorHandler *);
++  
++  virtual int nwarnings() const = 0;
++  virtual int nerrors() const = 0;
++  virtual void reset_counts() = 0;
++  virtual int min_verbosity() const;
++
++  // seriousness < ERR_MIN_WARNING returns OK_RESULT, which is 0
++  // seriousness >= ERR_MIN_WARNING returns ERROR_RESULT, which is -EINVAL
++  static const int OK_RESULT;
++  static const int ERROR_RESULT;
++
++  void debug(const char *format, ...);
++  void message(const char *format, ...);
++  int warning(const char *format, ...);
++  int error(const char *format, ...);
++  int fatal(const char *format, ...);
++
++  void ldebug(const String &landmark, const char *format, ...);
++  void lmessage(const String &landmark, const char *format, ...);
++  int lwarning(const String &landmark, const char *format, ...);
++  int lerror(const String &landmark, const char *format, ...);
++  int lfatal(const String &landmark, const char *format, ...);
++
++  int verror(Seriousness, const String &landmark, const char *format, va_list);
++  int verror_text(Seriousness, const String &landmark, const String &text);
++  
++  String make_text(Seriousness, const char *, ...);
++  virtual String make_text(Seriousness, const char *, va_list);
++  virtual String decorate_text(Seriousness, const String &, const String &);
++  virtual void handle_text(Seriousness, const String &) = 0;
++  virtual int count_error(Seriousness, const String &) = 0;
++
++  virtual void set_error_code(int);
++
++  static String prepend_lines(const String &prefix, const String &text);
++
++  // error conversions
++  struct Conversion;
++  typedef String (*ConversionHook)(int flags, VA_LIST_REF_T);
++  enum ConversionFlags {
++    ZERO_PAD = 1, PLUS_POSITIVE = 2, SPACE_POSITIVE = 4, LEFT_JUST = 8,
++    ALTERNATE_FORM = 16, UPPERCASE = 32, SIGNED = 64, NEGATIVE = 128
++  };
++  static Conversion *add_conversion(const String &, ConversionHook);
++  static int remove_conversion(Conversion *);
++  
++};
++
++class BaseErrorHandler : public ErrorHandler { public:
++  BaseErrorHandler()                  : _nwarnings(0), _nerrors(0) { }
++  int nwarnings() const                       { return _nwarnings; }
++  int nerrors() const                 { return _nerrors; }
++  void reset_counts()                 { _nwarnings = _nerrors = 0; }
++  int count_error(Seriousness, const String &);
++ private:
++  int _nwarnings, _nerrors;
++};
++
++#if defined(CLICK_USERLEVEL) || defined(CLICK_TOOL)
++class FileErrorHandler : public BaseErrorHandler { public:
++  FileErrorHandler(FILE *, const String & = String());
++  void handle_text(Seriousness, const String &);
++ private:
++  FILE *_f;
++  String _context;
++};
++#endif
++
++class ErrorVeneer : public ErrorHandler { public:
++
++  ErrorVeneer(ErrorHandler *errh)     : _errh(errh) { }
++
++  int nwarnings() const;
++  int nerrors() const;
++  void reset_counts();
++
++  String make_text(Seriousness, const char *, va_list);
++  String decorate_text(Seriousness, const String &, const String &);
++  void handle_text(Seriousness, const String &);
++  int count_error(Seriousness, const String &);
++
++ protected:
++
++  ErrorHandler *_errh;
++ 
++};
++
++class ContextErrorHandler : public ErrorVeneer { public:
++  ContextErrorHandler(ErrorHandler *, const String &context, const String &indent = "  ", const String &context_landmark = "");
++  String decorate_text(Seriousness, const String &, const String &);
++ private:
++  String _context;
++  String _indent;
++  String _context_landmark;
++};
++
++class PrefixErrorHandler : public ErrorVeneer { public:
++  PrefixErrorHandler(ErrorHandler *, const String &prefix);
++  String decorate_text(Seriousness, const String &, const String &);
++ private:
++  String _prefix;
++};
++
++class LandmarkErrorHandler : public ErrorVeneer { public:
++  LandmarkErrorHandler(ErrorHandler *, const String &);
++  void set_landmark(const String &s)  { _landmark = s; }
++  String decorate_text(Seriousness, const String &, const String &);
++ private:
++  String _landmark;
++};
++
++class VerboseFilterErrorHandler : public ErrorVeneer { public:
++  VerboseFilterErrorHandler(ErrorHandler *, int min_verbosity);
++  int min_verbosity() const;
++  void handle_text(Seriousness, const String &);
++ private:
++  int _min_verbosity;
++};
++
++#if defined(CLICK_USERLEVEL) || defined(CLICK_TOOL)
++class BailErrorHandler : public ErrorVeneer { public:
++  BailErrorHandler(ErrorHandler *, Seriousness = ERR_MIN_ERROR);
++  void handle_text(Seriousness, const String &);
++ private:
++  int _exit_seriousness;
++};
++#endif
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/etheraddress.hh click-1.6.0-27/inst/include/click/etheraddress.hh
+--- click-1.6.0/inst/include/click/etheraddress.hh     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/etheraddress.hh  2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,137 @@
++// -*- related-file-name: "../../lib/etheraddress.cc" -*-
++#ifndef CLICK_ETHERADDRESS_HH
++#define CLICK_ETHERADDRESS_HH
++#include <click/string.hh>
++#include <click/glue.hh>
++CLICK_DECLS
++
++class EtherAddress { public:
++  
++    inline EtherAddress();
++    explicit EtherAddress(const unsigned char *data);
++
++    typedef bool (EtherAddress::*unspecified_bool_type)() const;
++    inline operator unspecified_bool_type() const;
++    inline bool is_group() const;
++    
++    inline unsigned char *data();
++    inline const unsigned char *data() const;
++    inline const uint16_t *sdata() const;
++
++    inline size_t hashcode() const;
++    
++    // bool operator==(EtherAddress, EtherAddress);
++    // bool operator!=(EtherAddress, EtherAddress);
++
++    String unparse() const;
++
++    inline operator String() const;
++    inline String s() const;
++  
++ private:
++  
++    uint16_t _data[3];
++  
++};
++
++/** @brief Constructs an EtherAddress equal to 00:00:00:00:00:00. */
++inline
++EtherAddress::EtherAddress()
++{
++    _data[0] = _data[1] = _data[2] = 0;
++}
++
++/** @brief Constructs an EtherAddress from data.
++    @param data the address data, in network byte order
++
++    The bytes data[0]...data[5] are used to construct the address. */
++inline
++EtherAddress::EtherAddress(const unsigned char *data)
++{
++    memcpy(_data, data, 6);
++}
++
++/** @brief Returns true iff the address is not 00:00:00:00:00:00. */
++inline
++EtherAddress::operator unspecified_bool_type() const
++{
++    return _data[0] || _data[1] || _data[2] ? &EtherAddress::is_group : 0;
++}
++
++/** @brief Returns true iff this address is a group address.
++
++    Group addresses have the low-order bit of the first byte set to 1, as in
++    01:00:00:00:00:00. */
++inline bool
++EtherAddress::is_group() const
++{
++    return data()[0] & 1;
++}
++
++/** @brief Returns a pointer to the address data. */
++inline const unsigned char *
++EtherAddress::data() const
++{
++    return reinterpret_cast<const unsigned char *>(_data);
++}
++
++/** @brief Returns a pointer to the address data. */
++inline unsigned char *
++EtherAddress::data()
++{
++    return reinterpret_cast<unsigned char *>(_data);
++}
++
++/** @brief Returns a pointer to the address data, as an array of uint16_ts. */
++inline const uint16_t *
++EtherAddress::sdata() const
++{
++    return _data;
++}
++
++/** @brief Unparses this address into a colon-separated hex String.
++    @sa unparse */
++inline
++EtherAddress::operator String() const
++{
++    return unparse();
++}
++
++/** @brief Unparses this address into a colon-separated hex String.
++    @sa unparse */
++inline String
++EtherAddress::s() const
++{
++    return unparse();
++}
++
++/** @relates EtherAddress
++    @brief Compares two EtherAddress objects for equality. */
++inline bool
++operator==(const EtherAddress &a, const EtherAddress &b)
++{
++    return (a.sdata()[0] == b.sdata()[0]
++          && a.sdata()[1] == b.sdata()[1]
++          && a.sdata()[2] == b.sdata()[2]);
++}
++
++/** @relates EtherAddress
++    @brief Compares two EtherAddress objects for inequality. */
++inline bool
++operator!=(const EtherAddress &a, const EtherAddress &b)
++{
++    return !(a == b);
++}
++
++class StringAccum;
++StringAccum &operator<<(StringAccum &, const EtherAddress &);
++
++inline size_t
++EtherAddress::hashcode() const
++{
++    const uint16_t *d = sdata();
++    return (d[2] | (d[1] << 16)) ^ (d[0] << 9);
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/ewma.hh click-1.6.0-27/inst/include/click/ewma.hh
+--- click-1.6.0/inst/include/click/ewma.hh     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/ewma.hh  2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,488 @@
++#ifndef CLICK_EWMA_HH
++#define CLICK_EWMA_HH
++#include <click/glue.hh>
++#include <click/confparse.hh>
++CLICK_DECLS
++
++/** @file <click/ewma.hh>
++ *  @brief  Click's classes for supporting exponentially weighted moving
++ *  averages.
++ */
++
++/** @class DirectEWMAX include/click/ewma.hh <click/ewma.hh>
++ *  @brief  An exponentially weighted moving average.
++ *
++ *  The DirectEWMAX template class represents a simple exponentially weighted
++ *  moving average.  The average starts out with value 0.  The update()
++ *  function adds a new observation to the average.
++ *
++ *  The template parameter P defines three EWMA parameters: value type,
++ *  stability shift, and scale factor.
++ *
++ *  The value type is simply the unsigned integral type used to store the
++ *  average.  It is also the type of each observation.  <code>unsigned</code>
++ *  and <code>uint64_t</code> are examples.
++ *
++ *  The stability shift specifies alpha, the stability parameter.  Concretely,
++ *  alpha = 1. / (2 ** stability_shift).  Thus, a stability shift of 4
++ *  corresponds to an alpha of 1/16.
++ *
++ *  The scaling factor specifies how many bits of fraction are kept per
++ *  observation.  Fraction bits are necessary to account for small differences
++ *  between observations.  For example, consider a EWMA with value 0, alpha
++ *  1/16, and 0 bits of fraction.  Assume the EWMA begins to observe a stream
++ *  of observations equal to 1.  Despite these observations, the EWMA's value
++ *  will never change from 0, since the 1/16 alpha factor rounds the new
++ *  observations down to 0.  At least 4 bits of fraction are required to
++ *  account for this difference.  There is a tradeoff: the more bits of
++ *  fraction, the more precise the EWMA, but the less bits available to
++ *  account for large values.
++ *
++ *  These EWMA parameters are defined by five of P's members, two typedefs and
++ *  three possibly static member functions.
++ *
++ *  <dl>
++ *  <dt><strong>P::value_type</strong></dt>
++ *  <dd>The EWMA's value type.  Example: <code>unsigned</code>.</dd>
++ *
++ *  <dt><strong>P::signed_value_type</strong></dt>
++ *  <dd>The signed version of <code>P::value_type</code>.  Used internally.
++ *  Example: <code>int</code>.</dd>
++ *
++ *  <dt><strong>unsigned P::stability_shift()</strong></dt>
++ *  <dd>This function should return this EWMA's stability shift
++ *  (see below).</dd>
++ *
++ *  <dt><strong>unsigned P::scale()</strong></dt>
++ *  <dd>This function should return this EWMA's scaling factor
++ *  (see below).</dd>
++ *
++ *  <dt><strong>unsigned P::compensation()</strong></dt>
++ *  <dd>This function should return this EWMA's stability compensation,
++ *  which normally equals 1 @<@< (stability_shift - 1).</dd>
++ *  </dl>
++ *
++ *  Since DirectEWMAX inherits from an object of type P, these members are
++ *  also directly available to callers.
++ *
++ *  The FixedEWMAXParameters and StabilityEWMAXParameters types are good
++ *  template arguments for DirectEWMAX.
++ *
++ *  @sa RateEWMAX
++ */
++template <typename P>
++class DirectEWMAX : public P { public:
++
++    typedef typename P::value_type value_type;
++    
++    /** @brief  Create a EWMA with initial value 0. */
++    DirectEWMAX()
++      : _avg(0) {
++    }
++
++    /** @brief  Return the current scaled moving average.
++     *  @note   The returned value has scale() bits of fraction. */
++    value_type scaled_average() const {
++      return _avg;
++    }
++
++    /** @brief  Return the current moving average.
++     *  @note   The returned value is unscaled. */
++    value_type unscaled_average() const {
++      return (_avg + P::compensation()) >> P::scale();
++    }
++
++    /** @brief  Reset the EWMA to value 0. */
++    void clear() {
++      _avg = 0;
++    }
++
++    /** @brief  Update the moving average with a new observation.
++     *  @param  value  the observation (unscaled) */
++    inline void update(value_type value);
++
++    /** @brief  Update the moving average with @a count identical observations.
++     *  @param  value  the observation (unscaled)
++     *  @param  count  number of observations
++     *  @note   This may be faster than calling update(@a value) @a count
++     *  times. */
++    void update_n(value_type value, unsigned count);
++
++    /** @brief  Unparse the current average into a String.
++     *  @note   The returned value is unscaled, but may contain a fractional
++     *  part. */
++    String unparse() const;
++
++    /** @brief  Update the moving average with a new observation (deprecated).
++     *  @param  value  the observation (unscaled)
++     *  @deprecated  Use update() instead. */
++    inline void update_with(value_type value) CLICK_DEPRECATED {
++      update(value);
++    }
++
++  private:
++  
++    value_type _avg;
++  
++};
++
++template <typename P>
++inline void
++DirectEWMAX<P>::update(value_type val)
++{
++    value_type val_scaled = (val << P::scale()) + P::compensation();
++    unsigned stability = P::stability_shift();
++#if HAVE_ARITHMETIC_RIGHT_SHIFT
++    _avg += static_cast<typename P::signed_value_type>(val_scaled - _avg) >> stability;
++#else
++    if (val_scaled < _avg)
++      _avg -= (_avg - val_scaled) >> stability;
++    else
++      _avg += (val_scaled - _avg) >> stability;
++#endif
++}
++
++template <typename P>
++void
++DirectEWMAX<P>::update_n(value_type value, unsigned count)
++{
++    // XXX use table lookup
++    value_type val_scaled = value << P::scale();
++    if (count >= 100)
++      _avg = val_scaled;
++    else {
++      val_scaled += P::compensation();
++      unsigned stability = P::stability_shift();
++#if HAVE_ARITHMETIC_RIGHT_SHIFT
++      for (; count > 0; count--)
++          _avg += static_cast<typename P::signed_value_type>(val_scaled - _avg) >> stability;
++#else
++      if (val_scaled < _avg)
++          for (; count > 0; count--)
++              _avg -= (_avg - val_scaled) >> stability;
++      else
++          for (; count > 0; count--)
++              _avg += (val_scaled - _avg) >> stability;
++#endif
++    }
++}
++
++template <typename P>
++inline String
++DirectEWMAX<P>::unparse() const
++{
++    return cp_unparse_real2(scaled_average(), P::scale());
++}
++
++/** @class FixedEWMAXParameters include/click/ewma.hh <click/ewma.hh>
++ *  @brief  Parameters for a EWMA with constant scaling factor and stability
++ *  shift.
++ *
++ *  The FixedEWMAXParameters template class is used as a template argument to
++ *  DirectEWMAX.  It defines a EWMA with fixed constant scaling factor and
++ *  stability shift.  FixedEWMAXParameters's first template argument is the
++ *  EWMA's stability shift, its second template argument is the EWMA's scaling
++ *  factor, its third template argument is the EWMA's value type, and the
++ *  fourth template argument is the EWMA's signed value type.
++ *
++ *  Example 1: <code>DirectEWMAX@<FixedEWMAXParameters@<4, 10, unsigned, int@>
++ *  @></code> defines a EWMA with alpha 1/16 (stability shift 4), scaling
++ *  factor 10, and value type unsigned.  (These are the default parameters
++ *  available in the DirectEWMA typedef.)
++ *
++ *  Example 2: <code>DirectEWMAX@<FixedEWMAXParameters@<3, 10, uint64_t,
++ *  int64_t@> @></code> defines a EWMA with alpha 1/8 (stability shift 3),
++ *  scaling factor 10, and value type uint64_t.
++ */
++template <unsigned STABILITY, unsigned SCALE, typename T = unsigned, typename U = int>
++class FixedEWMAXParameters { public:
++
++    typedef T value_type;
++    typedef U signed_value_type;
++
++    /** @brief  Returns this EWMA's stability shift.
++     *  @return  the 1st template parameter */
++    static unsigned stability_shift() {
++      return STABILITY;
++    }
++
++    /** @brief  Returns this EWMA's scaling factor (bits of fraction).
++     *  @return  the 2nd template parameter */
++    static unsigned scale() {
++      return SCALE;
++    }
++
++    /** @brief  Returns this EWMA's compensation.
++     *  @return  1 << (stability_shift() - 1) */
++    static unsigned compensation() {
++      return 1 << (STABILITY - 1);
++    }
++    
++};
++
++/** @brief A DirectEWMAX with stability shift 4 (alpha 1/16), scaling factor
++ *  10 (10 bits of fraction), and underlying type <code>unsigned</code>. */
++typedef DirectEWMAX<FixedEWMAXParameters<4, 10> > DirectEWMA;
++
++/** @brief A DirectEWMAX with stability shift 3 (alpha 1/8), scaling factor
++ *  10 (10 bits of fraction), and underlying type <code>unsigned</code>. */
++typedef DirectEWMAX<FixedEWMAXParameters<3, 10> > FastDirectEWMA;
++
++
++/** @class StabilityEWMAXParameters include/click/ewma.hh <click/ewma.hh>
++ *  @brief  Parameters for a EWMA with constant scaling factor
++ *        and user-settable alpha.
++ *
++ *  The StabilityEWMAXParameters template class is used as a template argument
++ *  to DirectEWMAX.  It defines a EWMA with fixed constant scaling factor.
++ *  StabilityEWMAXParameters's first template argument is the EWMA's scaling
++ *  factor, its second template argument is the EWMA's value type, and the
++ *  third template argument is the EWMA's signed value type.
++ *
++ *  Example: <code>DirectEWMAX@<StabilityEWMAXParameters@<10, unsigned, int@>
++ *  @></code> defines a EWMA with user-settable alpha (stability shift)
++ *  initially equal to 1/16, scaling factor 10, and value type unsigned.
++ *
++ *  A <code>DirectEWMAX@<StabilityEWMAXParameters@<...@> @></code> object has
++ *  stability_shift() and set_stability_shift() methods.
++ */
++template <unsigned SCALE, typename T = unsigned, typename U = int>
++class StabilityEWMAXParameters { public:
++
++    typedef T value_type;
++    typedef U signed_value_type;
++
++    /** @brief  Create a StabilityEWMAXParameters with initial alpha 1/16. */
++    StabilityEWMAXParameters()
++      : _stability(4) {
++    }
++
++    /** @brief  Return the current stability shift.
++     *
++     *  The current alpha equals 1. / (2 ** stability_shift()). */
++    unsigned stability_shift() const {
++      return _stability;
++    }
++
++    /** @brief  Set the current stability shift.
++     *  @param  stability_shift  new value */
++    void set_stability_shift(unsigned stability_shift) {
++      _stability = stability_shift;
++    }
++    
++    /** @brief  Returns this EWMA's scaling factor (bits of fraction).
++     *  @return  the 1st template parameter */
++    static unsigned scale() {
++      return SCALE;
++    }
++
++    /** @brief  Returns this EWMA's compensation.
++     *  @return  1 << (stability_shift() - 1) */
++    unsigned compensation() const {
++      return 1 << (stability_shift() - 1);
++    }
++
++  private:
++
++    unsigned _stability;
++    
++};
++
++
++
++/** @class RateEWMAX include/click/ewma.hh <click/ewma.hh>
++ *  @brief  An exponentially weighted moving average used to measure a rate.
++ *
++ *  The RateEWMAX template class represents an exponentially weighted moving
++ *  average that measures a <em>rate</em>: a value that changes over time.
++ *  The average starts out with value 0.
++ *
++ *  RateEWMAX adds to DirectEWMAX a concept of epochs, which are periods of
++ *  time.  A RateEWMAX object collects samples over the current epoch.  When
++ *  the epoch closes, the collected sample count is used to update the moving
++ *  average.  Thus, the moving average is measured in samples per epoch.  The
++ *  rate() and unparse_rate() member functions return the rate in samples per
++ *  <em>second</em>, rather than per epoch.
++ *
++ *  Note that it often makes sense to call update() before calling
++ *  scaled_average(), rate(), or unparse_rate(), in case an epoch or two has
++ *  passed and the average should take account of passing time.
++ *
++ *  The template parameter P defines the EWMA parameters required by
++ *  DirectEWMAX, and three others: a rate count, an epoch measurement, and an
++ *  epoch frequency.
++ *
++ *  The rate count is the number of rates measured per object.  Usually it is
++ *  1.
++ *
++ *  The epoch measurement is a function that returns the current epoch as an
++ *  unsigned number.  Epochs should increase monotonically.
++ *
++ *  The epoch frequency is the number of epochs per second, and is only used
++ *  by rate() and unparse_rate().
++ *
++ *  These are defined by:
++ *
++ *  <dl>
++ *  <dt><strong>P::rate_count</strong></dt>
++ *  <dd>The rate count, as a static constant (for example, defined by an
++ *  enum).</dd>
++ *
++ *  <dt><strong>unsigned P::epoch()</strong></dt>
++ *  <dd>This function returns the current epoch number.</dd>
++ *
++ *  <dt><strong>unsigned P::epoch_frequency()</strong></dt>
++ *  <dd>This function returns the number of epochs per second.</dd>
++ *  </dl>
++ *
++ *  Since RateEWMAX inherits from an object of type P, these members are
++ *  also directly available to callers.
++ *
++ *  The RateEWMAXParameters type is a good template argument for DirectEWMAX.
++ *
++ *  @sa RateEWMAX
++ */
++template <typename P>
++class RateEWMAX : public P { public:
++
++    typedef typename P::value_type value_type;
++    typedef typename P::signed_value_type signed_value_type;
++
++    /** @brief  Create a rate EWMA with initial value(s) 0. */
++    RateEWMAX() {
++      _current_epoch = P::epoch();
++      for (unsigned i = 0; i < P::rate_count; i++)
++          _current[i] = 0;
++    }
++
++    /** @brief  Return the current scaled moving average.
++     *  @param  ratenum  rate index (0 <= ratenum < rate_count)
++     *  @note   The returned value has scale() bits of fraction.
++     *  @note   scaled_average() does not check the current epoch.
++     *                If an epoch might have passed since the last update(), you
++     *                should call update(0, @a ratenum) before calling this
++     *                function. */
++    signed_value_type scaled_average(unsigned ratenum = 0) const {
++      // note: return type must be signed!
++      return _avg[ratenum].scaled_average();
++    }
++    
++    /** @brief  Return the current rate in samples per second.
++     *  @param  ratenum  rate index (0 <= ratenum < rate_count)
++     *  @note   The returned value is unscaled.
++     *  @note   rate() does not check the current epoch.
++     *                If an epoch might have passed since the last update(), you
++     *                should call update(0, @a ratenum) before calling this
++     *                function. */
++    inline int rate(unsigned ratenum = 0) const;
++ 
++    /** @brief  Update the sample count for the current epoch.
++     *  @param  delta    increment for current epoch sample count
++     *  @param  ratenum  rate index (0 <= ratenum < rate_count)
++     *  @note   If the epoch has changed since the last update(),
++     *                this function applies the last epoch's sample count (if any)
++     *                to the relevant moving average, accounts for any passage of
++     *                time (in case one or more epochs have passed with no samples),
++     *                and clears the sample count for the new epoch. */
++    inline void update(signed_value_type delta, unsigned ratenum = 0);
++
++    /** @brief  Unparse the current average into a String.
++     *  @param  ratenum  rate index (0 <= ratenum < rate_count)
++     *  @note   The returned value is unscaled, but may contain a fractional
++     *  part.
++     *  @note   unparse_rate() does not check the current epoch.
++     *                If an epoch might have passed since the last update(), you
++     *                should call update(0, @a ratenum) before calling this
++     *                function. */
++    String unparse_rate(unsigned ratenum = 0) const;
++  
++  private:
++  
++    unsigned _current_epoch;
++    value_type _current[P::rate_count];
++    DirectEWMAX<P> _avg[P::rate_count];
++  
++    inline void update_time(unsigned now);
++    
++};
++
++/** @class RateEWMAXParameters include/click/ewma.hh <click/ewma.hh>
++ *  @brief  Parameters for a RateEWMA with constant scaling factor
++ *        and alpha, one rate count, and epochs of jiffies.
++ *
++ *  The RateEWMAXParameters template class is used as a template argument
++ *  to RateEWMAX.  It defines a EWMA with fixed constant scaling factor and
++ *  alpha and one rate count.  The EWMA uses jiffies as epochs.  Template
++ *  parameters are as for DirectEWMAXParameters.
++ *
++ *  Example: <code>RateEWMAX@<RateEWMAXParameters@<4, 10, unsigned, int@>
++ *  @></code> defines a rate EWMA with user-settable alpha (stability shift)
++ *  initially equal to 1/16, scaling factor 10, and value type unsigned.
++ */
++template <unsigned STABILITY, unsigned SCALE, typename T = unsigned, typename U = int>
++class RateEWMAXParameters : public FixedEWMAXParameters<STABILITY, SCALE, T, U> { public:
++    enum {
++      rate_count = 1
++    };
++
++    /** @brief  Return the current epoch number.
++     *  @note   RateEWMAXParameters measures epochs in jiffies. */
++    static unsigned epoch() {
++      return click_jiffies();
++    }
++
++    /** @brief  Return the number of epochs (jiffies) per second. */
++    static unsigned epoch_frequency() {
++      return CLICK_HZ;
++    }
++};
++
++/** @brief A RateEWMAX with stability shift 4 (alpha 1/16), scaling factor 10
++ *  (10 bits of fraction), one rate, and underlying type <code>unsigned</code>
++ *  that measures epochs in jiffies. */
++typedef RateEWMAX<RateEWMAXParameters<4, 10> > RateEWMA;
++
++
++template <typename P>
++inline void
++RateEWMAX<P>::update_time(unsigned now)
++{
++    unsigned jj = _current_epoch;
++    if (now != jj) {
++      for (unsigned i = 0; i < P::rate_count; i++) {
++          // adjust the average rate using the last measured packets
++          _avg[i].update(_current[i]);
++
++          // adjust for time w/ no packets
++          if (jj + 1 != now)
++              _avg[i].update_n(0, now - jj - 1);
++          _current[i] = 0;
++      }
++      _current_epoch = now;
++    }
++}
++
++template <typename P>
++inline void
++RateEWMAX<P>::update(signed_value_type delta, unsigned ratenum)
++{
++    update_time(P::epoch());
++    _current[ratenum] += delta;
++}
++
++template <typename P>
++inline int
++RateEWMAX<P>::rate(unsigned ratenum) const
++{
++    return (scaled_average(ratenum) * P::epoch_frequency()) >> _avg[ratenum].scale();
++}
++
++template <typename P>
++inline String
++RateEWMAX<P>::unparse_rate(unsigned ratenum) const
++{
++    return cp_unparse_real2(scaled_average(ratenum) * P::epoch_frequency(), _avg[ratenum].scale());
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/fixconfig.h click-1.6.0-27/inst/include/click/fixconfig.h
+--- click-1.6.0/inst/include/click/fixconfig.h 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/fixconfig.h      2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,13 @@
++#ifndef CLICK_FIXCONFIG_H
++#define CLICK_FIXCONFIG_H 1
++
++#if CLICK_LINUXMODULE && HAVE_LINUX_ASM_ALTERNATIVE_H
++// The .smp_locks section and C++-style weak linkage interact badly.
++# if CONFIG_SMP && (defined(__i386__) || defined(__x86_64__))
++#  include <asm/alternative.h>
++#  undef LOCK_PREFIX
++#  define LOCK_PREFIX "lock ; "
++# endif
++#endif
++
++#endif
+diff -Nurb click-1.6.0/inst/include/click/gaprate.hh click-1.6.0-27/inst/include/click/gaprate.hh
+--- click-1.6.0/inst/include/click/gaprate.hh  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/gaprate.hh       2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,96 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/gaprate.cc" -*-
++#ifndef CLICK_GAPRATE_HH
++#define CLICK_GAPRATE_HH
++#include <click/timestamp.hh>
++CLICK_DECLS
++class ErrorHandler;
++
++class GapRate { public:
++
++    inline GapRate();
++    inline GapRate(unsigned);
++
++    unsigned rate() const                     { return _rate; }
++  
++    inline void set_rate(unsigned);
++    void set_rate(unsigned, ErrorHandler *);
++    inline void reset();
++
++    inline bool need_update(const Timestamp &);
++    void update()                             { _sec_count++; }
++    void update_with(int incr)                        { _sec_count += incr; }
++
++    enum { UGAP_SHIFT = 12 };
++    enum { MAX_RATE = 1000000U << UGAP_SHIFT };
++
++  private:
++  
++    unsigned _ugap;
++    int _sec_count;
++    long _tv_sec;
++    unsigned _rate;
++#if DEBUG_GAPRATE
++    Timestamp _last;
++#endif
++
++};
++
++inline void
++GapRate::reset()
++{
++    _tv_sec = -1;
++#if DEBUG_GAPRATE
++    _last.set_sec(0);
++#endif
++}
++
++inline void
++GapRate::set_rate(unsigned rate)
++{
++    if (rate > MAX_RATE)
++      rate = MAX_RATE;
++    _rate = rate;
++    _ugap = (rate == 0 ? MAX_RATE + 1 : MAX_RATE / rate);
++#if DEBUG_GAPRATE
++    click_chatter("ugap: %u", _ugap);
++#endif
++    reset();
++}
++
++inline
++GapRate::GapRate()
++{
++    set_rate(0);
++}
++
++inline
++GapRate::GapRate(unsigned rate)
++{
++    set_rate(rate);
++}
++
++inline bool
++GapRate::need_update(const Timestamp &now)
++{
++    unsigned need = (now.usec() << UGAP_SHIFT) / _ugap;
++
++    if (_tv_sec < 0) {
++      // 27.Feb.2005: often OK to send a packet after reset unless rate is
++      // 0 -- requested by Bart Braem
++      // check include/click/gaprate.hh (1.2)
++      _tv_sec = now.sec();
++      _sec_count = need + ((now.usec() << UGAP_SHIFT) - (need * _ugap) > _ugap / 2);
++    } else if (now.sec() > _tv_sec) {
++      _tv_sec = now.sec();
++      if (_sec_count > 0)
++          _sec_count -= _rate;
++    }
++
++#if DEBUG_GAPRATE
++    click_chatter("%{timestamp} -> %u @ %u [%d]", &now, need, _sec_count, (int)need >= _sec_count);
++#endif
++    return ((int)need >= _sec_count);
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/glue.hh click-1.6.0-27/inst/include/click/glue.hh
+--- click-1.6.0/inst/include/click/glue.hh     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/glue.hh  2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,420 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/glue.cc" -*-
++#ifndef CLICK_GLUE_HH
++#define CLICK_GLUE_HH
++// Removes many common #include <header>s and abstracts differences between
++// kernel and user space, and between operating systems.
++
++// HEADERS
++
++#if CLICK_LINUXMODULE
++
++# define _LOOSE_KERNEL_NAMES 1 /* define ino_t, off_t, etc. */
++# undef __KERNEL_STRICT_NAMES
++# ifndef __OPTIMIZE__
++#  define __OPTIMIZE__ 1 /* get ntohl() macros. otherwise undefined. */
++# endif
++# include <click/cxxprotect.h>
++CLICK_CXX_PROTECT
++# ifdef WANT_MOD_USE_COUNT
++#  define __NO_VERSION__
++#  include <linux/module.h>
++#  define HAVE_MOD_USE_COUNT 1
++# endif
++# include <linux/kernel.h>
++# include <linux/version.h>
++# include <linux/string.h>
++# include <linux/skbuff.h>
++# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
++#  include <linux/malloc.h>
++#  include <linux/vmalloc.h>
++#  include <linux/interrupt.h>
++# else
++#  include <linux/hardirq.h>
++# endif
++# include <linux/ctype.h>
++# include <linux/time.h>
++# include <linux/errno.h>
++CLICK_CXX_UNPROTECT
++# include <click/cxxunprotect.h>
++
++#elif CLICK_BSDMODULE
++
++# include <click/cxxprotect.h>
++CLICK_CXX_PROTECT
++# include <sys/ctype.h>
++# include <sys/systm.h>
++# include <sys/time.h>
++# include <sys/param.h>
++# include <sys/kernel.h>
++# include <sys/mbuf.h>
++# include <sys/malloc.h>
++# include <sys/libkern.h>
++# include <sys/proc.h>
++# include <sys/sysproto.h>
++CLICK_CXX_UNPROTECT
++# include <click/cxxunprotect.h>
++
++#else /* CLICK_USERLEVEL */
++
++# include <stdio.h>
++# include <stdlib.h>
++# include <string.h>
++# include <ctype.h>
++# include <errno.h>
++# include <limits.h>
++# include <sys/socket.h>
++# include <netinet/in.h>
++# include <sys/time.h>
++# ifdef CLICK_NS
++extern "C" int simclick_gettimeofday(struct timeval *);
++# endif
++
++#endif
++
++
++// DEBUGGING OUTPUT
++extern "C" {
++void click_chatter(const char *fmt, ...);
++}
++
++
++// DEBUG MALLOC
++
++#if CLICK_DMALLOC && (CLICK_LINUXMODULE || CLICK_BSDMODULE)
++extern uint32_t click_dmalloc_where;
++# define CLICK_DMALLOC_REG(s) do { const unsigned char *__str = reinterpret_cast<const unsigned char *>(s); click_dmalloc_where = (__str[0]<<24) | (__str[1]<<16) | (__str[2]<<8) | __str[3]; } while (0)
++#else
++# define CLICK_DMALLOC_REG(s)
++#endif
++
++
++// LALLOC
++
++#if CLICK_LINUXMODULE
++# define CLICK_LALLOC(size)   (click_lalloc((size)))
++# define CLICK_LFREE(p, size) (click_lfree((p), (size)))
++extern "C" {
++void *click_lalloc(size_t size);
++void click_lfree(volatile void *p, size_t size);
++}
++#else
++# define CLICK_LALLOC(size)   ((void *)(new uint8_t[(size)]))
++# define CLICK_LFREE(p, size) delete[] ((uint8_t *)(p))
++#endif
++
++
++// RANDOMNESS
++
++CLICK_DECLS
++extern void click_random_srandom(); // srand(), but use true randomness
++CLICK_ENDDECLS
++
++#if CLICK_LINUXMODULE
++extern "C" {
++extern uint32_t click_random_seed;
++extern void srandom(uint32_t);
++#define       RAND_MAX        2147483647
++inline uint32_t
++random()
++{
++    click_random_seed = click_random_seed*69069L + 1;
++    return (click_random_seed ^ jiffies) & RAND_MAX;
++}
++}
++#endif
++
++
++// SORTING
++
++int click_qsort(void *base, size_t n, size_t size, int (*compar)(const void *, const void *, void *), void *thunk);
++int click_qsort(void *base, size_t n, size_t size, int (*compar)(const void *, const void *));
++
++
++// OTHER
++
++#if CLICK_LINUXMODULE
++
++// current processor
++# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
++#  define click_current_processor()   (current_thread_info()->cpu)
++# else
++#  define click_current_processor()   (current->processor)
++# endif
++
++// provide a definition for net_device for kernel compatibility
++# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 0)
++typedef struct device net_device;
++#  define dev_get_by_name dev_get
++# endif
++
++extern "C" {
++
++long strtol(const char *, char **, int);
++
++inline unsigned long
++strtoul(const char *nptr, char **endptr, int base)
++{
++    return simple_strtoul(nptr, endptr, base);
++}
++
++# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) && __GNUC__ == 2 && __GNUC_MINOR__ == 96
++int click_strcmp(const char *, const char *);
++
++inline int
++strcmp(const char *a, const char *b)
++{
++    return click_strcmp(a, b);
++}
++# endif
++
++}
++
++#elif CLICK_BSDMODULE
++
++/* Char-type glue */
++
++# define _U   0x01    /* upper */
++# define _L   0x02    /* lower */
++# define _D   0x04    /* digit */
++# define _C   0x08    /* cntrl */
++# define _P   0x10    /* punct */
++# define _S   0x20    /* white space (space/lf/tab) */
++# define _X   0x40    /* hex digit */
++# define _SP  0x80    /* hard space (0x20) */
++
++extern unsigned char _ctype[];
++
++# define __ismask(x)  (_ctype[(int)(unsigned char)(x)])
++# define isalnum(c)   ((__ismask(c)&(_U|_L|_D)) != 0)
++
++# define strchr(s, c) index(s, c)
++
++# define memmove(dst, src, len)               bcopy((src), (dst), (len))
++
++typedef struct ifnet net_device;
++
++#else /* not CLICK_LINUXMODULE || CLICK_BSDMODULE */
++
++// provide a definition for net_device
++typedef struct device net_device;
++
++#endif /* CLICK_LINUXMODULE */
++
++
++// COMPILE-TIME ASSERTION CHECKING
++
++#define static_assert(c) switch (c) case 0: case (c):
++
++
++// TIMEVALS AND JIFFIES
++
++#if CLICK_LINUXMODULE
++# define click_gettimeofday(tvp)      (do_gettimeofday(tvp))
++# define click_jiffies()              ((unsigned)jiffies)
++# define CLICK_HZ                     HZ
++#elif CLICK_BSDMODULE
++# define click_gettimeofday(tvp)      (getmicrotime(tvp))
++# define click_jiffies()              ((unsigned)ticks)
++# define CLICK_HZ                     hz
++#else
++#ifndef CLICK_NS
++# define click_gettimeofday(tvp)      (gettimeofday(tvp, (struct timezone *)0))
++#else
++# define click_gettimeofday(tvp)      (simclick_gettimeofday(tvp))
++#endif
++CLICK_DECLS
++unsigned click_jiffies();
++CLICK_ENDDECLS
++# define CLICK_HZ                     100
++#endif
++
++
++// TIMEVAL OPERATIONS
++
++#ifndef timercmp
++// Convenience macros for operations on timevals.
++// NOTE: 'timercmp' does not work for >= or <=.
++# define timerisset(tvp)      ((tvp)->tv_sec || (tvp)->tv_usec)
++# define timerclear(tvp)      ((tvp)->tv_sec = (tvp)->tv_usec = 0)
++# define timercmp(a, b, CMP)                  \
++  (((a)->tv_sec == (b)->tv_sec) ?             \
++   ((a)->tv_usec CMP (b)->tv_usec) :          \
++   ((a)->tv_sec CMP (b)->tv_sec))
++#endif
++#ifndef timeradd
++# define timeradd(a, b, result)                                                     \
++  do {                                                                              \
++    (result)->tv_sec = (a)->tv_sec + (b)->tv_sec;                           \
++    (result)->tv_usec = (a)->tv_usec + (b)->tv_usec;                        \
++    if ((result)->tv_usec >= 1000000)                                       \
++      {                                                                             \
++      ++(result)->tv_sec;                                                   \
++      (result)->tv_usec -= 1000000;                                         \
++      }                                                                             \
++  } while (0)
++#endif
++#ifndef timersub
++# define timersub(a, b, result)                                                     \
++  do {                                                                              \
++    (result)->tv_sec = (a)->tv_sec - (b)->tv_sec;                           \
++    (result)->tv_usec = (a)->tv_usec - (b)->tv_usec;                        \
++    if ((result)->tv_usec < 0) {                                            \
++      --(result)->tv_sec;                                                   \
++      (result)->tv_usec += 1000000;                                         \
++    }                                                                       \
++  } while (0)
++#endif
++
++#ifndef CLICK_TIMEVAL_OPERATORS
++
++inline struct timeval
++make_timeval(int sec, int usec)
++{
++    struct timeval tv;
++    tv.tv_sec = sec;
++    tv.tv_usec = usec;
++    return tv;
++}
++
++inline bool
++operator==(const struct timeval &a, const struct timeval &b)
++{
++    return a.tv_sec == b.tv_sec && a.tv_usec == b.tv_usec;
++}
++
++inline bool
++operator!=(const struct timeval &a, const struct timeval &b)
++{
++    return a.tv_sec != b.tv_sec || a.tv_usec != b.tv_usec;
++}
++
++inline bool
++operator<(const struct timeval &a, const struct timeval &b)
++{
++    return a.tv_sec < b.tv_sec || (a.tv_sec == b.tv_sec && a.tv_usec < b.tv_usec);
++}
++
++inline bool
++operator<=(const struct timeval &a, const struct timeval &b)
++{
++    return a.tv_sec < b.tv_sec || (a.tv_sec == b.tv_sec && a.tv_usec <= b.tv_usec);
++}
++
++inline bool
++operator>=(const struct timeval &a, const struct timeval &b)
++{
++    return a.tv_sec > b.tv_sec || (a.tv_sec == b.tv_sec && a.tv_usec >= b.tv_usec);
++}
++
++inline bool
++operator>(const struct timeval &a, const struct timeval &b)
++{
++    return a.tv_sec > b.tv_sec || (a.tv_sec == b.tv_sec && a.tv_usec > b.tv_usec);
++}
++
++inline struct timeval &
++operator+=(struct timeval &a, const struct timeval &b)
++{
++    a.tv_sec += b.tv_sec;
++    a.tv_usec += b.tv_usec;
++    if (a.tv_usec >= 1000000) {
++      a.tv_sec++;
++      a.tv_usec -= 1000000;
++    }
++    return a;
++}
++
++inline struct timeval &
++operator-=(struct timeval &a, const struct timeval &b)
++{
++    a.tv_sec -= b.tv_sec;
++    a.tv_usec -= b.tv_usec;
++    if (a.tv_usec < 0) {
++      a.tv_sec--;
++      a.tv_usec += 1000000;
++    }
++    return a;
++}
++
++inline struct timeval
++operator+(struct timeval a, const struct timeval &b)
++{
++    a += b;
++    return a;
++}
++
++inline struct timeval
++operator-(struct timeval a, const struct timeval &b)
++{
++    a -= b;
++    return a;
++}
++
++#endif
++
++CLICK_DECLS
++class StringAccum;
++StringAccum &operator<<(StringAccum &, const struct timeval &);
++CLICK_ENDDECLS
++
++
++// BYTE ORDER
++
++#if CLICK_BYTE_ORDER == CLICK_LITTLE_ENDIAN
++# define le16_to_cpu(x) (x)
++# define cpu_to_le16(x) (x)
++# define le32_to_cpu(x) (x)
++# define cpu_to_le32(x) (x)
++#elif CLICK_BYTE_ORDER == CLICK_BIG_ENDIAN && defined(__APPLE__)
++# include <machine/byte_order.h>
++# define le16_to_cpu(x) NXSwapShort((x))
++# define cpu_to_le16(x) NXSwapShort((x))
++# define le32_to_cpu(x) NXSwapInt((x))
++# define cpu_to_le32(x) NXSwapInt((x))
++#elif CLICK_BYTE_ORDER == CLICK_BIG_ENDIAN && HAVE_BYTESWAP_H
++# include <byteswap.h>
++# define le16_to_cpu(x) bswap_16((x))
++# define cpu_to_le16(x) bswap_16((x))
++# define le32_to_cpu(x) bswap_32((x))
++# define cpu_to_le32(x) bswap_32((x))
++#else
++/* leave them undefined */
++#endif
++
++
++// CYCLE COUNTS
++
++CLICK_DECLS
++
++#if HAVE_INT64_TYPES
++typedef uint64_t click_cycles_t;
++#else
++typedef uint32_t click_cycles_t;
++#endif
++
++inline click_cycles_t
++click_get_cycles()
++{
++#if CLICK_LINUXMODULE && HAVE_INT64_TYPES && __i386__
++    uint64_t x;
++    __asm__ __volatile__ ("rdtsc" : "=A" (x));
++    return x;
++#elif CLICK_LINUXMODULE && HAVE_INT64_TYPES && __x86_64__
++    uint32_t xlo, xhi;
++    __asm__ __volatile__ ("rdtsc" : "=a" (xlo), "=d" (xhi));
++    return xlo | (((uint64_t) xhi) << 32);
++#elif CLICK_LINUXMODULE && __i386__
++    uint32_t xlo, xhi;
++    __asm__ __volatile__ ("rdtsc" : "=a" (xlo), "=d" (xhi));
++    return xhi ? 0xFFFFFFFF : xlo;
++#elif CLICK_BSDMODULE
++    return rdtsc();
++#else
++    // add other architectures here
++    return 0;
++#endif
++}
++
++CLICK_ENDDECLS
++
++#endif
+diff -Nurb click-1.6.0/inst/include/click/handlercall.hh click-1.6.0-27/inst/include/click/handlercall.hh
+--- click-1.6.0/inst/include/click/handlercall.hh      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/handlercall.hh   2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,527 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/handlercall.cc" -*-
++#ifndef CLICK_HANDLERCALL_HH
++#define CLICK_HANDLERCALL_HH
++#include <click/router.hh>
++CLICK_DECLS
++
++/** @brief  Convenience class for calling handlers.
++ *
++ *  The HandlerCall class simplifies the process of calling Click handlers.
++ *  (The lower-level interface is the Handler class.)  HandlerCall is used in
++ *  two ways: (1) to call handlers immediately via static member functions,
++ *  and (2) to set up future handler calls via HandlerCall objects.  The
++ *  immediate handler call functions take handler names as arguments and
++ *  perform all necessary error checks before calling handlers, if any.  A
++ *  HandlerCall object encapsulates a handler reference (possibly including
++ *  parameters), again automating all necessary error checks.
++ *
++ *  <h2>Immediate Handler Calls</h2>
++ *
++ *  This example code shows how to use the HandlerCall functions for calling
++ *  handlers immediately.
++ *
++ *  @code
++ *  class YourElement { ...
++ *      Element *_other;
++ *  }
++ *
++ *  void YourElement::function() {
++ *      // Call _other's "config" read handler.
++ *      String result = HandlerCall::call_read(_other, "config");
++ *
++ *      // The same, providing an error handler to print errors.
++ *      ErrorHandler *errh = ErrorHandler::default_handler();
++ *      result = HandlerCall::call_read(_other, "config", errh);
++ *      // (Each function takes an optional last argument of "errh".)
++ *
++ *      // Call the "foo.config" read handler.  Search for element "foo" in
++ *      // the current compound element context.
++ *      result = HandlerCall::call_read("foo.config", this);
++ *
++ *      // Call the global "config" read handler for the current router.
++ *      result = HandlerCall::call_read("config", this);
++ *
++ *      // Call _other's "stop" write handler with empty value.
++ *      int success = HandlerCall::call_write(_other, "stop");
++ *
++ *      // Call _other's "config" write handler with value "blah".
++ *      success = HandlerCall::call_write(_other, "config", "blah");
++ *
++ *      // Call the "foo.config" write handler with value "blah".
++ *      success = HandlerCall::call_write("foo.config blah", this);
++ *      // Or, alternately:
++ *      success = HandlerCall::call_write("foo.config", "blah", this);
++ *  }
++ *  @endcode
++ *
++ *  <h2>HandlerCall Objects</h2>
++ *
++ *  This example code shows how to use the HandlerCall objects to call
++ *  handlers with simplified error checking.
++ *
++ *  @code
++ *  class YourElement { ...
++ *      HandlerCall _read_call;
++ *      HandlerCall _write_call;
++ *  }
++ *
++ *  YourElement::YourElement()
++ *      : _read_call(), _write_call() {
++ *  }
++ *
++ *  int YourElement::configure(Vector<String> &conf, ErrorHandler *errh) {
++ *      return cp_va_parse(conf, this, errh,
++ *                         cpOptional,
++ *                         cpHandlerCallRead, "read call", &_read_call,
++ *                         cpHandlerCallWrite, "write call", &_write_call,
++ *                         cpEnd);
++ *  }
++ *
++ *  int YourElement::initialize(ErrorHandler *errh) {
++ *      if ((_read_call && _read_call.initialize_read(this, errh) < 0)
++ *          || (_write_call && _write_call.initialize_write(this, errh) < 0))
++ *          return -1;
++ *      return 0;
++ *  }
++ *
++ *  void YourElement::function() {
++ *      // call _read_call, print result
++ *      if (_read_call)
++ *          click_chatter("%s", _read_call.call_read());
++ *
++ *      // call _write_call with error handler
++ *      if (_write_call)
++ *          _write_call.call_write(ErrorHandler::default_handler());
++ *  }
++ *  @endcode
++ *
++ *  If usually your element's handler calls aren't used, you can save a small
++ *  amount of space by using pointers to HandlerCall objects, as in this
++ *  example.  The cpHandlerCallPtrRead and cpHandlerCallPtrWrite types allow
++ *  the _read_call and _write_call members to start out as null pointers.
++ *
++ *  @code
++ *  class YourElement { ...
++ *      HandlerCall *_read_call;
++ *      HandlerCall *_write_call;
++ *  }
++ *
++ *  YourElement::YourElement()
++ *      : _read_call(0), _write_call(0) {
++ *  }
++ *
++ *  int YourElement::configure(Vector<String> &conf, ErrorHandler *errh) {
++ *      return cp_va_parse(conf, this, errh,
++ *                         cpOptional,
++ *                         cpHandlerCallPtrRead, "read call", &_read_call,
++ *                         cpHandlerCallPtrWrite, "write call", &_write_call,
++ *                         cpEnd);
++ *  }
++ *
++ *  int YourElement::initialize(ErrorHandler *errh) {
++ *      if ((_read_call && _read_call->initialize_read(this, errh) < 0)
++ *          || (_write_call && _write_call->initialize_write(this, errh) < 0))
++ *          return -1;
++ *      return 0;
++ *  }
++ *
++ *  void YourElement::cleanup(CleanupStage) {
++ *      delete _read_call;
++ *      delete _write_call;
++ *  }
++ *
++ *  void YourElement::function() {
++ *      // call _read_call, print result
++ *      if (_read_call)
++ *          click_chatter("%s", _read_call->call_read());
++ *
++ *      // call _write_call with error handler
++ *      if (_write_call)
++ *          _write_call->call_write(ErrorHandler::default_handler());
++ *  }
++ *  @endcode
++ */
++class HandlerCall { public:
++
++    /** @name Immediate Handler Calls */
++    //@{
++    static String call_read(Element *e, const String &hname,
++                          ErrorHandler *errh = 0);
++    static String call_read(const String &hdesc, Element *context,
++                          ErrorHandler *errh = 0);
++    static int call_write(Element *e, const String &hname,
++                        ErrorHandler *errh = 0);
++    static int call_write(Element *e, const String &hname, const String &value,
++                        ErrorHandler *errh = 0);
++    static int call_write(const String &hdesc,
++                        Element *context, ErrorHandler *errh = 0);
++    static int call_write(const String &hdesc, const String &value,
++                        Element *context, ErrorHandler *errh = 0);
++    //@}
++
++
++    
++    /** @brief  Construct an empty HandlerCall.
++     *
++     *  Any attempt to read, write, or initialize the HandlerCall will
++     *  fail. */
++    HandlerCall()
++      : _e(0), _h(Handler::blank_handler()) {
++    }
++
++    /** @brief  Construct a HandlerCall described by @a hdesc.
++     *  @param  hdesc  handler description <tt>"[ename.]hname[ value]"</tt>
++     *
++     *  Although the resulting HandlerCall isn't empty, it must be initialized
++     *  before it can be used.  It returns false for initialized().  The
++     *  handler description is not checked for syntax errors, though;
++     *  initialize() does that. */
++    HandlerCall(const String &hdesc)
++      : _e(reinterpret_cast<Element *>(4)), _h(Handler::blank_handler()),
++        _value(hdesc) {
++    }
++
++
++    enum Flags {
++      OP_READ = Handler::OP_READ, OP_WRITE = Handler::OP_WRITE,
++      PREINITIALIZE = 4
++    };
++
++    /** @brief  Initialize the HandlerCall.
++     *  @param  flags    zero or more of OP_READ, OP_WRITE, PREINITIALIZE
++     *  @param  context  optional element context
++     *  @param  errh     optional error handler
++     *  @return 0 on success, negative on failure
++     *
++     *  Initializes the HandlerCall object.  The handler description supplied
++     *  to the constructor is parsed and checked for syntax errors.  Any
++     *  element reference is looked up relative to @a context, if any.  (For
++     *  example, if @a hdesc was "x.config" and @a context's name is
++     *  "aaa/bbb/ccc", this will search for elements named aaa/bbb/x, aaa/x,
++     *  and finally x.  If @a context is null, then the description must refer
++     *  to a global handler.)  If OP_READ is set in @a flags, then there
++     *  must be a read handler named appropriately; if OP_WRITE is set,
++     *  then there must be a write handler.
++     *
++     *  Initialization fails if the handler description was bogus (for
++     *  example, an empty string, or something like "*#!$&!(#&$."), if the
++     *  named handler does not exist, if a read handler description has
++     *  parameters but the read handler doesn't actually take parameters, and
++     *  so forth.  If @a errh is nonnull, errors are reported there.  The
++     *  HandlerCall becomes empty on failure: empty() will return true, and
++     *  (bool) *this will return false.  Future call_read() and call_write()
++     *  attempts will correctly fail.
++     *
++     *  If the PREINITIALIZE flag is set, the initialize function will check
++     *  whether the router's handlers are ready (Router::handlers_ready()).
++     *  If handlers are not ready, then initialize() will check for syntax
++     *  errors, but not actually look up the handler (since we don't know yet
++     *  whether or not the handler exists).  Absent a syntax error,
++     *  initialize() will return 0 for success even though the HandlerCall
++     *  remains uninitialized. */
++    int initialize(int flags, Element *context, ErrorHandler *errh = 0);
++
++    /** @brief  Initialize the HandlerCall for reading.
++     *  @param  context  optional element context
++     *  @param  errh     optional error handler
++     *
++     *  Equivalent to @link initialize(int, Element*, ErrorHandler*)
++     *  initialize@endlink(OP_READ, @a context, @a errh). */
++    inline int initialize_read(Element *context, ErrorHandler *errh = 0);
++
++    /** @brief  Initialize the HandlerCall for writing.
++     *  @param  context  optional element context
++     *  @param  errh     optional error handler
++     *
++     *  Equivalent to @link initialize(int, Element*, ErrorHandler*)
++     *  initialize@endlink(OP_WRITE, @a context, @a errh). */
++    inline int initialize_write(Element *context, ErrorHandler *errh = 0);
++
++    
++    typedef bool (HandlerCall::*unspecified_bool_type)() const;
++
++    /** @brief  Test if HandlerCall is empty.
++     *  @return True if HandlerCall is not empty, false otherwise.
++     *
++     *  Valid HandlerCall objects have been successfully initialized. */
++    operator unspecified_bool_type() const {
++      return _h != Handler::blank_handler() || _e ? &HandlerCall::empty : 0;
++    }
++    
++    /** @brief  Test if HandlerCall is empty.
++     *  @return True if HandlerCall is empty, false otherwise. */
++    bool empty() const {
++      return _h == Handler::blank_handler() && !_e;
++    }
++
++    /** @brief  Test if HandlerCall is initialized.
++     *  @return True if HandlerCall is initialized, false otherwise. */
++    bool initialized() const {
++      return _h != Handler::blank_handler();
++    }
++
++
++    /** @brief  Call a read handler.
++     *  @param  errh  optional error handler
++     *  @return  Read handler result.
++     *
++     *  Fails and returns the empty string if this HandlerCall is invalid or
++     *  not a read handler.  If @a errh is nonnull, then any errors are
++     *  reported there, whether from HandlerCall or the handler itself. */
++    inline String call_read(ErrorHandler *errh = 0) const;
++
++    /** @brief  Call a write handler.
++     *  @param  errh  optional error handler
++     *  @return  Write handler result.
++     *
++     *  Fails and returns -EINVAL if this HandlerCall is invalid or not a
++     *  write handler.  If @a errh is nonnull, then any errors are reported
++     *  there, whether from HandlerCall or the handler itself. */
++    inline int call_write(ErrorHandler *errh = 0) const;
++
++    /** @brief  Call a write handler with an additional value.
++     *  @param  value_ext  write value extension
++     *  @param  errh       optional error handler
++     *  @return  Write handler result.
++     *
++     *  The @a value_ext is appended to the write value before the handler is
++     *  called.  (For example, consider a handler with description "a.set
++     *  value".  call_write("foo") will call "a.set value foo".)  Fails and
++     *  returns -EINVAL if this HandlerCall is invalid or not a write handler.
++     *  If @a errh is nonnull, then any errors are reported there, whether
++     *  from HandlerCall or the handler itself. */
++    inline int call_write(const String &value_ext, ErrorHandler *errh = 0) const;
++
++
++    /** @brief  Create and initialize a HandlerCall from @a hdesc.
++     *  @param  hcall    stores the HandlerCall result
++     *  @param  hdesc    handler description "[ename.]hname[ value]"
++     *  @param  flags    initialization flags (OP_READ, OP_WRITE, PREINITIALIZE)
++     *  @param  context  optional element context
++     *  @param  errh     optional error handler
++     *  @return  0 on success, -EINVAL on failure
++     *
++     *  Creates a HandlerCall and initializes it.  Behaves somewhat like:
++     *
++     *  @code
++     *  hcall = new HandlerCall(hdesc);
++     *  return hcall->initialize(flags, context, errh);
++     *  @endcode
++     *
++     *  However, (1) if initialization fails, then @a hcall is untouched; and
++     *  (2) if initialization succeeds and @a hcall is not null, then the
++     *  existing HandlerCall is assigned so that it corresponds to the new one
++     *  (no new memory allocations).
++     *
++     *  If @a errh is nonnull, then any errors are reported there. */
++    static int reset(HandlerCall *&hcall, const String &hdesc, int flags,
++                   Element *context, ErrorHandler *errh = 0);
++
++    /** @brief  Create and initialize a HandlerCall on element @a e.
++     *  @param  hcall  stores the HandlerCall result
++     *  @param  e      relevant element, if any
++     *  @param  hname  handler name
++     *  @param  value  handler value
++     *  @param  flags  initialization flags (OP_READ, OP_WRITE, PREINITIALIZE)
++     *  @param  errh   optional error handler
++     *  @return  0 on success, -EINVAL on failure
++     *
++     *  Creates a HandlerCall and initializes it.  Behaves analogously to
++     *  reset(HandlerCall*&, const String&, int, Element*, ErrorHandler*). */
++    static int reset(HandlerCall *&hcall,
++                   Element *e, const String &hname, const String &value,
++                   int flags, ErrorHandler *errh = 0);
++
++
++    /** @brief  Create and initialize a read HandlerCall from @a hdesc.
++     *  @param  hcall    stores the HandlerCall result
++     *  @param  hdesc    handler description "[ename.]hdesc[ param]"
++     *  @param  context  optional element context
++     *  @param  errh     optional error handler
++     *  @return  0 on success, -EINVAL on failure
++     *
++     *  Equivalent to
++     *  @link reset(HandlerCall*&, const String&, int, Element*, ErrorHandler*) reset@endlink(@a hcall, @a hdesc, OP_READ, @a context, @a errh). */
++    static inline int reset_read(HandlerCall *&hcall, const String &hdesc,
++                               Element *context, ErrorHandler *errh = 0);
++
++    /** @brief  Create and initialize a read HandlerCall from @a hdesc.
++     *  @param  hcall  stores the HandlerCall result
++     *  @param  e      relevant element, if any
++     *  @param  hname  handler name
++     *  @param  errh   optional error handler
++     *  @return  0 on success, -EINVAL on failure
++     *
++     *  Equivalent to
++     *  @link reset(HandlerCall*&, Element*, const String&, const String&, int, ErrorHandler*) reset@endlink(@a hcall, @a e, @a hname, String(), OP_READ, @a context, @a errh). */
++    static inline int reset_read(HandlerCall *&hcall,
++                               Element *e, const String &hname,
++                               ErrorHandler *errh = 0);
++
++    /** @brief  Create and initialize a write HandlerCall from @a hdesc.
++     *  @param  hcall    stores the HandlerCall result
++     *  @param  hdesc    handler description "[ename.]hdesc[ value]"
++     *  @param  context  optional element context
++     *  @param  errh     optional error handler
++     *  @return  0 on success, -EINVAL on failure
++     *
++     *  Equivalent to
++     *  @link reset(HandlerCall*&, const String&, int, Element*, ErrorHandler*) reset@endlink(@a hcall, @a hdesc, OP_WRITE, @a context, @a errh). */
++    static inline int reset_write(HandlerCall *&hcall, const String &hdesc,
++                                Element *context, ErrorHandler *errh = 0);
++
++    /** @brief  Create and initialize a read HandlerCall from @a hdesc.
++     *  @param  hcall  stores the HandlerCall result
++     *  @param  e      relevant element, if any
++     *  @param  hname  handler name
++     *  @param  value  write handler value
++     *  @param  errh   optional error handler
++     *  @return  0 on success, -EINVAL on failure
++     *
++     *  Equivalent to
++     *  @link reset(HandlerCall*&, Element*, const String&, const String&, int, ErrorHandler*) reset@endlink(@a hcall, @a e, @a hname, @ value, OP_WRITE, @a context, @a errh). */
++    static inline int reset_write(HandlerCall *&hcall,
++                                Element *e, const String &hname,
++                                const String &value = String(),
++                                ErrorHandler *errh = 0);
++
++
++    /** @brief  Return the Element corresponding to this HandlerCall.
++     *
++     *  Returns null if invalid.  A global handler may return some
++     *  Router::root_element() or null. */
++    Element *element() const {
++      return _e;
++    }
++    
++    /** @brief  Return the Handler corresponding to this HandlerCall.
++     *
++     *  Returns Handler::blank_handler() if invalid. */
++    const Handler *handler() const {
++      return _h;
++    }
++
++    /** @brief  Return the write handler value and/or read handler parameters.
++     *
++     *  Returns the empty string if invalid. */
++    const String &value() const       {
++      return initialized() ? _value : String::empty_string();
++    }
++
++    /** @brief  Sets the write handler value and/or read handler parameters.
++     *  @param  value  new value and/or parameters
++     *
++     *  Does nothing if invalid. */
++    void set_value(const String &value) {
++      if (initialized())
++          _value = value;
++    }
++
++    /** @brief  Return a String that will parse into an equivalent HandlerCall.
++     *
++     *  Will work even if the HandlerCall has not been initialized. */
++    String unparse() const;
++    
++    /** @brief  Make this HandlerCall empty.
++     *
++     *  Subsequent attempts to read, write, or initialize the HandlerCall will
++     *  fail. */
++    void clear() {
++      _e = 0;
++      _h = Handler::blank_handler();
++      _value = String();
++    }
++
++
++    /** @cond never */
++    enum { CHECK_READ = OP_READ, CHECK_WRITE = OP_WRITE };
++    /** @endcond never */
++    
++  private:
++    
++    Element *_e;
++    const Handler *_h;
++    String _value;
++
++    int parse(int flags, Element*, ErrorHandler*);
++    int assign(Element*, const String&, const String&, int flags, ErrorHandler*);
++
++};
++
++inline int
++HandlerCall::reset_read(HandlerCall*& hcall, const String& hdesc, Element* context, ErrorHandler* errh)
++{
++    return reset(hcall, hdesc, OP_READ, context, errh);
++}
++
++inline int
++HandlerCall::reset_write(HandlerCall*& hcall, const String& hdesc, Element* context, ErrorHandler* errh)
++{
++    return reset(hcall, hdesc, OP_WRITE, context, errh);
++}
++
++inline int
++HandlerCall::reset_read(HandlerCall*& hcall, Element* e, const String& hname, ErrorHandler* errh)
++{
++    return reset(hcall, e, hname, String(), OP_READ, errh);
++}
++
++inline int
++HandlerCall::reset_write(HandlerCall*& hcall, Element* e, const String& hname, const String& value, ErrorHandler* errh)
++{
++    return reset(hcall, e, hname, value, OP_WRITE, errh);
++}
++
++inline int
++HandlerCall::initialize_read(Element* context, ErrorHandler* errh)
++{
++    return initialize(OP_READ, context, errh);
++}
++
++inline int
++HandlerCall::initialize_write(Element* context, ErrorHandler* errh)
++{
++    return initialize(OP_WRITE, context, errh);
++}
++
++inline String
++HandlerCall::call_read(ErrorHandler *errh) const
++{
++    return _h->call_read(_e, _value, false, errh);
++}
++
++inline int
++HandlerCall::call_write(ErrorHandler *errh) const
++{
++    return _h->call_write(_value, _e, false, errh);
++}
++
++inline int
++HandlerCall::call_write(const String &value_ext, ErrorHandler *errh) const
++{
++    if (_value && value_ext)
++      return _h->call_write(_value + " " + value_ext, _e, false, errh);
++    else
++      return _h->call_write(_value ? _value : value_ext, _e, false, errh);
++}
++
++/** @brief  Call a write handler specified by element and handler name.
++ *  @param  e      relevant element, if any
++ *  @param  hname  handler name
++ *  @param  errh   optional error handler
++ *  @return  handler result, or -EINVAL on error
++ *
++ *  Searches for a write handler named @a hname on element @a e.  If the
++ *  handler exists, calls it (with empty write value) and returns the result.
++ *  If @a errh is nonnull, then errors, such as a missing handler or a
++ *  read-only handler, are reported there.  If @a e is some router's @link
++ *  Router::root_element() root element@endlink, calls the global write
++ *  handler named @a hname on that router. */
++inline int
++HandlerCall::call_write(Element *e, const String &hname, ErrorHandler *errh)
++{
++    return call_write(e, hname, String(), errh);
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/hashcode.hh click-1.6.0-27/inst/include/click/hashcode.hh
+--- click-1.6.0/inst/include/click/hashcode.hh 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/hashcode.hh      2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,73 @@
++#ifndef CLICK_HASHCODE_HH
++#define CLICK_HASHCODE_HH
++CLICK_DECLS
++
++template <typename T>
++inline size_t
++hashcode(const T &x)
++{
++    return x.hashcode();
++}
++
++inline size_t hashcode(char c) {
++    return c;
++}
++
++inline size_t hashcode(signed char c) {
++    return c;
++}
++
++inline size_t hashcode(unsigned char c) {
++    return c;
++}
++
++inline size_t hashcode(short s) {
++    return s;
++}
++
++inline size_t hashcode(unsigned short us) {
++    return us;
++}
++
++inline size_t hashcode(int i) {
++    return i;
++}
++
++inline size_t hashcode(unsigned u) {
++    return u;
++}
++
++inline size_t hashcode(long l) {
++    return l;
++}
++
++inline size_t hashcode(unsigned long ul) {
++    return ul;
++}
++
++#if HAVE_LONG_LONG
++inline size_t hashcode(long long ll) {
++    return ll;
++}
++
++inline size_t hashcode(unsigned long long ull) {
++    return ull;
++}
++#endif
++
++#if HAVE_INT64_TYPES && !HAVE_INT64_IS_LONG && !HAVE_INT64_IS_LONG_LONG
++inline size_t hashcode(int64_t q) {
++    return q;
++}
++
++inline size_t hashcode(uint64_t uq) {
++    return uq;
++}
++#endif
++
++inline size_t hashcode(void *v) {
++    return reinterpret_cast<uintptr_t>(v) >> 3;
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/hashmap.cc click-1.6.0-27/inst/include/click/hashmap.cc
+--- click-1.6.0/inst/include/click/hashmap.cc  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/hashmap.cc       2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,23 @@
++/*
++ * hashmap.{cc,hh} -- a simple, stupid hash table template
++ * Eddie Kohler
++ *
++ * Copyright (c) 1999-2000 Massachusetts Institute of Technology
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, subject to the conditions
++ * listed in the Click LICENSE file. These conditions include: you must
++ * preserve this copyright notice, and you cannot mention the copyright
++ * holders in advertising related to the Software without their permission.
++ * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++ * notice is a summary of the Click LICENSE file; the license in that file is
++ * legally binding.
++ */
++
++#ifndef CLICK_HASHMAP_CC
++#define CLICK_HASHMAP_CC
++
++#include <click/bighashmap.cc>
++
++#endif
+diff -Nurb click-1.6.0/inst/include/click/hashmap.hh click-1.6.0-27/inst/include/click/hashmap.hh
+--- click-1.6.0/inst/include/click/hashmap.hh  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/hashmap.hh       2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,7 @@
++#ifndef CLICK_HASHMAP_HH
++#define CLICK_HASHMAP_HH
++
++// This file is here for compatibility only.
++#include <click/bighashmap.hh>
++
++#endif
+diff -Nurb click-1.6.0/inst/include/click/ino.hh click-1.6.0-27/inst/include/click/ino.hh
+--- click-1.6.0/inst/include/click/ino.hh      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/ino.hh   2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,128 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/ino.cc" -*-
++#ifndef CLICK_INO_HH
++#define CLICK_INO_HH
++#include <click/string.hh>
++CLICK_DECLS
++class Router;
++
++// NB: inode number 0 is reserved for the system.
++#define INO_DIRTYPE(ino)              ((ino) >> 28)
++#define INO_ELEMENTNO(ino)            ((int)((ino) & 0xFFFFU) - 1)
++#define INO_HANDLERNO(ino)            ((((ino) & 0xFFFFU) ? 0 : Router::FIRST_GLOBAL_HANDLER) + (((ino) >> 16) & 0x7FFFU))
++#define INO_DT_H                      0x1U /* handlers only */
++#define INO_DT_N                      0x2U /* names */
++#define INO_DT_HN                     0x3U /* handlers + names */
++#define INO_DT_GLOBAL                 0x5U /* handlers + names + all #s */
++#define INO_DT_HAS_H(ino)             (INO_DIRTYPE((ino)) & INO_DT_H)
++#define INO_DT_HAS_N(ino)             (INO_DIRTYPE((ino)) >= INO_DT_N)
++#define INO_DT_HAS_U(ino)             (INO_DIRTYPE((ino)) == INO_DT_GLOBAL)
++
++#define INO_MKHANDLER(e, hi)          ((((hi) & 0x7FFFU) << 16) | (((e) + 1) & 0xFFFFU) | 0x80000000U)
++#define INO_MKHDIR(e)                 ((INO_DT_H << 28) | (((e) + 1) & 0xFFFFU))
++#define INO_MKNDIR(e)                 ((INO_DT_N << 28) | (((e) + 1) & 0xFFFFU))
++#define INO_MKHNDIR(e)                        ((INO_DT_HN << 28) | (((e) + 1) & 0xFFFFU))
++#define INO_GLOBALDIR                 (INO_DT_GLOBAL << 28)
++#define INO_ISHANDLER(ino)            (((ino) & 0x80000000U) != 0)
++
++#define INO_DEBUG                     0
++
++class ClickIno { public:
++
++    void initialize();
++    void cleanup();
++
++    uint32_t generation() const               { return _generation; }
++    
++    // All operations should be called with a configuration lock held.
++    inline int prepare(Router*, uint32_t);
++    int nlink(ino_t);
++    ino_t lookup(ino_t dir, const String& component);
++
++    // readdir doesn't handle '.' or '..'.
++    // It returns 0 for "filldir failed, have more", 1 for "out", <0 on error.
++    typedef bool (*filldir_t)(const char* name, int name_len, ino_t ino, int dirtype, uint32_t f_pos, void* thunk);
++    int readdir(ino_t dir, uint32_t& f_pos, filldir_t, void* thunk);
++
++#if INO_DEBUG
++    String info() const;
++#endif
++
++    struct Entry {
++      // Name of this entry.
++      String name;
++
++      // Corresponding eindex plus 1. Might be larger than the number of
++      // elements in the router, because of fake directories added for
++      // compound "elements".
++      uint16_t elementno_plus1;
++
++      // '_x[i].xindex' equals the index in _x of the entry for element
++      // number 'i - 1'.
++      uint16_t xindex;
++
++      // Number of child entries. 'name' is guaranteed to be a prefix of
++      // every child entry.
++      uint16_t skip;
++
++      // See enum below. X_FAKE is true on fake directories added for
++      // compound elements; X_HANDLER_CONFLICT is true if this element name
++      // conflicts with a handler; X_SUBDIR_CONFLICTS_CALCULATED is true if
++      // we've already checked for name conflicts on this element's
++      // children.
++      uint16_t flags;
++    };
++    
++  private:
++
++    enum { X_FAKE = 1, X_HANDLER_CONFLICT = 2, X_SUBDIR_CONFLICTS_CALCULATED = 4 };
++    
++    Entry* _x;
++    int _nentries;
++    int _cap;
++    Router* _router;
++    uint32_t _generation;
++
++    inline int xindex(int elementno) const;
++    inline int next_xindex(int elementno) const;
++    inline int elementno(int xindex) const;
++
++    int name_search(const String& n, int first_xi, int last_xi, int name_offset) const;
++    
++    int grow(int min_size);
++    void calculate_handler_conflicts(int);
++    int true_prepare(Router*, uint32_t);
++
++};
++
++
++inline int
++ClickIno::prepare(Router* router, uint32_t generation)
++{
++    if (generation != _generation)
++      return true_prepare(router, generation);
++    else
++      return 0;
++}
++
++inline int
++ClickIno::xindex(int elementno) const
++{
++    assert(elementno >= -1 && elementno < _nentries - 1);
++    return _x[elementno + 1].xindex;
++}
++
++inline int
++ClickIno::next_xindex(int elementno) const
++{
++    int xi = xindex(elementno);
++    return xi + _x[xi].skip + 1;
++}
++
++inline int
++ClickIno::elementno(int xindex) const
++{
++    return _x[xindex].elementno_plus1 - 1;
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/integers.hh click-1.6.0-27/inst/include/click/integers.hh
+--- click-1.6.0/inst/include/click/integers.hh 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/integers.hh      2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,93 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/integers.cc" -*-
++#ifndef CLICK_INTEGERS_HH
++#define CLICK_INTEGERS_HH
++#if !HAVE___BUILTIN_FFS && HAVE_FFS && HAVE_STRINGS_H
++# include <strings.h>
++#endif
++CLICK_DECLS
++
++#ifdef HAVE_INT64_TYPES
++
++inline uint64_t htonq(uint64_t x) {
++    uint32_t hi = x >> 32;
++    uint32_t lo = x & 0xffffffff;
++    return (((uint64_t)htonl(lo)) << 32) | htonl(hi);
++}
++
++inline uint64_t ntohq(uint64_t x) {
++    uint32_t hi = x >> 32;
++    uint32_t lo = x & 0xffffffff;
++    return (((uint64_t)ntohl(lo)) << 32) | ntohl(hi);
++}
++
++#endif
++
++// MSB is bit #1
++#if HAVE___BUILTIN_CLZ && !HAVE_NO_INTEGER_BUILTINS
++inline int ffs_msb(uint32_t x) {
++    return (x ? __builtin_clz(x) + 1 : 0);
++}
++#else
++# define NEED_FFS_MSB_UINT32_T 1
++int ffs_msb(uint32_t);
++#endif
++
++#ifdef HAVE_INT64_TYPES
++# if HAVE___BUILTIN_CLZLL && SIZEOF_LONG_LONG == 8 && !HAVE_NO_INTEGER_BUILTINS
++inline int ffs_msb(uint64_t x) {
++    return (x ? __builtin_clzll(x) + 1 : 0);
++}
++# elif HAVE___BUILTIN_CLZL && SIZEOF_LONG == 8 && !HAVE_NO_INTEGER_BUILTINS
++inline int ffs_msb(uint64_t x) {
++    return (x ? __builtin_clzl(x) + 1 : 0);
++}
++# elif HAVE___BUILTIN_CLZ && SIZEOF_INT == 8 && !HAVE_NO_INTEGER_BUILTINS
++inline int ffs_msb(uint64_t x) {
++    return (x ? __builtin_clz(x) + 1 : 0);
++}
++# else
++#  define NEED_FFS_MSB_UINT64_T 1
++int ffs_msb(uint64_t);
++# endif
++#endif
++
++// LSB is bit #1
++#if HAVE___BUILTIN_FFS && !HAVE_NO_INTEGER_BUILTINS
++inline int ffs_lsb(uint32_t x) {
++    return __builtin_ffs(x);
++}
++#elif HAVE_FFS && !HAVE_NO_INTEGER_BUILTINS
++inline int ffs_lsb(uint32_t x) {
++    return ffs(x);
++}
++#else
++# define NEED_FFS_LSB_UINT32_T 1
++int ffs_lsb(uint32_t);
++#endif
++
++#ifdef HAVE_INT64_TYPES
++# if HAVE___BUILTIN_FFSLL && SIZEOF_LONG_LONG == 8 && !HAVE_NO_INTEGER_BUILTINS
++inline int ffs_lsb(uint64_t x) {
++    return __builtin_ffsll(x);
++}
++# elif HAVE___BUILTIN_FFSL && SIZEOF_LONG == 8 && !HAVE_NO_INTEGER_BUILTINS
++inline int ffs_lsb(uint64_t x) {
++    return __builtin_ffsl(x);
++}
++# elif HAVE___BUILTIN_FFS && SIZEOF_INT == 8 && !HAVE_NO_INTEGER_BUILTINS
++inline int ffs_lsb(uint64_t x) {
++    return __builtin_ffs(x);
++}
++# else
++#  define NEED_FFS_LSB_UINT64_T 1
++int ffs_lsb(uint64_t);
++# endif
++#endif
++
++uint32_t int_sqrt(uint32_t);
++#if HAVE_INT64_TYPES && !CLICK_LINUXMODULE
++uint64_t int_sqrt(uint64_t);
++#endif
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/ip6address.hh click-1.6.0-27/inst/include/click/ip6address.hh
+--- click-1.6.0/inst/include/click/ip6address.hh       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/ip6address.hh    2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,191 @@
++// -*- related-file-name: "../../lib/ip6address.cc" -*-
++#ifndef CLICK_IP6ADDRESS_HH
++#define CLICK_IP6ADDRESS_HH
++#include <click/string.hh>
++#include <clicknet/ip6.h>
++#include <click/ipaddress.hh>
++#include <click/etheraddress.hh>
++CLICK_DECLS
++
++class IP6Address { public:
++ 
++  IP6Address();
++  explicit IP6Address(const unsigned char *);
++  explicit IP6Address(IPAddress ip);
++  explicit IP6Address(const String &);                // "fec0:0:0:1::1"
++  explicit IP6Address(const click_in6_addr &a)        : _addr(a) { }
++  static IP6Address make_prefix(int);
++
++  typedef size_t (IP6Address::*unspecified_bool_type)() const;
++  operator unspecified_bool_type() const;
++  
++  operator const click_in6_addr &() const     { return _addr; }
++  operator click_in6_addr &()                 { return _addr; }
++  const click_in6_addr &in6_addr() const      { return _addr; }
++  click_in6_addr &in6_addr()                  { return _addr; }
++
++  unsigned char *data()                       { return &_addr.s6_addr[0]; }
++  const unsigned char *data() const   { return &_addr.s6_addr[0]; }
++  unsigned *data32()                  { return &_addr.s6_addr32[0]; }
++  const unsigned *data32() const      { return &_addr.s6_addr32[0]; }
++
++    inline size_t hashcode() const;
++  
++  int mask_to_prefix_len() const;
++  bool matches_prefix(const IP6Address &addr, const IP6Address &mask) const;
++  bool mask_as_specific(const IP6Address &) const;
++  
++  bool ether_address(EtherAddress &) const;
++  bool ip4_address(IPAddress &) const;
++  
++  // bool operator==(const IP6Address &, const IP6Address &);
++  // bool operator!=(const IP6Address &, const IP6Address &);
++  
++  // IP6Address operator&(const IP6Address &, const IP6Address &);
++  // IP6Address operator|(const IP6Address &, const IP6Address &);
++  // IP6Address operator~(const IP6Address &);
++
++  IP6Address &operator&=(const IP6Address &);
++  IP6Address &operator&=(const click_in6_addr &);
++  IP6Address &operator|=(const IP6Address &);
++  IP6Address &operator|=(const click_in6_addr &);
++  
++  IP6Address &operator=(const click_in6_addr &);
++
++  String unparse() const;
++  String unparse_expanded() const;
++  
++  operator String() const             { return unparse(); }
++  String s() const                    { return unparse(); }
++
++ private:
++  
++  click_in6_addr _addr;
++
++};
++
++inline
++IP6Address::operator unspecified_bool_type() const
++{
++  const unsigned *ai = data32();
++  return ai[0] || ai[1] || ai[2] || ai[3] ? &IP6Address::hashcode : 0;
++}
++
++inline bool
++operator==(const IP6Address &a, const IP6Address &b)
++{
++  const unsigned *ai = a.data32(), *bi = b.data32();
++  return ai[0] == bi[0] && ai[1] == bi[1] && ai[2] == bi[2] && ai[3] == bi[3];
++}
++
++inline bool
++operator!=(const IP6Address &a, const IP6Address &b)
++{
++  const unsigned *ai = a.data32(), *bi = b.data32();
++  return ai[0] != bi[0] || ai[1] != bi[1] || ai[2] != bi[2] || ai[3] != bi[3];
++}
++
++class StringAccum;
++StringAccum &operator<<(StringAccum &, const IP6Address &);
++
++inline bool
++IP6Address::matches_prefix(const IP6Address &addr, const IP6Address &mask) const
++{
++  const unsigned *xi = data32(), *ai = addr.data32(), *mi = mask.data32();
++  return ((xi[0] ^ ai[0]) & mi[0]) == 0
++    && ((xi[1] ^ ai[1]) & mi[1]) == 0
++    && ((xi[2] ^ ai[2]) & mi[2]) == 0
++    && ((xi[3] ^ ai[3]) & mi[3]) == 0;
++}
++
++inline bool
++IP6Address::mask_as_specific(const IP6Address &mask) const
++{
++  const unsigned *xi = data32(), *mi = mask.data32();
++  return ((xi[0] & mi[0]) == mi[0] && (xi[1] & mi[1]) == mi[1]
++        && (xi[2] & mi[2]) == mi[2] && (xi[3] & mi[3]) == mi[3]);
++}
++
++inline IP6Address &
++IP6Address::operator&=(const IP6Address &b)
++{
++  unsigned *ai = data32();
++  const unsigned *bi = b.data32();
++  ai[0] &= bi[0]; ai[1] &= bi[1]; ai[2] &= bi[2]; ai[3] &= bi[3];
++  return *this;
++}
++
++inline IP6Address &
++IP6Address::operator&=(const click_in6_addr &b)
++{
++  unsigned *ai = data32();
++  const unsigned *bi = b.s6_addr32;
++  ai[0] &= bi[0]; ai[1] &= bi[1]; ai[2] &= bi[2]; ai[3] &= bi[3];
++  return *this;
++}
++
++inline IP6Address &
++IP6Address::operator|=(const IP6Address &b)
++{
++  unsigned *ai = data32();
++  const unsigned *bi = b.data32();
++  ai[0] |= bi[0]; ai[1] |= bi[1]; ai[2] |= bi[2]; ai[3] |= bi[3];
++  return *this;
++}
++
++inline IP6Address &
++IP6Address::operator|=(const click_in6_addr &b)
++{
++  unsigned *ai = data32();
++  const unsigned *bi = b.s6_addr32;
++  ai[0] |= bi[0]; ai[1] |= bi[1]; ai[2] |= bi[2]; ai[3] |= bi[3];
++  return *this;
++}
++
++inline IP6Address
++operator&(const IP6Address &a, const IP6Address &b)
++{
++  const unsigned *ai = a.data32(), *bi = b.data32();
++  IP6Address result;
++  unsigned *ri = result.data32();
++  ri[0] = ai[0] & bi[0]; ri[1] = ai[1] & bi[1];
++  ri[2] = ai[2] & bi[2]; ri[3] = ai[3] & bi[3];
++  return result;
++}
++
++inline IP6Address
++operator|(const IP6Address &a, const IP6Address &b)
++{
++  const unsigned *ai = a.data32(), *bi = b.data32();
++  IP6Address result;
++  unsigned *ri = result.data32();
++  ri[0] = ai[0] | bi[0]; ri[1] = ai[1] | bi[1];
++  ri[2] = ai[2] | bi[2]; ri[3] = ai[3] | bi[3];
++  return result;
++}
++
++inline IP6Address
++operator~(const IP6Address &a)
++{
++  const unsigned *ai = a.data32();
++  IP6Address result;
++  unsigned *ri = result.data32();
++  ri[0] = ~ai[0]; ri[1] = ~ai[1]; ri[2] = ~ai[2]; ri[3] = ~ai[3];
++  return result;
++}
++
++inline IP6Address &
++IP6Address::operator=(const click_in6_addr &a)
++{
++  _addr = a;
++  return *this;
++}
++
++inline size_t
++IP6Address::hashcode() const
++{
++  return data32()[3];
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/ip6flowid.hh click-1.6.0-27/inst/include/click/ip6flowid.hh
+--- click-1.6.0/inst/include/click/ip6flowid.hh        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/ip6flowid.hh     2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,105 @@
++// -*- c-basic-offset: 2; related-file-name: "../../lib/ip6flowid.cc" -*-
++#ifndef CLICK_IP6FLOWID_HH
++#define CLICK_IP6FLOWID_HH
++#include <click/ip6address.hh>
++#include <click/hashcode.hh>
++CLICK_DECLS
++class Packet;
++
++class IP6FlowID { public:
++
++  inline IP6FlowID();
++  inline IP6FlowID(const IP6Address &, uint16_t, const IP6Address &, uint16_t);
++  explicit IP6FlowID(Packet *);
++
++  typedef const IP6Address &(IP6FlowID::*unspecified_bool_type)() const;
++  inline operator unspecified_bool_type() const;
++
++  const IP6Address &saddr() const     { return _saddr; }
++  const IP6Address &daddr() const     { return _daddr; }
++  uint16_t sport() const              { return _sport; }
++  uint16_t dport() const              { return _dport; }
++
++  void set_saddr(const IP6Address &a) { _saddr = a; }
++  void set_daddr(const IP6Address &a) { _daddr = a; }
++  void set_sport(uint16_t p)          { _sport = p; }
++  void set_dport(uint16_t p)          { _dport = p; }
++  
++  inline IP6FlowID rev() const;
++
++  inline size_t hashcode() const;
++
++  String unparse() const;
++  operator String() const             { return unparse(); }
++  String s() const                    { return unparse(); }
++  
++ protected:
++  
++  // note: several functions depend on this field order!
++  IP6Address _saddr;
++  IP6Address _daddr;
++  uint16_t _sport;                    // network byte order
++  uint16_t _dport;                    // network byte order
++
++};
++
++inline
++IP6FlowID::IP6FlowID()
++  : _saddr(), _daddr(), _sport(0), _dport(0)
++{
++}
++
++inline
++IP6FlowID::IP6FlowID(const IP6Address &saddr, uint16_t sport,
++                   const IP6Address &daddr, uint16_t dport)
++  : _saddr(saddr), _daddr(daddr), _sport(sport), _dport(dport)
++{
++}
++
++inline
++IP6FlowID::operator unspecified_bool_type() const
++{
++  return _saddr || _daddr ? &IP6FlowID::saddr : 0;
++}
++
++inline IP6FlowID
++IP6FlowID::rev() const
++{
++  return IP6FlowID(_daddr, _dport, _saddr, _sport);
++}
++
++
++#define ROT(v, r) ((v)<<(r) | ((unsigned)(v))>>(32-(r)))
++
++#if 0
++inline size_t
++IP6FlowID::hashcode() const
++{ 
++  return (ROT(_saddr.hashcode(), 13) 
++        ^ ROT(_daddr.hashcode(), 23) ^ (_sport | (_dport<<16)));
++}
++#endif
++
++inline size_t IP6FlowID::hashcode() const
++{ 
++  // more complicated hashcode, but causes less collision
++  uint16_t s = ntohs(sport());
++  uint16_t d = ntohs(dport());
++  size_t sx = CLICK_NAME(hashcode)(saddr());
++  size_t dx = CLICK_NAME(hashcode)(daddr());
++  return (ROT(sx, s%16)
++          ^ ROT(dx, 31-d%16))
++        ^ ((d << 16) | s);
++}
++
++#undef ROT
++
++inline bool
++operator==(const IP6FlowID &a, const IP6FlowID &b)
++{
++  return a.dport() == b.dport() && a.sport() == b.sport()
++    && a.daddr() == b.daddr() && a.saddr() == b.saddr();
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/ip6table.hh click-1.6.0-27/inst/include/click/ip6table.hh
+--- click-1.6.0/inst/include/click/ip6table.hh 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/ip6table.hh      2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,39 @@
++// -*- c-basic-offset: 2; related-file-name: "../../lib/ip6table.cc" -*-
++#ifndef CLICK_IP6TABLE_HH
++#define CLICK_IP6TABLE_HH
++#include <click/glue.hh>
++#include <click/vector.hh>
++#include <click/ip6address.hh>
++CLICK_DECLS
++
++// IP6 routing table.
++// Lookup by longest prefix.
++// Each entry contains a gateway and an output index.
++
++class IP6Table { public:
++  
++  IP6Table();
++  ~IP6Table();
++
++  bool lookup(const IP6Address &dst, IP6Address &gw, int &index) const;
++  
++  void add(const IP6Address &dst, const IP6Address &mask, const IP6Address &gw, int index);
++  void del(const IP6Address &dst, const IP6Address &mask);
++  void clear()                                { _v.clear(); }
++  String dump();
++
++ private:
++  
++  struct Entry {
++    IP6Address _dst;
++    IP6Address _mask;
++    IP6Address _gw;
++    int _index;
++    int _valid;
++  };
++  Vector<Entry> _v;
++  
++};
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/ipaddress.hh click-1.6.0-27/inst/include/click/ipaddress.hh
+--- click-1.6.0/inst/include/click/ipaddress.hh        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/ipaddress.hh     2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,342 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/ipaddress.cc" -*-
++#ifndef CLICK_IPADDRESS_HH
++#define CLICK_IPADDRESS_HH
++#include <click/string.hh>
++#include <click/glue.hh>
++#include <clicknet/ip.h>
++CLICK_DECLS
++class StringAccum;
++
++class IPAddress { public:
++  
++    inline IPAddress();
++    explicit IPAddress(const unsigned char*);
++    inline IPAddress(unsigned int);   // network byte order IP address
++    inline explicit IPAddress(int);   // network byte order IP address
++    inline explicit IPAddress(unsigned long); // network byte order IP address
++    inline explicit IPAddress(long);  // network byte order IP address
++    explicit IPAddress(const String&);        // "18.26.4.99"
++    inline IPAddress(struct in_addr);
++    static IPAddress make_prefix(int prefix_len);
++
++    typedef uint32_t (IPAddress::*unspecified_bool_type)() const;
++    inline operator unspecified_bool_type() const;
++    
++    inline uint32_t addr() const;
++    inline operator uint32_t() const;
++  
++    inline struct in_addr in_addr() const;
++    inline operator struct in_addr() const;
++
++    inline unsigned char* data();
++    inline const unsigned char* data() const;
++
++    inline size_t hashcode() const;
++  
++    int mask_to_prefix_len() const;
++    inline bool matches_prefix(IPAddress addr, IPAddress mask) const;
++    inline bool mask_as_specific(IPAddress mask) const;
++    inline bool mask_more_specific(IPAddress mask) const;
++
++    // bool operator==(IPAddress, IPAddress);
++    // bool operator==(IPAddress, uint32_t);
++    // bool operator!=(IPAddress, IPAddress);
++    // bool operator!=(IPAddress, uint32_t);
++  
++    // IPAddress operator&(IPAddress, IPAddress);
++    // IPAddress operator|(IPAddress, IPAddress);
++    // IPAddress operator^(IPAddress, IPAddress);
++    // IPAddress operator~(IPAddress);
++  
++    inline IPAddress& operator&=(IPAddress);
++    inline IPAddress& operator|=(IPAddress);
++    inline IPAddress& operator^=(IPAddress);
++
++    String unparse() const;
++    String unparse_mask() const;
++    String unparse_with_mask(IPAddress) const;
++  
++    inline String s() const;
++    inline operator String() const;
++
++  private:
++  
++    uint32_t _addr;
++
++};
++
++/** @brief Constructs an IPAddress equal to 0.0.0.0. */
++inline
++IPAddress::IPAddress()
++    : _addr(0)
++{
++}
++
++/** @brief Constructs an IPAddress from an integer in network byte order.
++    @param a the address, in network byte order */
++inline
++IPAddress::IPAddress(unsigned int a)
++    : _addr(a)
++{
++}
++
++/** @brief Constructs an IPAddress from an integer in network byte order.
++    @param a the address, in network byte order */
++inline
++IPAddress::IPAddress(int a)
++    : _addr(a)
++{
++}
++
++/** @brief Constructs an IPAddress from an integer in network byte order.
++    @param a the address, in network byte order */
++inline
++IPAddress::IPAddress(unsigned long a)
++    : _addr(a)
++{
++}
++
++/** @brief Constructs an IPAddress from an integer in network byte order.
++    @param a the address, in network byte order */
++inline
++IPAddress::IPAddress(long a)
++    : _addr(a)
++{
++}
++
++/** @brief Constructs an IPAddress from a struct in_addr.
++    @param ina the address */
++inline
++IPAddress::IPAddress(struct in_addr ina)
++    : _addr(ina.s_addr)
++{
++}
++
++/** @brief Returns true iff the address is not 0.0.0.0. */
++inline
++IPAddress::operator unspecified_bool_type() const
++{
++    return _addr != 0 ? &IPAddress::addr : 0;
++}
++
++/** @brief Returns the address as a uint32_t in network byte order. */
++inline
++IPAddress::operator uint32_t() const
++{
++    return _addr;
++}
++
++/** @brief Returns the address as a uint32_t in network byte order. */
++inline uint32_t
++IPAddress::addr() const
++{
++    return _addr;
++}
++
++/** @relates IPAddress
++    @brief Compares two IPAddress objects for equality. */
++inline bool
++operator==(IPAddress a, IPAddress b)
++{
++    return a.addr() == b.addr();
++}
++
++/** @relates IPAddress
++    @brief Compares an IPAddress with a network-byte-order address value for
++    equality.
++    @param a an address
++    @param b an address value in network byte order */
++inline bool
++operator==(IPAddress a, uint32_t b)
++{
++    return a.addr() == b;
++}
++
++/** @relates IPAddress
++    @brief Compares two IPAddress objects for inequality. */
++inline bool
++operator!=(IPAddress a, IPAddress b)
++{
++    return a.addr() != b.addr();
++}
++
++/** @relates IPAddress
++    @brief Compares an IPAddress with a network-byte-order address value for
++    inequality.
++    @param a an address
++    @param b an address value in network byte order */
++inline bool
++operator!=(IPAddress a, uint32_t b)
++{
++    return a.addr() != b;
++}
++
++/** @brief Returns a pointer to the address data.
++    
++    Since the address is stored in network byte order, data()[0] is the top 8
++    bits of the address, data()[1] the next 8 bits, and so forth. */
++inline const unsigned char*
++IPAddress::data() const
++{
++    return reinterpret_cast<const unsigned char*>(&_addr);
++}
++
++/** @brief Returns a pointer to the address data.
++    
++    Since the address is stored in network byte order, data()[0] is the top 8
++    bits of the address, data()[1] the next 8 bits, and so forth. */
++inline unsigned char*
++IPAddress::data()
++{
++    return reinterpret_cast<unsigned char*>(&_addr);
++}
++
++/** @brief Returns a struct in_addr corresponding to the address. */
++inline struct in_addr
++IPAddress::in_addr() const
++{
++    struct in_addr ia;
++    ia.s_addr = _addr;
++    return ia;
++}
++
++/** @brief Returns a struct in_addr corresponding to the address. */
++inline
++IPAddress::operator struct in_addr() const
++{
++    return in_addr();
++}
++
++StringAccum& operator<<(StringAccum&, IPAddress);
++
++/** @brief Returns true iff this address matches the address prefix
++    @a addr/@a mask.
++    @param addr prefix address
++    @param mask prefix mask
++
++    Equivalent to (@a addr & @a mask) == (*this & @a mask).  The prefix address
++    @a addr may be nonzero outside the @a mask. */
++inline bool
++IPAddress::matches_prefix(IPAddress addr, IPAddress mask) const
++{
++    return ((this->addr() ^ addr.addr()) & mask.addr()) == 0;
++}
++
++/** @brief Returns true iff this address, considered as a prefix mask, is at
++    least as specific as @a mask.
++    @param mask prefix mask
++
++    Longer prefix masks are more specific than shorter ones.  For example,
++    make_prefix(20).mask_as_specific(make_prefix(18)) is true, but
++    make_prefix(10).mask_as_specific(make_prefix(14)) is false.
++
++    Equivalent to (*this & @a mask) == @a mask. */
++inline bool
++IPAddress::mask_as_specific(IPAddress mask) const
++{
++    return (addr() & mask.addr()) == mask.addr();
++}
++
++/** @brief Returns true iff this prefix mask is more specific than @a mask.
++    @param mask prefix mask
++
++    Both this address and @a mask must be prefix masks -- i.e.,
++    mask_to_prefix_len() returns 0-32.  Returns true iff this address contains
++    a longer prefix than @a mask.  For example,
++    make_prefix(20).mask_more_specific(make_prefix(18)) is true, but
++    make_prefix(20).mask_more_specific(make_prefix(20)) is false. */
++inline bool
++IPAddress::mask_more_specific(IPAddress mask) const
++{
++    return ((addr() << 1) & mask.addr()) == mask.addr();
++}
++
++/** @relates IPAddress
++    @brief Calculates the IPAddress representing the bitwise-and of @a a and
++    @a b. */
++inline IPAddress
++operator&(IPAddress a, IPAddress b)
++{
++    return IPAddress(a.addr() & b.addr());
++}
++
++/** @brief Assign this address to its bitwise-and with @a a. */
++inline IPAddress&
++IPAddress::operator&=(IPAddress a)
++{
++    _addr &= a._addr;
++    return *this;
++}
++
++/** @relates IPAddress
++    @brief Calculates the IPAddress representing the bitwise-or of @a a and
++    @a b. */
++inline IPAddress
++operator|(IPAddress a, IPAddress b)
++{
++    return IPAddress(a.addr() | b.addr());
++}
++
++/** @brief Assign this address to its bitwise-or with @a a. */
++inline IPAddress&
++IPAddress::operator|=(IPAddress a)
++{
++    _addr |= a._addr;
++    return *this;
++}
++
++/** @relates IPAddress
++    @brief Calculates the IPAddress representing the bitwise-xor of @a a and
++    @a b. */
++inline IPAddress
++operator^(IPAddress a, IPAddress b)
++{
++    return IPAddress(a.addr() ^ b.addr());
++}
++
++/** @brief Assign this address to its bitwise-xor with @a a. */
++inline IPAddress&
++IPAddress::operator^=(IPAddress a)
++{
++    _addr ^= a._addr;
++    return *this;
++}
++
++/** @relates IPAddress
++    @brief Calculates the IPAddress representing the bitwise complement
++    of @a a. */
++inline IPAddress
++operator~(IPAddress a)
++{
++    return IPAddress(~a.addr());
++}
++
++/** @brief Hash function.
++ * @return The hash value of this IPAddress.
++ *
++ * Equal IPAddress objects always have equal hashcode() values.
++ */
++inline size_t
++IPAddress::hashcode() const
++{
++    return addr();
++}
++
++/** @brief Unparses this address into a dotted-quad format String.
++    @sa unparse */
++inline
++IPAddress::operator String() const
++{
++    return unparse();
++}
++
++/** @brief Unparses this address into a dotted-quad format String.
++    @sa unparse */
++inline String
++IPAddress::s() const
++{
++    return unparse();
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/ipflowid.hh click-1.6.0-27/inst/include/click/ipflowid.hh
+--- click-1.6.0/inst/include/click/ipflowid.hh 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/ipflowid.hh      2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,106 @@
++// -*- c-basic-offset: 2; related-file-name: "../../lib/ipflowid.cc" -*-
++#ifndef CLICK_IPFLOWID_HH
++#define CLICK_IPFLOWID_HH
++#include <click/ipaddress.hh>
++#include <click/hashcode.hh>
++CLICK_DECLS
++class Packet;
++
++class IPFlowID { public:
++
++  IPFlowID();
++  IPFlowID(IPAddress, uint16_t, IPAddress, uint16_t);
++  explicit IPFlowID(const Packet *);  // reads ip_header and udp_header
++  explicit IPFlowID(const click_ip *);        // also reads adjacent TCP/UDP header
++
++  typedef IPAddress (IPFlowID::*unspecified_bool_type)() const;
++  operator unspecified_bool_type() const;
++
++  IPAddress saddr() const             { return _saddr; }
++  IPAddress daddr() const             { return _daddr; }
++  uint16_t sport() const              { return _sport; }
++  uint16_t dport() const              { return _dport; }
++
++  void set_saddr(IPAddress a)         { _saddr = a; }
++  void set_daddr(IPAddress a)         { _daddr = a; }
++  void set_sport(uint16_t p)          { _sport = p; } // network order
++  void set_dport(uint16_t p)          { _dport = p; } // network order
++  
++  IPFlowID rev() const;
++
++  inline size_t hashcode() const;
++
++  String unparse() const;
++  operator String() const             { return unparse(); }
++  String s() const                    { return unparse(); }
++
++ protected:
++  
++  // note: several functions depend on this field order!
++  IPAddress _saddr;
++  IPAddress _daddr;
++  uint16_t _sport;                    // network byte order
++  uint16_t _dport;                    // network byte order
++
++};
++
++inline
++IPFlowID::IPFlowID()
++  : _saddr(), _daddr(), _sport(0), _dport(0)
++{
++}
++
++inline
++IPFlowID::IPFlowID(IPAddress saddr, uint16_t sport,
++                 IPAddress daddr, uint16_t dport)
++  : _saddr(saddr), _daddr(daddr), _sport(sport), _dport(dport)
++{
++}
++
++inline
++IPFlowID::operator unspecified_bool_type() const
++{
++  return _saddr || _daddr ? &IPFlowID::saddr : 0;
++}
++
++inline IPFlowID
++IPFlowID::rev() const
++{
++  return IPFlowID(_daddr, _dport, _saddr, _sport);
++}
++
++
++#define ROT(v, r) ((v)<<(r) | ((unsigned)(v))>>(32-(r)))
++
++inline size_t IPFlowID::hashcode() const
++{ 
++  // more complicated hashcode, but causes less collision
++  uint16_t s = ntohs(sport());
++  uint16_t d = ntohs(dport());
++  size_t sx = CLICK_NAME(hashcode)(saddr());
++  size_t dx = CLICK_NAME(hashcode)(daddr());
++  return (ROT(sx, s%16)
++          ^ ROT(dx, 31-d%16))
++        ^ ((d << 16) | s);
++}
++
++#undef ROT
++
++inline bool
++operator==(const IPFlowID &a, const IPFlowID &b)
++{
++  return a.dport() == b.dport() && a.sport() == b.sport()
++    && a.daddr() == b.daddr() && a.saddr() == b.saddr();
++}
++
++inline bool
++operator!=(const IPFlowID &a, const IPFlowID &b)
++{
++  return a.dport() != b.dport() || a.sport() != b.sport()
++    || a.daddr() != b.daddr() || a.saddr() != b.saddr();
++}
++
++StringAccum &operator<<(StringAccum &, const IPFlowID &);
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/iptable.hh click-1.6.0-27/inst/include/click/iptable.hh
+--- click-1.6.0/inst/include/click/iptable.hh  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/iptable.hh       2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,38 @@
++// -*- c-basic-offset: 2; related-file-name: "../../lib/iptable.cc" -*-
++#ifndef CLICK_IPTABLE_HH
++#define CLICK_IPTABLE_HH
++#include <click/glue.hh>
++#include <click/vector.hh>
++#include <click/ipaddress.hh>
++CLICK_DECLS
++
++// IP routing table.
++// Lookup by longest prefix.
++// Each entry contains a gateway and an output index.
++
++class IPTable { public:
++  
++  IPTable();
++  ~IPTable();
++
++  bool lookup(IPAddress dst, IPAddress &gw, int &index) const;
++  
++  void add(IPAddress dst, IPAddress mask, IPAddress gw, int index);
++  void del(IPAddress dst, IPAddress mask);
++  void clear()                                { _v.clear(); }
++
++ private:
++  
++  struct Entry {
++    IPAddress dst;
++    IPAddress mask;
++    IPAddress gw;
++    int index;
++    bool valid() const                        { return mask || !dst; }
++  };
++  Vector<Entry> _v;
++  
++};
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/lexer.hh click-1.6.0-27/inst/include/click/lexer.hh
+--- click-1.6.0/inst/include/click/lexer.hh    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/lexer.hh 2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,194 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/lexer.cc" -*-
++#ifndef CLICK_LEXER_HH
++#define CLICK_LEXER_HH
++#include <click/hashmap.hh>
++#include <click/router.hh>
++#include <click/glue.hh>
++#include <click/variableenv.hh>
++CLICK_DECLS
++class LexerExtra;
++
++enum Lexemes {
++    lexEOF = 0,
++    lexIdent = 256,
++    lexVariable,
++    lexArrow,
++    lex2Colon,
++    lex2Bar,
++    lex3Dot,
++    lexTunnel,
++    lexElementclass,
++    lexRequire,
++    lexDefine
++};
++
++class Lexeme { public:
++
++    Lexeme()                          : _kind(lexEOF) { }
++    Lexeme(int k, const String &s)    : _kind(k), _s(s) { }
++  
++    int kind() const                  { return _kind; }
++    bool is(int k) const              { return _kind == k; }
++  
++    const String &string() const      { return _s; }
++    String &string()                  { return _s; }
++  
++  private:
++  
++    int _kind;
++    String _s;
++  
++};
++
++class Lexer { public:
++
++    enum { TUNNEL_TYPE = 0, ERROR_TYPE = 1 };
++  
++    class TunnelEnd;
++    class Compound;
++    typedef Router::Hookup Hookup;
++  
++    Lexer();
++    virtual ~Lexer();
++  
++    int begin_parse(const String &data, const String &filename, LexerExtra *, ErrorHandler * = 0);
++    void end_parse(int);
++
++    VariableEnvironment &global_scope()       { return _global_scope; }
++    ErrorHandler *errh() const                { return _errh; }
++  
++    String remaining_text() const;
++    void set_remaining_text(const String &);
++  
++    const Lexeme &lex();
++    void unlex(const Lexeme &);
++    String lex_config();
++    String landmark() const;
++  
++    bool expect(int, bool report_error = true);
++
++    typedef Element *(*ElementFactory)(uintptr_t);
++#ifdef CLICK_LINUXMODULE
++    int add_element_type(const String &, ElementFactory factory, uintptr_t thunk, struct module *module, bool scoped = false);
++#else
++    int add_element_type(const String &, ElementFactory factory, uintptr_t thunk, bool scoped = false);
++#endif
++    int element_type(const String &) const;
++    int force_element_type(String);
++
++    void element_type_names(Vector<String> &) const;
++  
++    int remove_element_type(int t)    { return remove_element_type(t, 0); }
++
++    void connect(int element1, int port1, int element2, int port2);
++    String element_name(int) const;
++    String element_landmark(int) const;
++    
++    void add_tunnel(String, String);
++  
++    bool yport(int &port);
++    bool yelement(int &element, bool comma_ok);
++    void ydeclaration(const String &first_element = String());
++    bool yconnection();
++    void yelementclass();
++    void ytunnel();
++    void ycompound_arguments(Compound *);
++    int ycompound(String name = String());
++    void yrequire();
++    void yvar();
++    bool ystatement(bool nested = false);
++  
++    Router *create_router(Master *);
++
++  private:
++    
++    // lexer
++    String _big_string;
++  
++    const char *_data;
++    const char *_end;
++    const char *_pos;
++  
++    String _filename;
++    String _original_filename;
++    unsigned _lineno;
++    LexerExtra *_lextra;
++  
++    const char *skip_line(const char *);
++    const char *skip_slash_star(const char *);
++    const char *skip_backslash_angle(const char *);
++    const char *skip_quote(const char *, char);
++    const char *process_line_directive(const char *);
++    Lexeme next_lexeme();
++    static String lexeme_string(int);
++  
++    // parser
++    enum { TCIRCLE_SIZE = 8 };
++    Lexeme _tcircle[TCIRCLE_SIZE];
++    int _tpos;
++    int _tfull;
++  
++    // element types
++    struct ElementType {
++      ElementFactory factory;
++      uintptr_t thunk;
++#ifdef CLICK_LINUXMODULE
++      struct module *module;
++#endif
++      String name;
++      int next;
++    };
++    HashMap<String, int> _element_type_map;
++    Vector<ElementType> _element_types;
++    enum { ET_SCOPED = 0x80000000, ET_TMASK = 0x7FFFFFFF, ET_NULL = 0x7FFFFFFF };
++    int _last_element_type;
++    int _free_element_type;
++    VariableEnvironment _global_scope;
++
++    // elements
++    HashMap<String, int> _element_map;
++    Compound *_c;
++  
++    TunnelEnd *_definputs;
++    TunnelEnd *_defoutputs;
++  
++    // compound elements
++    int _anonymous_offset;
++
++    // requirements
++    Vector<String> _requirements;
++  
++    // errors
++    ErrorHandler *_errh;
++  
++    int lerror(const char *, ...);
++
++    String anon_element_name(const String &) const;
++    String deanonymize_element_name(const String &, int);
++    int get_element(String, int, const String & = String(), const String & = String());
++    int lexical_scoping_in() const;
++    void lexical_scoping_out(int);
++    int remove_element_type(int, int *);
++    int make_compound_element(int);
++    void expand_compound_element(int, VariableEnvironment &);
++    void add_router_connections(int, const Vector<int> &, Router *);
++
++    void find_connections(const Hookup &, bool, Vector<Hookup> &) const;
++    void expand_connection(const Hookup &, bool, Vector<Hookup> &) const;
++  
++    friend class Compound;
++    friend class TunnelEnd;
++  
++};
++
++class LexerExtra { public:
++  
++    LexerExtra()                      { }
++    virtual ~LexerExtra()             { }
++  
++    virtual void require(String, ErrorHandler *);
++
++};
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/llrpc.h click-1.6.0-27/inst/include/click/llrpc.h
+--- click-1.6.0/inst/include/click/llrpc.h     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/llrpc.h  2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,182 @@
++#ifndef CLICK_LLRPC_H
++#define CLICK_LLRPC_H
++#if CLICK_LINUXMODULE
++# include <linux/errno.h>
++# include <linux/ioctl.h>
++#else
++# include <errno.h>
++# include <sys/ioctl.h>
++#endif
++
++/* Click low-level RPC interface */
++
++/* Ioctl numbers are not consistent across platforms unless you #define
++   HAVE_PORTABLE_LLRPC. */
++#define _CLICK_NET_IOC_VOID   0x20000000
++#define _CLICK_NET_IOC_OUT    0x40000000
++#define _CLICK_NET_IOC_IN     0x80000000
++#if HAVE_PORTABLE_LLRPC || !defined(__linux__)
++# define _CLICK_IOC_VOID      _CLICK_NET_IOC_VOID
++# define _CLICK_IOC_OUT               _CLICK_NET_IOC_OUT
++# define _CLICK_IOC_IN                _CLICK_NET_IOC_IN
++#else
++# define _CLICK_IOC_VOID      (_IOC_NONE << _IOC_DIRSHIFT)
++# define _CLICK_IOC_OUT               (_IOC_READ << _IOC_DIRSHIFT)
++# define _CLICK_IOC_IN                (_IOC_WRITE << _IOC_DIRSHIFT)
++#endif
++#define _CLICK_IOC_BASE_MASK  0x0FFFFFFF
++#define _CLICK_IOC_SAFE               0x00008000
++#define _CLICK_IOC_FLAT               0x00004000
++#define _CLICK_IOC_SIZE(io)   ((io) >> 16 & 0xFFF)
++
++/* _CLICK_IO[S]: data transfer direction unknown, pass pointer unchanged;
++   _CLICK_IOR[S]: data of specified size sent from kernel to user;
++   _CLICK_IOW[S]: data of specified size sent from user to kernel;
++   _CLICK_IOWR[S]: data of specified size transferred in both directions. */
++
++/* "Non-safe" LLRPCs will not be performed in parallel with other LLRPCs or
++   handlers. */
++#define _CLICK_IOX(d, n, sz)  ((d) | ((sz) << 16) | (n))
++#define _CLICK_IO(n)          _CLICK_IOX(_CLICK_IOC_VOID, (n), 0)
++#define _CLICK_IOR(n, sz)     _CLICK_IOX(_CLICK_IOC_OUT, (n), (sz))
++#define _CLICK_IOW(n, sz)     _CLICK_IOX(_CLICK_IOC_IN, (n), (sz))
++#define _CLICK_IOWR(n, sz)    _CLICK_IOX(_CLICK_IOC_IN|_CLICK_IOC_OUT, (n), (sz))
++
++/* "Safe" LLRPCs may be performed in parallel with read handlers and other
++   safe LLRPCs, but not with write handlers or unsafe LLRPCs. */
++#define _CLICK_IOS(n)         _CLICK_IOX(_CLICK_IOC_VOID|_CLICK_IOC_SAFE, (n), 0)
++#define _CLICK_IORS(n, sz)    _CLICK_IOX(_CLICK_IOC_OUT|_CLICK_IOC_SAFE, (n), (sz))
++#define _CLICK_IOWS(n, sz)    _CLICK_IOX(_CLICK_IOC_IN|_CLICK_IOC_SAFE, (n), (sz))
++#define _CLICK_IOWRS(n, sz)   _CLICK_IOX(_CLICK_IOC_IN|_CLICK_IOC_OUT|_CLICK_IOC_SAFE, (n), (sz))
++
++/* "Flat" LLRPCs do not contain pointers -- all data read or written is
++   contained in the size. They can be safe or unsafe. */
++#define _CLICK_IORF(n, sz)    _CLICK_IOX(_CLICK_IOC_OUT|_CLICK_IOC_FLAT, (n), (sz))
++#define _CLICK_IOWF(n, sz)    _CLICK_IOX(_CLICK_IOC_IN|_CLICK_IOC_FLAT, (n), (sz))
++#define _CLICK_IOWRF(n, sz)   _CLICK_IOX(_CLICK_IOC_IN|_CLICK_IOC_OUT|_CLICK_IOC_FLAT, (n), (sz))
++#define _CLICK_IORSF(n, sz)   _CLICK_IOX(_CLICK_IOC_OUT|_CLICK_IOC_SAFE|_CLICK_IOC_FLAT, (n), (sz))
++#define _CLICK_IOWSF(n, sz)   _CLICK_IOX(_CLICK_IOC_IN|_CLICK_IOC_SAFE|_CLICK_IOC_FLAT, (n), (sz))
++#define _CLICK_IOWRSF(n, sz)  _CLICK_IOX(_CLICK_IOC_IN|_CLICK_IOC_OUT|_CLICK_IOC_SAFE|_CLICK_IOC_FLAT, (n), (sz))
++
++#define CLICK_LLRPC_PROXY                     _CLICK_IO(0)
++#define CLICK_LLRPC_GET_RATE                  _CLICK_IOWRSF(1, 4)
++#define CLICK_LLRPC_GET_RATES                 _CLICK_IOS(2)
++#define CLICK_LLRPC_GET_COUNT                 _CLICK_IOWRSF(3, 4)
++#define CLICK_LLRPC_GET_COUNTS                        _CLICK_IOS(4)
++#define CLICK_LLRPC_GET_SWITCH                        _CLICK_IORSF(5, 4)
++#define CLICK_LLRPC_SET_SWITCH                        _CLICK_IOWF(6, 4)
++#define CLICK_LLRPC_MAP_IPADDRESS             _CLICK_IOWRF(7, 4)
++#define CLICK_LLRPC_IPREWRITER_MAP_TCP                _CLICK_IOWRSF(8, 12)
++#define CLICK_LLRPC_IPREWRITER_MAP_UDP                _CLICK_IOWRSF(9, 12)
++#define CLICK_LLRPC_IPRATEMON_LEVEL_FWD_AVG   _CLICK_IO(10)
++#define CLICK_LLRPC_IPRATEMON_LEVEL_REV_AVG   _CLICK_IO(11)
++#define CLICK_LLRPC_IPRATEMON_FWD_N_REV_AVG   _CLICK_IO(12)
++#define CLICK_LLRPC_IPRATEMON_SET_ANNO_LEVEL  _CLICK_IO(13)
++
++#define CLICK_IOC_TOUSERDEVICE_GET_MULTI      _CLICK_IOS(14)
++#define CLICK_IOC_TOUSERDEVICE_SET_MULTI      _CLICK_IOS(15)
++
++struct click_llrpc_proxy_st {
++  void* proxied_handler;      /* const Router::Handler* */
++  uint32_t proxied_command;
++  void* proxied_data;
++};
++
++#define CLICK_LLRPC_COUNTS_SIZE 8
++struct click_llrpc_counts_st {
++  uint32_t n;
++  uint32_t keys[CLICK_LLRPC_COUNTS_SIZE];
++  uint32_t values[CLICK_LLRPC_COUNTS_SIZE];
++};
++
++
++/* data manipulation */
++
++#if CLICK_USERLEVEL
++
++# define CLICK_LLRPC_GET_DATA(local, remote, size) (memcpy(local, remote, size), 0)
++# define CLICK_LLRPC_PUT_DATA(remote, local, size) (memcpy(remote, local, size), 0)
++# define CLICK_LLRPC_GET(local_obj, remote_addr) (memcpy(&(local_obj), remote_addr, sizeof(local_obj)), 0)
++# define CLICK_LLRPC_PUT(remote_addr, local_obj) (memcpy(remote_addr, &(local_obj), sizeof(local_obj)), 0)
++
++#elif CLICK_LINUXMODULE
++
++# ifdef __cplusplus
++#  define __CLICK_LLRPC_CAST(x) reinterpret_cast< x >
++extern "C" {
++#  include <asm/uaccess.h>
++}
++# else
++#  define __CLICK_LLRPC_CAST(x) (x)
++#  include <asm/uaccess.h>
++# endif
++
++# define __CLICK_LLRPC_GENERIC_GET_DATA(local, remote, size) \
++              (copy_from_user(local, remote, size) > 0 ? -EFAULT : 0)
++# define __CLICK_LLRPC_CONSTANT_GET_DATA(local, remote, size) \
++              (size == 1 ? get_user(*__CLICK_LLRPC_CAST(unsigned char *)(local), __CLICK_LLRPC_CAST(unsigned char *)(remote)) \
++               : (size == 2 ? get_user(*__CLICK_LLRPC_CAST(unsigned short *)(local), __CLICK_LLRPC_CAST(unsigned short *)(remote)) \
++                  : (size == 4 ? get_user(*__CLICK_LLRPC_CAST(unsigned *)(local), __CLICK_LLRPC_CAST(unsigned *)(remote)) \
++                     : __CLICK_LLRPC_GENERIC_GET_DATA(local, remote, size))))
++
++# define __CLICK_LLRPC_GENERIC_PUT_DATA(remote, local, size) \
++              (copy_to_user(remote, local, size) > 0 ? -EFAULT : 0)
++# define __CLICK_LLRPC_CONSTANT_PUT_DATA(remote, local, size) \
++              (size == 1 ? put_user(*__CLICK_LLRPC_CAST(const unsigned char *)(local), __CLICK_LLRPC_CAST(unsigned char *)(remote)) \
++               : (size == 2 ? put_user(*__CLICK_LLRPC_CAST(const unsigned short *)(local), __CLICK_LLRPC_CAST(unsigned short *)(remote)) \
++                  : (size == 4 ? put_user(*__CLICK_LLRPC_CAST(const unsigned *)(local), __CLICK_LLRPC_CAST(unsigned *)(remote)) \
++                     : __CLICK_LLRPC_GENERIC_PUT_DATA(remote, local, size))))
++
++# define CLICK_LLRPC_GET_DATA(local, remote, size) \
++              (__builtin_constant_p(size) && size <= 4 \
++               ? __CLICK_LLRPC_CONSTANT_GET_DATA(local, remote, size) \
++               : __CLICK_LLRPC_GENERIC_GET_DATA(local, remote, size))
++# define CLICK_LLRPC_PUT_DATA(remote, local, size) \
++              (__builtin_constant_p(size) && size <= 4 \
++               ? __CLICK_LLRPC_CONSTANT_PUT_DATA(remote, local, size) \
++               : __CLICK_LLRPC_GENERIC_PUT_DATA(remote, local, size))
++
++# define CLICK_LLRPC_GET(local_obj, remote_addr) \
++              get_user((local_obj), (remote_addr))
++# define CLICK_LLRPC_PUT(remote_addr, local_obj) \
++              put_user((local_obj), (remote_addr))
++
++#elif CLICK_BSDMODULE
++
++/*
++ * XXX  LLRPC isn't implemented for BSD yet.
++ */
++
++# define CLICK_LLRPC_GET_DATA(local, remote, size) ((void)(local), (void)(remote), (void)(size), -EFAULT)
++# define CLICK_LLRPC_PUT_DATA(remote, local, size) ((void)(local), (void)(remote), (void)(size), -EFAULT)
++# define CLICK_LLRPC_GET(local_obj, remote_addr) ((void)(local_obj), (void)(remote_addr), -EFAULT)
++# define CLICK_LLRPC_PUT(remote_addr, local_obj) ((void)(local_obj), (void)(remote_addr), -EFAULT)
++
++#endif
++
++/* CLICK_NTOH_LLRPC: portable LLRPC numbers to host LLRPC numbers */
++/* CLICK_HTON_LLRPC: host LLRPC numbers to portable LLRPC numbers */
++/* both macros are only suitable for integer constants and the like */
++#if _CLICK_IOC_VOID != _CLICK_NET_IOC_VOID || _CLICK_IOC_OUT != _CLICK_NET_IOC_OUT || _CLICK_IOC_IN != _CLICK_NET_IOC_IN
++# define CLICK_LLRPC_NTOH(command) \
++      (((command) & _CLICK_NET_IOC_VOID ? _CLICK_IOC_VOID : 0) \
++       | ((command) & _CLICK_NET_IOC_OUT ? _CLICK_IOC_OUT : 0) \
++       | ((command) & _CLICK_NET_IOC_IN ? _CLICK_IOC_IN : 0) \
++       | ((command) & _CLICK_IOC_BASE_MASK))
++# define CLICK_LLRPC_HTON(command) \
++      (((command) & _CLICK_IOC_VOID ? _CLICK_NET_IOC_VOID : 0) \
++       | ((command) & _CLICK_IOC_OUT ? _CLICK_NET_IOC_OUT : 0) \
++       | ((command) & _CLICK_IOC_IN ? _CLICK_NET_IOC_IN : 0) \
++       | ((command) & _CLICK_IOC_BASE_MASK))
++#else
++# define CLICK_LLRPC_NTOH(command) (command)
++# define CLICK_LLRPC_HTON(command) (command)
++#endif
++
++/* sanity checks */
++#ifdef __FreeBSD__
++# if _CLICK_IOC_VOID != IOC_VOID || _CLICK_IOC_OUT != IOC_OUT || _CLICK_IOC_IN != IOC_IN
++#  error "bad _CLICK_IOC constants"
++# endif
++#endif
++#endif
+diff -Nurb click-1.6.0/inst/include/click/master.hh click-1.6.0-27/inst/include/click/master.hh
+--- click-1.6.0/inst/include/click/master.hh   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/master.hh        2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,265 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/master.cc" -*-
++#ifndef CLICK_MASTER_HH
++#define CLICK_MASTER_HH
++#include <click/vector.hh>
++#include <click/timer.hh>
++#include <click/task.hh>
++#include <click/sync.hh>
++#include <click/atomic.hh>
++#if CLICK_USERLEVEL
++# include <unistd.h>
++# include <signal.h>
++# if HAVE_POLL_H
++#  include <poll.h>
++# endif
++#endif
++#if CLICK_NS
++# include <click/simclick.h>
++#endif
++CLICK_DECLS
++class Element;
++
++#define CLICK_DEBUG_MASTER 0
++
++class Master { public:
++
++    Master(int nthreads);
++    ~Master();
++
++    void use();
++    void unuse();
++
++    void pause();
++    inline void unpause();
++
++    inline int nthreads() const;
++    inline RouterThread* thread(int id) const;
++
++    const volatile int* stopper_ptr() const   { return &_stopper; }
++    
++    Timestamp next_timer_expiry() const               { return _timer_expiry; }
++    void run_timers();
++    
++#if CLICK_USERLEVEL
++    int add_select(int fd, Element*, int mask);
++    int remove_select(int fd, Element*, int mask);
++    void run_selects(bool more_tasks);
++
++    int add_signal_handler(int signo, Router*, const String &handler);
++    int remove_signal_handler(int signo, Router*, const String &handler);
++    inline void run_signals();
++#endif
++
++    void kill_router(Router*);
++    
++#if CLICK_NS
++    void initialize_ns(simclick_node_t *simnode);
++    simclick_node_t *simnode() const          { return _simnode; }
++#endif
++    
++#if CLICK_DEBUG_MASTER
++    String info() const;
++#endif
++
++#if CLICK_USERLEVEL
++    static sig_atomic_t signals_pending;
++#endif
++    
++  private:
++
++    // stick _timer_expiry here so it will most likely fit in a cache line,
++    // & we don't have to worry about its parts being updated separately
++    Timestamp _timer_expiry;
++    
++#if CLICK_LINUXMODULE
++    spinlock_t _master_lock;
++    struct task_struct *_master_lock_task;
++    int _master_lock_count;
++#endif
++    atomic_uint32_t _master_paused;
++    inline void lock_master();
++    inline void unlock_master();
++
++    // ROUTERS
++    Router* _routers;
++    int _refcount;
++    void register_router(Router*);
++    void prepare_router(Router*);
++    void run_router(Router*, bool foreground);
++    void unregister_router(Router*);
++
++    // THREADS
++    Vector<RouterThread*> _threads;
++
++    // DRIVERMANAGER
++    volatile int _stopper;
++    inline void set_stopper(int);
++    bool check_driver();
++
++    // PENDING TASKS
++    uintptr_t _pending_head;
++    volatile uintptr_t *_pending_tail;
++    SpinlockIRQ _task_lock;
++    void process_pending(RouterThread*);
++
++    // TIMERS
++    Vector<Timer*> _timer_heap;
++#if CLICK_LINUXMODULE
++    spinlock_t _timer_lock;
++    struct task_struct *_timer_task;
++#endif
++    void lock_timers();
++    bool attempt_lock_timers();
++    void unlock_timers();
++    void timer_reheapify_from(int, Timer*, bool will_delete);
++
++#if CLICK_USERLEVEL
++    // SELECT
++# if HAVE_SYS_EVENT_H && HAVE_KQUEUE
++    int _kqueue;
++    int _selected_callno;
++    Vector<int> _selected_callnos;
++# endif
++# if !HAVE_POLL_H
++    struct pollfd {
++      int fd;
++      int events;
++    };
++    fd_set _read_select_fd_set;
++    fd_set _write_select_fd_set;
++    int _max_select_fd;
++# endif /* HAVE_POLL_H */
++    Vector<struct pollfd> _pollfds;
++    Vector<Element*> _read_poll_elements;
++    Vector<Element*> _write_poll_elements;
++    Spinlock _select_lock;
++    void remove_pollfd(int pi, int event);
++# if HAVE_SYS_EVENT_H && HAVE_KQUEUE
++    void run_selects_kqueue(bool);
++# endif
++# if HAVE_POLL_H
++    void run_selects_poll(bool);
++# else
++    void run_selects_select(bool);
++# endif
++
++    // SIGNALS
++    struct SignalInfo {
++      int signo;
++      Router *router;
++      String handler;
++      SignalInfo *next;
++    };
++    SignalInfo *_siginfo;
++    bool _signal_adding;
++    Spinlock _signal_lock;
++    void process_signals();
++#endif
++
++#if CLICK_NS
++    simclick_node_t *_simnode;
++#endif
++    
++    Master(const Master&);
++    Master& operator=(const Master&);
++        
++    friend class Task;
++    friend class Timer;
++    friend class RouterThread;
++    friend class Router;
++    
++};
++
++inline int
++Master::nthreads() const
++{
++    return _threads.size() - 2;
++}
++
++inline RouterThread*
++Master::thread(int id) const
++{
++    // return the requested thread, or the quiescent thread if there's no such
++    // thread
++    if ((unsigned)(id + 2) < (unsigned)_threads.size())
++      return _threads.at_u(id + 2);
++    else
++      return _threads.at_u(1);
++}
++
++#if CLICK_USERLEVEL
++inline void
++Master::run_signals()
++{
++    if (signals_pending)
++      process_signals();
++}
++#endif
++
++inline void
++Master::set_stopper(int s)
++{
++    _stopper = s;
++}
++
++inline void
++Master::lock_master()
++{
++#if CLICK_LINUXMODULE
++    if (current != _master_lock_task) {
++      spin_lock(&_master_lock);
++      _master_lock_task = current;
++    } else
++      _master_lock_count++;
++#endif
++}
++
++inline void
++Master::unlock_master()
++{
++#if CLICK_LINUXMODULE
++    assert(current == _master_lock_task);
++    if (_master_lock_count == 0) {
++      _master_lock_task = 0;
++      spin_unlock(&_master_lock);
++    } else
++      _master_lock_count--;
++#endif
++}
++
++inline void
++Master::unpause()
++{
++    _master_paused--;
++}
++
++inline void
++Master::lock_timers()
++{
++#if CLICK_LINUXMODULE
++    if (current != _timer_task)
++      spin_lock(&_timer_lock);
++#endif
++}
++
++inline bool
++Master::attempt_lock_timers()
++{
++#if CLICK_LINUXMODULE
++    return spin_trylock(&_timer_lock);
++#else
++    return true;
++#endif
++}
++
++inline void
++Master::unlock_timers()
++{
++#if CLICK_LINUXMODULE
++    if (current != _timer_task)
++      spin_unlock(&_timer_lock);
++#endif
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/md5.h click-1.6.0-27/inst/include/click/md5.h
+--- click-1.6.0/inst/include/click/md5.h       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/md5.h    2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,146 @@
++/* -*- related-file-name: "../../lib/md5.cc" -*-
++  Copyright (c) 2006-2007 Regents of the University of California
++  Altered for Click by Eddie Kohler. */
++/*
++  Copyright (C) 1999, 2002 Aladdin Enterprises.  All rights reserved.
++
++  This software is provided 'as-is', without any express or implied
++  warranty.  In no event will the authors be held liable for any damages
++  arising from the use of this software.
++
++  Permission is granted to anyone to use this software for any purpose,
++  including commercial applications, and to alter it and redistribute it
++  freely, subject to the following restrictions:
++
++  1. The origin of this software must not be misrepresented; you must not
++     claim that you wrote the original software. If you use this software
++     in a product, an acknowledgment in the product documentation would be
++     appreciated but is not required.
++  2. Altered source versions must be plainly marked as such, and must not be
++     misrepresented as being the original software.
++  3. This notice may not be removed or altered from any source distribution.
++
++  L. Peter Deutsch
++  ghost@aladdin.com
++
++ */
++/*
++  Independent implementation of MD5 (RFC 1321).
++
++  This code implements the MD5 Algorithm defined in RFC 1321, whose
++  text is available at
++      http://www.ietf.org/rfc/rfc1321.txt
++  The code is derived from the text of the RFC, including the test suite
++  (section A.5) but excluding the rest of Appendix A.  It does not include
++  any code or documentation that is identified in the RFC as being
++  copyrighted.
++
++  The original and principal author of md5.h is L. Peter Deutsch
++  <ghost@aladdin.com>.  Other authors are noted in the change history
++  that follows (in reverse chronological order):
++
++  2002-04-13 lpd Removed support for non-ANSI compilers; removed
++      references to Ghostscript; clarified derivation from RFC 1321;
++      now handles byte order either statically or dynamically.
++  1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
++  1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5);
++      added conditionalization for C++ compilation from Martin
++      Purschke <purschke@bnl.gov>.
++  1999-05-03 lpd Original version.
++ */
++
++#ifndef CLICK_MD5_H
++#define CLICK_MD5_H
++#if CLICK_LINUXMODULE
++#include <click/cxxprotect.h>
++CLICK_CXX_PROTECT
++#include <linux/crypto.h>
++#include <asm/scatterlist.h>
++CLICK_CXX_UNPROTECT
++#include <click/cxxunprotect.h>
++
++typedef struct crypto_tfm *md5_state_t;
++
++static inline void md5_init(md5_state_t *pms) {
++    *pms = crypto_alloc_tfm("md5", 0);
++    if (*pms)
++      crypto_digest_init(*pms);
++}
++
++static inline void md5_append(md5_state_t *pms, const unsigned char *data, int nbytes) {
++    if (*pms) {
++      struct scatterlist sg[1];
++      sg[0].page = virt_to_page(data);
++      sg[0].offset = offset_in_page(data);
++      sg[0].length = nbytes;
++      crypto_digest_update(*pms, sg, 1);
++    }
++}
++
++static inline void md5_finish(md5_state_t *pms, const unsigned char digest[16]) {
++    if (*pms)
++      crypto_digest_final(*pms, digest);
++}
++
++static inline void md5_free(md5_state_t *pms) {
++    crypto_free_tfm(*pms);
++}
++
++#else
++
++/*
++ * This package supports both compile-time and run-time determination of CPU
++ * byte order.  If ARCH_IS_BIG_ENDIAN is defined as 0, the code will be
++ * compiled to run only on little-endian CPUs; if ARCH_IS_BIG_ENDIAN is
++ * defined as non-zero, the code will be compiled to run only on big-endian
++ * CPUs; if ARCH_IS_BIG_ENDIAN is not defined, the code will be compiled to
++ * run on either big- or little-endian CPUs, but will run slightly less
++ * efficiently on either one than if ARCH_IS_BIG_ENDIAN is defined.
++ */
++
++typedef unsigned char md5_byte_t; /* 8-bit byte */
++typedef uint32_t md5_word_t; /* 32-bit word */
++
++/* Define the state of the MD5 Algorithm. */
++typedef struct md5_state_s {
++    md5_word_t count[2];      /* message length in bits, lsw first */
++    md5_word_t abcd[4];               /* digest buffer */
++    md5_byte_t buf[64];               /* accumulate block */
++} md5_state_t;
++
++#ifdef __cplusplus
++extern "C" 
++{
++#endif
++
++/* Initialize the algorithm. */
++void md5_init(md5_state_t *pms);
++
++/* Append a string to the message. */
++void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes);
++
++/* Finish the message and return the digest. */
++#define MD5_DIGEST_SIZE                       16
++void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);
++
++/* Finish the message and return the digest in ASCII.  DOES NOT write a
++   terminating NUL character.
++   If 'allow_at == 0', the digest uses characters [A-Za-z0-9_], and has
++   length between MD5_TEXT_DIGEST_SIZE and MD5_TEXT_DIGEST_MAX_SIZE.
++   If 'allow_at != 0', the digest uses characters [A-Za-z0-9_@], and has
++   length of exactly MD5_TEXT_DIGEST_SIZE.
++   Returns the number of characters written.  Again, this will NOT include
++   a terminating NUL. */
++#define MD5_TEXT_DIGEST_SIZE          22      /* min len */
++#define MD5_TEXT_DIGEST_MAX_SIZE      26      /* max len if !allow_at */
++int md5_finish_text(md5_state_t *pms, char *text_digest, int allow_at);
++
++#define md5_free(pms)         /* do nothing */
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif
++#endif
++
+diff -Nurb click-1.6.0/inst/include/click/nameinfo.hh click-1.6.0-27/inst/include/click/nameinfo.hh
+--- click-1.6.0/inst/include/click/nameinfo.hh 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/nameinfo.hh      2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,210 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/nameinfo.cc" -*-
++#ifndef CLICK_NAMEINFO_HH
++#define CLICK_NAMEINFO_HH
++#include <click/string.hh>
++#include <click/vector.hh>
++#include <click/straccum.hh>
++CLICK_DECLS
++class Element;
++class NameDB;
++class ErrorHandler;
++
++class NameInfo { public:
++
++    NameInfo();
++    ~NameInfo();
++
++    static void static_initialize();
++    static void static_cleanup();
++
++    enum {
++      T_NONE = 0,
++      T_SCHEDULEINFO = 0x00000001,
++      T_SCRIPT_INSN = 0x00000002,
++      T_SIGNO = 0x00000003,
++      T_ETHERNET_ADDR = 0x01000001,
++      T_IP_ADDR = 0x04000001,
++      T_IP_PREFIX = 0x04000002,
++      T_IP_PROTO = 0x04000003,
++      T_IPFILTER_TYPE = 0x04000004,
++      T_TCP_OPT = 0x04000005,
++      T_ICMP_TYPE = 0x04010000,
++      T_ICMP_CODE = 0x04010100,
++      T_IP_PORT = 0x04020000,
++      T_TCP_PORT = 0x04020006,
++      T_UDP_PORT = 0x04020011,
++      T_IP_FIELDNAME = 0x04030000,
++      T_ICMP_FIELDNAME = 0x04030001,
++      T_TCP_FIELDNAME = 0x04030006,
++      T_UDP_FIELDNAME = 0x04030011,
++      T_IP6_ADDR = 0x06000001,
++      T_IP6_PREFIX = 0x06000002
++    };
++
++    static NameDB *getdb(uint32_t type, const Element *prefix, int value_size, bool create);
++    static void installdb(NameDB *db, const Element *prefix);
++    static void removedb(NameDB *db);
++
++    static bool query(uint32_t type, const Element *prefix, const String &name, void *value_store, int value_size);
++    static bool query_int(uint32_t type, const Element *prefix, const String &name, int32_t *value_store);
++    static bool query_int(uint32_t type, const Element *prefix, const String &name, uint32_t *value_store);
++    static String revquery(uint32_t type, const Element *prefix, const void *value, int value_size);
++    static inline String revquery_int(uint32_t type, const Element *prefix, int32_t value);
++    static inline void define(uint32_t type, const Element *prefix, const String &name, const void *value, int value_size);
++    static inline void define_int(uint32_t type, const Element *prefix, const String &name, int32_t value);
++
++#ifdef CLICK_NAMEDB_CHECK
++    void check(ErrorHandler *);
++    static void check(const Element *, ErrorHandler *);
++#endif
++    
++  private:
++    
++    Vector<NameDB *> _namedb_roots;
++    Vector<NameDB *> _namedbs;
++
++    inline NameDB *install_dynamic_sentinel() { return (NameDB *) this; }
++    NameDB *namedb(uint32_t type, int value_size, const String &prefix, NameDB *installer);
++    
++#ifdef CLICK_NAMEDB_CHECK
++    uintptr_t _check_generation;
++    void checkdb(NameDB *db, NameDB *parent, ErrorHandler *errh);
++#endif
++    
++};
++
++
++class NameDB { public:
++    
++    inline NameDB(uint32_t type, const String &prefix, int value_size);
++    virtual ~NameDB()                 { }
++
++    uint32_t type() const             { return _type; }
++    int value_size() const            { return _value_size; }
++    const String &prefix() const      { return _prefix; }
++    NameDB *prefix_parent() const     { return _prefix_parent; }
++
++    virtual bool query(const String &name, void *value, int vsize) = 0;
++    virtual String revfind(const void *value, int vsize);
++    virtual void define(const String &name, const void *value, int vsize);
++    inline void define_int(const String &name, int32_t value);
++
++#ifdef CLICK_NAMEDB_CHECK
++    virtual void check(ErrorHandler *);
++#endif
++    
++  private:
++    
++    uint32_t _type;
++    String _prefix;
++    int _value_size;
++    NameDB *_prefix_parent;
++    NameDB *_prefix_sibling;
++    NameDB *_prefix_child;
++    NameInfo *_installed;
++
++#ifdef CLICK_NAMEDB_CHECK
++    uintptr_t _check_generation;
++#endif
++    
++    friend class NameInfo;
++    
++};
++
++class StaticNameDB : public NameDB { public:
++
++    struct Entry {
++      const char *name;
++      uint32_t value;
++    };
++
++    inline StaticNameDB(uint32_t type, const String &prefix, const Entry *entry, int nentry);
++
++    bool query(const String &name, void *value, int vsize);
++    String revfind(const void *value, int vsize);
++
++#ifdef CLICK_NAMEDB_CHECK
++    void check(ErrorHandler *);
++#endif
++    
++  private:
++
++    const Entry *_entries;
++    int _nentries;
++      
++};
++
++class DynamicNameDB : public NameDB { public:
++
++    inline DynamicNameDB(uint32_t type, const String &prefix, int vsize);
++
++    bool query(const String &name, void *value, int vsize);
++    void define(const String &name, const void *value, int vsize);
++    String revfind(const void *value, int vsize);
++    
++#ifdef CLICK_NAMEDB_CHECK
++    void check(ErrorHandler *);
++#endif
++    
++  private:
++
++    Vector<String> _names;
++    StringAccum _values;
++    int _sorted;
++
++    void *find(const String &name, bool create);
++    void sort();
++    
++};
++
++
++inline
++NameDB::NameDB(uint32_t type, const String &prefix, int vsize)
++    : _type(type), _prefix(prefix), _value_size(vsize),
++      _prefix_parent(0), _prefix_sibling(0), _prefix_child(0), _installed(0)
++{
++#ifdef CLICK_NAMEDB_CHECK
++    _check_generation = 0;
++#endif
++}
++
++inline
++StaticNameDB::StaticNameDB(uint32_t type, const String &prefix, const Entry *entry, int nentry)
++    : NameDB(type, prefix, sizeof(entry->value)), _entries(entry), _nentries(nentry)
++{
++}
++
++inline
++DynamicNameDB::DynamicNameDB(uint32_t type, const String &prefix, int vsize)
++    : NameDB(type, prefix, vsize), _sorted(0)
++{
++}
++
++inline String
++NameInfo::revquery_int(uint32_t type, const Element *e, int32_t value)
++{
++    return revquery(type, e, &value, sizeof(value));
++}
++
++inline void
++NameInfo::define(uint32_t type, const Element *e, const String &name, const void *value, int vsize)
++{
++    if (NameDB *db = getdb(type, e, vsize, true))
++      db->define(name, value, vsize);
++}
++
++inline void
++NameInfo::define_int(uint32_t type, const Element *e, const String &name, const int32_t value)
++{
++    if (NameDB *db = getdb(type, e, sizeof(value), true))
++      db->define(name, &value, sizeof(value));
++}
++
++inline void
++NameDB::define_int(const String &name, const int32_t value)
++{
++    define(name, &value, sizeof(value));
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/notifier.hh click-1.6.0-27/inst/include/click/notifier.hh
+--- click-1.6.0/inst/include/click/notifier.hh 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/notifier.hh      2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,488 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/notifier.cc" -*-
++#ifndef CLICK_NOTIFIER_HH
++#define CLICK_NOTIFIER_HH
++#include <click/task.hh>
++#include <click/atomic.hh>
++CLICK_DECLS
++
++class NotifierSignal { public:
++
++    inline NotifierSignal();          // always active
++    inline NotifierSignal(atomic_uint32_t* value, uint32_t mask);
++
++    static inline NotifierSignal idle_signal();
++    static inline NotifierSignal busy_signal();
++    static inline NotifierSignal overderived_signal();
++    static inline NotifierSignal uninitialized_signal();
++
++    typedef bool (NotifierSignal::*unspecified_bool_type)() const;
++    inline operator unspecified_bool_type() const;
++    inline bool active() const;
++
++    inline bool idle() const;
++    inline bool busy() const;
++    inline bool overderived() const;
++    inline bool initialized() const;
++
++    inline void set_active(bool active);
++
++    NotifierSignal& operator+=(const NotifierSignal& a);
++
++    String unparse() const;
++    
++    static void static_initialize();
++    
++  private:
++
++    atomic_uint32_t* _value;
++    uint32_t _mask;
++
++    enum { TRUE_MASK = 1, FALSE_MASK = 2, OVERDERIVED_MASK = 4,
++         UNINITIALIZED_MASK = 8 };
++    static atomic_uint32_t static_value;
++    friend bool operator==(const NotifierSignal&, const NotifierSignal&);
++    friend bool operator!=(const NotifierSignal&, const NotifierSignal&);
++    friend NotifierSignal operator+(NotifierSignal, const NotifierSignal&);
++
++};
++
++class Notifier { public:
++
++    enum SearchOp { SEARCH_STOP = 0, SEARCH_CONTINUE, SEARCH_CONTINUE_WAKE };
++    
++    inline Notifier(SearchOp = SEARCH_STOP);
++    inline Notifier(const NotifierSignal &, SearchOp = SEARCH_STOP);
++    virtual ~Notifier();
++
++    int initialize(Router *);
++    
++    inline const NotifierSignal &signal() const;
++    inline SearchOp search_op() const;
++
++    inline bool active() const;
++
++    inline void set_active(bool active);
++    inline void wake();
++    inline void sleep();
++    
++    virtual int add_listener(Task*);
++    virtual void remove_listener(Task*);
++    virtual int add_dependent_signal(NotifierSignal*);
++
++    static const char EMPTY_NOTIFIER[];
++    static const char FULL_NOTIFIER[];
++    
++    static NotifierSignal upstream_empty_signal(Element* e, int port, Task* task, Notifier* dependent_notifier = 0);
++    static NotifierSignal downstream_full_signal(Element* e, int port, Task* task, Notifier* dependent_notifier = 0);
++
++  private:
++
++    NotifierSignal _signal;
++    SearchOp _search_op;
++    
++};
++
++class ActiveNotifier : public Notifier { public:
++
++    ActiveNotifier(SearchOp = SEARCH_STOP);
++    ~ActiveNotifier();
++
++    int add_listener(Task*);          // complains on out of memory
++    void remove_listener(Task*);
++    int add_dependent_signal(NotifierSignal*);
++    void listeners(Vector<Task*>&) const;
++
++    inline void set_active(bool active, bool schedule = true);
++    inline void wake();
++    inline void sleep();
++    
++  private:
++
++    typedef union {
++      Task *t;
++      NotifierSignal *s;
++      void *v;
++    } task_or_signal_t;
++    
++    Task* _listener1;
++    task_or_signal_t* _listeners;
++
++    int listener_change(void *what, int where, bool rem);
++    
++    ActiveNotifier(const ActiveNotifier&); // does not exist
++    ActiveNotifier& operator=(const ActiveNotifier&); // does not exist
++
++};
++
++
++/** @brief Construct a busy signal.
++ *
++ * The returned signal is always active.
++ */
++inline
++NotifierSignal::NotifierSignal()
++    : _value(&static_value), _mask(TRUE_MASK)
++{
++}
++
++/** @brief Construct an activity signal.
++ *
++ * Elements should not use this constructor directly.
++ * @sa Router::new_notifier_signal
++ */
++inline
++NotifierSignal::NotifierSignal(atomic_uint32_t* value, uint32_t mask)
++    : _value(value), _mask(mask)
++{
++}
++
++/** @brief Return an idle signal.
++ *
++ * The returned signal is never active.
++ */
++inline NotifierSignal
++NotifierSignal::idle_signal()
++{
++    return NotifierSignal(&static_value, 0);
++}
++
++/** @brief Return a busy signal.
++ *
++ * The returned signal is always active.
++ */
++inline NotifierSignal
++NotifierSignal::busy_signal()
++{
++    return NotifierSignal(&static_value, TRUE_MASK);
++}
++
++/** @brief Return an overderived busy signal.
++ *
++ * Overderived signals replace derived signals that are too complex to
++ * represent.  An overderived signal, like a busy signal, is always active.
++ */
++inline NotifierSignal
++NotifierSignal::overderived_signal()
++{
++    return NotifierSignal(&static_value, OVERDERIVED_MASK | TRUE_MASK);
++}
++
++/** @brief Return an uninitialized signal.
++ *
++ * Unintialized signals may be used occasionally as placeholders for true
++ * signals to be added later.  Uninitialized signals are never active.
++ */
++inline NotifierSignal
++NotifierSignal::uninitialized_signal()
++{
++    return NotifierSignal(&static_value, UNINITIALIZED_MASK);
++}
++
++/** @brief Return whether the signal is active.
++ * @return true iff the signal is currently active.
++ */
++inline bool
++NotifierSignal::active() const
++{
++    return (*_value & _mask) != 0;
++}
++
++/** @brief Return whether the signal is active.
++ * @return true iff the signal is currently active.
++ */
++inline
++NotifierSignal::operator unspecified_bool_type() const
++{
++    return active() ? &NotifierSignal::active : 0;
++}
++
++/** @brief Return whether the signal is idle.
++ * @return true iff the signal is idle, i.e. it will never be active.
++ */
++inline bool
++NotifierSignal::idle() const
++{
++    return !_mask;
++}
++
++/** @brief Return whether the signal is busy.
++ * @return true iff the signal is busy, i.e. it will always be active.
++ *
++ * @note An overderived_signal() is busy(), but a busy_signal() is not
++ * overderived().
++ */
++inline bool
++NotifierSignal::busy() const
++{
++    return (_value == &static_value && (_mask & TRUE_MASK));
++}
++
++/** @brief Return whether the signal is overderived.
++ * @return true iff the signal equals overderived_signal().
++ *
++ * @note An overderived_signal() is busy(), but a busy_signal() is not
++ * overderived().
++ */
++inline bool
++NotifierSignal::overderived() const
++{
++    return (_value == &static_value && (_mask & OVERDERIVED_MASK));
++}
++
++/** @brief Return whether the signal is initialized.
++ * @return true iff the signal doesn't equal uninitialized_signal().
++ */
++inline bool
++NotifierSignal::initialized() const
++{
++    return (_value != &static_value || !(_mask & UNINITIALIZED_MASK));
++}
++
++/** @brief Set whether the signal is active.
++ * @param active true iff the signal is active
++ *
++ * Use this function to set whether a basic signal is active.
++ *
++ * It is illegal to call set_active() on derived, idle, busy, or overderived
++ * signals.  Some of these actions may cause an assertion failure.
++ */
++inline void
++NotifierSignal::set_active(bool active)
++{
++    assert(_value != &static_value);
++    if (active)
++      *_value |= _mask;
++    else
++      *_value &= ~_mask;
++}
++
++/** @relates NotifierSignal
++ * @brief Compare two NotifierSignals for equality.
++ *
++ * Returns true iff the two NotifierSignals are the same -- i.e., they combine
++ * information about exactly the same sets of basic signals.
++ *
++ * All idle() signals compare equal.  busy_signal() and overderived_signal()
++ * do not compare equal, however.
++ */
++inline bool
++operator==(const NotifierSignal& a, const NotifierSignal& b)
++{
++    return (a._mask == b._mask && (a._value == b._value || a._mask == 0));
++}
++
++/** @relates NotifierSignal
++ * @brief Compare two NotifierSignals for inequality.
++ *
++ * Returns true iff !(@a a == @a b).
++ */
++inline bool
++operator!=(const NotifierSignal& a, const NotifierSignal& b)
++{
++    return !(a == b);
++}
++
++/** @relates NotifierSignal
++ * @brief Return a derived signal.
++ *
++ * Returns a derived signal that combines information from its arguments.  The
++ * result will be active whenever @a a and/or @a b is active.  If the
++ * combination of @a a and @a b is too complex to represent, returns an
++ * overderived signal; this trivially follows the invariant since it is always
++ * active.
++ *
++ * Signal derivation is commutative and associative.  The following special
++ * combinations are worth remembering:
++ *
++ *  - An idle() signal plus any other signal @a a equals @a a.  Thus,
++ *    idle_signal() is the identity for signal derivation.
++ *  - A busy() signal plus any other signal is busy().  Thus, busy_signal()
++ *    is the "zero element" for signal derivation.
++ *
++ * @sa NotifierSignal::operator+=
++ */
++inline NotifierSignal
++operator+(NotifierSignal a, const NotifierSignal& b)
++{
++    return a += b;
++}
++
++/** @brief Constructs a Notifier.
++ * @param search_op controls notifier path search
++ *
++ * This function constructs a Notifier object.  The Notifier's associated
++ * NotifierSignal is initially idle; it becomes associated with a signal after
++ * initialize() is called.
++ *
++ * The @a search_op argument controls path search.  The rest of this entry
++ * describes it further.
++ *
++ * Elements interested in notification generally search for Notifier objects
++ * along all possible packet paths upstream (or downstream) of one of their
++ * ports.  When a Notifier is found along a path, further searching along that
++ * path is cut off, so only the closest Notifiers are found.  Sometimes,
++ * however, it makes more sense to continue searching for more Notifiers.  The
++ * correct behavior is Notifier-specific, and is controlled by this method.
++ * When the search encounters a Notifier, it consults the Notifier's @a
++ * search_op variable supplied to the constructor.  It should equal one of
++ * three SearchOp constants, which correspond to the following behavior:
++ *
++ * <dl>
++ * <dt>SEARCH_STOP</dt>
++ * <dd>Stop searching along this path.  This is the default.</dd>
++ * <dt>SEARCH_CONTINUE</dt>
++ * <dd>Continue searching along this path.</dd>
++ * <dt>SEARCH_CONTINUE_WAKE</dt>
++ * <dd>Continue searching along this path, but any further Notifiers should
++ * only be used for adding and removing listeners; ignore their NotifierSignal
++ * objects.  This operation is useful, for example, for schedulers that store
++ * packets temporarily.  Such schedulers provide their own NotifierSignal,
++ * since the scheduler may still hold a packet even when all upstream sources
++ * are empty, but since they aren't packet sources, they don't know when
++ * new packets arrive and can't wake up sleeping listeners.  During
++ * initialization, such schedulers should call Notifier::upstream_empty_signal,
++ * passing their own Notifier as the fourth argument.  This will ensure that
++ * their signal is turned on appropriately whenever an upstream queue becomes
++ * nonempty.</dd>
++ * </dl>
++ */
++inline
++Notifier::Notifier(SearchOp search_op)
++    : _signal(NotifierSignal::uninitialized_signal()), _search_op(search_op)
++{
++}
++
++/** @brief Constructs a Notifier associated with a given signal.
++ * @param signal the associated NotifierSignal
++ * @param search_op controls notifier path search
++ *
++ * This function constructs a Notifier object associated with a specific
++ * NotifierSignal, such as NotifierSignal::idle_signal().  Calling
++ * initialize() on this Notifier will not change the associated
++ * NotifierSignal.  The @a search_op argument is as in
++ * Notifier::Notifier(SearchOp), above.
++ */
++inline
++Notifier::Notifier(const NotifierSignal &signal, SearchOp search_op)
++    : _signal(signal), _search_op(search_op)
++{
++}
++
++/** @brief Return this Notifier's associated NotifierSignal.
++ *
++ * Every Notifier object corresponds to one NotifierSignal; this method
++ * returns it.  The signal is @link NotifierSignal::idle idle() @endlink
++ * before initialize() is called.
++ */
++inline const NotifierSignal &
++Notifier::signal() const
++{
++    return _signal;
++}
++
++/** @brief Return this Notifier's search operation.
++ *
++ * @sa Notifier() for a detailed explanation of search operations.
++ */
++inline Notifier::SearchOp
++Notifier::search_op() const
++{
++    return _search_op;
++}
++
++/** @brief Returns whether the associated signal is active.
++ *
++ * Same as signal().active().
++ */
++inline bool
++Notifier::active() const
++{
++    return _signal.active();
++}
++
++/** @brief Sets the associated signal's activity.
++ * @param active true iff the signal should be active
++ */
++inline void
++Notifier::set_active(bool active)
++{
++    _signal.set_active(active);
++}   
++
++/** @brief Sets the associated signal to active.
++ * @sa set_active
++ */
++inline void
++Notifier::wake()
++{
++    set_active(true);
++}   
++
++/** @brief Sets the associated signal to inactive.
++ * @sa set_active
++ */
++inline void
++Notifier::sleep()
++{
++    set_active(false);
++}   
++
++/** @brief Sets the associated signal's activity, possibly scheduling any
++ * listener tasks.
++ * @param active true iff the signal should be active
++ * @param schedule if true, wake up listener tasks
++ *
++ * If @a active and @a schedule are both true, and the signal was previously
++ * inactive, then any listener Tasks are scheduled with Task::reschedule().
++ *
++ * @sa wake, sleep, add_listener
++ */
++inline void
++ActiveNotifier::set_active(bool active, bool schedule)
++{
++    if (active != Notifier::active()) {
++      // 2007.Sep.6: Perhaps there was a race condition here.  Make sure
++      // that we set the notifier to active BEFORE rescheduling downstream
++      // tasks.  This is because, in a multithreaded environment, a task we
++      // reschedule might run BEFORE we set the notifier; after which it
++      // would go to sleep forever.
++      Notifier::set_active(active);
++      
++      if (active && schedule) {
++          if (_listener1)
++              _listener1->reschedule();
++          else if (task_or_signal_t *tos = _listeners) {
++              for (; tos->t; tos++)
++                  tos->t->reschedule();
++              for (tos++; tos->s; tos++)
++                  tos->s->set_active(true);
++          }
++      }
++    }
++}
++
++/** @brief Sets the associated signal to active and schedules any listener
++ * tasks.
++ *
++ * If the signal was previously inactive, then any listener Tasks are
++ * scheduled with Task::reschedule().
++ *
++ * @sa set_active, add_listener
++ */
++inline void
++ActiveNotifier::wake()
++{
++    set_active(true, true);
++}
++
++/** @brief Sets the associated signal to inactive.
++ * @sa set_active
++ */
++inline void
++ActiveNotifier::sleep()
++{
++    set_active(false, true);
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/package.hh click-1.6.0-27/inst/include/click/package.hh
+--- click-1.6.0/inst/include/click/package.hh  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/package.hh       2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,28 @@
++#ifndef CLICK_PACKAGE_HH
++#define CLICK_PACKAGE_HH
++#include <click/vector.hh>
++#include <click/string.hh>
++CLICK_DECLS
++#ifndef CLICK_TOOL
++class Element;
++#endif
++CLICK_ENDDECLS
++
++extern "C" {
++
++void click_provide(const char *);
++void click_unprovide(const char *);
++bool click_has_provision(const char *);
++void click_public_packages(CLICK_NAME(Vector)<CLICK_NAME(String)> &);
++
++#if CLICK_LINUXMODULE
++int click_add_element_type(const char *element_name, CLICK_NAME(Element) *(*factory)(uintptr_t thunk), uintptr_t thunk, struct module *);
++void click_remove_element_type(int);
++#elif !CLICK_TOOL
++int click_add_element_type(const char *element_name, CLICK_NAME(Element) *(*factory)(uintptr_t thunk), uintptr_t thunk);
++void click_remove_element_type(int);
++#endif
++
++}
++
++#endif
+diff -Nurb click-1.6.0/inst/include/click/packet.hh click-1.6.0-27/inst/include/click/packet.hh
+--- click-1.6.0/inst/include/click/packet.hh   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/packet.hh        2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,1171 @@
++// -*- related-file-name: "../../lib/packet.cc" -*-
++#ifndef CLICK_PACKET_HH
++#define CLICK_PACKET_HH
++#include <click/ipaddress.hh>
++#include <click/ip6address.hh>
++#include <click/glue.hh>
++#include <click/timestamp.hh>
++#if CLICK_LINUXMODULE
++# include <click/skbmgr.hh>
++#else
++# include <click/atomic.hh>
++#endif
++struct click_ether;
++struct click_ip;
++struct click_icmp;
++struct click_ip6;
++struct click_tcp;
++struct click_udp;
++
++#if CLICK_NS
++# include <click/simclick.h>
++#endif
++
++
++CLICK_DECLS
++
++class IP6Address;
++class WritablePacket;
++
++class Packet { public:
++
++  // PACKET CREATION
++  enum { DEFAULT_HEADROOM = 28, MIN_BUFFER_LENGTH = 64 };
++  
++  static WritablePacket *make(uint32_t);
++  static WritablePacket *make(const char *, uint32_t);
++  static WritablePacket *make(const unsigned char *, uint32_t);
++  static WritablePacket *make(uint32_t, const unsigned char *, uint32_t, uint32_t);
++  
++#if CLICK_LINUXMODULE
++  // Packet::make(sk_buff *) wraps a Packet around an existing sk_buff.
++  // Packet now owns the sk_buff (ie we don't increment skb->users).
++  static Packet *make(struct sk_buff *);
++  struct sk_buff *skb()                       { return (struct sk_buff *)this; }
++  const struct sk_buff *skb() const   { return (const struct sk_buff*)this; }
++#elif CLICK_BSDMODULE
++  // Packet::make(mbuf *) wraps a Packet around an existing mbuf.
++  // Packet now owns the mbuf.
++  static Packet *make(struct mbuf *);
++  struct mbuf *m()                    { return _m; }
++  const struct mbuf *m() const                { return (const struct mbuf *)_m; }
++  struct mbuf *steal_m();
++#else                 /* User-space */
++  static WritablePacket *make(unsigned char *, uint32_t, void (*destructor)(unsigned char *, size_t));
++#endif
++
++    inline void kill();
++
++    inline bool shared() const;
++    Packet *clone();
++    WritablePacket *uniqueify();
++  
++    inline const unsigned char *data() const;
++    inline const unsigned char *end_data() const;
++    inline uint32_t length() const;
++    inline uint32_t headroom() const;
++    inline uint32_t tailroom() const;
++    inline const unsigned char *buffer() const;
++    inline const unsigned char *end_buffer() const;
++    inline uint32_t buffer_length() const;
++  
++    WritablePacket *push(uint32_t nb);        // Add more space before packet.
++    WritablePacket *push_mac_header(uint32_t nb);
++    Packet *nonunique_push(uint32_t nb);
++    void pull(uint32_t nb);           // Get rid of initial bytes.
++    WritablePacket *put(uint32_t nb); // Add bytes to end of pkt.
++    Packet *nonunique_put(uint32_t nb);
++    void take(uint32_t nb);           // Delete bytes from end of pkt.
++
++    Packet *shift_data(int offset, bool free_on_failure = true);
++#if CLICK_USERLEVEL
++    inline void shrink_data(const unsigned char *, uint32_t length);
++    inline void change_headroom_and_length(uint32_t headroom, uint32_t length);
++#endif
++
++    // HEADER ANNOTATIONS
++    inline const unsigned char *mac_header() const;
++    inline void set_mac_header(const unsigned char *);
++    inline void set_mac_header(const unsigned char *, uint32_t);
++    inline int mac_header_offset() const;
++    inline uint32_t mac_header_length() const;
++    inline int mac_length() const;
++
++    inline const unsigned char *network_header() const;
++    inline void set_network_header(const unsigned char *, uint32_t);
++    inline void set_network_header_length(uint32_t);
++    inline int network_header_offset() const;
++    inline uint32_t network_header_length() const;
++    inline int network_length() const;
++
++    inline const unsigned char *transport_header() const;
++    inline int transport_header_offset() const;
++    inline int transport_length() const;
++
++    // CONVENIENCE HEADER ANNOTATIONS
++    inline const click_ether *ether_header() const;
++    inline void set_ether_header(const click_ether *);
++  
++    inline const click_ip *ip_header() const;
++    inline void set_ip_header(const click_ip *, uint32_t);
++    inline int ip_header_offset() const;
++    inline uint32_t ip_header_length() const;
++
++    inline const click_ip6 *ip6_header() const;
++    inline void set_ip6_header(const click_ip6 *);
++    inline void set_ip6_header(const click_ip6 *, uint32_t);
++    inline int ip6_header_offset() const;
++    inline uint32_t ip6_header_length() const;
++
++    inline const click_icmp *icmp_header() const;
++    inline const click_tcp *tcp_header() const;
++    inline const click_udp *udp_header() const;
++
++    // LINKS
++    inline Packet *next() const;
++    inline Packet *&next();
++    inline void set_next(Packet *p);
++  
++    // ANNOTATIONS
++
++ private:
++  struct Anno;
++#if CLICK_LINUXMODULE /* Linux kernel module */
++  const Anno *anno() const            { return (const Anno *)skb()->cb; }
++  Anno *anno()                                { return (Anno *)skb()->cb; }
++#else                         /* User-space and BSD kernel module */
++  const Anno *anno() const            { return (const Anno *)_cb; }
++  Anno *anno()                                { return (Anno *)_cb; }
++#endif
++  public:
++
++    enum PacketType {         // must agree with if_packet.h
++      HOST = 0, BROADCAST = 1, MULTICAST = 2, OTHERHOST = 3, OUTGOING = 4,
++      LOOPBACK = 5, FASTROUTE = 6
++    };
++
++    enum { ADDR_ANNO_SIZE = 16 };
++
++    uint8_t *addr_anno()                      { return anno()->addr.c; }
++    const uint8_t *addr_anno() const  { return anno()->addr.c; }
++    IPAddress dst_ip_anno() const;
++    void set_dst_ip_anno(IPAddress);
++    const IP6Address &dst_ip6_anno() const;
++    void set_dst_ip6_anno(const IP6Address &);
++
++    inline const Timestamp &timestamp_anno() const;
++    inline Timestamp &timestamp_anno();
++    inline void set_timestamp_anno(const Timestamp &);
++
++    inline net_device *device_anno() const;
++    inline void set_device_anno(net_device *);
++
++    inline PacketType packet_type_anno() const;
++    inline void set_packet_type_anno(PacketType);
++    
++#if CLICK_LINUXMODULE
++# ifdef HAVE_INT64_TYPES
++  uint64_t perfctr_anno() const               { return anno()->perfctr; }
++  void set_perfctr_anno(uint64_t pc)  { anno()->perfctr = pc; }
++# endif
++
++#else                 /* User-space and BSD kernel module */
++
++#if CLICK_NS
++  class SimPacketinfoWrapper {
++  public:
++    simclick_simpacketinfo _pinfo;
++    SimPacketinfoWrapper() {
++      // The uninitialized value for the simulator packet data can't be 
++      // all zeros (0 is a valid packet id) or random junk out of memory
++      // since the simulator will look at this info to see if the packet
++      // was originally generated by it. Accidental collisions with other
++      // packet IDs or bogus packet IDs can cause weird things to happen. So we
++      // set it to all -1 here to keep the simulator from getting confused.
++      memset(&_pinfo,-1,sizeof(_pinfo));
++    }
++  };
++  simclick_simpacketinfo*  get_sim_packetinfo() {
++    return &(_sim_packetinfo._pinfo);
++  }
++  void set_sim_packetinfo(simclick_simpacketinfo* pinfo) { 
++    _sim_packetinfo._pinfo = *pinfo;
++  }
++#endif
++#endif
++
++  enum { USER_ANNO_SIZE = 24,
++       USER_ANNO_US_SIZE = 12,
++       USER_ANNO_S_SIZE = 12,
++       USER_ANNO_U_SIZE = 6,
++       USER_ANNO_I_SIZE = 6 };
++  
++  uint8_t user_anno_c(int i) const    { return anno()->user.c[i]; }
++  void set_user_anno_c(int i, uint8_t v) { anno()->user.c[i] = v; }
++  uint16_t user_anno_us(int i) const  { return anno()->user.us[i]; }
++  void set_user_anno_us(int i, uint16_t v) { anno()->user.us[i] = v; }
++  int16_t user_anno_s(int i) const    { return anno()->user.us[i]; }
++  void set_user_anno_s(int i, int16_t v) { anno()->user.s[i] = v; }
++  uint32_t user_anno_u(int i) const   { return anno()->user.u[i]; }
++  void set_user_anno_u(int i, uint32_t v) { anno()->user.u[i] = v; }
++  int32_t user_anno_i(int i) const    { return anno()->user.i[i]; }
++  void set_user_anno_i(int i, int32_t v) { anno()->user.i[i] = v; }
++
++  const uint8_t *all_user_anno() const        { return &anno()->user.c[0]; }
++  uint8_t *all_user_anno()            { return &anno()->user.c[0]; }
++  const uint32_t *all_user_anno_u() const { return &anno()->user.u[0]; }
++  uint32_t *all_user_anno_u()         { return &anno()->user.u[0]; }
++  
++  void clear_annotations();
++  void copy_annotations(const Packet *);
++
++    inline const unsigned char *buffer_data() const CLICK_DEPRECATED;
++  
++  private:
++
++    // Anno must fit in sk_buff's char cb[48].
++    struct Anno {
++      union {
++          char ch[ADDR_ANNO_SIZE];
++          uint8_t c[ADDR_ANNO_SIZE];
++          uint32_t ip4;
++      } addr;
++    
++      union {
++          uint8_t c[USER_ANNO_SIZE];
++          uint16_t us[USER_ANNO_US_SIZE];
++          int16_t s[USER_ANNO_S_SIZE];
++          uint32_t u[USER_ANNO_U_SIZE];
++          int32_t i[USER_ANNO_I_SIZE];
++      } user;
++      // flag allocations: see packet_anno.hh
++    
++#if (CLICK_LINUXMODULE || CLICK_BSDMODULE) && defined(HAVE_INT64_TYPES)
++      uint64_t perfctr;
++#endif
++    };
++
++#if !CLICK_LINUXMODULE
++    // User-space and BSD kernel module implementations.
++    atomic_uint32_t _use_count;
++    Packet *_data_packet;
++    /* mimic Linux sk_buff */
++    unsigned char *_head; /* start of allocated buffer */
++    unsigned char *_data; /* where the packet starts */
++    unsigned char *_tail; /* one beyond end of packet */
++    unsigned char *_end;  /* one beyond end of allocated buffer */
++# if CLICK_USERLEVEL
++    void (*_destructor)(unsigned char *, size_t);
++# endif
++    unsigned char _cb[48];
++    unsigned char *_mac;
++    unsigned char *_nh;
++    unsigned char *_h;
++    PacketType _pkt_type;
++    Timestamp _timestamp;
++# if CLICK_BSDMODULE
++    struct mbuf *_m;
++# endif
++    Packet *_next;
++# if CLICK_NS
++    SimPacketinfoWrapper _sim_packetinfo;
++# endif
++#endif
++  
++  Packet();
++  Packet(const Packet &);
++  ~Packet();
++  Packet &operator=(const Packet &);
++
++#if !CLICK_LINUXMODULE
++  Packet(int, int, int)                       { }
++  static WritablePacket *make(int, int, int);
++  bool alloc_data(uint32_t, uint32_t, uint32_t);
++#endif
++#if CLICK_BSDMODULE
++  static void assimilate_mbuf(Packet *p);
++  void assimilate_mbuf();
++#endif
++
++  inline void shift_header_annotations(int32_t shift);
++  WritablePacket *expensive_uniqueify(int32_t extra_headroom, int32_t extra_tailroom, bool free_on_failure);
++  WritablePacket *expensive_push(uint32_t nbytes);
++  WritablePacket *expensive_put(uint32_t nbytes);
++  
++  friend class WritablePacket;
++
++};
++
++
++class WritablePacket : public Packet { public:
++  
++    inline unsigned char *data() const;
++    inline unsigned char *end_data() const;
++    inline unsigned char *buffer() const;
++    inline unsigned char *end_buffer() const;
++    inline unsigned char *mac_header() const;
++    inline click_ether *ether_header() const;
++    inline unsigned char *network_header() const;
++    inline click_ip *ip_header() const;
++    inline click_ip6 *ip6_header() const;
++    inline unsigned char *transport_header() const;
++    inline click_icmp *icmp_header() const;
++    inline click_tcp *tcp_header() const;
++    inline click_udp *udp_header() const;
++
++    inline unsigned char *buffer_data() const CLICK_DEPRECATED;
++    
++ private:
++
++    WritablePacket()                          { }
++    WritablePacket(const Packet &)            { }
++    ~WritablePacket()                         { }
++
++    friend class Packet;
++  
++};
++
++
++
++inline const unsigned char *
++Packet::data() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->data;
++#else
++    return _data;
++#endif
++}
++
++inline const unsigned char *
++Packet::end_data() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->tail;
++#else
++    return _tail;
++#endif
++}
++
++inline uint32_t
++Packet::length() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->len;
++#else
++    return _tail - _data;
++#endif
++}
++
++inline uint32_t
++Packet::headroom() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->data - skb()->head;
++#else
++    return _data - _head;
++#endif
++}
++
++inline uint32_t
++Packet::tailroom() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->end - skb()->tail;
++#else
++    return _end - _tail;
++#endif
++}
++
++inline const unsigned char *
++Packet::buffer() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->head;
++#else
++    return _head;
++#endif
++}
++
++inline const unsigned char *
++Packet::end_buffer() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->end;
++#else
++    return _end;
++#endif
++}
++
++inline uint32_t
++Packet::buffer_length() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->end - skb()->head;
++#else
++    return _end - _head;
++#endif
++}
++
++inline const unsigned char *
++Packet::buffer_data() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->head;
++#else
++    return _head;
++#endif
++}
++
++
++inline Packet *
++Packet::next() const
++{
++#if CLICK_LINUXMODULE
++    return (Packet *)(skb()->next);
++#else
++    return _next;
++#endif
++}
++
++inline Packet *&
++Packet::next()
++{
++#if CLICK_LINUXMODULE
++    return (Packet *&)(skb()->next);
++#else
++    return _next;
++#endif
++}
++
++inline void
++Packet::set_next(Packet *p)
++{
++#if CLICK_LINUXMODULE
++    skb()->next = p->skb();
++#else
++    _next = p;
++#endif
++}
++
++inline const unsigned char *
++Packet::mac_header() const
++{
++#if CLICK_LINUXMODULE
++    return skb_mac_header(skb());
++#else
++    return _mac;
++#endif
++}
++
++inline const unsigned char *
++Packet::network_header() const
++{
++#if CLICK_LINUXMODULE
++    return skb_network_header(skb());
++#else
++    return _nh;
++#endif
++}
++
++inline const unsigned char *
++Packet::transport_header() const
++{
++#if CLICK_LINUXMODULE
++    return skb_transport_header(skb());
++#else
++    return _h;
++#endif
++}
++
++inline const click_ether *
++Packet::ether_header() const
++{
++    return reinterpret_cast<const click_ether *>(mac_header());
++}
++
++inline const click_ip *
++Packet::ip_header() const
++{
++    return reinterpret_cast<const click_ip *>(network_header());
++}
++
++inline const click_ip6 *
++Packet::ip6_header() const
++{
++    return reinterpret_cast<const click_ip6 *>(network_header());
++}
++
++inline const click_icmp *
++Packet::icmp_header() const
++{
++    return reinterpret_cast<const click_icmp *>(transport_header());
++}
++
++inline const click_tcp *
++Packet::tcp_header() const
++{
++    return reinterpret_cast<const click_tcp *>(transport_header());
++}
++
++inline const click_udp *
++Packet::udp_header() const
++{
++    return reinterpret_cast<const click_udp *>(transport_header());
++}
++
++inline int
++Packet::mac_length() const
++{
++    return end_data() - mac_header();
++}
++
++inline int
++Packet::network_length() const
++{
++    return end_data() - network_header();
++}
++
++inline int
++Packet::transport_length() const
++{
++    return end_data() - transport_header();
++}
++
++inline const Timestamp &
++Packet::timestamp_anno() const
++{
++#if CLICK_LINUXMODULE
++# if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 13)
++    return *(const Timestamp *) &skb()->stamp;
++# else
++    return *(const Timestamp *) &skb()->tstamp;
++# endif
++#else
++    return _timestamp;
++#endif
++}
++
++inline Timestamp &
++Packet::timestamp_anno()
++{
++#if CLICK_LINUXMODULE
++# if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 13)
++    return *(Timestamp *) &skb()->stamp;
++# else
++    return *(Timestamp *) &skb()->tstamp;
++# endif
++#else
++    return _timestamp;
++#endif
++}
++
++inline void
++Packet::set_timestamp_anno(const Timestamp &timestamp)
++{
++#if CLICK_LINUXMODULE
++# if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 13)
++    memcpy(&skb()->stamp, &timestamp, 8);
++# else
++    memcpy(&skb()->tstamp, &timestamp, 8);
++# endif
++#else
++    _timestamp = timestamp;
++#endif
++}
++
++inline net_device *
++Packet::device_anno() const
++{
++#if CLICK_LINUXMODULE
++    return skb()->dev;
++#elif CLICK_BSDMODULE
++    if (m())
++      return m()->m_pkthdr.rcvif;
++    else
++      return 0;
++#else
++    return 0;
++#endif
++}
++
++inline void
++Packet::set_device_anno(net_device *dev)
++{
++#if CLICK_LINUXMODULE
++    skb()->dev = dev;
++#elif CLICK_BSDMODULE
++    if (m())
++      m()->m_pkthdr.rcvif = dev;
++#else
++    (void) dev;
++#endif
++}
++
++inline Packet::PacketType
++Packet::packet_type_anno() const
++{
++#if CLICK_LINUXMODULE
++    return (PacketType)(skb()->pkt_type & PACKET_TYPE_MASK);
++#else
++    return _pkt_type;
++#endif
++}
++
++inline void
++Packet::set_packet_type_anno(PacketType p)
++{
++#if CLICK_LINUXMODULE
++    skb()->pkt_type = (skb()->pkt_type & PACKET_CLEAN) | p;
++#else
++    _pkt_type = p;
++#endif
++}
++
++inline WritablePacket *
++Packet::make(uint32_t len)
++{
++  return make(DEFAULT_HEADROOM, (const unsigned char *)0, len, 0);
++}
++
++inline WritablePacket *
++Packet::make(const char *s, uint32_t len)
++{
++  return make(DEFAULT_HEADROOM, (const unsigned char *)s, len, 0);
++}
++
++inline WritablePacket *
++Packet::make(const unsigned char *s, uint32_t len)
++{
++  return make(DEFAULT_HEADROOM, (const unsigned char *)s, len, 0);
++}
++
++#if CLICK_LINUXMODULE
++inline Packet *
++Packet::make(struct sk_buff *skb)
++{
++  if (atomic_read(&skb->users) == 1) {
++    skb_orphan(skb);
++    return reinterpret_cast<Packet *>(skb);
++  } else {
++    Packet *p = reinterpret_cast<Packet *>(skb_clone(skb, GFP_ATOMIC));
++    atomic_dec(&skb->users);
++    return p;
++  }
++}
++#endif
++
++
++inline void
++Packet::kill()
++{
++#if CLICK_LINUXMODULE
++    struct sk_buff *b = skb();
++    b->next = b->prev = 0;
++# if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 15)
++    b->list = 0;
++# endif
++    skbmgr_recycle_skbs(b);
++#else
++    if (_use_count.dec_and_test())
++      delete this;
++#endif
++}
++
++
++#if CLICK_BSDMODULE           /* BSD kernel module */
++inline void
++Packet::assimilate_mbuf(Packet *p)
++{
++  struct mbuf *m = p->m();
++
++  if (!m) return;
++
++  p->_head = (unsigned char *)
++           (m->m_flags & M_EXT    ? m->m_ext.ext_buf :
++            m->m_flags & M_PKTHDR ? m->m_pktdat :
++                                    m->m_dat);
++  p->_data = (unsigned char *)m->m_data;
++  p->_tail = (unsigned char *)(m->m_data + m->m_len);
++  p->_end = p->_head + (
++              m->m_flags & M_EXT    ? MCLBYTES :
++              m->m_flags & M_PKTHDR ? MHLEN :
++                                      MLEN);
++}
++
++inline void
++Packet::assimilate_mbuf()
++{
++  assimilate_mbuf(this);
++}
++
++inline Packet *
++Packet::make(struct mbuf *m)
++{
++  if (!(m->m_flags & M_PKTHDR))
++    panic("trying to construct Packet from a non-packet mbuf");
++
++  Packet *p = new Packet;
++  if (m->m_pkthdr.len != m->m_len) {
++    /* click needs contiguous data */
++    // click_chatter("m_pulldown, Click needs contiguous data");
++
++    if (m_pulldown(m, 0, m->m_pkthdr.len, NULL) == NULL)
++      panic("m_pulldown failed");
++  }
++  p->_m = m;
++  assimilate_mbuf(p);
++
++  return p;
++}
++#endif
++
++inline bool
++Packet::shared() const
++{
++#if CLICK_LINUXMODULE
++    return skb_cloned(const_cast<struct sk_buff *>(skb()));
++#else
++    return (_data_packet || _use_count > 1);
++#endif
++}
++
++inline WritablePacket *
++Packet::uniqueify()
++{
++  if (!shared())
++    return static_cast<WritablePacket *>(this);
++  else
++    return expensive_uniqueify(0, 0, true);
++}
++
++inline WritablePacket *
++Packet::push(uint32_t nbytes)
++{
++  if (headroom() >= nbytes && !shared()) {
++    WritablePacket *q = (WritablePacket *)this;
++#if CLICK_LINUXMODULE /* Linux kernel module */
++    __skb_push(q->skb(), nbytes);
++#else                         /* User-space and BSD kernel module */
++    q->_data -= nbytes;
++# if CLICK_BSDMODULE
++    q->m()->m_data -= nbytes;
++    q->m()->m_len += nbytes;
++    q->m()->m_pkthdr.len += nbytes;
++# endif
++#endif
++    return q;
++  } else
++    return expensive_push(nbytes);
++}
++
++inline Packet *
++Packet::nonunique_push(uint32_t nbytes)
++{
++  if (headroom() >= nbytes) {
++#if CLICK_LINUXMODULE /* Linux kernel module */
++    __skb_push(skb(), nbytes);
++#else                         /* User-space and BSD kernel module */
++    _data -= nbytes;
++# if CLICK_BSDMODULE
++    m()->m_data -= nbytes;
++    m()->m_len += nbytes;
++    m()->m_pkthdr.len += nbytes;
++# endif
++#endif
++    return this;
++  } else
++    return expensive_push(nbytes);
++}
++
++/* Get rid of some bytes at the start of a packet */
++inline void
++Packet::pull(uint32_t nbytes)
++{
++  if (nbytes > length()) {
++    click_chatter("Packet::pull %d > length %d\n", nbytes, length());
++    nbytes = length();
++  }
++#if CLICK_LINUXMODULE /* Linux kernel module */
++  __skb_pull(skb(), nbytes);
++#else                         /* User-space and BSD kernel module */
++  _data += nbytes;
++# if CLICK_BSDMODULE
++  m()->m_data += nbytes;
++  m()->m_len -= nbytes;
++  m()->m_pkthdr.len -= nbytes;
++# endif
++#endif
++}
++
++inline WritablePacket *
++Packet::put(uint32_t nbytes)
++{
++  if (tailroom() >= nbytes && !shared()) {
++    WritablePacket *q = (WritablePacket *)this;
++#if CLICK_LINUXMODULE /* Linux kernel module */
++    __skb_put(q->skb(), nbytes);
++#else                         /* User-space and BSD kernel module */
++    q->_tail += nbytes;
++# if CLICK_BSDMODULE
++    q->m()->m_len += nbytes;
++    q->m()->m_pkthdr.len += nbytes;
++# endif
++#endif
++    return q;
++  } else
++    return expensive_put(nbytes);
++}
++
++inline Packet *
++Packet::nonunique_put(uint32_t nbytes)
++{
++  if (tailroom() >= nbytes) {
++#if CLICK_LINUXMODULE /* Linux kernel module */
++    __skb_put(skb(), nbytes);
++#else                         /* User-space and BSD kernel module */
++    _tail += nbytes;
++# if CLICK_BSDMODULE
++    m()->m_len += nbytes;
++    m()->m_pkthdr.len += nbytes;
++# endif
++#endif
++    return this;
++  } else
++    return expensive_put(nbytes);
++}
++
++/* Get rid of some bytes at the end of a packet */
++inline void
++Packet::take(uint32_t nbytes)
++{
++  if (nbytes > length()) {
++    click_chatter("Packet::take %d > length %d\n", nbytes, length());
++    nbytes = length();
++  }
++#if CLICK_LINUXMODULE /* Linux kernel module */
++  skb()->tail -= nbytes;
++  skb()->len -= nbytes;
++#else                         /* User-space and BSD kernel module */
++  _tail -= nbytes;
++# if CLICK_BSDMODULE
++  m()->m_len -= nbytes;
++  m()->m_pkthdr.len -= nbytes;
++# endif
++#endif
++}
++
++#if CLICK_USERLEVEL
++inline void
++Packet::shrink_data(const unsigned char *d, uint32_t length)
++{
++  assert(_data_packet);
++  if (d >= _head && d + length >= d && d + length <= _end) {
++    _head = _data = const_cast<unsigned char *>(d);
++    _tail = _end = const_cast<unsigned char *>(d + length);
++  }
++}
++
++inline void
++Packet::change_headroom_and_length(uint32_t headroom, uint32_t length)
++{
++  if (headroom + length <= buffer_length()) {
++    _data = _head + headroom;
++    _tail = _data + length;
++  }
++}
++#endif
++
++inline const IP6Address &
++Packet::dst_ip6_anno() const
++{
++    return *reinterpret_cast<const IP6Address *>(anno()->addr.ch);
++}
++
++inline void
++Packet::set_dst_ip6_anno(const IP6Address &a)
++{
++    memcpy(anno()->addr.ch, &a, 16);
++}
++
++inline IPAddress 
++Packet::dst_ip_anno() const
++{
++    return IPAddress(anno()->addr.ip4);
++}
++
++inline void 
++Packet::set_dst_ip_anno(IPAddress a)
++{ 
++    anno()->addr.ip4 = a.addr(); 
++}
++
++inline void
++Packet::set_mac_header(const unsigned char *h)
++{
++#if CLICK_LINUXMODULE /* Linux kernel module */
++    skb()->mac_header = const_cast<unsigned char *>(h);
++#else                         /* User-space and BSD kernel module */
++    _mac = const_cast<unsigned char *>(h);
++#endif
++}
++
++inline void
++Packet::set_mac_header(const unsigned char *h, uint32_t len)
++{
++#if CLICK_LINUXMODULE /* Linux kernel module */
++    skb()->mac_header = const_cast<unsigned char *>(h);
++    skb()->network_header = const_cast<unsigned char *>(h) + len;
++#else                         /* User-space and BSD kernel module */
++    _mac = const_cast<unsigned char *>(h);
++    _nh = const_cast<unsigned char *>(h) + len;
++#endif
++}
++
++inline void
++Packet::set_ether_header(const click_ether *h)
++{
++    set_mac_header(reinterpret_cast<const unsigned char *>(h), 14);
++}
++
++inline WritablePacket *
++Packet::push_mac_header(uint32_t nbytes)
++{
++    WritablePacket *q;
++    if (headroom() >= nbytes && !shared()) {
++      q = (WritablePacket *)this;
++#if CLICK_LINUXMODULE /* Linux kernel module */
++      __skb_push(q->skb(), nbytes);
++#else                         /* User-space and BSD kernel module */
++      q->_data -= nbytes;
++# if CLICK_BSDMODULE
++      q->m()->m_data -= nbytes;
++      q->m()->m_len += nbytes;
++      q->m()->m_pkthdr.len += nbytes;
++# endif
++#endif
++    } else if ((q = expensive_push(nbytes)))
++      /* nada */;
++    else
++      return 0;
++    q->set_mac_header(q->data(), nbytes);
++    return q;
++}
++
++inline void
++Packet::set_network_header(const unsigned char *h, uint32_t len)
++{
++#if CLICK_LINUXMODULE /* Linux kernel module */
++    skb()->network_header = const_cast<unsigned char *>(h);
++    skb()->transport_header = const_cast<unsigned char *>(h) + len;
++#else                         /* User-space and BSD kernel module */
++    _nh = const_cast<unsigned char *>(h);
++    _h = const_cast<unsigned char *>(h) + len;
++#endif
++}
++
++inline void
++Packet::set_network_header_length(uint32_t len)
++{
++#if CLICK_LINUXMODULE /* Linux kernel module */
++    skb()->transport_header = skb()->network_header + len;
++#else                         /* User-space and BSD kernel module */
++    _h = _nh + len;
++#endif
++}
++
++inline void
++Packet::set_ip_header(const click_ip *iph, uint32_t len)
++{
++    set_network_header(reinterpret_cast<const unsigned char *>(iph), len);
++}
++
++inline void
++Packet::set_ip6_header(const click_ip6 *ip6h, uint32_t len)
++{
++    set_network_header(reinterpret_cast<const unsigned char *>(ip6h), len);
++}
++
++inline void
++Packet::set_ip6_header(const click_ip6 *ip6h)
++{
++    set_ip6_header(ip6h, 40);
++}
++
++inline int
++Packet::mac_header_offset() const
++{
++    return mac_header() - data();
++}
++
++inline uint32_t
++Packet::mac_header_length() const
++{
++    return network_header() - mac_header();
++}
++
++inline int
++Packet::network_header_offset() const
++{
++    return network_header() - data();
++}
++
++inline uint32_t
++Packet::network_header_length() const
++{
++    return transport_header() - network_header();
++}
++
++inline int
++Packet::ip_header_offset() const
++{
++    return network_header_offset();
++}
++
++inline uint32_t
++Packet::ip_header_length() const
++{
++    return network_header_length();
++}
++
++inline int
++Packet::ip6_header_offset() const
++{
++    return network_header_offset();
++}
++
++inline uint32_t
++Packet::ip6_header_length() const
++{
++    return network_header_length();
++}
++
++inline int
++Packet::transport_header_offset() const
++{
++    return transport_header() - data();
++}
++
++inline void
++Packet::clear_annotations()
++{
++  memset(anno(), '\0', sizeof(Anno));
++  set_packet_type_anno(HOST);
++  set_device_anno(0);
++  set_timestamp_anno(Timestamp());
++  set_mac_header(0);
++  set_network_header(0, 0);
++  set_next(0);
++}
++
++inline void
++Packet::copy_annotations(const Packet *p)
++{
++  *anno() = *p->anno();
++  set_packet_type_anno(p->packet_type_anno());
++  set_device_anno(p->device_anno());
++  set_timestamp_anno(p->timestamp_anno());
++}
++
++inline void
++Packet::shift_header_annotations(int32_t shift)
++{
++#if CLICK_USERLEVEL || CLICK_BSDMODULE
++  _mac += (_mac ? shift : 0);
++  _nh += (_nh ? shift : 0);
++  _h += (_h ? shift : 0);
++#else
++  struct sk_buff *mskb = skb();
++  mskb->mac_header += (mskb->mac_header ? shift : 0);
++  mskb->network_header += (mskb->network_header ? shift : 0);
++  mskb->transport_header += (mskb->transport_header ? shift : 0);
++#endif
++}
++
++
++inline unsigned char *
++WritablePacket::data() const
++{
++    return const_cast<unsigned char *>(Packet::data());
++}
++
++inline unsigned char *
++WritablePacket::end_data() const
++{
++    return const_cast<unsigned char *>(Packet::end_data());
++}
++
++inline unsigned char *
++WritablePacket::buffer() const
++{
++    return const_cast<unsigned char *>(Packet::buffer());
++}
++
++inline unsigned char *
++WritablePacket::end_buffer() const
++{
++    return const_cast<unsigned char *>(Packet::end_buffer());
++}
++
++inline unsigned char *
++WritablePacket::buffer_data() const
++{
++    return const_cast<unsigned char *>(Packet::buffer());
++}
++
++inline unsigned char *
++WritablePacket::mac_header() const
++{
++    return const_cast<unsigned char *>(Packet::mac_header());
++}
++
++inline unsigned char *
++WritablePacket::network_header() const
++{
++    return const_cast<unsigned char *>(Packet::network_header());
++}
++
++inline unsigned char *
++WritablePacket::transport_header() const
++{
++    return const_cast<unsigned char *>(Packet::transport_header());
++}
++
++inline click_ether *
++WritablePacket::ether_header() const
++{
++    return const_cast<click_ether *>(Packet::ether_header());
++}
++
++inline click_ip *
++WritablePacket::ip_header() const
++{
++    return const_cast<click_ip *>(Packet::ip_header());
++}
++
++inline click_ip6 *
++WritablePacket::ip6_header() const
++{
++    return const_cast<click_ip6 *>(Packet::ip6_header());
++}
++
++inline click_icmp *
++WritablePacket::icmp_header() const
++{
++    return const_cast<click_icmp *>(Packet::icmp_header());
++}
++
++inline click_tcp *
++WritablePacket::tcp_header() const
++{
++    return const_cast<click_tcp *>(Packet::tcp_header());
++}
++
++inline click_udp *
++WritablePacket::udp_header() const
++{
++    return const_cast<click_udp *>(Packet::udp_header());
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/packet_anno.hh click-1.6.0-27/inst/include/click/packet_anno.hh
+--- click-1.6.0/inst/include/click/packet_anno.hh      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/packet_anno.hh   2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,61 @@
++#ifndef CLICK_PACKET_ANNO_HH
++#define CLICK_PACKET_ANNO_HH
++
++// byte 0
++#define PAINT_ANNO(p)                 ((p)->user_anno_c(0))
++#define SET_PAINT_ANNO(p, v)          ((p)->set_user_anno_c(0, (v)))
++#define PAINT_ANNO_OFFSET             0
++#define PAINT_ANNO_LENGTH             1
++
++// byte 1
++#define ICMP_PARAMPROB_ANNO(p)                ((p)->user_anno_c(1))
++#define SET_ICMP_PARAMPROB_ANNO(p, v) ((p)->set_user_anno_c(1, (v)))
++
++// byte 3
++#define FIX_IP_SRC_ANNO(p)            ((p)->user_anno_c(3))
++#define SET_FIX_IP_SRC_ANNO(p, v)     ((p)->set_user_anno_c(3, (v)))
++
++// bytes 4-7
++#define AGGREGATE_ANNO(p)             ((p)->user_anno_u(1))
++#define SET_AGGREGATE_ANNO(p, v)      ((p)->set_user_anno_u(1, (v)))
++
++#define FWD_RATE_ANNO(p)              ((p)->user_anno_i(1))
++#define SET_FWD_RATE_ANNO(p, v)               ((p)->set_user_anno_i(1, (v)))
++
++#define MISC_IP_ANNO(p)                 ((p)->user_anno_u(1))
++#define SET_MISC_IP_ANNO(p, v)                ((p)->set_user_anno_i(1, (v).addr()))
++
++// bytes 8-11
++#define EXTRA_PACKETS_ANNO(p)         ((p)->user_anno_u(2))
++#define SET_EXTRA_PACKETS_ANNO(p, v)  ((p)->set_user_anno_u(2, (v)))
++
++#define REV_RATE_ANNO(p)              ((p)->user_anno_i(2))
++#define SET_REV_RATE_ANNO(p, v)               ((p)->set_user_anno_i(2, (v)))
++
++// byte 10
++#define SEND_ERR_ANNO(p)                ((p)->user_anno_c(10))
++#define SET_SEND_ERR_ANNO(p, v)         ((p)->set_user_anno_c(10, (v)))
++
++// byte 11
++#define GRID_ROUTE_CB_ANNO(p)           ((p)->user_anno_c(11))
++#define SET_GRID_ROUTE_CB_ANNO(p, v)    ((p)->set_user_anno_c(11, (v)))
++
++// bytes 12-15
++#define EXTRA_LENGTH_ANNO(p)          ((p)->user_anno_u(3))
++#define SET_EXTRA_LENGTH_ANNO(p, v)   ((p)->set_user_anno_u(3, (v)))
++
++// bytes 16-23
++#define PACKET_NUMBER_ANNO(p, n)      ((p)->user_anno_u(4 + (n)))
++#define SET_PACKET_NUMBER_ANNO(p, n, v)       ((p)->set_user_anno_u(4 + (n), (v)))
++
++// bytes 16-23
++#define FIRST_TIMESTAMP_ANNO(p)               (*((Timestamp*) ((p)->all_user_anno_u() + 4)))
++#define SET_FIRST_TIMESTAMP_ANNO(p, v)        (*((Timestamp*) ((p)->all_user_anno_u() + 4)) = (v))
++
++// bytes 16-23
++#define IPSEC_SPI_ANNO(p)             ((p)->user_anno_u(4))
++#define SET_IPSEC_SPI_ANNO(p, v)      ((p)->set_user_anno_u(4, (v)))
++#define IPSEC_SA_DATA_REFERENCE_ANNO(p)       ((p)->user_anno_u(5))
++#define SET_IPSEC_SA_DATA_REFERENCE_ANNO(p, v) ((p)->set_user_anno_u(5, (v)))
++
++#endif
+diff -Nurb click-1.6.0/inst/include/click/pair.hh click-1.6.0-27/inst/include/click/pair.hh
+--- click-1.6.0/inst/include/click/pair.hh     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/pair.hh  2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,56 @@
++// -*- c-basic-offset: 4 -*-
++#ifndef CLICK_PAIR_HH
++#define CLICK_PAIR_HH
++#include <click/hashcode.hh>
++CLICK_DECLS
++
++template <class T, class U>
++struct Pair {
++    T first;
++    U second;
++    Pair()                            : first(), second() { }
++    Pair(const T &t, const U &u)      : first(t), second(u) { }
++    typedef size_t (Pair<T, U>::*unspecified_bool_type)() const;
++    inline operator unspecified_bool_type() const;
++    inline size_t hashcode() const;
++};
++
++template <class T, class U>
++inline Pair<T, U>::operator unspecified_bool_type() const
++{
++    return first || second ? &Pair<T, U>::hashcode : 0;
++}
++
++template <class T, class U>
++inline bool operator==(const Pair<T, U> &a, const Pair<T, U> &b)
++{
++    return a.first == b.first && a.second == b.second;
++}
++
++template <class T, class U>
++inline bool operator!=(const Pair<T, U> &a, const Pair<T, U> &b)
++{
++    return a.first != b.first || a.second != b.second;
++}
++
++template <class T, class U>
++inline bool operator<(const Pair<T, U> &a, const Pair<T, U> &b)
++{
++    return a.first < b.first
++      || (!(b.first < a.first) && a.second < b.second);
++}
++
++template <class T, class U>
++inline size_t Pair<T, U>::hashcode() const
++{
++    return (CLICK_NAME(hashcode)(first) << 13) ^ CLICK_NAME(hashcode)(second);
++}
++
++template <class T, class U>
++inline Pair<T, U> make_pair(const T &t, const U &u)
++{
++    return Pair<T, U>(t, u);
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/pathvars.h click-1.6.0-27/inst/include/click/pathvars.h
+--- click-1.6.0/inst/include/click/pathvars.h  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/pathvars.h       2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,39 @@
++/* include/click/pathvars.h.  Generated from pathvars.h.in by configure.  */
++/* Process this file with configure to produce pathvars.h. -*- mode: c -*- */
++#ifndef CLICK_PATHVARS_H
++#define CLICK_PATHVARS_H
++
++/* Directory for binaries. */
++#define CLICK_BINDIR "/d/click/click-1.6.0-27/inst/bin"
++
++/* Directory for packages and kernel module. */
++#define CLICK_LIBDIR "/d/click/click-1.6.0-27/inst/lib"
++
++/* Directory for shared files. */
++#define CLICK_DATADIR "/d/click/click-1.6.0-27/inst/share/click"
++
++/* FreeBSD kernel include directory. */
++#define FREEBSD_INCLUDEDIR "/usr/include"
++
++/* Define if the BSD kernel module driver was compiled. */
++/* #undef HAVE_BSDMODULE_DRIVER */
++
++/* Define if the Click kernel module should provide clickfs. */
++#define HAVE_CLICKFS 1
++
++/* Define if the expat library is available. */
++#define HAVE_EXPAT 1
++
++/* Define if the Click linuxmodule is compiled for a 2.6 kernel. */
++#define HAVE_LINUXMODULE_2_6 1
++
++/* Define if the Linux kernel module driver was compiled. */
++#define HAVE_LINUXMODULE_DRIVER 1
++
++/* Define if the user-level driver was compiled. */
++#define HAVE_USERLEVEL_DRIVER 1
++
++/* Directory containing Linux sources. */
++#define LINUX_SRCDIR "/d/kernels/linux-2.6.27.10-clickport"
++
++#endif
+diff -Nurb click-1.6.0/inst/include/click/perfctr-i586.hh click-1.6.0-27/inst/include/click/perfctr-i586.hh
+--- click-1.6.0/inst/include/click/perfctr-i586.hh     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/perfctr-i586.hh  2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,33 @@
++#ifndef CLICK_PERFCTR_HH
++#define CLICK_PERFCTR_HH
++#ifdef __KERNEL__
++#include <click/glue.hh>
++#include <asm/msr.h>
++#endif
++
++#define DCU_MISS_OUTSTANDING  0x48
++#define INST_RETIRED          0xC0
++#define IFU_FETCH             0x80
++#define IFU_FETCH_MISS                0x81
++#define IFU_MEM_STALL         0x86
++#define L2_LINES_IN           0x24
++#define L2_LINES_OUT          0x26
++#define L2_IFETCH             0x28 | (0xF<<8)
++#define L2_LD                 0x29 | (0xF<<8)
++#define L2_LINES_OUTM         0x27
++#define L2_RQSTS              0x2E | (0xF<<8)
++#define BUS_LOCK_CLOCKS         0x63
++#define BUS_TRAN_RFO            0x66
++#define BUS_TRAN_INVAL                0x69
++#define BUS_TRAN_MEM          0x6F
++
++#define MSR_OS (1<<17)
++#define MSR_OCCURRENCE (1<<18)
++#define MSR_ENABLE (1<<22)
++#define MSR_FLAGS0 (MSR_OS|MSR_OCCURRENCE|MSR_ENABLE)
++#define MSR_FLAGS1 (MSR_OS|MSR_OCCURRENCE)
++
++#define MSR_EVNTSEL0 0x186
++#define MSR_EVNTSEL1 0x187
++
++#endif
+diff -Nurb click-1.6.0/inst/include/click/router.hh click-1.6.0-27/inst/include/click/router.hh
+--- click-1.6.0/inst/include/click/router.hh   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/router.hh        2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,699 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/router.cc" -*-
++#ifndef CLICK_ROUTER_HH
++#define CLICK_ROUTER_HH
++#include <click/element.hh>
++#include <click/timer.hh>
++#include <click/sync.hh>
++#include <click/task.hh>
++#include <click/standard/threadsched.hh>
++#if CLICK_NS
++# include <click/simclick.h>
++#endif
++CLICK_DECLS
++class Master;
++class ElementFilter;
++class RouterThread;
++class HashMap_ArenaFactory;
++class NotifierSignal;
++class ThreadSched;
++class Handler;
++class NameInfo;
++
++class Router { public:
++
++    /** @name Public Member Functions */
++    //@{
++    // MASTER
++    inline Master* master() const;
++
++    // STATUS
++    inline bool initialized() const;
++    inline bool handlers_ready() const;
++    inline bool running() const;
++
++    // RUNCOUNT AND RUNCLASS
++    enum { STOP_RUNCOUNT = -2147483647 - 1 };
++    inline int32_t runcount() const;
++    void adjust_runcount(int32_t delta);
++    void set_runcount(int32_t rc);
++    inline void please_stop_driver();
++
++    // ELEMENTS
++    inline const Vector<Element*>& elements() const;
++    inline int nelements() const;
++    // eindex -1 returns root_element(), other out-of-range indexes return 0
++    inline Element* element(int eindex) const;
++    inline Element* root_element() const;
++    static Element* element(const Router *router, int eindex);
++  
++    Element* find(const String& name, ErrorHandler* errh = 0) const;
++    Element* find(const String& name, String context, ErrorHandler* errh = 0) const;
++    Element* find(const String& name, Element* context, ErrorHandler* errh = 0) const;
++
++    int downstream_elements(Element* e, int port, ElementFilter* filter, Vector<Element*>& result);
++    int upstream_elements(Element* e, int port, ElementFilter* filter, Vector<Element*>& result);
++  
++    const String& ename(int eindex) const;
++    const String& elandmark(int eindex) const;
++    const String& econfiguration(int eindex) const;
++    void set_econfiguration(int eindex, const String& conf);
++  
++    // HANDLERS
++    enum { FIRST_GLOBAL_HANDLER = 0x40000000 };
++    static int hindex(const Element* e, const String& hname);
++    static void element_hindexes(const Element* e, Vector<int>& result);
++
++    // 'const Handler*' results last until that element/handlername modified
++    static const Handler* handler(const Router* router, int hindex);
++    static const Handler* handler(const Element* e, const String& hname);
++
++    static void add_read_handler(const Element* e, const String& hname, ReadHandlerHook hook, void* thunk);
++    static void add_write_handler(const Element* e, const String& hname, WriteHandlerHook hook, void* thunk);
++    static void set_handler(const Element* e, const String& hname, int mask, HandlerHook hook, void* thunk1 = 0, void* thunk2 = 0);
++    static int change_handler_flags(const Element* e, const String& hname, uint32_t clear_flags, uint32_t set_flags);
++
++    // ATTACHMENTS AND REQUIREMENTS
++    void* attachment(const String& aname) const;
++    void*& force_attachment(const String& aname);
++    void* set_attachment(const String& aname, void* value);
++    
++    ErrorHandler* chatter_channel(const String& channel_name) const;
++    HashMap_ArenaFactory* arena_factory() const;
++
++    inline ThreadSched* thread_sched() const;
++    inline void set_thread_sched(ThreadSched* scheduler);
++    inline int initial_home_thread_id(Task* task, bool scheduled) const;
++
++    inline NameInfo* name_info() const;
++    NameInfo* force_name_info();
++
++    // UNPARSING
++    inline const String& configuration_string() const;
++    void unparse(StringAccum& sa, const String& indent = String()) const;
++    void unparse_requirements(StringAccum& sa, const String& indent = String()) const;
++    void unparse_classes(StringAccum& sa, const String& indent = String()) const;
++    void unparse_declarations(StringAccum& sa, const String& indent = String()) const;
++    void unparse_connections(StringAccum& sa, const String& indent = String()) const;
++
++    String element_ports_string(int eindex) const;
++    //@}
++  
++    // INITIALIZATION
++    /** @name Internal Functions */
++    //@{
++    Router(const String& configuration, Master* master);
++    ~Router();
++
++    static void static_initialize();
++    static void static_cleanup();
++
++    inline void use();
++    void unuse();
++
++    inline const Vector<String>& requirements() const;
++    void add_requirement(const String& requirement);
++    int add_element(Element* e, const String& name, const String& conf, const String& landmark);
++    int add_connection(int from_idx, int from_port, int to_idx, int to_port);
++#if CLICK_LINUXMODULE
++    int add_module_ref(struct module* module);
++#endif
++
++    inline Router* hotswap_router() const;
++    void set_hotswap_router(Router* router);
++
++    int initialize(ErrorHandler* errh);
++    void activate(bool foreground, ErrorHandler* errh);
++    inline void activate(ErrorHandler* errh);
++
++    int new_notifier_signal(NotifierSignal& signal);
++    //@}
++
++    /** @cond never */
++    // Needs to be public for Lexer, etc., but not useful outside
++    struct Hookup {
++      int idx;
++      int port;
++      Hookup()                                : idx(-1) { }
++      Hookup(int i, int p)                    : idx(i), port(p) { }
++    };
++    /** @endcond never */
++      
++#if CLICK_NS
++    simclick_node_t *simnode() const;
++    int sim_get_ifid(const char* ifname);
++    int sim_listen(int ifid, int element);
++    int sim_if_ready(int ifid);
++    int sim_write(int ifid, int ptype, const unsigned char *, int len,
++                simclick_simpacketinfo *pinfo);
++    int sim_incoming_packet(int ifid, int ptype, const unsigned char *,
++                          int len, simclick_simpacketinfo* pinfo);
++    void sim_trace(const char* event);
++    int sim_get_node_id();
++    int sim_get_next_pkt_id();
++
++  protected:
++    Vector<Vector<int> *> _listenvecs;
++    Vector<int>* sim_listenvec(int ifid);
++#endif
++  
++  private:
++
++    enum {
++      ROUTER_NEW, ROUTER_PRECONFIGURE, ROUTER_PREINITIALIZE,
++      ROUTER_LIVE, ROUTER_DEAD                // order is important
++    };
++    enum {
++      RUNNING_DEAD = -2, RUNNING_INACTIVE = -1, RUNNING_PREPARING = 0,
++      RUNNING_BACKGROUND = 1, RUNNING_ACTIVE = 2
++    };
++
++    Master* _master;
++    
++    atomic_uint32_t _runcount;
++
++    atomic_uint32_t _refcount;
++  
++    Vector<Element*> _elements;
++    Vector<String> _element_names;
++    Vector<String> _element_configurations;
++    Vector<String> _element_landmarks;
++    Vector<int> _element_configure_order;
++
++    Vector<Hookup> _hookup_from;
++    Vector<Hookup> _hookup_to;
++
++    /** @cond never */
++    struct Gport {
++      Vector<int> e2g;
++      Vector<int> g2e;
++      int size() const                        { return g2e.size(); }
++    };
++    /** @endcond never */
++    Gport _gports[2];
++  
++    Vector<int> _hookup_gports[2];
++
++    Vector<String> _requirements;
++
++    volatile int _state;
++    bool _have_connections : 1;
++    volatile int _running;
++  
++    Vector<int> _ehandler_first_by_element;
++    Vector<int> _ehandler_to_handler;
++    Vector<int> _ehandler_next;
++
++    Vector<int> _handler_first_by_name;
++
++    enum { HANDLER_BUFSIZ = 256 };
++    Handler** _handler_bufs;
++    int _nhandlers_bufs;
++    int _free_handler;
++
++    Vector<String> _attachment_names;
++    Vector<void*> _attachments;
++  
++    Element* _root_element;
++    String _configuration;
++
++    enum { NOTIFIER_SIGNALS_CAPACITY = 4096 };
++    atomic_uint32_t* _notifier_signals;
++    int _n_notifier_signals;
++    HashMap_ArenaFactory* _arena_factory;
++    Router* _hotswap_router;
++    ThreadSched* _thread_sched;
++    mutable NameInfo* _name_info;
++
++    Router* _next_router;
++
++#if CLICK_LINUXMODULE
++    Vector<struct module*> _modules;
++#endif
++    
++    Router(const Router&);
++    Router& operator=(const Router&);
++  
++    void remove_hookup(int);
++    void hookup_error(const Hookup&, bool, const char*, ErrorHandler*);
++    int check_hookup_elements(ErrorHandler*);
++    int check_hookup_range(ErrorHandler*);
++    int check_hookup_completeness(ErrorHandler*);
++  
++    int processing_error(const Hookup&, const Hookup&, bool, int, ErrorHandler*);
++    int check_push_and_pull(ErrorHandler*);
++    
++    void make_gports();
++    int ngports(bool isout) const     { return _gports[isout].g2e.size(); }
++    inline int gport(bool isoutput, const Hookup&) const;
++    inline Hookup gport_hookup(bool isoutput, int) const;
++    void gport_list_elements(bool, const Bitvector&, Vector<Element*>&) const;
++    void make_hookup_gports();
++  
++    void set_connections();
++  
++    String context_message(int element_no, const char*) const;
++    int element_lerror(ErrorHandler*, Element*, const char*, ...) const;
++
++    // private handler methods
++    void initialize_handlers(bool, bool);
++    inline Handler* xhandler(int) const;
++    int find_ehandler(int, const String&, bool allow_star) const;
++    static inline Handler fetch_handler(const Element*, const String&);
++    void store_local_handler(int, const Handler&);
++    static void store_global_handler(const Handler&);
++    static inline void store_handler(const Element*, const Handler&);
++
++    int global_port_flow(bool forward, Element* first_element, int first_port, ElementFilter* stop_filter, Bitvector& results);
++
++    // global handlers
++    static String router_read_handler(Element*, void*);
++
++    /** @cond never */
++    friend class Master;
++    friend class Task;
++    friend int Element::set_nports(int, int);
++    /** @endcond never */
++  
++};
++
++
++class Handler { public:
++
++    enum Flags {
++      OP_READ = 0x001, OP_WRITE = 0x002,
++      READ_PARAM = 0x004, ONE_HOOK = 0x008,
++      SPECIAL_FLAGS = OP_READ | OP_WRITE | READ_PARAM | ONE_HOOK,
++      EXCLUSIVE = 0x010, RAW = 0x020,
++      DRIVER_FLAG_0 = 0x040, DRIVER_FLAG_1 = 0x080,
++      DRIVER_FLAG_2 = 0x100, DRIVER_FLAG_3 = 0x200,
++      USER_FLAG_SHIFT = 10, USER_FLAG_0 = 1 << USER_FLAG_SHIFT
++    };
++
++    inline const String &name() const;
++    inline uint32_t flags() const;
++    inline void *thunk1() const;
++    inline void *thunk2() const;
++
++    inline bool readable() const;
++    inline bool read_param() const;
++    inline bool read_visible() const;
++    inline bool writable() const;
++    inline bool write_visible() const;
++    inline bool visible() const;
++    inline bool exclusive() const;
++    inline bool raw() const;
++
++    inline String call_read(Element *e, ErrorHandler *errh = 0) const;
++    String call_read(Element *e, const String &param, bool raw,
++                   ErrorHandler *errh) const;
++    int call_write(const String &value, Element *e, bool raw,
++                 ErrorHandler *errh) const;
++  
++    String unparse_name(Element *e) const;
++    static String unparse_name(Element *e, const String &hname);
++
++    static inline const Handler *blank_handler();
++    
++  private:
++
++    String _name;
++    union {
++      HandlerHook h;
++      struct {
++          ReadHandlerHook r;
++          WriteHandlerHook w;
++      } rw;
++    } _hook;
++    void *_thunk1;
++    void *_thunk2;
++    uint32_t _flags;
++    int _use_count;
++    int _next_by_name;
++
++    static const Handler *the_blank_handler;
++    
++    Handler(const String & = String());
++
++    bool compatible(const Handler &) const;
++  
++    friend class Router;
++  
++};
++
++/* The largest size a write handler is allowed to have. */
++#define LARGEST_HANDLER_WRITE 65536
++
++
++inline bool
++operator==(const Router::Hookup& a, const Router::Hookup& b)
++{
++    return a.idx == b.idx && a.port == b.port;
++}
++
++inline bool
++operator!=(const Router::Hookup& a, const Router::Hookup& b)
++{
++    return a.idx != b.idx || a.port != b.port;
++}
++
++/** @brief  Increment the router's reference count.
++ *
++ *  Routers are reference counted objects.  A Router is created with one
++ *  reference, which is held by its Master object.  Normally the Router and
++ *  all its elements will be deleted when the Master drops this reference, but
++ *  you can preserve the Router for longer by adding a reference yourself. */
++inline void
++Router::use()
++{
++    _refcount++;
++}
++
++/** @brief  Return true iff the router is currently running.
++ *
++ *  A running router has been successfully initialized (so running() implies
++ *  initialized()), and has not stopped yet. */
++inline bool
++Router::running() const
++{
++    return _running > 0;
++}
++
++/** @brief  Return true iff the router has been successfully initialized. */
++inline bool
++Router::initialized() const
++{
++    return _state == ROUTER_LIVE;
++}
++
++/** @brief  Return true iff the router's handlers have been initialized.
++ *
++ *  handlers_ready() returns false until each element's
++ *  Element::add_handlers() method has been called.  This happens after
++ *  Element::configure(), but before Element::initialize(). */
++inline bool
++Router::handlers_ready() const
++{
++    return _state > ROUTER_PRECONFIGURE;
++}
++
++/** @brief  Returns a vector containing all the router's elements.
++ *  @invariant  elements()[i] == element(i) for all i in range. */
++inline const Vector<Element*>&
++Router::elements() const
++{
++    return _elements;
++}
++
++/** @brief  Returns the number of elements in the router. */
++inline int
++Router::nelements() const
++{
++    return _elements.size();
++}
++
++/** @brief  Returns the element with index @a eindex.
++ *  @param  eindex  element index, or -1 for root_element()
++ *  @invariant  If eindex(i) isn't null, then eindex(i)->@link Element::eindex eindex@endlink() == i.
++ *
++ *  This function returns the element with index @a eindex.  If @a eindex ==
++ *  -1, returns root_element().  If @a eindex is otherwise out of range,
++ *  returns null. */
++inline Element*
++Router::element(int eindex) const
++{
++    return element(this, eindex);
++}
++
++/** @brief  Returns this router's root element.
++ *
++ *  Every router has a root Element.  This element has Element::eindex -1 and
++ *  name "".  It is not configured or initialized, and doesn't appear in the
++ *  configuration; it exists only for convenience, when other Click code needs
++ *  to refer to some arbitrary element at the top level of the compound
++ *  element hierarchy. */
++inline Element*
++Router::root_element() const
++{
++    return _root_element;
++}
++
++inline const Vector<String>&
++Router::requirements() const
++{
++    return _requirements;
++}
++
++inline ThreadSched*
++Router::thread_sched() const
++{
++    return _thread_sched;
++}
++
++inline void
++Router::set_thread_sched(ThreadSched* ts)
++{
++    _thread_sched = ts;
++}
++
++inline int
++Router::initial_home_thread_id(Task* t, bool scheduled) const
++{
++    if (!_thread_sched)
++      return ThreadSched::THREAD_UNKNOWN;
++    else
++      return _thread_sched->initial_home_thread_id(t, scheduled);
++}
++
++inline NameInfo*
++Router::name_info() const
++{
++    return _name_info;
++}
++
++/** @brief  Returns the Master object for this router. */
++inline Master*
++Router::master() const
++{
++    return _master;
++}
++
++/** @brief  Return the router's runcount.
++ *
++ *  The runcount is an integer that determines whether the router is running.
++ *  A running router has positive runcount.  Decrementing the router's runcount
++ *  to zero or below will cause the router to stop, although elements like
++ *  DriverManager can intercept the stop request and continue processing.
++ *
++ *  Elements request that the router stop its processing by calling
++ *  adjust_runcount() or please_stop_driver(). */
++inline int32_t
++Router::runcount() const
++{
++    return _runcount.value();
++}
++
++/** @brief  Request a driver stop by adjusting the runcount by -1.
++ *  @note   Equivalent to adjust_runcount(-1). */
++inline void
++Router::please_stop_driver()
++{
++    adjust_runcount(-1);
++}
++
++/** @brief  Returns the router's initial configuration string.
++ *  @return The configuration string specified to the constructor. */
++inline const String&
++Router::configuration_string() const
++{
++    return _configuration;
++}
++
++inline void
++Router::activate(ErrorHandler* errh)
++{
++    activate(true, errh);
++}
++
++/** @brief  Finds an element named @a name.
++ *  @param  name     element name
++ *  @param  errh     optional error handler
++ *
++ *  Returns the unique element named @a name, if any.  If no element named @a
++ *  name is found, reports an error to @a errh and returns null.  The error is
++ *  "<tt>no element named 'name'</tt>".  If @a errh is null, no error is
++ *  reported.
++ *
++ *  This function is equivalent to find(const String&, String, ErrorHandler*)
++ *  with a context argument of the empty string. */
++inline Element *
++Router::find(const String& name, ErrorHandler *errh) const
++{
++    return find(name, "", errh);
++}
++
++inline HashMap_ArenaFactory*
++Router::arena_factory() const
++{
++    return _arena_factory;
++}
++
++/** @brief Returns the currently-installed router this router will eventually
++ * replace.
++ *
++ * This function is only meaningful during a router's initialization.  If this
++ * router was installed with the hotswap option, then hotswap_router() will
++ * return the currently-installed router that this router will eventually
++ * replace (assuming error-free initialization).  Otherwise, hotswap_router()
++ * will return 0.
++ */
++inline Router*
++Router::hotswap_router() const
++{
++    return _hotswap_router;
++}
++
++inline
++Handler::Handler(const String &name)
++    : _name(name), _thunk1(0), _thunk2(0), _flags(0), _use_count(0),
++      _next_by_name(-1)
++{
++    _hook.rw.r = 0;
++    _hook.rw.w = 0;
++}
++
++inline bool
++Handler::compatible(const Handler& o) const
++{
++    return (_hook.rw.r == o._hook.rw.r && _hook.rw.w == o._hook.rw.w
++          && _thunk1 == o._thunk1 && _thunk2 == o._thunk2
++          && _flags == o._flags);
++}
++
++/** @brief Returns this handler's name. */
++inline const String&
++Handler::name() const
++{
++    return _name;
++}
++
++/** @brief Returns this handler's flags.
++
++    The result is a bitwise-or of flags from the Flags enumeration type. */
++inline uint32_t
++Handler::flags() const
++{
++    return _flags;
++}
++
++/** @brief Returns this handler's first callback data. */
++inline void*
++Handler::thunk1() const
++{
++    return _thunk1;
++}
++
++/** @brief Returns this handler's second callback data. */
++inline void*
++Handler::thunk2() const
++{
++    return _thunk2;
++}
++
++/** @brief Returns true iff this is a valid read handler. */
++inline bool
++Handler::readable() const
++{
++    return _flags & OP_READ;
++}
++
++/** @brief Returns true iff this is a valid read handler that may accept
++    parameters. */
++inline bool
++Handler::read_param() const
++{
++    return _flags & READ_PARAM;
++}
++
++/** @brief Returns true iff this is a valid visible read handler.
++
++    Only visible handlers may be called from outside the router
++    configuration. */
++inline bool
++Handler::read_visible() const
++{
++    return _flags & OP_READ;
++}
++
++/** @brief Returns true iff this is a valid write handler. */
++inline bool
++Handler::writable() const
++{
++    return _flags & OP_WRITE;
++}
++
++/** @brief Returns true iff this is a valid visible write handler.
++
++    Only visible handlers may be called from outside the router
++    configuration. */
++inline bool
++Handler::write_visible() const
++{
++    return _flags & OP_WRITE;
++}
++
++/** @brief Returns true iff this handler is visible. */
++inline bool
++Handler::visible() const
++{
++    return _flags & (OP_READ | OP_WRITE);
++}
++
++/** @brief Returns true iff this handler is exclusive.
++
++    Exclusive means mutually exclusive with all other router processing.  In
++    the Linux kernel module driver, reading or writing an exclusive handler
++    using the Click filesystem will first lock all router threads and
++    handlers. */
++inline bool
++Handler::exclusive() const
++{
++    return _flags & EXCLUSIVE;
++}
++
++/** @brief Returns true iff quotes should be removed when calling this
++    handler.
++
++    A raw handler expects and returns raw text.  Click will unquote quoted
++    text before passing it to a raw handler, and (in the Linux kernel module)
++    will not add a courtesy newline to the end of a raw handler's value. */
++inline bool
++Handler::raw() const
++{
++    return _flags & RAW;
++}
++
++/** @brief Call a read handler without parameters.
++    @param e element on which to call the handler
++    @param errh error handler
++
++    The element must be nonnull; to call a global handler, pass the relevant
++    router's Router::root_element().  @a errh may be null, in which case
++    errors are ignored. */
++inline String
++Handler::call_read(Element* e, ErrorHandler* errh) const
++{
++    return call_read(e, String(), false, errh);
++}
++
++/** @brief Returns a handler incapable of doing anything.
++ *
++ *  The returned handler returns false for readable() and writable()
++ *  and has flags() of zero. */
++inline const Handler *
++Handler::blank_handler()
++{
++    return the_blank_handler;
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/routerthread.hh click-1.6.0-27/inst/include/click/routerthread.hh
+--- click-1.6.0/inst/include/click/routerthread.hh     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/routerthread.hh  2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,328 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/routerthread.cc" -*-
++#ifndef CLICK_ROUTERTHREAD_HH
++#define CLICK_ROUTERTHREAD_HH
++#include <click/sync.hh>
++#include <click/vector.hh>
++#if CLICK_LINUXMODULE
++# include <click/cxxprotect.h>
++CLICK_CXX_PROTECT
++# include <linux/sched.h>
++CLICK_CXX_UNPROTECT
++# include <click/cxxunprotect.h>
++#endif
++#if CLICK_BSDMODULE
++# include <click/cxxprotect.h>
++CLICK_CXX_PROTECT
++# include <sys/systm.h>
++CLICK_CXX_UNPROTECT
++# include <click/cxxunprotect.h>
++#endif
++
++#define CLICK_DEBUG_SCHEDULING 0
++
++// NB: user must #include <click/task.hh> before <click/routerthread.hh>.
++// We cannot #include <click/task.hh> ourselves because of circular #include
++// dependency.
++CLICK_DECLS
++
++class RouterThread
++#ifndef HAVE_TASK_HEAP
++    : private Task
++#endif
++{ public:
++
++    enum { THREAD_QUIESCENT = -1, THREAD_STRONG_UNSCHEDULE = -2,
++         THREAD_UNKNOWN = -1000 };
++    
++    inline int thread_id() const;
++
++    // Task list functions
++    inline bool active() const;
++    inline Task *task_begin() const;
++    inline Task *task_next(Task *task) const;
++    inline Task *task_end() const;
++    
++    inline void lock_tasks();
++    inline bool attempt_lock_tasks();
++    inline void unlock_tasks();
++
++    inline Master* master() const;
++    void driver();
++    void driver_once();
++
++    void unschedule_router_tasks(Router*);
++
++#ifdef HAVE_ADAPTIVE_SCHEDULER
++    // min_cpu_share() and max_cpu_share() are expressed on a scale with
++    // Task::MAX_UTILIZATION == 100%.
++    unsigned min_cpu_share() const    { return _min_click_share; }
++    unsigned max_cpu_share() const    { return _max_click_share; }
++    unsigned cur_cpu_share() const    { return _cur_click_share; }
++    void set_cpu_share(unsigned min_share, unsigned max_share);
++#endif
++
++#if CLICK_LINUXMODULE || CLICK_BSDMODULE
++    bool greedy() const                       { return _greedy; }
++    void set_greedy(bool g)           { _greedy = g; }
++#endif
++    
++    inline void wake();
++
++#if CLICK_DEBUG_SCHEDULING
++    enum { S_RUNNING, S_PAUSED, S_TIMER, S_BLOCKED };
++    int thread_state() const          { return _thread_state; }
++    static String thread_state_name(int);
++    uint32_t driver_epoch() const     { return _driver_epoch; }
++    uint32_t driver_task_epoch() const        { return _driver_task_epoch; }
++    timeval task_epoch_time(uint32_t epoch) const;
++# if CLICK_LINUXMODULE
++    struct task_struct *sleeper() const       { return _linux_task; }
++# endif
++#endif
++
++    unsigned _tasks_per_iter;
++    unsigned _iters_per_timers;
++    unsigned _iters_per_os;
++
++  private:
++
++#ifdef HAVE_TASK_HEAP
++    Vector<Task*> _task_heap;
++    int _task_heap_hole;
++    unsigned _pass;
++#endif
++    
++    Master *_master;
++    int _id;
++
++#if CLICK_LINUXMODULE
++    struct task_struct *_linux_task;
++    spinlock_t _lock;
++    atomic_uint32_t _task_lock_waiting;
++#endif
++    
++    uint32_t _any_pending;
++
++#if CLICK_LINUXMODULE
++    bool _greedy;
++#endif
++    
++#if CLICK_BSDMODULE
++    // XXX FreeBSD
++    u_int64_t _old_tsc; /* MARKO - temp. */
++    void *_sleep_ident;
++    int _oticks;
++    bool _greedy;
++#endif
++
++#ifdef HAVE_ADAPTIVE_SCHEDULER
++    enum { C_CLICK, C_KERNEL, NCLIENTS };
++    struct Client {                   // top-level stride clients
++      unsigned pass;
++      unsigned stride;
++      int tickets;
++      Client() : pass(0), tickets(0)  { }
++    };
++    Client _clients[NCLIENTS];
++    unsigned _global_pass;            // global pass
++    unsigned _max_click_share;                // maximum allowed Click share of CPU
++    unsigned _min_click_share;                // minimum allowed Click share of CPU
++    unsigned _cur_click_share;                // current Click share
++#endif
++
++#if CLICK_DEBUG_SCHEDULING
++    int _thread_state;
++    uint32_t _driver_epoch;
++    uint32_t _driver_task_epoch;
++    enum { TASK_EPOCH_BUFSIZ = 32 };
++    uint32_t _task_epoch_first;
++    timeval _task_epoch_time[TASK_EPOCH_BUFSIZ];
++#endif
++    
++    // called by Master
++    RouterThread(Master *, int);
++    ~RouterThread();
++
++    // task requests
++    inline void add_pending();
++
++    // task running functions
++    inline void driver_lock_tasks();
++    inline void driver_unlock_tasks();
++    inline void run_tasks(int ntasks);
++    inline void run_os();
++#ifdef HAVE_ADAPTIVE_SCHEDULER
++    void client_set_tickets(int client, int tickets);
++    inline void client_update_pass(int client, const struct timeval &before, const struct timeval &after);
++    inline void check_restride(struct timeval &before, const struct timeval &now, int &restride_iter);
++#endif
++#ifdef HAVE_TASK_HEAP
++    void task_reheapify_from(int pos, Task*);
++#endif
++    
++    friend class Task;
++    friend class Master;
++
++};
++
++
++/** @brief Returns this thread's ID.
++ *
++ * The result is >= 0 for true threads, and < 0 for threads that never run any
++ * of their associated Tasks.
++ */
++inline int
++RouterThread::thread_id() const
++{
++    return _id;
++}
++
++/** @brief Returns this thread's associated Master. */
++inline Master*
++RouterThread::master() const
++{
++    return _master;
++}
++
++/** @brief Returns whether any tasks are scheduled.
++ *
++ * Returns false iff no tasks are scheduled and no events are pending.  Since
++ * not all events actually matter (for example, a Task might have been
++ * scheduled and then subsequently unscheduled), active() may temporarily
++ * return true even when no real events are outstanding.
++ */
++inline bool
++RouterThread::active() const
++{
++#ifdef HAVE_TASK_HEAP
++    return _task_heap.size() != 0 || _any_pending;
++#else
++    return ((const Task *)_next != this) || _any_pending;
++#endif
++}
++
++/** @brief Returns the beginning of the scheduled task list.
++ *
++ * Each RouterThread maintains a list of all currently-scheduled tasks.
++ * Elements may traverse this list with the task_begin(), task_next(), and
++ * task_end() functions, using iterator-like code such as:
++ *
++ * @code
++ * thread->lock_tasks();
++ * for (Task *t = thread->task_begin();
++ *      t != thread->task_end();
++ *      t = thread->task_next(t)) {
++ *     // ... do something with t...
++ * }
++ * thread->unlock_tasks();
++ * @endcode
++ *
++ * The thread's task lock must be held during the traversal, as shown above.
++ *
++ * The return value may not be a real task.  Test it against task_end() before
++ * use.
++ *
++ * @sa task_next, task_end, lock_tasks, unlock_tasks
++ */
++inline Task *
++RouterThread::task_begin() const
++{
++#ifdef HAVE_TASK_HEAP
++    int p = _task_heap_hole;
++    return (p < _task_heap.size() ? _task_heap[p] : 0);
++#else
++    return _next;
++#endif
++}
++
++/** @brief Returns the task following @a task in the scheduled task list.
++ * @param task the current task
++ *
++ * The return value may not be a real task.  Test it against task_end() before
++ * use.  However, the @a task argument must be a real task; do not attempt to
++ * call task_next(task_end()).
++ *
++ * @sa task_begin for usage, task_end
++ */
++inline Task *
++RouterThread::task_next(Task *task) const
++{
++#ifdef HAVE_TASK_HEAP
++    int p = task->_schedpos + 1;
++    return (p < _task_heap.size() ? _task_heap[p] : 0);
++#else
++    return task->_next;
++#endif
++}
++
++/** @brief Returns the end of the scheduled task list.
++ *
++ * The return value is not a real task
++ *
++ * @sa task_begin for usage, task_next
++ */
++inline Task *
++RouterThread::task_end() const
++{
++#ifdef HAVE_TASK_HEAP
++    return 0;
++#else
++    return (Task *) this;
++#endif
++}
++
++inline void
++RouterThread::lock_tasks()
++{
++#if CLICK_LINUXMODULE
++    if (unlikely(current != _linux_task)) {
++      _task_lock_waiting++;
++      spin_lock(&_lock);
++      _task_lock_waiting--;
++    }
++#endif
++}
++
++inline bool
++RouterThread::attempt_lock_tasks()
++{
++#if CLICK_LINUXMODULE
++    if (likely(current == _linux_task))
++      return true;
++    return spin_trylock(&_lock);
++#else
++    return true;
++#endif
++}
++
++inline void
++RouterThread::unlock_tasks()
++{
++#if CLICK_LINUXMODULE
++    if (unlikely(current != _linux_task))
++      spin_unlock(&_lock);
++#endif
++}
++
++inline void
++RouterThread::wake()
++{
++#if CLICK_LINUXMODULE
++    if (_linux_task)
++      wake_up_process(_linux_task);
++#endif
++#if CLICK_BSDMODULE && !BSD_NETISRSCHED
++    if (_sleep_ident)
++      wakeup_one(&_sleep_ident);
++#endif
++}
++
++inline void
++RouterThread::add_pending()
++{
++    _any_pending = 1;
++    wake();
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/simclick.h click-1.6.0-27/inst/include/click/simclick.h
+--- click-1.6.0/inst/include/click/simclick.h  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/simclick.h       2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,114 @@
++#ifndef SIMCLICK_H
++#define SIMCLICK_H
++/*
++ * simclick.h
++ *
++ * API for sending packets to Click. Mostly intended for use
++ * by a network simulator which wants to use Click to do routing.
++ * 
++ */
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++/*
++ * Packet types used - generally going to be ethernet, but could
++ * possibly be something else I suppose...
++ */
++#define SIMCLICK_PTYPE_UNKNOWN 0
++#define SIMCLICK_PTYPE_ETHER 1
++#define SIMCLICK_PTYPE_IP 2
++
++/*
++ * Not a whole lot to this. We have to create a click router object
++ * and also send packets and trigger events.
++ */
++
++/*
++ * This contains per packet data we need to preserve when the packet gets
++ * dragged through click. Heavily biased towards ns-2 right now.
++ */
++typedef struct {
++    int id;                   /* Simulator ID number for the packet */
++    int fid;                  /* Simulator flow ID number for the packet */
++    int simtype;              /* Original simulator packet type - useful
++                               * for morphing between raw and simulator
++                               * packet types */
++} simclick_simpacketinfo;
++
++
++/*
++ * Opaque handles for the sim and click instances
++ */
++typedef struct simclick_node {
++    void *clickinfo;
++    struct timeval curtime;
++} simclick_node_t;
++
++int simclick_click_create(simclick_node_t *sim, const char *router_file);
++
++int simclick_click_send(simclick_node_t *sim,
++                      int ifid,int type,const unsigned char* data,int len,
++                      simclick_simpacketinfo* pinfo);
++int simclick_sim_send(simclick_node_t *sim,
++                    int ifid,int type, const unsigned char* data,int len,
++                    simclick_simpacketinfo*);
++
++void simclick_click_run(simclick_node_t *sim);
++
++void simclick_click_kill(simclick_node_t *sim);
++
++/*
++ * simclick_click_read_handler will allocate a buffer of adequate length
++ * to receive the handler information. This buffer must be freed
++ * by the caller. If a non-null value for the "memalloc" parameter
++ * is passed in, simclick_click_read_handler will use that function
++ * to allocate the memory. If there's a null value there, "malloc" will
++ * be used by default. The "memparam" parameter is a caller-specified
++ * value which will be passed back to the memory allocation function.
++ */
++typedef void* (*SIMCLICK_MEM_ALLOC)(size_t,void*);
++char* simclick_click_read_handler(simclick_node_t *sim,
++                                const char* elementname,
++                                const char* handlername,
++                                SIMCLICK_MEM_ALLOC memalloc,
++                                void* memparam);
++
++int simclick_click_write_handler(simclick_node_t *sim,
++                               const char* elemname, const char* handlername,
++                               const char* writestring);
++
++/*
++ * We also provide a gettimeofday substitute which utilizes the 
++ * state info passed to us by the simulator.
++ */
++int simclick_gettimeofday(struct timeval* tv);
++
++/*
++ * The simulated system also has to provide a few services to click,
++ * notably some way of injecting packets back into the system,
++ * mapping interface names to id numbers, and arranging for click
++ * to execute at a specified time in the future.
++ * We implement 
++ */
++#define SIMCLICK_VERSION              0  // none
++#define SIMCLICK_SUPPORTS             1  // int call
++#define SIMCLICK_IFID_FROM_NAME               2  // const char *ifname
++#define SIMCLICK_IPADDR_FROM_NAME     3  // const char *ifname, char *buf, int len
++#define SIMCLICK_MACADDR_FROM_NAME    4  // const char *ifname, char *buf, int len
++#define SIMCLICK_SCHEDULE             5  // struct timeval *when
++#define SIMCLICK_GET_NODE_NAME                6  // char *buf, int len
++#define SIMCLICK_IF_READY             7  // int ifid
++#define SIMCLICK_TRACE                        8  // const char *event
++#define SIMCLICK_GET_NODE_ID          9  // none
++#define SIMCLICK_GET_NEXT_PKT_ID      10 // none
++#define SIMCLICK_CHANGE_CHANNEL               11 // int ifid, int channelid
++
++int simclick_sim_command(simclick_node_t *sim, int cmd, ...);
++int simclick_click_command(simclick_node_t *sim, int cmd, ...);
++
++#ifdef __cplusplus
++}
++#endif
++#endif
+diff -Nurb click-1.6.0/inst/include/click/skbmgr.hh click-1.6.0-27/inst/include/click/skbmgr.hh
+--- click-1.6.0/inst/include/click/skbmgr.hh   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/skbmgr.hh        2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,16 @@
++// -*- c-basic-offset: 2; related-file-name: "../../linuxmodule/skbmgr.cc" -*-
++#ifndef CLICK_SKBMGR_HH
++#define CLICK_SKBMGR_HH
++CLICK_DECLS
++
++void skbmgr_init();
++void skbmgr_cleanup();
++
++/* allocate skbs. Number of skbs allocated is stored in the want variable */
++struct sk_buff *skbmgr_allocate_skbs(unsigned headroom, unsigned size, int *want);
++
++/* recycle skb back into pool */
++void skbmgr_recycle_skbs(struct sk_buff *);
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/standard/addressinfo.hh click-1.6.0-27/inst/include/click/standard/addressinfo.hh
+--- click-1.6.0/inst/include/click/standard/addressinfo.hh     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/standard/addressinfo.hh  2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,109 @@
++// -*- c-basic-offset: 2; related-file-name: "../../../elements/standard/addressinfo.cc" -*-
++#ifndef CLICK_ADDRESSINFO_HH
++#define CLICK_ADDRESSINFO_HH
++#include <click/element.hh>
++#include <click/hashmap.hh>
++#ifdef HAVE_IP6
++# include <click/ip6address.hh>
++#endif
++CLICK_DECLS
++
++/*
++=c
++
++AddressInfo(NAME ADDRESS [ADDRESS...], ...)
++
++=s information
++
++specifies address information
++
++=io
++
++None
++
++=d
++
++Lets you use mnemonic names for IPv4 and IPv6 addresses, IPv4 and IPv6
++address prefixes, and Ethernet addresses. Each argument has the form `NAME
++ADDRESS [ADDRESS...]', which associates the given ADDRESSes with NAME. For
++example, if a configuration contains this AddressInfo element,
++
++   AddressInfo(mauer 10.0.0.1, mazu 10.0.0.10);
++
++then other configuration strings can use C<mauer> and C<mazu> as mnemonics
++for the IP addresses 10.0.0.1 and 10.0.0.10, respectively.
++
++The mnemonic names introduced by AddressInfo elements are local with
++respect to compound elements. That is, names created inside a compound
++element apply only within that compound element and its subelements. For
++example:
++
++   AddressInfo(mauer 10.0.0.1);
++   compound :: {
++     AddressInfo(mazu 10.0.0.10);
++     ... -> IPEncap(6, mauer, mazu) -> ...  // OK
++   };
++   ... -> IPEncap(6, mauer, mazu) -> ...    // error: `mazu' undefined
++
++Any name can be simultaneously associated with an IP address, an IP network
++address, and an Ethernet address. The kind of address that is returned is
++generally determined from context. For example:
++
++   AddressInfo(mauer 10.0.0.1/8 00:50:BA:85:84:A9);
++   ... -> IPEncap(6, mauer, ...)                  // as IP address
++       -> EtherEncap(0x0800, mauer, ...) -> ...   // as Ethernet address
++   ... -> ARPResponder(mauer) -> ...              // as IP prefix AND Ethernet address!
++
++An optional suffix makes the context unambiguous. C<NAME> is an ambiguous
++reference to some address, but C<NAME:ip> is always an IPv4 address,
++C<NAME:ipnet> is always an IPv4 network address (IPv4 address prefix),
++C<NAME:ip6> is always an IPv6 address, C<NAME:ip6net> is always an IPv6
++network address, and C<NAME:eth> is always an Ethernet address.
++
++=head1 DEFAULT ADDRESSES
++
++If you do not define an address for a given name, AddressInfo will use the
++default, if any.  Defaults are as follows:
++
++=over 2
++
++=item *
++
++If DEVNAME is the name of an Ethernet device, then C<DEVNAME:eth> defaults to
++DEVNAME's Ethernet address.  (At userlevel, this works only on BSD and Linux.)
++
++=item *
++
++C<DEVNAME:ip> defaults to the first primary IPv4 address associated with the
++device DEVNAME.
++
++=back
++
++These defaults are not available on all platforms.
++
++=a
++
++PortInfo */
++
++class AddressInfo : public Element { public:
++  
++  AddressInfo();
++  ~AddressInfo();
++  
++  const char *class_name() const      { return "AddressInfo"; }
++  
++  int configure_phase() const         { return CONFIGURE_PHASE_FIRST; }
++  int configure(Vector<String> &, ErrorHandler *);
++
++  static bool query_ip(String, unsigned char *, Element *);
++  static bool query_ip_prefix(String, unsigned char *, unsigned char *, Element *);
++#ifdef HAVE_IP6
++  static bool query_ip6(String, unsigned char *, Element *);
++  static bool query_ip6_prefix(String, unsigned char *, int *, Element *);
++#endif
++  static bool query_ethernet(String, unsigned char *, Element *);
++
++};
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/standard/alignmentinfo.hh click-1.6.0-27/inst/include/click/standard/alignmentinfo.hh
+--- click-1.6.0/inst/include/click/standard/alignmentinfo.hh   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/standard/alignmentinfo.hh        2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,49 @@
++// -*- c-basic-offset: 2; related-file-name: "../../../elements/standard/alignmentinfo.cc" -*-
++#ifndef CLICK_ALIGNMENTINFO_HH
++#define CLICK_ALIGNMENTINFO_HH
++#include <click/element.hh>
++CLICK_DECLS
++
++/*
++ * =c
++ * AlignmentInfo(ELEMENT [MODULUS OFFSET ...], ...)
++ * =s information
++ * specifies alignment information
++ * =io
++ * None
++ * =d
++ * Provides information about the packet alignment specified elements can
++ * expect. Each configuration argument has the form
++ * `ELEMENT [MODULUS0 OFFSET0 MODULUS1 OFFSET1 ...]',
++ * where there are zero or more MODULUS-OFFSET pairs.
++ * All packets arriving at ELEMENT's
++ * I<n>th input will start `OFFSETI<n>' bytes
++ * off from a `MODULUSI<n>'-byte boundary.
++ * =n
++ * This element is inserted automatically by click-align(1).
++ * =a Align, click-align(1)
++ */
++
++class AlignmentInfo : public Element { public:
++
++  AlignmentInfo();
++  ~AlignmentInfo();
++  
++  const char *class_name() const      { return "AlignmentInfo"; }
++  int configure_phase() const         { return CONFIGURE_PHASE_INFO; }
++  int configure(Vector<String> &, ErrorHandler *);
++
++  bool query1(Element *, int port, int &chunk, int &offset) const;
++  static bool query(Element *, int port, int &chunk, int &offset);
++
++ private:
++  
++  Vector<int> _elem_offset;
++  Vector<int> _elem_icount;
++  Vector<int> _chunks;
++  Vector<int> _offsets;
++  
++};
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/standard/errorelement.hh click-1.6.0-27/inst/include/click/standard/errorelement.hh
+--- click-1.6.0/inst/include/click/standard/errorelement.hh    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/standard/errorelement.hh 2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,36 @@
++// -*- c-basic-offset: 4; related-file-name: "../../../elements/standard/errorelement.cc" -*-
++#ifndef CLICK_ERRORELEMENT_HH
++#define CLICK_ERRORELEMENT_HH
++#include <click/element.hh>
++CLICK_DECLS
++
++/*
++ * =c
++ * Error(...)
++ * =s debugging
++ * always fails
++ * =d
++ * The Error element always fails to initialize. It has any number of inputs
++ * and outputs, and accepts any configuration string without complaint. It is
++ * useful to prevent a router from initializing while avoiding
++ * spurious error messages about bad configuration strings or connections.
++ * =a Message
++ */
++
++class ErrorElement : public Element { public:
++  
++    ErrorElement();
++    ~ErrorElement();
++  
++    const char *class_name() const            { return "Error"; }
++    const char *port_count() const            { return "-/-"; }
++    const char *processing() const            { return AGNOSTIC; }
++    const char *flow_code() const             { return "x/y"; }
++  
++    int configure(Vector<String> &, ErrorHandler *);
++    int initialize(ErrorHandler *);
++  
++};
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/standard/portinfo.hh click-1.6.0-27/inst/include/click/standard/portinfo.hh
+--- click-1.6.0/inst/include/click/standard/portinfo.hh        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/standard/portinfo.hh     2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,73 @@
++// -*- c-basic-offset: 4; related-file-name: "../../../elements/standard/portinfo.cc" -*-
++#ifndef CLICK_PORTINFO_HH
++#define CLICK_PORTINFO_HH
++#include <click/element.hh>
++#include <click/hashmap.hh>
++CLICK_DECLS
++
++/*
++=c
++
++PortInfo(NAME PORT[/PROTOCOL], ...)
++
++=s information
++
++stores named TCP/UDP port information
++
++=io
++
++None
++
++=d
++
++Lets you use mnemonic names for TCP and UDP ports.  Each argument has the form
++`NAME PORT[/PROTOCOL]', which associates the given PORT/PROTOCOL pair with the
++NAME.  If PROTOCOL is left off, the NAME applies to both TCP and UDP.  For
++example, in a configuration containing
++
++   PortInfo(ssh 22, http 80),
++
++configuration strings can use C<ssh> and C<http> as mnemonics for the port
++numbers 22 and 80, respectively.
++
++PortInfo names are local with respect to compound elements.  That is, names
++created inside a compound element apply only within that compound element and
++its subelements.  For example:
++
++   PortInfo(src 10);
++   compound :: {
++     PortInfo(dst 100);
++     ... -> UDPIPEncap(1.0.0.1, src, 2.0.0.1, dst) -> ...  // OK
++   };
++   ... -> UDPIPEncap(1.0.0.1, src, 2.0.0.1, dst) -> ...
++                                         // error: `dst' undefined
++
++=n
++
++If you do not define a port for a given name, PortInfo will use the default,
++if any.  At user level, PortInfo uses the L<getservbyname(3)> function to look
++up ports by name.  In the kernel, there are no default ports.
++
++PortInfo will parse arguments containing more than one name, as `C<NAME
++PORT/PROTOCOL NAME...>', and comments starting with `C<#>' are ignored.  Thus,
++lines from F</etc/services> can be used verbatim as PortInfo configuration
++arguments.
++
++=a
++
++AddressInfo */
++
++class PortInfo : public Element { public:
++  
++    PortInfo();
++    ~PortInfo();
++  
++    const char *class_name() const    { return "PortInfo"; }
++
++    int configure_phase() const               { return CONFIGURE_PHASE_FIRST; }
++    int configure(Vector<String> &, ErrorHandler *);
++  
++};
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/standard/scheduleinfo.hh click-1.6.0-27/inst/include/click/standard/scheduleinfo.hh
+--- click-1.6.0/inst/include/click/standard/scheduleinfo.hh    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/standard/scheduleinfo.hh 2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,105 @@
++// -*- c-basic-offset: 4; related-file-name: "../../../elements/standard/scheduleinfo.cc" -*-
++#ifndef CLICK_SCHEDULEINFO_HH
++#define CLICK_SCHEDULEINFO_HH
++#include <click/element.hh>
++CLICK_DECLS
++
++/*
++=c
++
++ScheduleInfo(ELEMENT PARAM, ...)
++
++=s information
++
++specifies scheduling parameters
++
++=io
++
++None
++
++=d
++
++Provides scheduling parameters for specified elements. Each configuration
++argument has the form `ELEMENT PARAM', meaning that the element
++named ELEMENT has scheduling parameter PARAM. Scheduling
++parameters are real numbers that set how often one element should be
++scheduled in relation to another. For example,
++if elements A and B have
++scheduling parameters 2 and 0.5, respectively, then A will be scheduled
++2/0.5 = 4 times as often as B. The default scheduling parameter is 1.
++
++ScheduleInfo elements inside a compound element can specify scheduling
++parameters for that compound's components.
++Outer ScheduleInfo elements
++can specify a ``scheduling parameter'' for the compound
++element as a whole. This ``scheduling parameter'' is really a scaling
++factor affecting the compound's components. For example, consider this
++configuration,
++
++   elementclass Compound {
++     i :: InfiniteSource -> output;
++     ScheduleInfo(i 0.5);
++   }
++   c :: Compound -> Discard;
++   ScheduleInfo(c 4);
++
++which is the same as the following configuration, after compound elements
++are expanded.
++
++   c/i :: InfiniteSource -> Discard@3 :: Discard;
++   c/ScheduleInfo@2 :: ScheduleInfo(i 0.5);
++   ScheduleInfo@4 :: ScheduleInfo(c 4);
++
++The name of the first ScheduleInfo element starts with `c/', so it is
++used to look up scheduling parameters for elements named `c/I<whatever>'.
++V<>(This includes all components of the compound element `c'.) 
++The second ScheduleInfo element, however, has no slash in its name,
++so it is used to look up all scheduling parameters,
++including scaling factors for compound elements.
++The InfiniteSource's final scaling parameter will be 2:
++the scaling factor 4 times the local scheduling parameter 0.5.
++
++An outer ScheduleInfo element can override local scheduling parameters.
++For example, if the second ScheduleInfo element above was
++
++   ScheduleInfo@4 :: ScheduleInfo(c 4, c/i 10.5)
++
++then the InfiniteSource's final scaling parameter would be 10.5.
++*/
++
++class ScheduleInfo : public Element { public:
++
++    enum { FRAC_BITS = 10 };
++  
++    ScheduleInfo();
++    ~ScheduleInfo();
++  
++    const char* class_name() const    { return "ScheduleInfo"; }
++  
++    int configure_phase() const               { return CONFIGURE_PHASE_INFO; }
++    int configure(Vector<String>&, ErrorHandler*);
++
++    bool query(const String&, int&) const;
++    bool query_prefixes(const String&, int&, String&) const;
++    static int query(Element*, ErrorHandler*);
++    static void initialize_task(Element*, Task*, bool sched, ErrorHandler*);
++    static void initialize_task(Element*, Task*, ErrorHandler*);
++    static void join_scheduler(Element*, Task*, ErrorHandler*);
++
++};
++
++
++inline void
++ScheduleInfo::initialize_task(Element* e, Task* t, ErrorHandler* errh)
++{
++    initialize_task(e, t, true, errh);
++}
++
++inline void
++ScheduleInfo::join_scheduler(Element* e, Task* t, ErrorHandler* errh)
++{
++    initialize_task(e, t, true, errh);
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/standard/storage.hh click-1.6.0-27/inst/include/click/standard/storage.hh
+--- click-1.6.0/inst/include/click/standard/storage.hh 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/standard/storage.hh      2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,49 @@
++// -*- c-basic-offset: 4 -*-
++#ifndef CLICK_STORAGE_HH
++#define CLICK_STORAGE_HH
++CLICK_DECLS
++
++class Storage { public:
++
++    Storage()                         : _head(0), _tail(0) { }
++
++    operator bool() const             { return _head != _tail; }
++    bool empty() const                        { return _head == _tail; }
++    int size() const;
++    int size(int head, int tail) const;
++    int capacity() const              { return _capacity; }
++
++    int head() const                  { return _head; }
++    int tail() const                  { return _tail; }
++    
++    int next_i(int i) const           { return (i!=_capacity ? i+1 : 0); }
++    int prev_i(int i) const           { return (i!=0 ? i-1 : _capacity); }
++
++    // to be used with care
++    void set_capacity(int c)          { _capacity = c; }
++    void set_head(int h)              { _head = h; }
++    void set_tail(int t)              { _tail = t; }
++  
++  protected:
++
++    int _capacity;
++    volatile int _head;
++    volatile int _tail;
++  
++};
++
++inline int
++Storage::size(int head, int tail) const
++{
++    int x = tail - head;
++    return (x >= 0 ? x : _capacity + x + 1);
++}
++    
++inline int
++Storage::size() const
++{
++    return size(_head, _tail);
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/standard/threadsched.hh click-1.6.0-27/inst/include/click/standard/threadsched.hh
+--- click-1.6.0/inst/include/click/standard/threadsched.hh     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/standard/threadsched.hh  2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,19 @@
++// -*- c-basic-offset: 4 -*-
++#ifndef CLICK_THREADSCHED_HH
++#define CLICK_THREADSCHED_HH
++CLICK_DECLS
++
++class ThreadSched { public:
++
++    enum { THREAD_QUIESCENT = -1, THREAD_STRONG_UNSCHEDULE = -2,
++         THREAD_UNKNOWN = -1000 };
++    
++    ThreadSched()                     { }
++    virtual ~ThreadSched()            { }
++
++    virtual int initial_home_thread_id(Task *, bool);
++
++};
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/straccum.hh click-1.6.0-27/inst/include/click/straccum.hh
+--- click-1.6.0/inst/include/click/straccum.hh 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/straccum.hh      2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,518 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/straccum.cc" -*-
++#ifndef CLICK_STRACCUM_HH
++#define CLICK_STRACCUM_HH
++#include <click/glue.hh>
++#include <click/string.hh>
++#ifdef CLICK_LINUXMODULE
++# include <asm/string.h>
++#elif defined(CLICK_BSDMODULE)
++# include <sys/systm.h>
++#else /* User-space */
++# include <string.h>
++#endif
++CLICK_DECLS
++
++/** @file <click/straccum.hh>
++    @brief Click's StringAccum class, used to construct Strings efficiently from pieces.
++*/
++
++class StringAccum { public:
++
++    /** @brief Create an empty StringAccum (with length 0). */
++    StringAccum()
++      : _s(0), _len(0), _cap(0) {
++    }
++    
++    explicit inline StringAccum(int);
++
++    /** @brief Destroy a StringAccum, freeing its memory. */
++    ~StringAccum() {
++      if (_cap >= 0)
++          CLICK_LFREE(_s, _cap);
++    }
++
++    /** @brief Return the contents of the StringAccum.
++      @return The StringAccum's contents.
++
++      The return value is null if the StringAccum is empty or out-of-memory.
++      The returned data() value points to writable memory (unless the
++      StringAccum itself is const). */
++    inline const char *data() const {
++      return reinterpret_cast<const char *>(_s);
++    }
++
++    /** @overload */
++    inline char *data() {
++      return reinterpret_cast<char *>(_s);
++    }
++    
++    /** @brief Return the length of the StringAccum. */
++    int length() const {
++      return _len;
++    }
++
++    /** @brief Return the StringAccum's current capacity.
++      
++      The capacity is the maximum length the StringAccum can hold without
++      incurring a memory allocation.  Returns -1 for out-of-memory
++      StringAccums. */
++    int capacity() const {
++      return _cap;
++    }
++    
++    typedef int (StringAccum::*unspecified_bool_type)() const;
++
++    /** @brief Return true iff the StringAccum contains characters.
++
++        Returns false for empty and out-of-memory StringAccums. */
++    operator unspecified_bool_type() const {
++      return _len != 0 ? &StringAccum::capacity : 0;
++    }
++
++    /** @brief Returns true iff the StringAccum does not contain characters.
++
++      Returns true for empty and out-of-memory StringAccums. */
++    bool operator!() const {
++      return _len == 0;
++    }
++
++    /** @brief Returns true iff the StringAccum is out-of-memory. */
++    bool out_of_memory() const {
++      return _cap < 0;
++    }
++  
++    const char *c_str();
++
++    /** @brief Returns the <a>i</a>th character in the string.
++      @param  i  character index.
++
++      @pre 0 <= @a i < length() */
++    char operator[](int i) const {
++      assert(i>=0 && i<_len);
++      return static_cast<char>(_s[i]);
++    }
++    
++    /** @brief Returns a reference to the <a>i</a>th character in the string.
++      @param  i  character index.
++
++      @pre 0 <= @a i < length() */
++    char &operator[](int i) {
++      assert(i>=0 && i<_len);
++      return reinterpret_cast<char &>(_s[i]);
++    }
++
++    /** @brief Returns the last character in the string.
++      @pre length() > 0 */
++    char back() const {
++      assert(_len > 0);
++      return static_cast<char>(_s[_len - 1]);
++    }
++
++    /** @brief Returns a reference to the last character in the string.
++      @pre length() > 0 */
++    char &back() {
++      assert(_len > 0);
++      return reinterpret_cast<char &>(_s[_len - 1]);
++    }
++
++    inline void clear();
++  
++    inline char *reserve(int n);
++    void set_length(int len);
++    void adjust_length(int delta);
++    inline char *extend(int nadjust, int nreserve = 0);
++    void pop_back(int n = 1);
++  
++    inline void append(char c);
++    inline void append(unsigned char c);
++    void append_fill(int c, int len);
++    
++    inline void append(const char *suffix, int len);
++    inline void append(const unsigned char *suffix, int len);
++    inline void append(const char *begin, const char *end);
++
++    void append_numeric(String::uint_large_t num, int base = 10, bool uppercase = true);
++    void append_numeric(String::int_large_t num, int base = 10, bool uppercase = true);
++
++    StringAccum &snprintf(int n, const char *format, ...);
++  
++    String take_string();
++
++    void swap(StringAccum &o);
++
++    // see also operator<< declarations below
++  
++    void forward(int delta) CLICK_DEPRECATED;
++
++  private:
++  
++    unsigned char *_s;
++    int _len;
++    int _cap;
++  
++    void make_out_of_memory();
++    inline void safe_append(const char *, int);
++    bool grow(int);
++
++    StringAccum(const StringAccum &);
++    StringAccum &operator=(const StringAccum &);
++
++    friend StringAccum &operator<<(StringAccum &, const char *);
++  
++};
++
++inline StringAccum &operator<<(StringAccum &, char);
++inline StringAccum &operator<<(StringAccum &, unsigned char);
++inline StringAccum &operator<<(StringAccum &, const char *);
++inline StringAccum &operator<<(StringAccum &, const String &);
++inline StringAccum &operator<<(StringAccum &, const StringAccum &);
++#ifdef HAVE_PERMSTRING
++inline StringAccum &operator<<(StringAccum &, PermString);
++#endif
++
++inline StringAccum &operator<<(StringAccum &, bool);
++inline StringAccum &operator<<(StringAccum &, short);
++inline StringAccum &operator<<(StringAccum &, unsigned short);
++inline StringAccum &operator<<(StringAccum &, int);
++inline StringAccum &operator<<(StringAccum &, unsigned);
++StringAccum &operator<<(StringAccum &, long);
++StringAccum &operator<<(StringAccum &, unsigned long);
++#if HAVE_LONG_LONG
++inline StringAccum &operator<<(StringAccum &, long long);
++inline StringAccum &operator<<(StringAccum &, unsigned long long);
++#endif
++#if HAVE_INT64_TYPES && !HAVE_INT64_IS_LONG && !HAVE_INT64_IS_LONG_LONG
++inline StringAccum &operator<<(StringAccum &, int64_t);
++inline StringAccum &operator<<(StringAccum &, uint64_t);
++#endif
++#if defined(CLICK_USERLEVEL) || defined(CLICK_TOOL)
++StringAccum &operator<<(StringAccum &, double);
++#endif
++
++StringAccum &operator<<(StringAccum &, void *);
++
++
++/** @brief Create a StringAccum with room for at least @a capacity characters.
++    @param  capacity  initial capacity.
++
++    If @a capacity <= 0, the StringAccum is created empty.  If @a capacity is
++    too large (so that @a capacity bytes of memory can't be allocated), the
++    StringAccum is created as out-of-memory. */
++inline
++StringAccum::StringAccum(int capacity)
++    : _len(0)
++{
++    assert(capacity >= 0);
++    if (capacity) {
++      _s = (unsigned char *) CLICK_LALLOC(capacity);
++      _cap = (_s ? capacity : -1);
++    } else {
++      _s = 0;
++      _cap = 0;
++    }
++}
++
++/** @brief Reserve space for at least @a n characters.
++    @param  n  number of characters to reserve.
++    @return  a pointer to at least @a n characters, or null if allocation fails.
++    @pre  @a n >= 0
++
++    reserve() does not change the string's length(), only its capacity().  In
++    a frequent usage pattern, code calls reserve(), passing an upper bound on
++    the characters that could be written by a series of operations.  After
++    writing into the returned buffer, adjust_length() is called to account for
++    the number of characters actually written. */
++inline char *
++StringAccum::reserve(int n)
++{
++    assert(n >= 0);
++    if (_len + n <= _cap || grow(_len + n))
++      return (char *)(_s + _len);
++    else
++      return 0;
++}
++
++/** @brief Adjust the StringAccum's length.
++    @param  delta  length adjustment
++    @pre  If @a delta > 0, then length() + @a delta <= capacity().
++          If @a delta < 0, then length() + delta >= 0.
++
++    The StringAccum's length after adjust_length(@a delta) equals its old
++    length plus @a delta.  Generally adjust_length() is used after a call to
++    reserve().
++    @sa set_length */
++inline void
++StringAccum::adjust_length(int delta) {
++    assert(_len + delta >= 0 && _len + delta <= _cap);
++    _len += delta;
++}
++
++/** @brief Adjust the StringAccum's length (deprecated).
++    @param  delta  length adjustment.
++    @deprecated  Use adjust_length() instead. */
++inline void
++StringAccum::forward(int delta)
++{
++    adjust_length(delta);
++}
++
++/** @brief Reserve space and adjust length in one operation.
++    @param  nadjust   number of characters to reserve and adjust length.
++    @param  nreserve  additional characters to reserve.
++    @pre  @a nadjust >= 0 and @a nreserve >= 0
++
++    This operation combines the effects of reserve(@a nadjust + @a nreserve)
++    and adjust_length(@a nadjust).  Returns the result of the reserve() call. */
++inline char *
++StringAccum::extend(int nadjust, int nreserve)
++{
++    assert(nadjust >= 0 && nreserve >= 0);
++    char *c = reserve(nadjust + nreserve);
++    if (c)
++      _len += nadjust;
++    return c;
++}
++
++/** @brief Remove characters from the end of the StringAccum.
++    @param  n  number of characters to remove.
++    @pre @a n >= 0
++
++    Same as adjust_length(-@a n). */
++inline void
++StringAccum::pop_back(int n) {
++    assert(n >= 0 && _len >= n);
++    _len -= n;
++}
++
++/** @brief Sets the StringAccum's length to @a len.
++    @param  len  new length in characters.
++    @pre  0 <= @a len <= capacity()
++    @sa adjust_length */
++inline void
++StringAccum::set_length(int len) {
++    assert(len >= 0 && _len <= _cap);
++    _len = len;
++}
++
++/** @brief Extend the StringAccum by character @a c.
++    @param  c  character to extend */
++inline void
++StringAccum::append(char c)
++{
++    if (_len < _cap || grow(_len))
++      _s[_len++] = c;
++}
++
++/** @overload */
++inline void
++StringAccum::append(unsigned char c)
++{
++    append(static_cast<char>(c));
++}
++
++inline void
++StringAccum::safe_append(const char *s, int len)
++{
++    if (char *x = extend(len))
++      memcpy(x, s, len);
++}
++
++/** @brief Append the first @a len characters of @a suffix to this StringAccum.
++    @param  suffix  data to append
++    @param  len     length of data
++
++    If @a len < 0, treats @a suffix as a null-terminated C string. */
++inline void
++StringAccum::append(const char *suffix, int len)
++{
++    if (len < 0)
++      len = strlen(suffix);
++    if (len == 0 && suffix == String::out_of_memory_data())
++      make_out_of_memory();
++    safe_append(suffix, len);
++}
++
++/** @overload */
++inline void
++StringAccum::append(const unsigned char *suffix, int len)
++{
++    append(reinterpret_cast<const char *>(suffix), len);
++}
++
++/** @brief Append the data from @a begin to @a end to the end of this StringAccum.
++
++    Does nothing if @a begin >= @a end. */
++inline void
++StringAccum::append(const char *begin, const char *end)
++{
++    if (begin < end)
++      safe_append(begin, end - begin);
++    else if (begin == String::out_of_memory_data())
++      make_out_of_memory();
++}
++
++/** @brief Clear the StringAccum's comments.
++
++    All characters in the StringAccum are erased.  This operation also resets
++    the StringAccum's out-of-memory status. */
++inline void
++StringAccum::clear()
++{
++    if (_cap < 0)
++      _cap = 0, _s = 0;
++    _len = 0;
++}
++
++/** @relates StringAccum
++    @brief Append character @a c to StringAccum @a sa.
++    @return @a sa
++    @note Same as @a sa.append(@a c). */
++inline StringAccum &
++operator<<(StringAccum &sa, char c)
++{
++    sa.append(c);
++    return sa;
++}
++
++/** @relates StringAccum
++    @brief Append character @a c to StringAccum @a sa.
++    @return @a sa
++    @note Same as @a sa.append(@a c). */
++inline StringAccum &
++operator<<(StringAccum &sa, unsigned char c)
++{
++    sa.append(c);
++    return sa;
++}
++
++/** @relates StringAccum
++    @brief Append null-terminated C string @a cstr to StringAccum @a sa.
++    @return @a sa
++    @note Same as @a sa.append(@a cstr, -1). */
++inline StringAccum &
++operator<<(StringAccum &sa, const char *cstr)
++{
++    sa.append(cstr, -1);
++    return sa;
++}
++
++/** @relates StringAccum
++    @brief Append "true" or "false" to @a sa, depending on @a b.
++    @return @a sa */
++inline StringAccum &
++operator<<(StringAccum &sa, bool b)
++{
++    return sa << (b ? "true" : "false");
++}
++
++/** @relates StringAccum
++    @brief Append decimal representation of @a i to @a sa.
++    @return @a sa */
++inline StringAccum &
++operator<<(StringAccum &sa, short i)
++{
++    return sa << static_cast<long>(i);
++}
++
++/** @relates StringAccum
++    @brief Append decimal representation of @a u to @a sa.
++    @return @a sa */
++inline StringAccum &
++operator<<(StringAccum &sa, unsigned short u)
++{
++    return sa << static_cast<unsigned long>(u);
++}
++
++/** @relates StringAccum
++    @brief Append decimal representation of @a i to @a sa.
++    @return @a sa */
++inline StringAccum &
++operator<<(StringAccum &sa, int i)
++{
++    return sa << static_cast<long>(i);
++}
++
++/** @relates StringAccum
++    @brief Append decimal representation of @a u to @a sa.
++    @return @a sa */
++inline StringAccum &
++operator<<(StringAccum &sa, unsigned u)
++{
++    return sa << static_cast<unsigned long>(u);
++}
++
++#if HAVE_LONG_LONG
++/** @relates StringAccum
++    @brief Append decimal representation of @a q to @a sa.
++    @return @a sa */
++inline StringAccum &
++operator<<(StringAccum &sa, long long q)
++{
++    sa.append_numeric(static_cast<String::int_large_t>(q));
++    return sa;
++}
++
++/** @relates StringAccum
++    @brief Append decimal representation of @a q to @a sa.
++    @return @a sa */
++inline StringAccum &
++operator<<(StringAccum &sa, unsigned long long q)
++{
++    sa.append_numeric(static_cast<String::uint_large_t>(q));
++    return sa;
++}
++#endif
++
++#if HAVE_INT64_TYPES && !HAVE_INT64_IS_LONG && !HAVE_INT64_IS_LONG_LONG
++/** @relates StringAccum
++    @brief Append decimal representation of @a q to @a sa.
++    @return @a sa */
++inline StringAccum &
++operator<<(StringAccum &sa, int64_t q)
++{
++    sa.append_numeric(static_cast<String::int_large_t>(q));
++    return sa;
++}
++
++/** @relates StringAccum
++    @brief Append decimal representation of @a q to @a sa.
++    @return @a sa */
++inline StringAccum &
++operator<<(StringAccum &sa, uint64_t q)
++{
++    sa.append_numeric(static_cast<String::uint_large_t>(q));
++    return sa;
++}
++#endif
++
++/** @relates StringAccum
++    @brief Append the contents of @a str to @a sa.
++    @return @a sa */
++StringAccum &
++operator<<(StringAccum &sa, const String &str)
++{
++    sa.append(str.data(), str.length());
++    return sa;
++}
++
++#ifdef HAVE_PERMSTRING
++inline StringAccum &
++operator<<(StringAccum &sa, PermString s)
++{
++    sa.safe_append(s.c_str(), s.length());
++    return sa;
++}
++#endif
++
++/** @relates StringAccum
++    @brief Append the contents of @a sb to @a sa.
++    @return @a sa */
++inline StringAccum &
++operator<<(StringAccum &sa, const StringAccum &sb)
++{
++    sa.append(sb.data(), sb.length());
++    return sa;
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/string.hh click-1.6.0-27/inst/include/click/string.hh
+--- click-1.6.0/inst/include/click/string.hh   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/string.hh        2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,718 @@
++// -*- c-basic-offset: 2; related-file-name: "../../lib/string.cc" -*-
++#ifndef CLICK_STRING_HH
++#define CLICK_STRING_HH
++#ifdef HAVE_PERMSTRING
++# include "permstr.hh"
++#endif
++#include <click/algorithm.hh>
++#include <click/atomic.hh>
++CLICK_DECLS
++
++class String { public:
++  
++  // Call static_initialize() before any function which might deal with
++  // Strings, and declare a String::Initializer in any file in which you
++  // declare static global Strings.
++  static void static_initialize();
++  static void static_cleanup();
++  struct Initializer { Initializer(); };
++
++  inline String();
++  inline String(const String &str);
++  inline String(const char *cstr);
++  inline String(const char *s, int len);
++  inline String(const char *begin, const char *end);
++  explicit inline String(bool b);
++  explicit inline String(char c);
++  explicit inline String(unsigned char c);
++  explicit String(int i);
++  explicit String(unsigned u);
++  explicit String(long i);
++  explicit String(unsigned long u);
++#if HAVE_LONG_LONG
++  explicit String(long long q);
++  explicit String(unsigned long long q);
++#endif
++#if HAVE_INT64_TYPES && !HAVE_INT64_IS_LONG && !HAVE_INT64_IS_LONG_LONG
++  explicit String(int64_t q);
++  explicit String(uint64_t q);
++#endif
++#ifdef CLICK_USERLEVEL
++  explicit String(double d);
++#endif
++  inline ~String();
++  
++  static inline const String &empty_string();
++  static String garbage_string(int len);      // len garbage characters
++  static String stable_string(const char *s, int len = -1); // stable read-only mem.
++  static inline String stable_string(const char *begin, const char *end);
++
++#if HAVE_INT64_TYPES && (!HAVE_LONG_LONG || SIZEOF_LONG_LONG <= 8)
++  typedef int64_t int_large_t;
++  typedef uint64_t uint_large_t;
++#elif HAVE_LONG_LONG
++  typedef long long int_large_t;
++  typedef unsigned long long uint_large_t;
++#else
++  typedef long int_large_t;
++  typedef unsigned long uint_large_t;
++#endif
++  
++  static String numeric_string(int_large_t num, int base = 10, bool uppercase = true);
++  static String numeric_string(uint_large_t num, int base = 10, bool uppercase = true);
++  
++  inline int length() const;
++  inline const char *data() const;
++  
++  typedef const char *const_iterator;
++  typedef const_iterator iterator;
++  inline const_iterator begin() const;
++  inline const_iterator end() const;
++
++  typedef int (String::*unspecified_bool_type)() const;
++  inline operator unspecified_bool_type() const;
++  
++  inline char operator[](int i) const;
++  inline char at(int i) const;
++  inline char front() const;
++  inline char back() const;
++  
++  const char *c_str() const;          // pointer returned is semi-transient
++
++  size_t hashcode() const;
++  
++  bool equals(const char *s, int len) const;
++  // bool operator==(const String &, const String &);
++  // bool operator==(const String &, const char *);
++  // bool operator==(const char *, const String &);
++  // bool operator!=(const String &, const String &);
++  // bool operator!=(const String &, const char *);
++  // bool operator!=(const char *, const String &);
++
++  static inline int compare(const String &a, const String &b);
++  inline int compare(const String &str) const;
++  int compare(const char *s, int len) const;
++  // bool operator<(const String &, const String &);
++  // bool operator<=(const String &, const String &);
++  // bool operator>(const String &, const String &);
++  // bool operator>=(const String &, const String &);
++
++  inline String substring(const char *begin, const char *end) const;
++  String substring(int pos, int len) const;
++  inline String substring(int pos) const;
++  
++  int find_left(char c, int start = 0) const;
++  int find_left(const String &s, int start = 0) const;
++  int find_right(char c, int start = 0x7FFFFFFF) const;
++  
++  String lower() const;                       // lowercase
++  String upper() const;                       // uppercase
++  String printable() const;           // quote non-ASCII characters
++  String trim_space() const;          // trim space from right
++  String quoted_hex() const;          // hex enclosed in '\<...>'
++  
++  inline String &operator=(const String &str);
++  inline String &operator=(const char *cstr);
++
++  void append(const char *s, int len);
++  inline void append(const char *begin, const char *end);
++  void append_fill(int c, int len);
++  char *append_garbage(int len);
++  inline String &operator+=(const String &str);
++  inline String &operator+=(const char *cstr);
++  inline String &operator+=(char c);
++
++  // String operator+(String, const String &);
++  // String operator+(String, const char *);
++  // String operator+(const char *, const String &);
++  // String operator+(String, PermString);
++  // String operator+(PermString, const String &);
++  // String operator+(PermString, const char *);
++  // String operator+(const char *, PermString);
++  // String operator+(PermString, PermString);
++  // String operator+(String, char);
++
++  inline bool data_shared() const;
++  char *mutable_data();
++  char *mutable_c_str();
++
++  inline bool out_of_memory() const;
++  static inline const String &out_of_memory_string();
++  static inline const char *out_of_memory_data();
++    
++ private:
++
++  /** @cond never */
++  struct Memo {
++    atomic_uint32_t _refcount;
++    uint32_t _capacity;
++    atomic_uint32_t _dirty;
++    char *_real_data;
++    
++    Memo();
++    Memo(char *, int, int);
++    Memo(int, int);
++    ~Memo();
++  };
++  /** @endcond never */
++    
++  mutable const char *_data;  // mutable for c_str()
++  mutable int _length;
++  mutable Memo *_memo;
++  
++  inline String(const char *, int, Memo *);
++  
++  inline void assign(const String &) const;
++  void assign(const char *, int);
++  inline void deref() const;
++  void make_out_of_memory();
++  
++  static Memo *null_memo;
++  static Memo *permanent_memo;
++  static Memo *oom_memo;
++  static String *null_string_p;
++  static String *oom_string_p;
++  static const char oom_string_data;
++  
++  static String claim_string(char *, int, int); // claim memory
++
++  friend class String::Initializer;
++  friend class StringAccum;
++  
++};
++
++
++inline
++String::String(const char *data, int length, Memo *memo)
++  : _data(data), _length(length), _memo(memo)
++{
++  _memo->_refcount++;
++}
++
++inline void
++String::assign(const String &str) const
++{
++  _data = str._data;
++  _length = str._length;
++  _memo = str._memo;
++  _memo->_refcount++;
++}
++
++inline void
++String::deref() const
++{
++  if (_memo->_refcount.dec_and_test())
++    delete _memo;
++}
++
++/** @brief Create an empty String (with length 0). */
++inline
++String::String()
++  : _data(null_memo->_real_data), _length(0), _memo(null_memo)
++{
++  _memo->_refcount++;
++}
++
++/** @brief Create a String containing a copy of the C string @a cstr.
++ * @param cstr a null-terminated C string.
++ * @return A String containing the characters of @a cstr, up to but not
++ * including the terminating null character.
++ *
++ * If @a cstr equals String::out_of_memory_data(), returns an
++ * out-of-memory string.
++ */
++inline
++String::String(const char *cstr)
++{
++  assign(cstr, -1);
++}
++
++/** @brief Create a String containing a copy of the first @a len characters of
++ * string @a s.
++ * @param s a string.
++ * @param len number of characters to take from @a cc.  If @a len @< 0, then
++ * takes @c strlen(@a s) characters.
++ * @return A String containing @a len characters of @a s.
++ *
++ * If @a s equals String::out_of_memory_data(), returns an
++ * out-of-memory string.
++ */
++inline
++String::String(const char *s, int len)
++{
++  assign(s, len);
++}
++
++/** @brief Create a String containing a copy of the characters from @a begin
++ * to @a end.
++ * @param begin first character in string (begin iterator).
++ * @param end pointer one past last character in string (end iterator).
++ * @return A String containing the characters from @a begin to @a end.
++ *
++ * Returns a null string if @a begin @> @a end. 
++ * If @a begin equals String::out_of_memory_data(), returns an
++ * out-of-memory string.
++ */
++inline
++String::String(const char *begin, const char *end)
++{
++  assign(begin, (end > begin ? end - begin : 0));
++}
++
++/** @brief Create a String equal to "true" or "false" depending on the
++ * value of @a b.
++ * @param b a boolean variable.
++ */
++inline
++String::String(bool b)
++  : _data(b ? "true" : "false"), _length(b ? 4 : 5), _memo(permanent_memo)
++{
++  _memo->_refcount++;
++}
++
++/** @brief Create a String containing the single character @a c.
++ * @param c a character.
++ */
++inline
++String::String(char c)
++{
++  assign(&c, 1);
++}
++
++/** @brief Create a String containing the single character @a c.
++ * @param c an unsigned character.
++ */
++inline
++String::String(unsigned char c)
++{
++  assign(reinterpret_cast<char *>(&c), 1);
++}
++
++/** @brief Create a String containing a copy of the String @a str.
++ * @param str a String.
++ */
++inline
++String::String(const String &str)
++{
++  assign(str);
++}
++
++/** @brief Destroy a String, freeing memory if necessary. */
++inline
++String::~String()
++{
++  deref();
++}
++
++/** @brief Return the string's length. */
++inline int
++String::length() const
++{
++  return _length;
++}
++
++/** @brief Return a pointer to the string's data.
++ *
++ * Only the first length() characters are valid, and the string data might not
++ * be null-terminated. */
++inline const char *
++String::data() const
++{
++  return _data;
++}
++
++/** @brief Return an iterator for the first character in the string.
++ *
++ * String iterators are simply pointers into string data, so they are quite
++ * efficient.  @sa String::data */
++inline String::const_iterator
++String::begin() const
++{
++  return _data;
++}
++
++/** @brief Return an iterator for the end of the string.
++ *
++ * The return value points one character beyond the last character in the
++ * string. */
++inline String::const_iterator
++String::end() const
++{
++  return _data + _length;
++}
++
++/** @brief Returns true iff the string is nonempty. */
++inline
++String::operator unspecified_bool_type() const
++{
++  return _length != 0 ? &String::length : 0;
++}
++  
++/** @brief Returns the @a i th character in the string.
++ *
++ * Does not check bounds.
++ * @sa String::at */
++inline char
++String::operator[](int i) const
++{
++  return _data[i];
++}
++
++/** @brief Returns the @a i th character in the string.
++ *
++ * Checks bounds: an assertion will fail if @a i is less than 0 or not less
++ * than length().
++ * @sa String::operator[]
++ */
++inline char
++String::at(int i) const
++{
++  assert(i >= 0 && i < _length);
++  return _data[i];
++}
++
++/** @brief Returns the first character in the string.
++ *
++ * Does not do check bounds.  Same as (*this)[0]. */
++inline char
++String::front() const
++{
++  return _data[0];
++}
++
++/** @brief Returns the last character in the string.
++ *
++ * Does not check bounds.  Same as (*this)[length() - 1]. */
++inline char
++String::back() const
++{
++  return _data[_length - 1];
++}
++
++/** @brief Return true iff the String's data is shared or immutable. */
++inline bool
++String::data_shared() const
++{
++  return !_memo->_capacity || _memo->_refcount != 1;
++}
++
++/** @brief Return an empty String.
++ *
++ * Returns a global constant, so it's quicker than String::String().
++ */
++inline const String &
++String::empty_string()
++{
++  return *null_string_p;
++}
++
++/** @brief Return a String that directly references the character data in
++ * [@a begin, @a end).
++ * @param begin pointer to the first character in the character data.
++ * @param end pointer one beyond the last character in the character data.
++ *
++ * This function is suitable for static constant strings whose data is known
++ * to stay around forever, such as C string constants.  Returns a null string
++ * if @a begin @> @a end.
++ */
++inline String
++String::stable_string(const char *begin, const char *end)
++{
++    if (begin < end)
++      return String::stable_string(begin, end - begin);
++    else
++      return String();
++}
++
++/** @brief Return a substring of the current string starting at @a begin and
++ * ending before @a end.
++ * @param begin pointer to the first character in the desired substring.
++ * @param end pointer one beyond the last character in the desired substring.
++ *
++ * Returns a null string if @a begin @> @a end, or if @a begin or @a end is
++ * out of range (i.e., either less than this->begin() or greater than
++ * this->end()).
++ */
++inline String
++String::substring(const char *begin, const char *end) const
++{
++    if (begin < end && begin >= _data && end <= _data + _length)
++      return String(begin, end - begin, _memo);
++    else
++      return String();
++}
++
++/** @brief Return the suffix of the current string starting at index @a pos.
++ *
++ * Same as String::substring(@a pos, INT_MAX).
++ */
++inline String
++String::substring(int pos) const
++{
++  return substring(pos, _length);
++}
++
++/** @brief Compare two strings.
++ * @param a first string to compare
++ * @param b second string to compare
++ *
++ * Returns 0 if @a a == @a b, negative if @a a @< @a b in lexicographic
++ * order, and positive if @a a @> @a b in lexicographic order.
++ */
++inline int
++String::compare(const String &a, const String &b)
++{
++  return a.compare(b);
++}
++
++/** @brief Compare this string with string @a str.
++ *
++ * Same as String::compare(*this, @a str).
++ * @sa String::compare(const String &a, const String &b) */
++inline int
++String::compare(const String &str) const
++{
++  return compare(str._data, str._length);
++}
++
++/** @relates String
++ * @brief Compares two strings for equality.
++ *
++ * Returns true iff the two operands have the same lengths and the same
++ * characters in the same order.  At most one of the operands can be a
++ * null-terminated C string.
++ * @sa String::compare
++ */
++inline bool
++operator==(const String &a, const String &b)
++{
++  return a.equals(b.data(), b.length());
++}
++
++/** @relates String */
++inline bool
++operator==(const char *a, const String &b)
++{
++  return b.equals(a, -1);
++}
++
++/** @relates String */
++inline bool
++operator==(const String &a, const char *b)
++{
++  return a.equals(b, -1);
++}
++
++/** @relates String
++ * @brief Compare two Strings for inequality.
++ *
++ * Returns true iff !(@a a == @a b).  At most one of the operands can be a
++ * null-terminated C string. */
++inline bool
++operator!=(const String &a, const String &b)
++{
++  return !a.equals(b.data(), b.length());
++}
++
++/** @relates String */
++inline bool
++operator!=(const char *a, const String &b)
++{
++  return !b.equals(a, -1);
++}
++
++/** @relates String */
++inline bool
++operator!=(const String &a, const char *b)
++{
++  return !a.equals(b, -1);
++}
++
++/** @relates String
++ * @brief Compare two Strings.
++ *
++ * Returns true iff @a a @< @a b in lexicographic order.
++ * @sa String::compare
++ */
++inline bool
++operator<(const String &a, const String &b)
++{
++  return a.compare(b.data(), b.length()) < 0;
++}
++
++/** @relates String
++ * @brief Compare two Strings.
++ *
++ * Returns true iff @a a @<= @a b in lexicographic order.
++ * @sa String::compare
++ */
++inline bool
++operator<=(const String &a, const String &b)
++{
++  return a.compare(b.data(), b.length()) <= 0;
++}
++
++/** @relates String
++ * @brief Compare two Strings.
++ *
++ * Returns true iff @a a @> @a b in lexicographic order.
++ * @sa String::compare
++ */
++inline bool
++operator>(const String &a, const String &b)
++{
++  return a.compare(b.data(), b.length()) > 0;
++}
++
++/** @relates String
++ * @brief Compare two Strings.
++ *
++ * Returns true iff @a a @>= @a b in lexicographic order.
++ * @sa String::compare
++ */
++inline bool
++operator>=(const String &a, const String &b)
++{
++  return a.compare(b.data(), b.length()) >= 0;
++}
++
++/** @brief Makes this string a copy of @a str. */
++inline String &
++String::operator=(const String &str)
++{
++  if (&str != this) {
++    deref();
++    assign(str);
++  }
++  return *this;
++}
++
++/** @brief Make this string a copy of the C string @a cstr. */
++inline String &
++String::operator=(const char *cstr)
++{
++  deref();
++  assign(cstr, -1);
++  return *this;
++}
++
++/** @brief Appends the data from @a begin to @a end to the end of this string.
++ *
++ * Does nothing if @a begin @>= @a end. */
++inline void
++String::append(const char *begin, const char *end)
++{
++  if (begin < end)
++    append(begin, end - begin);
++}
++
++/** @brief Append a copy of @a str to the end of this string.
++ *
++ * Returns the result. */
++inline String &
++String::operator+=(const String &str)
++{
++  append(str._data, str._length);
++  return *this;
++}
++
++/** @brief Append a copy of the C string @a cstr to the end of this string.
++ *
++ * Returns the result. */
++inline String &
++String::operator+=(const char *cstr)
++{
++  append(cstr, -1);
++  return *this;
++}
++
++/** @brief Append the character @a c to the end of this string.
++ *
++ * Returns the result. */
++inline String &
++String::operator+=(char c)
++{
++  append(&c, 1);
++  return *this;
++}
++
++/** @relates String
++ * @brief Concatenate the operands and return the result.
++ *
++ * At most one of the two operands can be a null-terminated C string. */
++inline String
++operator+(String a, const String &b)
++{
++  a += b;
++  return a;
++}
++
++/** @relates String */
++inline String
++operator+(String a, const char *b)
++{
++  a.append(b, -1);
++  return a;
++}
++
++/** @relates String */
++inline String
++operator+(const char *a, const String &b)
++{
++  String s1(a);
++  s1 += b;
++  return s1;
++}
++
++/** @relates String
++ * @brief Concatenate the operands and return the result.
++ *
++ * The second operand is a single character. */
++inline String
++operator+(String a, char b)
++{
++  a.append(&b, 1);
++  return a;
++}
++
++/** @brief Returns true iff this is an out-of-memory string. */
++inline bool
++String::out_of_memory() const
++{
++  return _data == &oom_string_data;
++}
++
++/** @brief Return a reference to an out-of-memory String. */
++inline const String &
++String::out_of_memory_string()
++{
++  return *oom_string_p;
++}
++
++/** @brief Return the data pointer used for out-of-memory strings.
++ *
++ * The returned value may be dereferenced; it points to a null character. 
++ */
++inline const char *
++String::out_of_memory_data()
++{
++  return &oom_string_data;
++}
++
++// find methods
++
++inline const char *rfind(const char *begin, const char *end, char c)
++{
++  for (const char *bb = end - 1; bb >= begin; bb--)
++    if (*bb == c)
++      return bb;
++  return end;
++}
++
++inline const char *find(const String &s, char c)
++{
++  return find(s.begin(), s.end(), c);
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/sync.hh click-1.6.0-27/inst/include/click/sync.hh
+--- click-1.6.0/inst/include/click/sync.hh     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/sync.hh  2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,467 @@
++// -*- c-basic-offset: 4 -*-
++#ifndef CLICK_SYNC_HH
++#define CLICK_SYNC_HH
++#include <click/glue.hh>
++#include <click/atomic.hh>
++#if CLICK_LINUXMODULE && defined(__SMP__)
++# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0)
++#  include <linux/threads.h>
++# else
++#  include <linux/tasks.h>
++# endif
++# include <linux/sched.h>
++# define my_cpu click_current_processor()
++# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
++#  define num_possible_cpus() smp_num_cpus
++# endif
++#endif
++CLICK_DECLS
++
++// loop-in-cache spinlock implementation: 8 bytes. if the size of this class
++// changes, change size of padding in ReadWriteLock below.
++
++/** @file <click/sync.hh>
++ * @brief Classes for synchronizing among multiple CPUs, particularly in the
++ * Linux kernel.
++ */
++
++/** @class Spinlock
++ * @brief A spinlock for SMP Click threads.
++ *
++ * The Spinlock class abstracts a spinlock, or polling mutex, in SMP Click.
++ * This is a type of mutual-exclusion lock in which acquiring the lock is a
++ * polling operation (basically a "while (lock.acquired()) do nothing;" loop).
++ * Spinlocks can be used to synchronize access to shared data among multiple
++ * Click SMP threads.  Spinlocks should not be held for long periods of time:
++ * use them for quick updates and such.
++ *
++ * Spinlock operations do nothing unless Click was compiled with SMP support
++ * (with --enable-multithread).  Therefore, Spinlock should not be used to,
++ * for example, synchronize handlers with main element threads.  See also
++ * SpinlockIRQ.
++ *
++ * The main Spinlock operations are acquire(), which acquires the lock, and
++ * release(), which releases the lock.  attempt() acquires the lock only if it
++ * can be acquired instantaneously.
++ *
++ * It is OK for a thread to acquire a lock it has already acquired, but you
++ * must release it as many times as you have acquired it.
++ */
++class Spinlock { public:
++
++    inline Spinlock();
++#if CLICK_LINUXMODULE && defined(__SMP__)
++    inline ~Spinlock();
++#endif
++  
++    inline void acquire();
++    inline void release();
++    inline bool attempt();
++    inline bool nested() const;
++
++#if CLICK_LINUXMODULE && defined(__SMP__)
++  private:
++    volatile unsigned short _lock;
++    unsigned short _depth;
++    int _owner;
++#endif
++  
++};
++
++/** @brief Create a Spinlock. */
++inline
++Spinlock::Spinlock()
++#if CLICK_LINUXMODULE && defined(__SMP__)
++    : _lock(0), _depth(0), _owner(-1)
++#endif
++{
++#if CLICK_LINUXMODULE && defined(__SMP__)
++# if !defined(__i386__) && !defined(__x86_64__)
++#  error "no multithread support for non i386 click"
++# endif
++#endif
++} 
++
++#if CLICK_LINUXMODULE && defined(__SMP__)
++inline
++Spinlock::~Spinlock()
++{
++    if (_lock != 0) 
++      click_chatter("warning: freeing unreleased lock");
++}
++#endif
++
++/** @brief Acquires the Spinlock.
++ *
++ * On return, this thread has acquired the lock.  The function will spin
++ * indefinitely until the lock is acquired.  It is OK to acquire a lock you
++ * have already acquired, but you must release it as many times as you have
++ * acquired it.
++ */
++inline void
++Spinlock::acquire()
++{
++#if CLICK_LINUXMODULE && defined(__SMP__)
++    if (_owner == my_cpu) {
++      _depth++;
++      return;
++    }
++  
++    register unsigned short content = 1;
++  test_and_set:
++    asm volatile ("xchgw %0,%1"
++                : "=r" (content), "=m" (_lock)
++                : "0" (content), "m" (_lock));
++    if (content != 0) {
++      while(_lock != 0)
++          asm volatile ("" : : : "memory");  
++      goto test_and_set;
++    }
++
++    _owner = my_cpu;
++    _depth++;
++#endif
++}
++
++/** @brief Attempts to acquire the Spinlock.
++ * @return True iff the Spinlock was acquired.
++ *
++ * This function will acquire the lock and return true only if the Spinlock
++ * can be acquired right away, without retries.
++ */
++inline bool
++Spinlock::attempt()
++{
++#if CLICK_LINUXMODULE && defined(__SMP__)
++    if (_owner == my_cpu) {
++      _depth++;
++      return true;
++    }
++  
++    register unsigned short content = 1;
++    asm volatile ("xchgw %0,%1"
++                : "=r" (content), "=m" (_lock)
++                : "0" (content), "m" (_lock));
++    if (content != 0)
++      return false;
++    else {
++      _owner = my_cpu;
++      _depth++;
++      return true;
++    }
++#else
++    return true;
++#endif
++}
++
++/** @brief Releases the Spinlock.
++ *
++ * The Spinlock must have been previously acquired by either Spinlock::acquire
++ * or Spinlock::attempt.
++ */
++inline void
++Spinlock::release()
++{
++#if CLICK_LINUXMODULE && defined(__SMP__)
++    if (_owner != my_cpu)
++      click_chatter("releasing someone else's lock");
++    if (_depth > 0) 
++      _depth--;
++    else
++      click_chatter("lock already freed");
++    if (_depth == 0) {
++      _owner = -1;
++      _lock = 0;
++    }
++#endif
++}
++
++/** @brief Returns true iff the Spinlock has been acquired more than once by
++ * the current thread.
++ */
++inline bool
++Spinlock::nested() const
++{
++#if CLICK_LINUXMODULE && defined(__SMP__)
++    return _depth > 1;
++#else
++    return false;
++#endif
++}
++
++
++/** @class SpinlockIRQ
++ * @brief A spinlock that disables interrupts.
++ *
++ * The SpinlockIRQ class abstracts a spinlock, or polling mutex, that also
++ * turns off interrupts.  Spinlocks are a type of mutual-exclusion lock in
++ * which acquiring the lock is a polling operation (basically a "while
++ * (lock.acquired()) do nothing;" loop).  The SpinlockIRQ variant can be used
++ * to protect Click data structures from interrupts and from other threads.
++ * Very few objects in Click need this protection; the Click Master object,
++ * which protects the task list, uses it, but that's hidden from users.
++ * Spinlocks should not be held for long periods of time: use them for quick
++ * updates and such.
++ *
++ * In the Linux kernel, SpinlockIRQ is equivalent to a combination of
++ * local_irq_save and the spinlock_t type.
++ *
++ * The SpinlockIRQ operations are acquire(), which acquires the lock, and
++ * release(), which releases the lock.
++ *
++ * It is NOT OK for a SpinlockIRQ thread to acquire a lock it has already
++ * acquired.
++ */
++class SpinlockIRQ { public:
++
++    inline SpinlockIRQ();
++
++#if CLICK_LINUXMODULE
++    typedef unsigned long flags_t;
++#else
++    typedef int flags_t;
++#endif
++    
++    inline flags_t acquire();
++    inline void release(flags_t);
++
++#if CLICK_LINUXMODULE
++  private:
++    spinlock_t _lock;
++#endif
++  
++};
++
++/** @brief Creates a SpinlockIRQ. */
++inline
++SpinlockIRQ::SpinlockIRQ()
++{
++#if CLICK_LINUXMODULE
++    spin_lock_init(&_lock);
++#endif
++} 
++
++/** @brief Acquires the SpinlockIRQ.
++ * @return The current state of the interrupt flags.
++ */
++inline SpinlockIRQ::flags_t
++SpinlockIRQ::acquire()
++{
++#if CLICK_LINUXMODULE
++    flags_t flags;
++    spin_lock_irqsave(&_lock, flags);
++    return flags;
++#else
++    return 0;
++#endif
++}
++
++/** @brief Releases the SpinlockIRQ.
++ * @param flags The value returned by SpinlockIRQ::acquire().
++ */
++inline void
++SpinlockIRQ::release(flags_t flags)
++{
++#if CLICK_LINUXMODULE
++    spin_unlock_irqrestore(&_lock, flags);
++#else
++    (void) flags;
++#endif
++}
++
++
++// read-write lock
++//
++// on read: acquire local read lock
++// on write: acquire every read lock
++//
++// alternatively, we could use a read counter and a write lock. we don't do
++// that because we'd like to avoid a cache miss for read acquires. this makes
++// reads very fast, and writes more expensive
++
++/** @class ReadWriteLock
++ * @brief A read/write lock.
++ *
++ * The ReadWriteLock class abstracts a read/write lock in SMP Click.  Multiple
++ * SMP Click threads can hold read locks simultaneously, but if any thread
++ * holds a write lock, then no other thread holds any kind of lock.  The
++ * read/write lock is implemented with Spinlock objects, so acquiring a lock
++ * is a polling operation.  ReadWriteLocks can be used to synchronize access
++ * to shared data among multiple Click SMP threads.  ReadWriteLocks should not
++ * be held for long periods of time: use them for quick updates and such.
++ *
++ * ReadWriteLock operations do nothing unless Click was compiled with SMP
++ * support (with --enable-multithread).  Therefore, ReadWriteLock should not
++ * be used to, for example, synchronize handlers with main element threads.
++ *
++ * The main ReadWriteLock operations are acquire_read() and acquire_write(),
++ * which acquire the lock for reading or writing, respectively, and
++ * release_read() and release_write(), which similarly release the lock.
++ * attempt_read() and attempt_write() acquire the lock only if it can be
++ * acquired instantaneously.
++ *
++ * It is OK for a thread to acquire a lock it has already acquired, but you
++ * must release it as many times as you have acquired it.
++ *
++ * ReadWriteLock objects are relatively large in terms of memory usage; don't
++ * create too many of them.
++ */
++class ReadWriteLock { public:
++
++    inline ReadWriteLock();
++#if CLICK_LINUXMODULE && defined(__SMP__)
++    inline ~ReadWriteLock();
++#endif
++
++    inline void acquire_read();
++    inline bool attempt_read();
++    inline void release_read();
++    inline void acquire_write();
++    inline bool attempt_write();
++    inline void release_write();
++
++#if CLICK_LINUXMODULE && defined(__SMP__)
++  private:
++    // allocate 32 bytes (size of a cache line) for every member
++    struct lock_t {
++      Spinlock _lock;
++      unsigned char reserved[24];
++    } *_l;
++#endif
++    
++};
++
++/** @brief Creates a ReadWriteLock. */
++inline
++ReadWriteLock::ReadWriteLock()
++{
++#if CLICK_LINUXMODULE && defined(__SMP__)
++    _l = new lock_t[num_possible_cpus()];
++#endif
++}
++
++#if CLICK_LINUXMODULE && defined(__SMP__)
++inline
++ReadWriteLock::~ReadWriteLock()
++{
++    delete[] _l;
++}
++#endif
++
++/** @brief Acquires the ReadWriteLock for reading.
++ *
++ * On return, this thread has acquired the lock for reading.  The function
++ * will spin indefinitely until the lock is acquired.  It is OK to acquire a
++ * lock you have already acquired, but you must release it as many times as
++ * you have acquired it.
++ *
++ * @sa Spinlock::acquire
++ */
++inline void
++ReadWriteLock::acquire_read()
++{
++#if CLICK_LINUXMODULE && defined(__SMP__)
++    assert(my_cpu >= 0);
++    _l[my_cpu]._lock.acquire();
++#endif
++}
++
++/** @brief Attempts to acquire the ReadWriteLock for reading.
++ * @return True iff the ReadWriteLock was acquired.
++ *
++ * This function will acquire the lock for reading and return true only if the
++ * ReadWriteLock can be acquired right away, without retries.
++ */
++inline bool
++ReadWriteLock::attempt_read()
++{
++#if CLICK_LINUXMODULE && defined(__SMP__)
++    assert(my_cpu >= 0);
++    return _l[my_cpu]._lock.attempt();
++#else
++    return true;
++#endif
++}
++
++/** @brief Releases the ReadWriteLock for reading.
++ *
++ * The ReadWriteLock must have been previously acquired by either
++ * ReadWriteLock::acquire_read or ReadWriteLock::attempt_read.  Do not call
++ * release_read() on a lock that was acquired for writing.
++ */
++inline void
++ReadWriteLock::release_read()
++{
++#if CLICK_LINUXMODULE && defined(__SMP__)
++    assert(my_cpu >= 0);
++    _l[my_cpu]._lock.release();
++#endif
++}
++
++/** @brief Acquires the ReadWriteLock for writing.
++ *
++ * On return, this thread has acquired the lock for writing.  The function
++ * will spin indefinitely until the lock is acquired.  It is OK to acquire a
++ * lock you have already acquired, but you must release it as many times as
++ * you have acquired it.
++ *
++ * @sa ReadWriteLock::acquire_read
++ */
++inline void
++ReadWriteLock::acquire_write()
++{
++#if CLICK_LINUXMODULE && defined(__SMP__)
++    for (unsigned i = 0; i < num_possible_cpus(); i++)
++      _l[i]._lock.acquire();
++#endif
++}
++
++/** @brief Attempts to acquire the ReadWriteLock for writing.
++ * @return True iff the ReadWriteLock was acquired.
++ *
++ * This function will acquire the lock for writing and return true only if the
++ * ReadWriteLock can be acquired right away, without retries.  Note, however,
++ * that acquiring a ReadWriteLock requires as many operations as there are
++ * CPUs.
++ *
++ * @sa ReadWriteLock::attempt_read
++ */
++inline bool
++ReadWriteLock::attempt_write()
++{
++#if CLICK_LINUXMODULE && defined(__SMP__)
++    bool all = true;
++    unsigned i;
++    for (i = 0; i < num_possible_cpus(); i++)
++      if (!(_l[i]._lock.attempt())) {
++          all = false;
++          break;
++      }
++    if (!all)
++      for (unsigned j = 0; j < i; j++)
++          _l[j]._lock.release();
++    return all;
++#else
++    return true;
++#endif
++}
++
++/** @brief Releases the ReadWriteLock for writing.
++ *
++ * The ReadWriteLock must have been previously acquired by either
++ * ReadWriteLock::acquire_write or ReadWriteLock::attempt_write.  Do not call
++ * release_write() on a lock that was acquired for reading.
++ *
++ * @sa ReadWriteLock::release_read
++ */
++inline void
++ReadWriteLock::release_write()
++{
++#if CLICK_LINUXMODULE && defined(__SMP__)
++    for (unsigned i = 0; i < num_possible_cpus(); i++)
++      _l[i]._lock.release();
++#endif
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/task.hh click-1.6.0-27/inst/include/click/task.hh
+--- click-1.6.0/inst/include/click/task.hh     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/task.hh  2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,582 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/task.cc" -*-
++#ifndef CLICK_TASK_HH
++#define CLICK_TASK_HH
++#include <click/element.hh>
++#include <click/sync.hh>
++#if __MTCLICK__
++# include <click/atomic.hh>
++# include <click/ewma.hh>
++#endif
++CLICK_DECLS
++
++#if CLICK_BSDMODULE
++extern "C" {
++ #include <sys/lock.h>
++ #include <sys/mutex.h>
++}
++#else
++#define GIANT_REQUIRED
++#endif
++
++#define PASS_GT(a, b) ((int)(a - b) > 0)
++
++typedef bool (*TaskHook)(Task *, void *);
++class RouterThread;
++class TaskList;
++class Master;
++
++class Task { public:
++
++#ifdef HAVE_STRIDE_SCHED
++    enum { STRIDE1 = 1U<<16, MAX_STRIDE = 1U<<31 };
++    enum { MAX_TICKETS = 1<<15, DEFAULT_TICKETS = 1<<10 };
++#endif
++#ifdef HAVE_ADAPTIVE_SCHEDULER
++    enum { MAX_UTILIZATION = 1000 };
++#endif
++
++    inline Task(TaskHook hook, void *thunk);
++    inline Task(Element *e);          // call element->run_task()
++    ~Task();
++
++    inline TaskHook hook() const;
++    inline void *thunk() const;
++    inline Element *element() const;
++
++    inline bool scheduled() const;
++
++    void unschedule();
++    inline void reschedule();
++
++    void strong_unschedule();
++    void strong_reschedule();
++
++#ifdef HAVE_TASK_HEAP
++    void fast_reschedule();
++#else
++    inline void fast_reschedule();
++#endif
++
++    inline int home_thread_id() const;
++    void move_thread(int thread_id);
++ 
++#ifdef HAVE_STRIDE_SCHED
++    inline int tickets() const;
++    inline void set_tickets(int n);
++    inline void adjust_tickets(int delta);
++#endif
++
++    inline bool initialized() const;
++    void initialize(Router *, bool scheduled);
++    void initialize(Element *, bool scheduled);
++    inline RouterThread *thread() const;
++    Master *master() const;
++
++    inline void call_hook();
++
++#ifdef HAVE_ADAPTIVE_SCHEDULER
++    inline unsigned runs() const;
++    inline unsigned work_done() const;
++    inline unsigned utilization() const;
++    inline void clear_runs();
++#endif
++#if __MTCLICK__
++    inline int cycles() const;
++    inline unsigned cycle_runs() const;
++    inline void update_cycles(unsigned c);
++#endif
++
++  private:
++
++    /* if gcc keeps this ordering, we may get some cache locality on a 16 or 32
++     * byte cache line: the first three fields are used in list traversal */
++
++#ifdef HAVE_TASK_HEAP
++    int _schedpos;
++#else
++    Task* _prev;
++    Task* _next;
++#endif
++    unsigned _should_be_scheduled;
++    
++#ifdef HAVE_STRIDE_SCHED
++    unsigned _pass;
++    unsigned _stride;
++    int _tickets;
++#endif
++  
++    TaskHook _hook;
++    void* _thunk;
++  
++#ifdef HAVE_ADAPTIVE_SCHEDULER
++    unsigned _runs;
++    unsigned _work_done;
++#endif
++#if __MTCLICK__
++    DirectEWMA _cycles;
++    unsigned _cycle_runs;
++#endif
++
++    RouterThread* _thread;
++    int _home_thread_id;
++  
++    Router* _router;
++
++    volatile uintptr_t _pending_nextptr;
++
++    Task(const Task&);
++    Task& operator=(const Task&);
++    void cleanup();
++    
++    void add_pending();
++    void process_pending(RouterThread*);
++    inline void fast_schedule();
++    void true_reschedule();
++    inline void lock_tasks();
++    inline bool attempt_lock_tasks();
++
++    static bool error_hook(Task*, void*);
++
++    inline void fast_unschedule(bool should_be_scheduled);
++
++    static inline Task *pending_to_task(uintptr_t);
++    inline Task *pending_to_task() const;
++    
++    friend class RouterThread;
++    friend class Master;
++  
++};
++
++
++// need RouterThread's definition for inline functions
++CLICK_ENDDECLS
++#include <click/routerthread.hh>
++CLICK_DECLS
++
++
++/** @brief Construct a task that calls @a hook with @a thunk argument.
++ *
++ * @param hook task hook
++ * @param thunk user data for task hook
++ *
++ * Constructs a task that, when fired, calls the @a hook function like so:
++ *
++ * @code
++ * bool work_done = hook(task, thunk);
++ * @endcode
++ *
++ * where @a task is a pointer to this task.  The @a hook should return true if
++ * the task accomplished some meaningful work, and false if it did not.  For
++ * example, a task that polls a network driver for packets should return true
++ * if it emits at least one packet, and false if no packets were available.
++ */
++inline
++Task::Task(TaskHook hook, void* thunk)
++#ifdef HAVE_TASK_HEAP
++    : _schedpos(-1),
++#else
++    : _prev(0), _next(0),
++#endif
++      _should_be_scheduled(false),
++#ifdef HAVE_STRIDE_SCHED
++      _pass(0), _stride(0), _tickets(-1),
++#endif
++      _hook(hook), _thunk(thunk),
++#ifdef HAVE_ADAPTIVE_SCHEDULER
++      _runs(0), _work_done(0),
++#endif
++#if __MTCLICK__
++      _cycle_runs(0),
++#endif
++      _thread(0), _home_thread_id(-1),
++      _router(0), _pending_nextptr(0)
++{
++}
++
++/** @brief Construct a task that calls @a e ->@link Element::run_task(Task *)
++ * run_task()@endlink.
++ *
++ * @param e element to call
++ *
++ * Constructs a task that, when fired, calls the element @a e's @link
++ * Element::run_task(Task *) run_task()@endlink method, passing this Task
++ * as an argument.
++ *
++ * @sa Task(TaskHook, void *)
++ */
++inline
++Task::Task(Element* e)
++#ifdef HAVE_TASK_HEAP
++    : _schedpos(-1),
++#else
++    : _prev(0), _next(0),
++#endif
++      _should_be_scheduled(false),
++#ifdef HAVE_STRIDE_SCHED
++      _pass(0), _stride(0), _tickets(-1),
++#endif
++      _hook(0), _thunk(e),
++#ifdef HAVE_ADAPTIVE_SCHEDULER
++      _runs(0), _work_done(0),
++#endif
++#if __MTCLICK__
++      _cycle_runs(0),
++#endif
++      _thread(0), _home_thread_id(-1),
++      _router(0), _pending_nextptr(0)
++{
++}
++
++/** @brief Returns true iff the task has been initialize()d. */
++inline bool
++Task::initialized() const
++{
++    return _router != 0;
++}
++
++/** @brief Returns true iff the task is currently scheduled to run.
++ *
++ * This function will return false for a task in reschedule-pending state,
++ * where the task will soon be rescheduled but isn't right now due to locking
++ * issues.
++ */
++inline bool
++Task::scheduled() const
++{
++#if HAVE_TASK_HEAP
++    return _schedpos >= 0;
++#else
++    return _prev != 0;
++#endif
++}
++
++/** @brief Returns the task's hook function.
++ *
++ * Returns null if the task was constructed with the Task(Element *)
++ * constructor.
++ */
++inline TaskHook
++Task::hook() const
++{
++    return _hook;
++}
++
++/** @brief Returns the task's thunk (the user data passed to its hook).
++ */
++inline void *
++Task::thunk() const
++{
++    return _thunk;
++}
++
++/** @brief Returns the task's associated element, if any.
++ *
++ * Only works if the task was constructed with the Task(Element *)
++ * constructor.
++ */
++inline Element *
++Task::element()       const
++{ 
++    return _hook ? 0 : reinterpret_cast<Element*>(_thunk); 
++}
++
++/** @brief Returns the task's home thread ID.
++ *
++ * This is the @link RouterThread::thread_id() thread_id()@endlink of the
++ * thread on which this Task would run if it were scheduled.  This need not
++ * equal the ID of the current thread(), since changes in home_thread_id()
++ * aren't always implemented immediately (because of locking issues).
++ */
++inline int
++Task::home_thread_id() const
++{
++    return _home_thread_id;
++}
++
++/** @brief Returns the thread on which this element is currently scheduled, or
++ * would be scheduled.
++ *
++ * Usually, task->thread()->@link RouterThread::thread_id()
++ * thread_id()@endlink == task->home_thread_id().  They can differ, however,
++ * if move_thread() was called but the task hasn't yet been moved to
++ * the new thread, or if the task was strongly unscheduled with
++ * strong_unschedule().  (In this last case, task->thread()->@link
++ * RouterThread::thread_id() thread_id()@endlink ==
++ * RouterThread::THREAD_STRONG_UNSCHEDULE.)
++ */
++inline RouterThread *
++Task::thread() const
++{
++    return _thread;
++}
++
++inline void
++Task::fast_unschedule(bool should_be_scheduled)
++{
++#if CLICK_LINUXMODULE
++    assert(!in_interrupt());
++#endif
++#if CLICK_BSDMODULE
++    GIANT_REQUIRED;
++#endif
++    if (scheduled()) {
++#ifdef HAVE_TASK_HEAP
++      Task* back = _thread->_task_heap.back();
++      _thread->_task_heap.pop_back();
++      if (_thread->_task_heap.size() > 0)
++          _thread->task_reheapify_from(_schedpos, back);
++      _schedpos = -1;
++#else
++      _next->_prev = _prev;
++      _prev->_next = _next;
++      _next = _prev = 0;
++#endif
++    }
++    _should_be_scheduled = should_be_scheduled;
++}
++
++#ifdef HAVE_STRIDE_SCHED
++
++/** @brief Returns the task's number of tickets.
++ *
++ * Tasks with larger numbers of tickets are scheduled more often.  Tasks are
++ * initialized with tickets() == DEFAULT_TICKETS.
++ *
++ * @sa set_tickets, adjust_tickets
++ */
++inline int
++Task::tickets() const
++{
++    return _tickets;
++}
++
++/** @brief Sets the task's number of tickets.
++ * @param n the ticket count
++ *
++ * The ticket count @a n is pinned in the range [1, MAX_TICKETS].
++ *
++ * @sa tickets, adjust_tickets
++ */
++inline void 
++Task::set_tickets(int n)
++{
++    if (n > MAX_TICKETS)
++      n = MAX_TICKETS;
++    else if (n < 1)
++      n = 1;
++    _tickets = n;
++    _stride = STRIDE1 / n;
++    assert(_stride < MAX_STRIDE);
++}
++
++/** @brief Add @a delta to the Task's ticket count.
++ * @param delta adjustment to the ticket count
++ *
++ * The ticket count cannot be adjusted below 1 or above MAX_TICKETS.
++ *
++ * @sa set_tickets
++ */
++inline void 
++Task::adjust_tickets(int delta)
++{
++    set_tickets(_tickets + delta);
++}
++
++# ifndef HAVE_TASK_HEAP
++/** @brief Reschedules the task.  The task's current thread must be currently
++ * locked.
++ *
++ * This accomplishes the same function as reschedule(), but does a faster job
++ * because it assumes the task's thread lock is held.  Generally, this can be
++ * guaranteed only from within a task's run_task() hook function.
++ */
++inline void
++Task::fast_reschedule()
++{
++    assert(_thread);
++#  if CLICK_LINUXMODULE
++    // tasks never run at interrupt time in Linux
++    assert(!in_interrupt());
++#  endif
++#  if CLICK_BSDMODULE
++    GIANT_REQUIRED;
++#  endif
++
++    if (!scheduled()) {
++      // increase pass
++      _pass += _stride;
++
++#  if 0
++      // look for 'n' immediately before where we should be scheduled
++      Task* n = _thread->_prev;
++      while (n != _thread && PASS_GT(n->_pass, _pass))
++          n = n->_prev;
++
++      // schedule after 'n'
++      _next = n->_next;
++      _prev = n;
++      n->_next = this;
++      _next->_prev = this;
++#  else
++      // look for 'n' immediately after where we should be scheduled
++      Task* n = _thread->_next;
++#   ifdef CLICK_BSDMODULE /* XXX MARKO a race occured here when not spl'ed */
++      while (n->_next != NULL && n != _thread && !PASS_GT(n->_pass, _pass))
++#   else
++      while (n != _thread && !PASS_GT(n->_pass, _pass))
++#   endif
++          n = n->_next;
++    
++      // schedule before 'n'
++      _prev = n->_prev;
++      _next = n;
++      _prev->_next = this;
++      n->_prev = this;
++#  endif
++    }
++}
++# endif /* !HAVE_TASK_HEAP */
++
++inline void
++Task::fast_schedule()
++{
++    GIANT_REQUIRED;
++    assert(_tickets >= 1);
++    _pass = _thread->_pass;
++    fast_reschedule();
++}
++
++#else /* !HAVE_STRIDE_SCHED */
++
++inline void
++Task::fast_reschedule()
++{
++    assert(_thread);
++#if CLICK_LINUXMODULE
++    // tasks never run at interrupt time
++    assert(!in_interrupt());
++#endif
++#if CLICK_BSDMODULE
++    // assert(!intr_nesting_level);
++    GIANT_REQUIRED;
++#endif
++    if (!scheduled()) {
++      _prev = _thread->_prev;
++      _next = _thread;
++      _thread->_prev = this;
++      _thread->_next = this;
++    }
++}
++
++inline void
++Task::fast_schedule()
++{
++    fast_reschedule();
++}
++
++#endif /* HAVE_STRIDE_SCHED */
++
++
++/** @brief Reschedules the task.
++ *
++ * The task is rescheduled on its home thread.  The task will eventually run
++ * (unless the home thread is quiescent).  Due to locking issues, the task may
++ * not be scheduled right away -- scheduled() may not immediately return true.
++ *
++ * @sa unschedule, strong_reschedule
++ */
++inline void
++Task::reschedule()
++{
++    GIANT_REQUIRED;
++    if (!scheduled())
++      true_reschedule();
++}
++
++
++/** @brief Call the task's hook.
++ *
++ * This function is generally called by the RouterThread implementation; there
++ * should be no need to call it yourself.
++ */
++inline void
++Task::call_hook()
++{
++#if __MTCLICK__
++    _cycle_runs++;
++#endif
++#ifdef HAVE_ADAPTIVE_SCHEDULER
++    _runs++;
++    if (!_hook)
++      _work_done += ((Element*)_thunk)->run_task(this);
++    else
++      _work_done += _hook(this, _thunk);
++#else
++    if (!_hook)
++      (void) ((Element*)_thunk)->run_task(this);
++    else
++      (void) _hook(this, _thunk);
++#endif
++}
++
++#ifdef HAVE_ADAPTIVE_SCHEDULER
++inline unsigned
++Task::runs() const
++{
++    return _runs;
++}
++
++inline unsigned
++Task::work_done() const
++{
++    return _work_done;
++}
++
++inline unsigned
++Task::utilization() const
++{
++    return (_runs ? (MAX_UTILIZATION * _work_done) / _runs : 0);
++}
++
++inline void
++Task::clear_runs()
++{
++    _runs = _work_done = 0;
++}
++#endif
++
++#if __MTCLICK__
++inline int
++Task::cycles() const
++{
++    return _cycles.unscaled_average();
++}
++
++inline unsigned
++Task::cycle_runs() const
++{
++    return _cycle_runs;
++}
++
++inline void
++Task::update_cycles(unsigned c) 
++{
++    _cycles.update(c);
++    _cycle_runs = 0;
++}
++#endif
++
++inline Task *
++Task::pending_to_task(uintptr_t ptr)
++{
++    return reinterpret_cast<Task *>(ptr & ~(uintptr_t) 3);
++}
++
++inline Task *
++Task::pending_to_task() const
++{
++    return pending_to_task(_pending_nextptr);
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/timer.hh click-1.6.0-27/inst/include/click/timer.hh
+--- click-1.6.0/inst/include/click/timer.hh    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/timer.hh 2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,243 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/timer.cc" -*-
++#ifndef CLICK_TIMER_HH
++#define CLICK_TIMER_HH
++#include <click/sync.hh>
++#include <click/glue.hh>
++#include <click/element.hh>
++#include <click/timestamp.hh>
++CLICK_DECLS
++class Element;
++class Router;
++class Timer;
++class Task;
++
++typedef void (*TimerHook)(Timer *, void *);
++
++class Timer { public:
++
++    Timer();
++    Timer(TimerHook hook, void *thunk);
++    Timer(Element *element);          // call element->run_timer()
++    Timer(Task *task);                        // call task->reschedule()
++    inline ~Timer();
++
++    void set_hook(TimerHook hook, void *thunk);
++    void set_hook(Element *element);
++    void set_hook(Task *task);
++    
++    inline bool initialized() const;
++    inline bool scheduled() const;
++    inline const Timestamp &expiry() const;
++  
++    inline void initialize(Router*);
++    inline void initialize(Element*);
++
++    void schedule_at(const Timestamp &when);
++    inline void reschedule_at(const Timestamp &when); // synonym
++
++    inline void schedule_now();
++    void schedule_after(const Timestamp &delta);
++    inline void schedule_after_sec(uint32_t delta_sec);
++    inline void schedule_after_msec(uint32_t delta_msec);
++    inline void reschedule_after(const Timestamp &delta);
++    inline void reschedule_after_sec(uint32_t delta_sec);
++    inline void reschedule_after_msec(uint32_t delta_msec);
++
++    void unschedule();
++
++    inline void schedule_after_s(uint32_t delta_sec) CLICK_DEPRECATED;
++    inline void schedule_after_ms(uint32_t delta_sec) CLICK_DEPRECATED;
++    inline void reschedule_after_s(uint32_t delta_sec) CLICK_DEPRECATED;
++    inline void reschedule_after_ms(uint32_t delta_sec) CLICK_DEPRECATED;
++    
++  private:
++  
++    int _schedpos;
++    Timestamp _expiry;
++    TimerHook _hook;
++    void *_thunk;
++    Router *_router;
++
++    Timer(const Timer &);
++    Timer &operator=(const Timer &);
++
++    friend class Master;
++  
++};
++
++/** @brief Destroy a Timer, unscheduling it first if necessary. */
++inline
++Timer::~Timer()
++{
++    if (scheduled())
++      unschedule();
++}
++
++/** @brief Returns true iff the Timer has been initialized. */
++inline bool
++Timer::initialized() const
++{
++    return _router != 0;
++}
++
++/** @brief Returns true iff the Timer is currently scheduled. */
++inline bool
++Timer::scheduled() const
++{
++    return _schedpos >= 0;
++}
++
++/** @brief Returns the Timer's current expiration time.
++ *
++ * The expiration time is the absolute time at which the timer is next
++ * scheduled to fire.  If the timer is not currently scheduled, then expiry()
++ * returns the last assigned expiration time. */
++inline const Timestamp &
++Timer::expiry() const
++{
++    return _expiry;
++}
++
++/** @brief Initialize the timer.
++ *
++ * @param router the containing router
++ *
++ * Before a timer can be used, it must be attached to a containing router.
++ * When that router is destroyed, the timer is automatically unscheduled.
++ */
++inline void
++Timer::initialize(Router *router)
++{
++    assert(!initialized());
++    _router = router;
++}
++
++/** @brief Initialize the timer.
++ *
++ * @param element identifies the containing router
++ *
++ * @sa initialize(Router *router)
++ */
++inline void
++Timer::initialize(Element *element)
++{
++    initialize(element->router());
++}
++
++/** @brief Schedule the timer to fire at @a when.
++ *
++ * @param when expiration time
++ *
++ * This element is a synonym for schedule_at(). */
++inline void
++Timer::reschedule_at(const Timestamp &when)
++{
++    schedule_at(when);
++}
++
++/** @brief Shedule the timer to fire immediately.
++ *
++ * Equivalent to schedule_at(Timestamp::now()). */
++inline void
++Timer::schedule_now()
++{
++    schedule_at(Timestamp::now());
++}
++
++/** @brief Schedule the timer to fire after @a delta_sec seconds.
++ *
++ * @param delta_sec interval until expiration time, in seconds
++ *
++ * @sa schedule_after, reschedule_after_sec */
++inline void
++Timer::schedule_after_sec(uint32_t delta_sec)
++{
++    schedule_after(Timestamp(delta_sec, 0));
++}
++
++/** @brief Schedule the timer to fire after @a delta_msec milliseconds.
++ *
++ * @param delta_msec interval until expiration time, in milliseconds
++ *
++ * @sa schedule_after, reschedule_after_msec */
++inline void
++Timer::schedule_after_msec(uint32_t delta_msec)
++{
++    schedule_after(Timestamp::make_msec(delta_msec));
++}
++
++/** @brief Schedule the timer to fire @a delta time after its previous expiry.
++ *
++ * @param delta interval until expiration time
++ *
++ * @sa schedule_after */
++inline void
++Timer::reschedule_after(const Timestamp &delta)
++{
++    schedule_at(_expiry + delta);
++}
++
++/** @brief Schedule the timer to fire @a delta_sec seconds after its previous
++ * expiry.
++ *
++ * @param delta_sec interval until expiration time, in seconds
++ *
++ * @sa schedule_after_sec */
++inline void
++Timer::reschedule_after_sec(uint32_t delta_sec)
++{
++    schedule_at(Timestamp(_expiry.sec() + delta_sec, _expiry.subsec()));
++}
++
++/** @brief Schedule the timer to fire @a delta_msec milliseconds after its
++ * previous expiry.
++ *
++ * @param delta_msec interval until expiration time, in milliseconds
++ *
++ * @sa schedule_after_msec */
++inline void
++Timer::reschedule_after_msec(uint32_t delta_msec)
++{
++    schedule_at(_expiry + Timestamp::make_msec(delta_msec));
++}
++
++/** @brief Schedule the timer to fire after @a delta_sec seconds (deprecated).
++ *
++ * @deprecated Use schedule_after_sec() instead. */
++inline void
++Timer::schedule_after_s(uint32_t delta_sec)
++{
++    schedule_after_sec(delta_sec);
++}
++
++/** @brief Schedule the timer to fire after @a delta_msec milliseconds (deprecated).
++ *
++ * @deprecated Use schedule_after_msec() instead. */
++inline void
++Timer::schedule_after_ms(uint32_t delta_msec)
++{
++    schedule_after_msec(delta_msec);
++}
++
++/** @brief Schedule the timer to fire @a delta_sec seconds after its previous
++ * expiry time (deprecated).
++ *
++ * @deprecated Use reschedule_after_sec() instead. */
++inline void
++Timer::reschedule_after_s(uint32_t delta_sec)
++{
++    reschedule_after_sec(delta_sec);
++}
++
++/** @brief Schedule the timer to fire @a delta_msec milliseconds after its
++ * previous expiry time (deprecated).
++ *
++ * @deprecated Use reschedule_after_msec() instead. */
++inline void
++Timer::reschedule_after_ms(uint32_t delta_msec)
++{
++    reschedule_after_msec(delta_msec);
++}
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/timestamp.hh click-1.6.0-27/inst/include/click/timestamp.hh
+--- click-1.6.0/inst/include/click/timestamp.hh        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/timestamp.hh     2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,699 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/timestamp.cc" -*-
++#ifndef CLICK_TIMESTAMP_HH
++#define CLICK_TIMESTAMP_HH
++#include <click/glue.hh>
++CLICK_DECLS
++class String;
++#if !HAVE_NANOTIMESTAMP && SIZEOF_STRUCT_TIMEVAL == 8
++# define TIMESTAMP_PUNS_TIMEVAL 1
++#endif
++#if HAVE_STRUCT_TIMESPEC && HAVE_NANOTIMESTAMP && SIZEOF_STRUCT_TIMESPEC == 8
++# define TIMESTAMP_PUNS_TIMESPEC 1
++#endif
++#if !CLICK_LINUXMODULE && !CLICK_BSDMODULE
++# include <math.h>
++#endif
++
++#if HAVE_NANOTIMESTAMP
++# define PRITIMESTAMP "%d.%09d"
++#else
++# define PRITIMESTAMP "%d.%06d"
++#endif
++
++class Timestamp { public:
++
++#if HAVE_NANOTIMESTAMP
++    enum {
++      NSUBSEC = 1000000000    /**< Number of subseconds in a second.  Can be
++                                   1000000 or 1000000000, depending on how
++                                   Click is compiled. */
++    };
++#else
++    enum {
++      NSUBSEC = 1000000
++    };
++#endif
++
++    inline Timestamp();
++    inline Timestamp(int32_t sec, uint32_t subsec);
++    inline Timestamp(const struct timeval &tv);
++#if HAVE_STRUCT_TIMESPEC
++    inline Timestamp(const struct timespec &ts);
++#endif
++#if !CLICK_LINUXMODULE && !CLICK_BSDMODULE
++    inline Timestamp(double);
++#endif
++
++    typedef int32_t (Timestamp::*unspecified_bool_type)() const;
++    inline operator unspecified_bool_type() const;
++    
++    inline int32_t sec() const;
++    inline uint32_t subsec() const;
++    
++    inline uint32_t msec() const;
++    inline uint32_t usec() const;
++    inline uint32_t nsec() const;
++    
++    inline int32_t msec1() const;
++    inline int32_t usec1() const;
++    inline int32_t nsec1() const;
++
++#if TIMESTAMP_PUNS_TIMEVAL
++    inline const struct timeval &timeval() const;
++#else
++    inline struct timeval timeval() const;
++#endif
++#if HAVE_STRUCT_TIMESPEC
++# if TIMESTAMP_PUNS_TIMESPEC
++    inline const struct timespec &timespec() const;
++# else
++    inline struct timespec timespec() const;
++# endif
++#endif
++#if !CLICK_LINUXMODULE && !CLICK_BSDMODULE
++    inline double doubleval() const;
++#endif
++    
++    static inline Timestamp make_msec(uint32_t msec);
++    static inline Timestamp make_usec(int32_t sec, uint32_t usec);
++    static inline Timestamp make_usec(uint32_t usec);
++    static inline Timestamp make_nsec(int32_t sec, uint32_t nsec);
++    
++    static inline Timestamp epsilon();
++    static inline Timestamp now();
++
++    inline void set(int32_t sec, uint32_t subsec);
++    inline void set_sec(int32_t sec);
++    inline void set_subsec(uint32_t subsec);
++    inline void set_usec(int32_t sec, uint32_t usec);
++    inline void set_nsec(int32_t sec, uint32_t nsec);
++
++    inline void set_now();
++#if !CLICK_LINUXMODULE && !CLICK_BSDMODULE
++    int set_timeval_ioctl(int fd, int ioctl_selector);
++#endif
++
++    void add_fix();
++    void sub_fix();
++
++    String unparse() const;
++
++    inline static uint32_t msec_to_subsec(uint32_t msec);
++    inline static uint32_t usec_to_subsec(uint32_t usec);
++    inline static uint32_t nsec_to_subsec(uint32_t nsec);
++    inline static uint32_t subsec_to_msec(uint32_t subsec);
++    inline static uint32_t subsec_to_usec(uint32_t subsec);
++    inline static uint32_t subsec_to_nsec(uint32_t subsec);
++    
++    int32_t _sec;
++    int32_t _subsec;
++    
++};
++
++
++/** @brief Convert milliseconds to subseconds.
++ @param msec number of milliseconds
++
++ Converts its parameter to a number of subseconds (that is, either
++ microseconds or nanoseconds, depending on configuration options and driver
++ choice).
++
++ @sa usec_to_subsec(), nsec_to_subsec(), subsec_to_msec(), subsec_to_usec(),
++ subsec_to_nsec() */
++inline uint32_t
++Timestamp::msec_to_subsec(uint32_t msec)
++{
++#if HAVE_NANOTIMESTAMP
++    return msec * 1000000;
++#else
++    return msec * 1000;
++#endif
++}
++
++/** @brief Convert microseconds to subseconds.
++ @param usec number of microseconds
++ @sa msec_to_subsec() */
++inline uint32_t
++Timestamp::usec_to_subsec(uint32_t usec)
++{
++#if HAVE_NANOTIMESTAMP
++    return usec * 1000;
++#else
++    return usec;
++#endif
++}
++
++/** @brief Convert nanoseconds to subseconds.
++ @param nsec number of nanoseconds
++ @sa msec_to_subsec() */
++inline uint32_t
++Timestamp::nsec_to_subsec(uint32_t nsec)
++{
++#if HAVE_NANOTIMESTAMP
++    return nsec;
++#else
++    return (nsec + 500) / 1000;
++#endif
++}
++
++/** @brief Convert subseconds to milliseconds.
++ @param subsec number of subseconds
++ @sa msec_to_subsec() */
++inline uint32_t
++Timestamp::subsec_to_msec(uint32_t subsec)
++{
++#if HAVE_NANOTIMESTAMP
++    return subsec / 1000000;
++#else
++    return subsec / 1000;
++#endif
++}
++
++/** @brief Convert subseconds to microseconds.
++ @param subsec number of subseconds
++ @sa msec_to_subsec() */
++inline uint32_t
++Timestamp::subsec_to_usec(uint32_t subsec)
++{
++#if HAVE_NANOTIMESTAMP
++    return subsec / 1000;
++#else
++    return subsec;
++#endif
++}
++
++/** @brief Convert subseconds to nanoseconds.
++ @param subsec number of subseconds
++ @sa msec_to_subsec() */
++inline uint32_t
++Timestamp::subsec_to_nsec(uint32_t subsec)
++{
++#if HAVE_NANOTIMESTAMP
++    return subsec;
++#else
++    return subsec * 1000;
++#endif
++}
++
++
++/** @brief Create a zero-valued Timestamp. */
++inline
++Timestamp::Timestamp()
++    : _sec(0), _subsec(0)
++{
++}
++
++/** @brief Create a Timestamp measuring @a sec seconds plus @a subsec subseconds.
++    @param sec number of seconds
++    @param subsec number of subseconds
++ 
++    The @a subsec parameter must be between 0 and NSUBSEC - 1; errors are not
++    necessarily checked. */
++inline
++Timestamp::Timestamp(int32_t sec, uint32_t subsec)
++    : _sec(sec), _subsec(subsec)
++{
++}
++
++/** @brief Create a Timestamp measuring @a tv.
++    @param tv timeval structure */
++inline
++Timestamp::Timestamp(const struct timeval& tv)
++    : _sec(tv.tv_sec), _subsec(usec_to_subsec(tv.tv_usec))
++{
++}
++
++#if HAVE_STRUCT_TIMESPEC
++/** @brief Create a Timestamp measuring @a ts.
++    @param ts timespec structure */
++inline
++Timestamp::Timestamp(const struct timespec& ts)
++    : _sec(ts.tv_sec), _subsec(nsec_to_subsec(ts.tv_nsec))
++{
++}
++#endif
++
++/** @brief Returns true iff this timestamp is not zero-valued. */
++inline
++Timestamp::operator unspecified_bool_type() const
++{
++    return _sec || _subsec ? &Timestamp::sec : 0;
++}
++
++/** @brief Sets this timestamp to the current time.
++
++ The current time is measured in seconds since January 1, 1970 GMT.
++ @sa now() */
++inline void
++Timestamp::set_now()
++{
++#if TIMESTAMP_PUNS_TIMEVAL
++    click_gettimeofday((struct timeval*) this);
++#else
++    struct timeval tv;
++    click_gettimeofday(&tv);
++    _sec = tv.tv_sec;
++    _subsec = usec_to_subsec(tv.tv_usec);
++#endif
++}
++
++/** @brief Return a timestamp representing the current time.
++
++ The current time is measured in seconds since January 1, 1970 GMT.
++ @sa set_now() */
++inline Timestamp
++Timestamp::now()
++{
++    Timestamp t;
++    t.set_now();
++    return t;
++}
++
++/** @brief Returns the smallest nonzero timestamp.
++
++ Same as Timestamp(0, 1). */
++inline Timestamp
++Timestamp::epsilon()
++{
++    return Timestamp(0, 1);
++}
++
++/** @brief Returns a timestamp representing an interval of @a msec
++    milliseconds.
++    @param msec number of milliseconds (may be greater than 1000) */
++inline Timestamp
++Timestamp::make_msec(uint32_t msec)
++{
++    return Timestamp(msec / 1000, msec_to_subsec(msec % 1000));
++}
++
++/** @brief Returns a timestamp representing @a sec seconds plus @a usec
++    microseconds.
++    @param sec number of seconds
++    @param usec number of microseconds (less than 1000000) */
++inline Timestamp
++Timestamp::make_usec(int32_t sec, uint32_t usec)
++{
++    return Timestamp(sec, usec_to_subsec(usec));
++}
++
++/** @brief Returns a timestamp representing an interval of @a usec
++    microseconds.
++    @param usec number of microseconds (may be greater than 1000000) */
++inline Timestamp
++Timestamp::make_usec(uint32_t usec)
++{
++    return Timestamp(usec / 1000000, usec_to_subsec(usec % 1000000));
++}
++
++/** @brief Returns a timestamp representing @a sec seconds plus @a nsec
++    nanoseconds.
++    @param sec number of seconds
++    @param nsec number of nanoseconds (less than 1000000000) */
++inline Timestamp
++Timestamp::make_nsec(int32_t sec, uint32_t nsec)
++{
++    return Timestamp(sec, nsec_to_subsec(nsec));
++}
++
++/** @brief Sets this timestamp's components.
++    @param sec number of seconds
++    @param subsec number of subseconds */
++inline void
++Timestamp::set(int32_t sec, uint32_t subsec)
++{
++    _sec = sec;
++    _subsec = subsec;
++}
++
++/** @brief Sets this timestamp's seconds component.
++    @param sec number of seconds
++    
++    The subseconds component is left unchanged. */
++inline void
++Timestamp::set_sec(int32_t sec)
++{
++    _sec = sec;
++}
++
++/** @brief Sets this timestamp's subseconds component.
++    @param subsec number of subseconds
++    
++    The seconds component is left unchanged. */
++inline void
++Timestamp::set_subsec(uint32_t subsec)
++{
++    _subsec = subsec;
++}
++
++/** @brief Sets this timestamp to a seconds-and-microseconds value.
++    @param sec number of seconds
++    @param usec number of microseconds (must be less than 1000000)
++    @sa make_usec() */
++inline void
++Timestamp::set_usec(int32_t sec, uint32_t usec)
++{
++    _sec = sec;
++    _subsec = usec_to_subsec(usec);
++}
++
++/** @brief Sets this timestamp to a seconds-and-nanoseconds value.
++    @param sec number of seconds
++    @param nsec number of nanoseconds (must be less than 1000000000)
++    @sa make_nsec() */
++inline void
++Timestamp::set_nsec(int32_t sec, uint32_t nsec)
++{
++    _sec = sec;
++    _subsec = nsec_to_subsec(nsec);
++}
++
++/** @brief Returns this timestamp's seconds component. */
++inline int32_t
++Timestamp::sec() const
++{
++    return _sec;
++}
++
++/** @brief Returns this timestamp's subseconds component. */
++inline uint32_t
++Timestamp::subsec() const
++{
++    return _subsec;
++}
++
++/** @brief Returns this timestamp's subseconds component, converted to
++    milliseconds. */
++inline uint32_t
++Timestamp::msec() const
++{
++    return subsec_to_msec(_subsec);
++}
++
++/** @brief Returns this timestamp's subseconds component, converted to
++    microseconds. */
++inline uint32_t
++Timestamp::usec() const
++{
++    return subsec_to_usec(_subsec);
++}
++
++/** @brief Returns this timestamp's subseconds component, converted to
++    nanoseconds. */
++inline uint32_t
++Timestamp::nsec() const
++{
++    return subsec_to_nsec(_subsec);
++}
++
++/** @brief Returns this timestamp's interval length, converted to
++    milliseconds.
++
++    Will overflow on intervals of more than 2147483.647 seconds. */
++inline int32_t
++Timestamp::msec1() const
++{
++    return _sec * 1000 + subsec_to_msec(_subsec);
++}
++
++/** @brief Returns this timestamp's interval length, converted to
++    microseconds.
++
++    Will overflow on intervals of more than 2147.483647 seconds. */
++inline int32_t
++Timestamp::usec1() const
++{
++    return _sec * 1000000 + subsec_to_usec(_subsec);
++}
++
++/** @brief Returns this timestamp's interval length, converted to
++    nanoseconds.
++
++    Will overflow on intervals of more than 2.147483647 seconds. */
++inline int32_t
++Timestamp::nsec1() const
++{
++    return _sec * 1000000000 + subsec_to_nsec(_subsec);
++}
++
++#if TIMESTAMP_PUNS_TIMEVAL
++inline const struct timeval &
++Timestamp::timeval() const
++{
++    return *(const struct timeval*) this;
++}
++#else
++/** @brief Returns a struct timeval with the same value as this timestamp.
++
++    If Timestamp and struct timeval have the same size and representation,
++    then this operation returns a "const struct timeval &" whose address is
++    the same as this Timestamp. */
++inline struct timeval
++Timestamp::timeval() const
++{
++    struct timeval tv;
++    tv.tv_sec = _sec;
++    tv.tv_usec = usec();
++    return tv;
++}
++#endif
++
++#if HAVE_STRUCT_TIMESPEC
++# if TIMESTAMP_PUNS_TIMESPEC
++inline const struct timespec &
++Timestamp::timespec() const
++{
++    return *(const struct timespec*) this;
++}
++# else
++/** @brief Returns a struct timespec with the same value as this timestamp.
++
++    If Timestamp and struct timespec have the same size and representation,
++    then this operation returns a "const struct timespec &" whose address is
++    the same as this Timestamp. */
++inline struct timespec
++Timestamp::timespec() const
++{
++    struct timespec tv;
++    tv.tv_sec = _sec;
++    tv.tv_nsec = nsec();
++    return tv;
++}
++# endif
++#endif
++
++/** @relates Timestamp
++    @brief Compares two timestamps for equality.
++
++    Returns true iff the two operands have the same seconds and subseconds
++    components. */
++inline bool
++operator==(const Timestamp &a, const Timestamp &b)
++{
++    return a.sec() == b.sec() && a.subsec() == b.subsec();
++}
++
++/** @relates Timestamp
++    @brief Compares two timestamps for inequality.
++
++    Returns true iff !(@a a == @a b). */
++inline bool
++operator!=(const Timestamp &a, const Timestamp &b)
++{
++    return !(a == b);
++}
++
++/** @relates Timestamp
++    @brief Compares two timestamps.
++
++    Returns true iff @a a represents a shorter interval than @a b, or
++    considered as absolute time, @a a happened before @a b.  */
++inline bool
++operator<(const Timestamp &a, const Timestamp &b)
++{
++    return a.sec() < b.sec() || (a.sec() == b.sec() && a.subsec() < b.subsec());
++}
++
++/** @relates Timestamp
++    @brief Compares two timestamps.
++
++    Returns true iff @a a measures an interval no larger than @a b, or
++    considered as absolute time, @a a happened at or before @a b.  */
++inline bool
++operator<=(const Timestamp &a, const Timestamp &b)
++{
++    return !(b < a);
++}
++
++/** @relates Timestamp
++    @brief Compares two timestamps.
++
++    Returns true iff @a a measures an interval no shorter than @a b, or
++    considered as absolute time, @a a happened at or after @a b.  */
++inline bool
++operator>=(const Timestamp &a, const Timestamp &b)
++{
++    return !(a < b);
++}
++
++/** @relates Timestamp
++    @brief Compares two timestamps.
++
++    Returns true iff @a a measures a longer interval than @a b, or considered
++    as absolute time, @a a happened after @a b.  */
++inline bool
++operator>(const Timestamp &a, const Timestamp &b)
++{
++    return b < a;
++}
++
++inline void
++Timestamp::add_fix()
++{
++    if (_subsec >= NSUBSEC)
++      _sec++, _subsec -= NSUBSEC;
++}
++
++inline void
++Timestamp::sub_fix()
++{
++    if (_subsec < 0)
++      _sec--, _subsec += NSUBSEC;
++}
++
++/** @brief Adds @a b to @a a.
++
++    Returns the result (the new value of @a a). */
++inline Timestamp &
++operator+=(Timestamp &a, const Timestamp &b)
++{
++    a._sec += b._sec;
++    a._subsec += b._subsec;
++    a.add_fix();
++    return a;
++}
++
++/** @brief Subtracts @a b from @a a.
++
++    Returns the result (the new value of @a a). */
++inline Timestamp &
++operator-=(Timestamp &a, const Timestamp &b)
++{
++    a._sec -= b._sec;
++    a._subsec -= b._subsec;
++    a.sub_fix();
++    return a;
++}
++
++/** @brief Adds the two operands and returns the result. */
++inline Timestamp
++operator+(Timestamp a, const Timestamp &b)
++{
++    a += b;
++    return a;
++}
++
++/** @brief Subtracts @a b from @a a and returns the result. */
++inline Timestamp
++operator-(Timestamp a, const Timestamp &b)
++{
++    a -= b;
++    return a;
++}
++
++/** @brief Negates @a a and returns the result. */
++inline Timestamp
++operator-(const Timestamp &a)
++{
++    if (a._subsec)
++      return Timestamp(-a._sec - 1, Timestamp::NSUBSEC - a._subsec);
++    else
++      return Timestamp(-a._sec, 0);
++}
++
++#if !CLICK_LINUXMODULE && !CLICK_BSDMODULE
++/** @brief Returns this timestamp's value, converted to a real number. */
++inline double
++Timestamp::doubleval() const
++{
++    return _sec + (_subsec / (double) NSUBSEC);
++}
++
++/** @brief Create a timestamp measuring @a d seconds. */
++inline
++Timestamp::Timestamp(double d)
++{
++    double dfloor = floor(d);
++    _sec = (int32_t) dfloor;
++    _subsec = (uint32_t) ((d - dfloor) * NSUBSEC + 0.5);
++    add_fix();
++}
++
++/** @brief Scales @a a by a factor of @a b and returns the result. */
++inline Timestamp
++operator*(const Timestamp &a, double b)
++{
++    return Timestamp(a.doubleval() * b);
++}
++
++inline Timestamp
++operator*(const Timestamp &a, int b)
++{
++    return Timestamp(a.doubleval() * b);
++}
++
++inline Timestamp
++operator*(const Timestamp &a, unsigned b)
++{
++    return Timestamp(a.doubleval() * b);
++}
++
++inline Timestamp
++operator*(double a, const Timestamp &b)
++{
++    return Timestamp(b.doubleval() * a);
++}
++
++inline Timestamp
++operator*(int a, const Timestamp &b)
++{
++    return Timestamp(b.doubleval() * a);
++}
++
++inline Timestamp
++operator*(unsigned a, const Timestamp &b)
++{
++    return Timestamp(b.doubleval() * a);
++}
++
++/** @brief Scales @a a down by a factor of @a b and returns the result. */
++inline Timestamp
++operator/(const Timestamp &a, double b)
++{
++    return Timestamp(a.doubleval() / b);
++}
++
++inline Timestamp
++operator/(const Timestamp &a, int b)
++{
++    return Timestamp(a.doubleval() / b);
++}
++
++inline Timestamp
++operator/(const Timestamp &a, unsigned b)
++{
++    return Timestamp(a.doubleval() / b);
++}
++
++/** @brief Divides @a a by @a b and returns the result. */
++inline double
++operator/(const Timestamp &a, const Timestamp &b)
++{
++    return a.doubleval() / b.doubleval();
++}
++# endif /* !CLICK_LINUXMODULE && !CLICK_BSDMODULE */
++
++StringAccum& operator<<(StringAccum&, const Timestamp&);
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/userutils.hh click-1.6.0-27/inst/include/click/userutils.hh
+--- click-1.6.0/inst/include/click/userutils.hh        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/userutils.hh     2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,51 @@
++// -*- c-basic-offset: 2; related-file-name: "../../lib/userutils.cc" -*-
++#ifndef CLICK_USERUTILS_HH
++#define CLICK_USERUTILS_HH
++#include <click/archive.hh>
++#include <stdio.h>
++CLICK_DECLS
++class ErrorHandler;
++
++bool glob_match(const String &string, const String &pattern);
++
++String percent_substitute(const String &string, int format1, ...);
++
++int click_strcmp(const String &a, const String &b);
++
++const char *filename_landmark(const char *, bool file_is_expr = false);
++
++String file_string(FILE *, ErrorHandler * = 0);
++String file_string(String, ErrorHandler * = 0);
++
++String unique_tmpnam(const String &, ErrorHandler * = 0);
++void remove_file_on_exit(const String &);
++bool path_allows_default_path(String path);
++String click_mktmpdir(ErrorHandler * = 0);
++
++const char *clickpath();
++void set_clickpath(const char *);
++
++String clickpath_find_file(const String& filename, const char *subdir,
++                         String default_path, ErrorHandler * = 0);
++void clickpath_expand_path(const char* subdir, const String& default_path, Vector<String>&);
++
++void parse_tabbed_lines(const String &, Vector<String> *, ...);
++
++ArchiveElement init_archive_element(const String &, int);
++
++String shell_quote(const String &, bool quote_tilde = false);
++String shell_command_output_string(String command_line, const String &command_stdin, ErrorHandler *);
++
++bool compressed_data(const unsigned char *, int);
++FILE *open_uncompress_pipe(const String &filename, const unsigned char *, int, ErrorHandler *);
++
++int compressed_filename(const String &filename);
++FILE *open_compress_pipe(const String &filename, ErrorHandler *);
++
++#if HAVE_DYNAMIC_LINKING
++int clickdl_load_package(String, ErrorHandler *);
++void clickdl_load_requirement(String, const Vector<ArchiveElement> *archive, ErrorHandler *);
++#endif
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/variableenv.hh click-1.6.0-27/inst/include/click/variableenv.hh
+--- click-1.6.0/inst/include/click/variableenv.hh      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/variableenv.hh   2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,49 @@
++// -*- c-basic-offset: 4; related-file-name: "../../lib/variableenv.cc" -*-
++#ifndef CLICK_VARIABLEENVIRONMENT_HH
++#define CLICK_VARIABLEENVIRONMENT_HH
++#include <click/string.hh>
++#include <click/vector.hh>
++CLICK_DECLS
++class StringAccum;
++
++class VariableExpander { public:
++
++    VariableExpander()                        { }
++    virtual ~VariableExpander()               { }
++
++    virtual bool expand(const String &var, int vartype, int quote, StringAccum &) = 0;
++
++};
++
++class VariableEnvironment : public VariableExpander { public:
++  
++    VariableEnvironment(VariableEnvironment *parent);
++
++    int depth() const                 { return _depth; }
++    int size() const                  { return _names.size(); }
++
++    const String &name(int i) const   { return _names[i]; }
++    const Vector<String> &values() const      { return _values; }
++    const String &value(int i) const  { return _values[i]; }
++    const String &value(const String &name, bool &found) const;
++
++    void clear()                      { _names.clear(); _values.clear(); }
++    
++    VariableEnvironment *parent_of(int depth);
++    bool define(const String &name, const String &value, bool override);
++    bool expand(const String &var, int vartype, int quote, StringAccum &);
++
++  private:
++
++    Vector<String> _names;
++    Vector<String> _values;
++    int _depth;
++    VariableEnvironment *_parent;
++
++};
++
++String cp_expand(const String &, VariableExpander &, bool expand_quote = false);
++String cp_expand_in_quotes(const String &, int quote);
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/click/vector.cc click-1.6.0-27/inst/include/click/vector.cc
+--- click-1.6.0/inst/include/click/vector.cc   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/vector.cc        2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,149 @@
++/*
++ * vector.{cc,hh} -- simple array template class
++ * Eddie Kohler
++ *
++ * Copyright (c) 1999-2000 Massachusetts Institute of Technology
++ * Copyright (c) 2006 Regents of the University of California
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, subject to the conditions
++ * listed in the Click LICENSE file. These conditions include: you must
++ * preserve this copyright notice, and you cannot mention the copyright
++ * holders in advertising related to the Software without their permission.
++ * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++ * notice is a summary of the Click LICENSE file; the license in that file is
++ * legally binding.
++ */
++
++#ifndef CLICK_VECTOR_CC
++#define CLICK_VECTOR_CC
++
++CLICK_ENDDECLS
++#include <click/glue.hh>
++#include <click/vector.hh>
++CLICK_DECLS
++
++template <class T>
++Vector<T>::Vector(const Vector<T> &o)
++  : _l(0), _n(0), _capacity(0)
++{
++  *this = o;
++}
++
++template <class T>
++Vector<T>::~Vector()
++{
++  for (size_type i = 0; i < _n; i++)
++    _l[i].~T();
++  delete[] (unsigned char *)_l;
++}
++
++template <class T> Vector<T> &
++Vector<T>::operator=(const Vector<T> &o)
++{
++  if (&o != this) {
++    for (size_type i = 0; i < _n; i++)
++      _l[i].~T();
++    _n = 0;
++    if (reserve(o._n)) {
++      _n = o._n;
++      for (size_type i = 0; i < _n; i++)
++        new(velt(i)) T(o._l[i]);
++    }
++  }
++  return *this;
++}
++
++template <class T> Vector<T> &
++Vector<T>::assign(size_type n, const T &e)
++{
++  resize(0, e);
++  resize(n, e);
++  return *this;
++}
++
++template <class T> typename Vector<T>::iterator
++Vector<T>::insert(iterator i, const T& e)
++{
++  assert(i >= begin() && i <= end());
++  size_type pos = i - begin();
++  if (_n < _capacity || reserve(RESERVE_GROW)) {
++    for (iterator j = end() - 1; j >= begin() + pos; j--) {
++      new((void*) (j+1)) T(*j);
++      j->~T();
++    }
++    new(velt(pos)) T(e);
++    _n++;
++  }
++  return begin() + pos;
++}
++
++template <class T> typename Vector<T>::iterator
++Vector<T>::erase(iterator a, iterator b)
++{
++  if (b > a) {
++    assert(a >= begin() && b <= end());
++    iterator i = a, j = b;
++    for (; j < end(); i++, j++) {
++      i->~T();
++      new((void*) i) T(*j);
++    }
++    for (; i < end(); i++)
++      i->~T();
++    _n -= b - a;
++    return a;
++  } else
++    return b;
++}
++
++template <class T> bool
++Vector<T>::reserve(size_type want)
++{
++  if (want < 0)
++    want = (_capacity > 0 ? _capacity * 2 : 4);
++  if (want <= _capacity)
++    return true;
++  
++  T *new_l = (T *)new unsigned char[sizeof(T) * want];
++  if (!new_l)
++    return false;
++  
++  for (size_type i = 0; i < _n; i++) {
++    new(velt(new_l, i)) T(_l[i]);
++    _l[i].~T();
++  }
++  delete[] (unsigned char *)_l;
++  
++  _l = new_l;
++  _capacity = want;
++  return true;
++}
++
++template <class T> void
++Vector<T>::resize(size_type nn, const T &e)
++{
++  if (nn <= _capacity || reserve(nn)) {
++    for (size_type i = nn; i < _n; i++)
++      _l[i].~T();
++    for (size_type i = _n; i < nn; i++)
++      new(velt(i)) T(e);
++    _n = nn;
++  }
++}
++
++template <class T> void
++Vector<T>::swap(Vector<T> &o)
++{
++  T *l = _l;
++  size_type n = _n;
++  size_type cap = _capacity;
++  _l = o._l;
++  _n = o._n;
++  _capacity = o._capacity;
++  o._l = l;
++  o._n = n;
++  o._capacity = cap;
++}
++
++#endif
+diff -Nurb click-1.6.0/inst/include/click/vector.hh click-1.6.0-27/inst/include/click/vector.hh
+--- click-1.6.0/inst/include/click/vector.hh   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/click/vector.hh        2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,284 @@
++#ifndef CLICK_VECTOR_HH
++#define CLICK_VECTOR_HH
++#include <click/algorithm.hh>
++CLICK_DECLS
++
++template <class T>
++class Vector { public:
++
++  typedef T value_type;
++  typedef T& reference;
++  typedef const T& const_reference;
++  typedef T* pointer;
++  typedef const T* const_pointer;
++  
++  typedef int size_type;
++  enum { RESERVE_GROW = (size_type) -1 };
++  
++  typedef T* iterator;
++  typedef const T* const_iterator;
++  
++  explicit Vector()           : _l(0), _n(0), _capacity(0) { }
++  explicit Vector(size_type n, const T &e) : _l(0), _n(0), _capacity(0) { resize(n, e); }
++  // template <class In> ...
++  Vector(const Vector<T> &);
++  ~Vector();
++
++  Vector<T>& operator=(const Vector<T>&);
++  Vector<T>& assign(size_type n, const T& e = T());
++  // template <class In> ...
++  
++  // iterators
++  iterator begin()                    { return _l; }
++  const_iterator begin() const                { return _l; }
++  iterator end()                      { return _l + _n; }
++  const_iterator end() const          { return _l + _n; }
++
++  // capacity
++  size_type size() const              { return _n; }
++  void resize(size_type nn, const T& e = T());
++  size_type capacity() const          { return _capacity; }
++  bool empty() const                  { return _n == 0; }
++  bool reserve(size_type);
++
++  // element access
++  T& operator[](size_type i)          { assert(i>=0 && i<_n); return _l[i]; }
++  const T& operator[](size_type i) const{ assert(i>=0 && i<_n); return _l[i]; }
++  T& at(size_type i)                  { return operator[](i); }
++  const T& at(size_type i) const      { return operator[](i); }
++  T& front()                          { return operator[](0); }
++  const T& front() const              { return operator[](0); }
++  T& back()                           { return operator[](_n - 1); }
++  const T& back() const                       { return operator[](_n - 1); }
++  T& at_u(size_type i)                        { return _l[i]; }
++  const T& at_u(size_type i) const    { return _l[i]; }
++
++  // modifiers
++  inline void push_back(const T&);
++  inline void pop_back();
++  inline void push_front(const T&);
++  inline void pop_front();
++  iterator insert(iterator, const T&);
++  inline iterator erase(iterator);
++  iterator erase(iterator, iterator);
++  void swap(Vector<T> &);
++  void clear()                                { erase(begin(), end()); }
++  
++ private:
++  
++  T *_l;
++  size_type _n;
++  size_type _capacity;
++
++  void *velt(size_type i) const               { return (void*)&_l[i]; }
++  static void *velt(T* l, size_type i)        { return (void*)&l[i]; }
++
++};
++
++template <class T> inline void
++Vector<T>::push_back(const T& e)
++{
++  if (_n < _capacity || reserve(RESERVE_GROW)) {
++    new(velt(_n)) T(e);
++    _n++;
++  }
++}
++
++template <class T> inline void
++Vector<T>::pop_back()
++{
++  assert(_n > 0);
++  --_n;
++  _l[_n].~T();
++}
++
++template <class T> inline typename Vector<T>::iterator
++Vector<T>::erase(iterator i)
++{
++  return (i < end() ? erase(i, i + 1) : i);
++}
++
++template <class T> inline void
++Vector<T>::push_front(const T& e)
++{
++  insert(begin(), e);
++}
++
++template <class T> inline void
++Vector<T>::pop_front()
++{
++  erase(begin());
++}
++
++
++template <>
++class Vector<void*> { public:
++
++  typedef void* value_type;
++  typedef void*& reference;
++  typedef void* const& const_reference;
++  typedef void** pointer;
++  typedef void* const* const_pointer;
++
++  typedef int size_type;
++  enum { RESERVE_GROW = (size_type) -1 };
++  
++  typedef void** iterator;
++  typedef void* const* const_iterator;
++
++  explicit Vector()                   : _l(0), _n(0), _capacity(0) { }
++  explicit Vector(size_type n, void* e)       : _l(0), _n(0), _capacity(0) { resize(n, e); }
++  Vector(const Vector<void*> &);
++  ~Vector();
++  
++  Vector<void*> &operator=(const Vector<void*> &);
++  Vector<void*> &assign(size_type n, void* e = 0);
++  
++  // iterators
++  iterator begin()                    { return _l; }
++  const_iterator begin() const                { return _l; }
++  iterator end()                      { return _l + _n; }
++  const_iterator end() const          { return _l + _n; }
++
++  // capacity
++  size_type size() const              { return _n; }
++  void resize(size_type nn, void* e = 0);
++  size_type capacity() const          { return _capacity; }
++  bool empty() const                  { return _n == 0; }
++  bool reserve(size_type);
++
++  // element access
++  void*& operator[](size_type i)      { assert(i>=0 && i<_n); return _l[i]; }
++  void* operator[](size_type i) const { assert(i>=0 && i<_n); return _l[i]; }
++  void*& at(size_type i)              { return operator[](i); }
++  void* at(size_type i) const         { return operator[](i); }
++  void*& front()                      { return operator[](0); }
++  void* front() const                 { return operator[](0); }
++  void*& back()                               { return operator[](_n - 1); }
++  void* back() const                  { return operator[](_n - 1); }
++  void*& at_u(size_type i)            { return _l[i]; }
++  void* at_u(size_type i) const               { return _l[i]; }
++
++  // modifiers
++  inline void push_back(void*);
++  inline void pop_back();
++  inline void push_front(void*);
++  inline void pop_front();
++  iterator insert(iterator, void*);
++  inline iterator erase(iterator);
++  iterator erase(iterator, iterator);
++  void swap(Vector<void*> &);
++  void clear()                                { _n = 0; }
++
++ private:
++  
++  void **_l;
++  size_type _n;
++  size_type _capacity;
++
++};
++
++inline void
++Vector<void*>::push_back(void *e)
++{
++  if (_n < _capacity || reserve(RESERVE_GROW)) {
++    _l[_n] = e;
++    _n++;
++  }
++}
++
++inline void
++Vector<void*>::pop_back()
++{
++  assert(_n > 0);
++  --_n;
++}
++
++inline Vector<void*>::iterator 
++Vector<void*>::erase(Vector<void*>::iterator e)
++{
++  return (e < end() ? erase(e, e + 1) : e);
++}
++
++inline void
++Vector<void*>::push_front(void *e)
++{
++  insert(begin(), e);
++}
++
++inline void
++Vector<void*>::pop_front()
++{
++  erase(begin());
++}
++
++
++template <class T>
++class Vector<T*>: private Vector<void*> {
++  
++  typedef Vector<void*> Base;
++  
++ public:
++
++  typedef T* value_type;
++  typedef T*& reference;
++  typedef T* const& const_reference;
++  typedef T** pointer;
++  typedef T* const* const_pointer;
++
++  typedef int size_type;
++  enum { RESERVE_GROW = Base::RESERVE_GROW };
++  
++  typedef T** iterator;
++  typedef T* const* const_iterator;
++  
++  explicit Vector()                   : Base() { }
++  explicit Vector(size_type n, T* e)  : Base(n, (void *)e) { }
++  Vector(const Vector<T *> &o)                : Base(o) { }
++  ~Vector()                           { }
++
++  Vector<T *> &operator=(const Vector<T *> &o)
++              { Base::operator=(o); return *this; }
++  Vector<T *> &assign(size_type n, T *e = 0)
++              { Base::assign(n, (void *)e); return *this; }
++  
++  // iterators
++  const_iterator begin() const        { return (const_iterator)(Base::begin()); }
++  iterator begin()            { return (iterator)(Base::begin()); }
++  const_iterator end() const  { return (const_iterator)(Base::end()); }
++  iterator end()              { return (iterator)(Base::end()); }
++
++  // capacity
++  size_type size() const      { return Base::size(); }
++  void resize(size_type n, T *e = 0) { Base::resize(n, (void *)e); }
++  size_type capacity() const  { return Base::capacity(); }
++  bool empty() const          { return Base::empty(); }
++  bool reserve(size_type n)   { return Base::reserve(n); }
++
++  // element access
++  T*& operator[](size_type i) { return (T*&)(Base::at(i)); }
++  T* operator[](size_type i) const { return (T*)(Base::operator[](i)); }
++  T*& at(size_type i)         { return (T*&)(Base::operator[](i)); }
++  T* at(size_type i) const    { return (T*)(Base::at(i)); }
++  T*& front()                 { return (T*&)(Base::front()); }
++  T* front() const            { return (T*)(Base::front()); }
++  T*& back()                  { return (T*&)(Base::back()); }
++  T* back() const             { return (T*)(Base::back()); }
++  T*& at_u(size_type i)               { return (T*&)(Base::at_u(i)); }
++  T* at_u(size_type i) const  { return (T*)(Base::at_u(i)); }
++  
++  // modifiers
++  void push_back(T* e)                { Base::push_back((void*)e); }
++  void pop_back()             { Base::pop_back(); }
++  void push_front(T *e)               { Base::push_front((void*)e); }
++  void pop_front()            { Base::pop_front(); }
++  iterator insert(iterator i, T* e) { return (iterator)Base::insert((void**)i, (void*)e); }
++  iterator erase(iterator i)  { return (iterator)Base::erase((void**)i); }
++  iterator erase(iterator i, iterator j) { return (iterator)Base::erase((void**)i, (void**)j); }
++  void swap(Vector<T *> &o)   { Base::swap(o); }
++  void clear()                        { Base::clear(); }
++    
++};
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/clicknet/dhcp.h click-1.6.0-27/inst/include/clicknet/dhcp.h
+--- click-1.6.0/inst/include/clicknet/dhcp.h   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicknet/dhcp.h        2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,130 @@
++#ifndef CLICKNET_DHCP_H
++#define CLICKNET_DHCP_H
++
++CLICK_SIZE_PACKED_STRUCTURE(
++struct click_dhcp {,
++      uint8_t  op;           /* message type */
++      uint8_t  htype;        /* hardware address type */
++      uint8_t  hlen;         /* hardware address length */
++      uint8_t  hops;         /* should be zero in client's message */
++      uint32_t xid;          /* transaction id */
++      uint16_t secs;         /* elapsed time in sec. from trying to boot */
++      uint16_t flags;
++      uint32_t ciaddr;       /* (previously allocated) client IP address */
++      uint32_t yiaddr;       /* 'your' client IP address */
++      uint32_t siaddr;       /* should be zero in client's messages */
++      uint32_t giaddr;       /* should be zero in client's messages */
++      uint8_t  chaddr[16];   /* client's hardware address */
++      uint8_t  sname[64];    /* server host name, null terminated string */
++      uint8_t  file[128];    /* boot file name, null terminated string */
++      uint32_t magic;        /* magic cookie */
++      uint8_t  options[312]; /* message options */
++});
++
++
++#define ETH_10MB      1 /* htype */
++#define ETH_10MB_LEN  6 /* hlen */
++
++/* DHCP message OP code */
++#define DHCP_BOOTREQUEST      1
++#define DHCP_BOOTREPLY                2
++
++/* DHCP Client State*/
++enum dhcp_client_state {
++      DHCP_CLIENT_INIT_STATE = 1,
++      DHCP_CLIENT_SELECTING_STATE,
++      DHCP_CLIENT_REQUESTING_STATE,
++      DHCP_CLIENT_INIT_REBOOT,
++      DHCP_CLIENT_REBOOTING,
++      DHCP_CLIENT_BOUND,
++      DHCP_CLIENT_RENEWING,
++      DHCP_CLIENT_REBINDING
++};
++
++
++/* DHCP message type */
++#define DHCP_DISCOVER           1
++#define DHCP_OFFER              2
++#define DHCP_REQUEST            3
++#define DHCP_DECLINE            4
++#define DHCP_ACK                5
++#define DHCP_NACK               6
++#define DHCP_RELEASE            7
++#define DHCP_INFORM             8
++
++#define DHCP_MAGIC 0x63538263
++
++
++
++/* DHCP Option codes: */
++#define DHO_PAD                               0
++#define DHO_SUBNET_MASK                       1
++#define DHO_TIME_OFFSET                       2
++#define DHO_ROUTERS                   3
++#define DHO_TIME_SERVERS              4
++#define DHO_NAME_SERVERS              5
++#define DHO_DOMAIN_NAME_SERVERS               6
++#define DHO_LOG_SERVERS                       7
++#define DHO_COOKIE_SERVERS            8
++#define DHO_LPR_SERVERS                       9
++#define DHO_IMPRESS_SERVERS           10
++#define DHO_RESOURCE_LOCATION_SERVERS 11
++#define DHO_HOST_NAME                 12
++#define DHO_BOOT_SIZE                 13
++#define DHO_MERIT_DUMP                        14
++#define DHO_DOMAIN_NAME                       15
++#define DHO_SWAP_SERVER                       16
++#define DHO_ROOT_PATH                 17
++#define DHO_EXTENSIONS_PATH           18
++#define DHO_IP_FORWARDING             19
++#define DHO_NON_LOCAL_SOURCE_ROUTING  20
++#define DHO_POLICY_FILTER             21
++#define DHO_MAX_DGRAM_REASSEMBLY      22
++#define DHO_DEFAULT_IP_TTL            23
++#define DHO_PATH_MTU_AGING_TIMEOUT    24
++#define DHO_PATH_MTU_PLATEAU_TABLE    25
++#define DHO_INTERFACE_MTU             26
++#define DHO_ALL_SUBNETS_LOCAL         27
++#define DHO_BROADCAST_ADDRESS         28
++#define DHO_PERFORM_MASK_DISCOVERY    29
++#define DHO_MASK_SUPPLIER             30
++#define DHO_ROUTER_DISCOVERY          31
++#define DHO_ROUTER_SOLICITATION_ADDRESS       32
++#define DHO_STATIC_ROUTES             33
++#define DHO_TRAILER_ENCAPSULATION     34
++#define DHO_ARP_CACHE_TIMEOUT         35
++#define DHO_IEEE802_3_ENCAPSULATION   36
++#define DHO_DEFAULT_TCP_TTL           37
++#define DHO_TCP_KEEPALIVE_INTERVAL    38
++#define DHO_TCP_KEEPALIVE_GARBAGE     39
++#define DHO_NIS_DOMAIN                        40
++#define DHO_NIS_SERVERS                       41
++#define DHO_NTP_SERVERS                       42
++#define DHO_VENDOR_ENCAPSULATED_OPTIONS       43
++#define DHO_NETBIOS_NAME_SERVERS      44
++#define DHO_NETBIOS_DD_SERVER         45
++#define DHO_NETBIOS_NODE_TYPE         46
++#define DHO_NETBIOS_SCOPE             47
++#define DHO_FONT_SERVERS              48
++#define DHO_X_DISPLAY_MANAGER         49
++#define DHO_DHCP_REQUESTED_ADDRESS    50
++#define DHO_DHCP_LEASE_TIME           51
++#define DHO_DHCP_OPTION_OVERLOAD      52
++#define DHO_DHCP_MESSAGE_TYPE         53
++#define DHO_DHCP_SERVER_IDENTIFIER    54
++#define DHO_DHCP_PARAMETER_REQUEST_LIST       55
++#define DHO_DHCP_MESSAGE              56
++#define DHO_DHCP_MAX_MESSAGE_SIZE     57
++#define DHO_DHCP_RENEWAL_TIME         58
++#define DHO_DHCP_REBINDING_TIME               59
++#define DHO_VENDOR_CLASS_IDENTIFIER   60
++#define DHO_DHCP_CLIENT_IDENTIFIER    61
++#define DHO_NWIP_DOMAIN_NAME          62
++#define DHO_NWIP_SUBOPTIONS           63
++#define DHO_USER_CLASS                        77
++#define DHO_FQDN                      81
++#define DHO_DHCP_AGENT_OPTIONS                82
++#define DHO_SUBNET_SELECTION          118 /* RFC3011! */
++#define DHO_END                               255
++
++#endif /* CLICKNET_DHCP_H */
+diff -Nurb click-1.6.0/inst/include/clicknet/ether.h click-1.6.0-27/inst/include/clicknet/ether.h
+--- click-1.6.0/inst/include/clicknet/ether.h  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicknet/ether.h       2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,118 @@
++/* -*- mode: c; c-basic-offset: 4 -*- */
++#ifndef CLICKNET_ETHER_H
++#define CLICKNET_ETHER_H
++
++/*
++ * <clicknet/ether.h> -- Ethernet and ARP headers, based on one of the BSDs.
++ *
++ * Relevant RFCs include:
++ *   RFC826   Ethernet Address Resolution Protocol: or, Converting Network
++ *            Protocol Addresses to 48.bit Ethernet Address for Transmission
++ *            on Ethernet Hardware
++ *   RFC894   Standard for the transmission of IP datagrams over Ethernet
++ *            networks
++ * Also see the relevant IEEE 802 standards.
++ */
++
++CLICK_SIZE_PACKED_STRUCTURE(
++struct click_ether {,
++    uint8_t   ether_dhost[6];         /* 0-5   Ethernet destination address */
++    uint8_t   ether_shost[6];         /* 6-11  Ethernet source address      */
++    uint16_t  ether_type;             /* 12-13 Ethernet protocol            */
++});
++
++#define ETHERTYPE_IP          0x0800
++#define ETHERTYPE_ARP         0x0806
++#define ETHERTYPE_TRAIL               0x1000
++#define ETHERTYPE_8021Q               0x8100
++#define ETHERTYPE_IP6         0x86DD
++#define ETHERTYPE_GRID                0x7fff  /* wvlan_cs driver won't transmit frames with high bit of protocol number set */
++
++struct click_arp {            /* Offsets relative to ARP (Ethernet) header */
++    uint16_t  ar_hrd;         /* 0-1 (14-15)  hardware address format      */
++#define ARPHRD_ETHER    1     /*                Ethernet 10Mbps            */
++#define ARPHRD_IEEE802        6       /*                token ring                 */
++#define ARPHRD_ARCNET 7       /*                Arcnet                     */
++#define ARPHRD_FRELAY 15      /*                frame relay                */
++#define ARPHRD_STRIP  23      /*                Ricochet Starmode Radio    */
++#define ARPHRD_IEEE1394       24      /*                IEEE 1394 (FireWire)       */
++#define ARPHRD_80211    801   /*                IEEE 802.11 (wifi)         */
++    uint16_t  ar_pro;         /* 2-3 (16-17)  protocol address format      */
++    uint8_t   ar_hln;         /* 4   (18)     hardware address length      */
++    uint8_t   ar_pln;         /* 5   (19)     protocol address length      */
++    uint16_t  ar_op;          /* 6-7 (20-21)  opcode (command)             */
++#define ARPOP_REQUEST   1     /*                ARP request                */
++#define ARPOP_REPLY   2       /*                ARP reply                  */
++#define ARPOP_REVREQUEST 3    /*                reverse request: hw->proto */
++#define ARPOP_REVREPLY        4       /*                reverse reply              */
++#define ARPOP_INVREQUEST 8    /*                peer identification req    */
++#define ARPOP_INVREPLY        9       /*                peer identification reply  */
++};
++
++struct click_ether_arp {
++    struct click_arp ea_hdr;  /* 0-7   (14-21)  fixed-size ARP header      */
++    uint8_t   arp_sha[6];     /* 8-13  (22-27)  sender hardware address    */
++    uint8_t   arp_spa[4];     /* 14-17 (28-31)  sender protocol address    */
++    uint8_t   arp_tha[6];     /* 18-23 (32-37)  target hardware address    */
++    uint8_t   arp_tpa[4];     /* 24-27 (38-41)  target protocol address    */
++};
++
++
++/* Ethernet with VLAN (802.1q) */
++
++CLICK_SIZE_PACKED_STRUCTURE(
++struct click_ether_vlan {,
++    uint8_t     ether_dhost[6];               /* 0-5   Ethernet source address      */
++    uint8_t     ether_shost[6];               /* 6-11  Ethernet destination address */
++    uint16_t    ether_vlan_proto;     /* 12-13 == ETHERTYPE_8021Q           */
++    uint16_t    ether_vlan_tci;               /* 14-15 tag control information      */
++    uint16_t    ether_vlan_encap_proto;       /* 16-17 Ethernet protocol            */
++});
++
++
++#define ND_SOL 0x0087       /* Neighborhood Solicitation Message Type */
++#define ND_ADV 0x0088       /* Neighborhood Advertisement Message Type */
++
++/* define structure of Neighborhood Solicitation Message */
++struct click_nd_sol {
++    uint8_t type;
++    uint8_t code;
++    uint16_t checksum;
++    uint32_t reserved;
++    uint8_t nd_tpa[16];
++    uint8_t option_type;   /*option type: 1 (source link-layer add) */
++    uint8_t option_length; /*option length: 1 (in units of 8 octets) */
++    uint8_t nd_sha[6];    /*source link-layer address */
++};
++
++/* define structure of Neighborhood Advertisement Message -reply to multicast neighborhood solitation message */
++struct click_nd_adv {
++    uint8_t type;
++    uint8_t code;
++    uint16_t checksum;
++    uint8_t flags; /* bit 1: sender_is_router
++                      bit 2: solicited
++                    bit 3: override
++                    all other bits should be zero */
++    uint8_t reserved[3];
++    uint8_t nd_tpa[16];
++    uint8_t option_type;    /* option type: 2 (target link-layer add) */
++    uint8_t option_length;  /* option length: 1 (in units of 8 octets) */
++    uint8_t nd_tha[6];     /* source link-layer address */
++};
++
++
++/* define structure of Neighborhood Advertisement Message - reply to unicast neighborhood solitation message */
++struct click_nd_adv2 {
++    uint8_t type;
++    uint8_t code;
++    uint16_t checksum;
++    uint8_t flags; /* bit 1: sender_is_router
++                    bit 2: solicited
++                    bit 3: override
++                    all other bits should be zero */
++    uint8_t reserved[3];
++    uint8_t nd_tpa[16];
++};
++
++#endif
+diff -Nurb click-1.6.0/inst/include/clicknet/fddi.h click-1.6.0-27/inst/include/clicknet/fddi.h
+--- click-1.6.0/inst/include/clicknet/fddi.h   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicknet/fddi.h        2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,47 @@
++/* -*- mode: c; c-basic-offset: 4 -*- */
++#ifndef CLICKNET_FDDI_H
++#define CLICKNET_FDDI_H
++
++/*
++ * <clicknet/fddi.h> -- our own definitions of FDDI headers
++ * based on a file from Linux
++ */
++
++CLICK_SIZE_PACKED_STRUCTURE(
++struct click_fddi {,
++    uint8_t   fc;
++    uint8_t   daddr[6];
++    uint8_t   saddr[6];
++});
++
++CLICK_SIZE_PACKED_STRUCTURE(
++struct click_fddi_8022_1 {,
++    struct click_fddi h;
++    uint8_t   dsap;
++    uint8_t   ssap;
++    uint8_t   ctrl;
++});
++
++CLICK_SIZE_PACKED_STRUCTURE(
++struct click_fddi_8022_2 {,
++    struct click_fddi h;
++    uint8_t   dsap;
++    uint8_t   ssap;
++    uint8_t   ctrl1;
++    uint8_t   ctrl2;
++});
++
++CLICK_PACKED_STRUCTURE(
++struct click_fddi_snap {,
++    struct click_fddi h;
++    uint8_t   dsap;
++    uint8_t   ssap;
++    uint8_t   ctrl;
++    uint8_t   oui[3];
++    uint16_t  ether_type;
++});
++
++#define       FDDI_FC_LLC_ASYNC       0x50
++#define       FDDI_FC_LLCMASK         0xF0            /* length/class/format bits */
++
++#endif
+diff -Nurb click-1.6.0/inst/include/clicknet/icmp.h click-1.6.0-27/inst/include/clicknet/icmp.h
+--- click-1.6.0/inst/include/clicknet/icmp.h   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicknet/icmp.h        2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,124 @@
++/* -*- c-basic-offset: 4 -*- */
++#ifndef CLICKNET_ICMP_H
++#define CLICKNET_ICMP_H
++#include <clicknet/ip.h>
++
++/*
++ * <clicknet/icmp.h> -- ICMP packet definitions, based on FreeBSD.
++ *
++ * Relevant RFCs include:
++ *   RFC792   Internet Control Message Protocol
++ *   RFC1122  Requirements for Internet Hosts - Communication Layers
++ *   RFC1123  Requirements for Internet Hosts - Application and Support
++ *   RFC1812  Requirements for IP Version 4 Routers
++ */
++
++/* most icmp request types: ICMP_UNREACH, ICMP_SOURCEQUENCH, ICMP_TIMXCEED */
++struct click_icmp {
++    uint8_t   icmp_type;              /* 0     ICMP type (see below)       */
++    uint8_t   icmp_code;              /* 1     ICMP code (see below)       */
++    uint16_t  icmp_cksum;             /* 2-3   checksum                    */
++    uint32_t  padding;                /* 4-7   should be zero              */
++    /* followed by original IP header and initial portion of data */
++};
++
++/* header for types with sequence numbers: ICMP_ECHO, ICMP_ECHOREPLY,
++   ICMP_INFOREQ, ICMP_INFOREQREPLY */
++struct click_icmp_sequenced {
++    uint8_t   icmp_type;              /* 0     ICMP type (see below)       */
++    uint8_t   icmp_code;              /* 1     ICMP code (see below)       */
++    uint16_t  icmp_cksum;             /* 2-3   checksum                    */
++    uint16_t  icmp_identifier;        /* 4-5   flow identifier             */
++    uint16_t  icmp_sequence;          /* 6-7   sequence number in flow     */
++};
++
++/* ICMP_PARAMPROB header */
++struct click_icmp_paramprob {
++    uint8_t   icmp_type;              /* 0     ICMP type (see below)       */
++    uint8_t   icmp_code;              /* 1     ICMP code (see below)       */
++    uint16_t  icmp_cksum;             /* 2-3   checksum                    */
++    uint8_t   icmp_pointer;           /* 4     parameter pointer           */
++    uint8_t   padding[3];             /* 5-7   should be zero              */
++    /* followed by original IP header and initial portion of data */
++};
++
++/* Redirect header: ICMP_REDIRECT */
++struct click_icmp_redirect {
++    uint8_t   icmp_type;              /* 0     ICMP_REDIRECT (see below)   */
++    uint8_t   icmp_code;              /* 1     ICMP code (see below)       */
++    uint16_t  icmp_cksum;             /* 2-3   checksum                    */
++    struct in_addr icmp_gateway;      /* 4-7   address of gateway          */
++    /* followed by original IP header and initial portion of data */
++};
++
++/* Timestamp and TimestampReply header: ICMP_TSTAMP and ICMP_TSTAMPREPLY */
++struct click_icmp_tstamp { 
++    uint8_t   icmp_type;              /* 0     ICMP type (see below)       */
++    uint8_t   icmp_code;              /* 1     ICMP code (see below)       */
++    uint16_t  icmp_cksum;             /* 2-3   checksum                    */
++    uint16_t  icmp_identifier;        /* 4-5   flow identifier             */
++    uint16_t  icmp_sequence;          /* 6-7   sequence number in flow     */
++    uint32_t  icmp_originate;         /* 8-11  originate timestamp         */
++    uint32_t  icmp_receive;           /* 12-15 receive timestamp           */
++    uint32_t  icmp_transmit;          /* 16-19 transmit timestamp          */
++};
++
++/* Path MTU Discovery header: ICMP_UNREACH_NEEDFRAG */
++struct click_icmp_needfrag { 
++    uint8_t   icmp_type;              /* 0     ICMP_UNREACH (see below)    */
++    uint8_t   icmp_code;              /* 1     ICMP_UNREACH_NEEDFRAG       */
++    uint16_t  icmp_cksum;             /* 2-3   checksum                    */
++    uint16_t  padding;                /* 4-5   should be zero              */
++    uint16_t  icmp_nextmtu;           /* 6-7   Next-Hop MTU                */
++    /* followed by original IP header and initial portion of data */
++};
++
++#define click_icmp_unreach    click_icmp
++#define click_icmp_sourcequench       click_icmp
++#define click_icmp_timxceed   click_icmp
++#define click_icmp_echo               click_icmp_sequenced
++
++
++/* ICMP type definitions and (indented) code definitions */
++#define       ICMP_ECHOREPLY          0               /* echo reply                */
++#define       ICMP_UNREACH            3               /* dest unreachable, codes:  */
++#define         ICMP_UNREACH_NET              0       /*   bad net                 */
++#define         ICMP_UNREACH_HOST             1       /*   bad host                */
++#define         ICMP_UNREACH_PROTOCOL         2       /*   bad protocol            */
++#define         ICMP_UNREACH_PORT             3       /*   bad port                */
++#define         ICMP_UNREACH_NEEDFRAG         4       /*   IP_DF caused drop       */
++#define         ICMP_UNREACH_SRCFAIL          5       /*   src route failed        */
++#define         ICMP_UNREACH_NET_UNKNOWN      6       /*   unknown net             */
++#define         ICMP_UNREACH_HOST_UNKNOWN     7       /*   unknown host            */
++#define         ICMP_UNREACH_ISOLATED         8       /*   src host isolated       */
++#define         ICMP_UNREACH_NET_PROHIB       9       /*   net prohibited access   */
++#define         ICMP_UNREACH_HOST_PROHIB      10      /*   host prohibited access  */
++#define         ICMP_UNREACH_TOSNET           11      /*   bad tos for net         */
++#define         ICMP_UNREACH_TOSHOST          12      /*   bad tos for host        */
++#define         ICMP_UNREACH_FILTER_PROHIB    13      /*   admin prohib            */
++#define         ICMP_UNREACH_HOST_PRECEDENCE  14      /*   host prec violation     */
++#define         ICMP_UNREACH_PRECEDENCE_CUTOFF 15     /*   prec cutoff             */
++#define       ICMP_SOURCEQUENCH       4               /* packet lost, slow down    */
++#define       ICMP_REDIRECT           5               /* shorter route, codes:     */
++#define         ICMP_REDIRECT_NET             0       /*   for network             */
++#define         ICMP_REDIRECT_HOST            1       /*   for host                */
++#define         ICMP_REDIRECT_TOSNET          2       /*   for tos and net         */
++#define         ICMP_REDIRECT_TOSHOST         3       /*   for tos and host        */
++#define       ICMP_ECHO               8               /* echo service              */
++#define       ICMP_ROUTERADVERT       9               /* router advertisement      */
++#define       ICMP_ROUTERSOLICIT      10              /* router solicitation       */
++#define       ICMP_TIMXCEED           11              /* time exceeded, code:      */
++#define         ICMP_TIMXCEED_TRANSIT         0       /*   ttl==0 in transit       */
++#define         ICMP_TIMXCEED_REASSEMBLY      1       /*   ttl==0 in reassembly    */
++#define       ICMP_PARAMPROB          12              /* ip header bad             */
++#define         ICMP_PARAMPROB_ERRATPTR       0       /*   error at param ptr      */
++#define         ICMP_PARAMPROB_OPTABSENT      1       /*   req. opt. absent        */
++#define         ICMP_PARAMPROB_LENGTH         2       /*   bad length              */
++#define       ICMP_TSTAMP             13              /* timestamp request         */
++#define       ICMP_TSTAMPREPLY        14              /* timestamp reply           */
++#define       ICMP_IREQ               15              /* information request       */
++#define       ICMP_IREQREPLY          16              /* information reply         */
++#define       ICMP_MASKREQ            17              /* address mask request      */
++#define       ICMP_MASKREQREPLY       18              /* address mask reply        */
++
++#endif
+diff -Nurb click-1.6.0/inst/include/clicknet/icmp6.h click-1.6.0-27/inst/include/clicknet/icmp6.h
+--- click-1.6.0/inst/include/clicknet/icmp6.h  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicknet/icmp6.h       2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,114 @@
++/* -*- c-basic-offset: 4 -*- */
++#ifndef CLICKNET_ICMP6_H
++#define CLICKNET_ICMP6_H
++#include <clicknet/ip6.h>
++
++/*
++ * <clicknet/icmp6.h> -- our own definitions for ICMP6 packets
++ * Based on RFC 1885
++ */
++
++/* types for ICMP6 packets */
++#define ICMP6_UNREACH         1
++#define ICMP6_PKTTOOBIG               2
++#define ICMP6_TIMXCEED                3
++#define ICMP6_PARAMPROB               4
++
++#define ICMP6_ECHO            128
++#define ICMP6_ECHOREPLY               129
++#define ICMP6_MEMBERSHIPQUERY 130
++#define ICMP6_MEMBERSHIPREPORT        131
++#define ICMP6_MEMBERSHIPREDUCTION 132
++
++#define ICMP6_REDIRECT                137
++
++/* codes for spefic types of ICMP6 packets */
++/* ICMP6 Error Message - Type: 1 */
++#define ICMP6_UNREACH_NOROUTE 0
++#define ICMP6_UNREACH_ADMIN   1
++#define ICMP6_UNREACH_NOTNEIGHBOR 2
++#define ICMP6_UNREACH_ADDR    3
++#define ICMP6_UNREACH_NOPORT  4
++
++/* ICMP6 Time Exceeded Message - Type: 3 */
++#define ICMP6_TIMXCEED_TRANSIT        0
++#define ICMP6_TIMXCEED_REASSEMBLY 1
++
++/* ICMP6 Parameter Problem Message - Type: 4 */
++#define ICMP6_PARAMPROB_HEADER        0
++#define ICMP6_PARAMPROB_NEXTHEADER 1
++#define ICMP6_PARAMPROB_OPTION        2
++
++/* remove possible definitions for symbols */
++#undef icmp6_identifier
++#undef icmp6_sequence
++#undef icmp6_pointer
++#undef icmp6_maxdelay
++
++
++/* most ICMP6 request types */
++struct click_icmp6 { 
++    uint8_t icmp6_type;               /* one of the ICMP6_TYPE_*'s above */
++    uint8_t icmp6_code;               /* one of the ICMP6_CODE_*'s above */
++    uint16_t icmp6_cksum;             /* 16 1's comp csum */
++    uint32_t padding;                 /* should be zero */
++    /* followed by as much of invoking packet as will fit without the ICMPv6 packet exceeding 576 octets*/
++};
++
++/* packet too big header */
++struct click_icmp6_pkttoobig {
++    uint8_t icmp6_type;               /* one of the ICMP6_TYPE_*'s above */
++    uint8_t icmp6_code;               /* one of the ICMP6_CODE_*'s above */
++    uint16_t icmp6_cksum;             /* 16 1's comp csum */
++    uint32_t icmp6_mtusize;                   /* maximum packet size */
++  /* followed by as much of invoking packet as will fit without the ICMPv6 packet exceeding 576 octets*/
++};
++
++/* parameter problem header */
++struct click_icmp6_paramprob {
++    uint8_t icmp6_type;               /* one of the ICMP_TYPE_*'s above */
++    uint8_t icmp6_code;               /* one of the ICMP6_CODE_*'s above */
++    uint16_t icmp6_cksum;             /* 16 1's comp csum */
++    uint32_t icmp6_pointer;           /* which octect in orig. IP6 pkt was a problem */
++  /* followed by as much of invoking packet as will fit without the ICMPv6 packet exceeding 576 octets*/
++};
++
++
++/* struct for things with sequence numbers - echo request & echo reply msgs*/
++struct click_icmp6_sequenced {
++    uint8_t icmp6_type;               /* one of the ICMP6_TYPE_*'s above */
++    uint8_t icmp6_code;               /* one of the ICMP6_CODE_*'s above */
++    uint16_t icmp6_cksum;             /* 16 1's comp csum */
++    uint16_t icmp6_identifier;
++    uint16_t icmp6_sequence;
++    /* Followed by: */
++    /* Echo Request: zero or more octets of arbitary data */
++    /* Echo Reply: the data fromm the invoking Echo Request msg */
++};
++
++/* struct for group membership messages */
++struct click_icmp6_membership {
++    uint8_t icmp6_type;               /* one of the ICMP6_TYPE_*'s above */
++    uint8_t icmp6_code;               /* one of the ICMP6_CODE_*'s above */
++    uint16_t icmp6_cksum;             /* 16 1's comp csum */
++    uint16_t icmp6_maxdelay;   /* maximum response delay, in milliseconds */
++    uint16_t padding;
++    /* followed by multicast address */
++};
++
++/* struct for redirect messages */
++struct click_icmp6_redirect {
++    uint8_t icmp6_type;
++    uint8_t icmp6_code;  
++    uint16_t icmp6_cksum;
++    uint32_t padding;
++    struct click_in6_addr icmp6_target;
++    struct click_in6_addr icmp6_dst;
++};
++
++/* different struct names for each type of packet */
++#define click_icmp6_unreach   click_icmp6
++#define click_icmp6_timxceed  click_icmp6
++#define click_icmp6_echo      click_icmp6_sequenced
++
++#endif
+diff -Nurb click-1.6.0/inst/include/clicknet/ip.h click-1.6.0-27/inst/include/clicknet/ip.h
+--- click-1.6.0/inst/include/clicknet/ip.h     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicknet/ip.h  2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,157 @@
++/* -*- mode: c; c-basic-offset: 4 -*- */
++#ifndef CLICKNET_IP_H
++#define CLICKNET_IP_H
++/* get struct in_addr */
++#include <click/cxxprotect.h>
++CLICK_CXX_PROTECT
++#if CLICK_LINUXMODULE
++#include <linux/autoconf.h>
++# include <net/checksum.h>
++# include <linux/in.h>
++#else
++# include <sys/types.h>
++# include <netinet/in.h>
++#endif
++
++/*
++ * <clicknet/ip.h> -- IP header definitions, based on one of the BSDs.
++ *
++ * Relevant RFCs include:
++ *   RFC791   Internet Protocol
++ *   RFC3168  The Addition of Explicit Congestion Notification (ECN) to IP
++ */
++
++struct click_ip {
++#if CLICK_BYTE_ORDER == CLICK_BIG_ENDIAN
++    unsigned  ip_v : 4;               /* 0     version == 4                */
++    unsigned  ip_hl : 4;              /*       header length               */
++#elif CLICK_BYTE_ORDER == CLICK_LITTLE_ENDIAN
++    unsigned  ip_hl : 4;              /* 0     header length               */
++    unsigned  ip_v : 4;               /*       version == 4                */
++#else
++#   error "unknown byte order"
++#endif
++    uint8_t   ip_tos;                 /* 1     type of service             */
++#define IP_DSCPMASK   0xFC            /*         diffserv code point       */
++#define IP_ECNMASK    0x03            /*         ECN code point            */
++#define   IP_ECN_NOT_ECT  0x00                /*         not ECN capable transport */
++#define   IP_ECN_ECT1   0x01          /*         ECN capable transport     */
++#define   IP_ECN_ECT2   0x02          /*         ECN capable transport     */
++#define   IP_ECN_CE     0x03          /*         ECN congestion exp'd      */
++    uint16_t  ip_len;                 /* 2-3   total length                */
++    uint16_t  ip_id;                  /* 4-5   identification              */
++    uint16_t  ip_off;                 /* 6-7   fragment offset field       */
++#define       IP_RF           0x8000          /*         reserved fragment flag    */
++#define       IP_DF           0x4000          /*         don't fragment flag       */
++#define       IP_MF           0x2000          /*         more fragments flag       */
++#define       IP_OFFMASK      0X1FFF          /*         mask for fragmenting bits */
++    uint8_t   ip_ttl;                 /* 8     time to live                */
++    uint8_t   ip_p;                   /* 9     protocol                    */
++    uint16_t  ip_sum;                 /* 10-11 checksum                    */
++    struct in_addr ip_src;            /* 12-15 source address              */
++    struct in_addr ip_dst;            /* 16-19 destination address         */
++};
++
++/* ip_protocol */
++#define IP_PROTO_ICMP         1
++#define IP_PROTO_IGMP         2
++#define IP_PROTO_GGP          3
++#define IP_PROTO_IPIP         4
++#define IP_PROTO_ST           5
++#define IP_PROTO_TCP          6
++#define IP_PROTO_UCL          7
++#define IP_PROTO_EGP          8
++#define IP_PROTO_IGP          9
++#define IP_PROTO_BBN          10
++#define IP_PROTO_NVPII                11
++#define IP_PROTO_PUP          12
++#define IP_PROTO_ARGUS                13
++#define IP_PROTO_EMCON                14
++#define IP_PROTO_XNET         15
++#define IP_PROTO_CHAOS                16
++#define IP_PROTO_UDP          17
++#define IP_PROTO_MUX          18
++#define IP_PROTO_DCN          19
++#define IP_PROTO_HMP          20
++#define IP_PROTO_PRM          21
++#define IP_PROTO_XNS          22
++#define IP_PROTO_TRUNK1               23
++#define IP_PROTO_TRUNK2               24
++#define IP_PROTO_LEAF1                25
++#define IP_PROTO_LEAF2                26
++#define IP_PROTO_RDP          27
++#define IP_PROTO_IRTP         28
++#define IP_PROTO_ISOTP4               29
++#define IP_PROTO_NETBLT               30
++#define IP_PROTO_MFENSP               31
++#define IP_PROTO_MERIT                32
++#define IP_PROTO_DCCP         33
++#define IP_PROTO_ICMP6          58
++#define IP_PROTO_CFTP         62
++#define IP_PROTO_SATNET               64
++#define IP_PROTO_MITSUBNET    65
++#define IP_PROTO_RVD          66
++#define IP_PROTO_IPPC         67
++#define IP_PROTO_SATMON               69
++#define IP_PROTO_IPCV         71
++#define IP_PROTO_BRSATMON     76
++#define IP_PROTO_WBMON                78
++#define IP_PROTO_WBEXPAK      79
++#define IP_PROTO_SCTP         132
++
++#define IP_PROTO_NONE         257
++#define IP_PROTO_TRANSP               258
++#define IP_PROTO_TCP_OR_UDP   256
++#define IP_PROTO_PAYLOAD      259
++
++#define       IPOPT_EOL               0       /* end of option list */
++#define       IPOPT_NOP               1       /* no operation */
++#define IPOPT_RR              7       /* record packet route */
++#define IPOPT_TS              68      /* timestamp */
++#define IPOPT_SECURITY                130     /* provide s,c,h,tcc */
++#define IPOPT_LSRR            131     /* loose source route */
++#define IPOPT_SATID           136     /* satnet id */
++#define IPOPT_SSRR            137     /* strict source route */
++#define IPOPT_RA              148     /* router alert */
++
++#define IP_ISFRAG(iph)          (((iph)->ip_off & htons(IP_MF | IP_OFFMASK)) != 0)
++#define IP_FIRSTFRAG(iph) (((iph)->ip_off & htons(IP_OFFMASK)) == 0)
++
++
++/* checksum functions */
++
++#if !CLICK_LINUXMODULE
++uint16_t click_in_cksum(const unsigned char *addr, int len);
++uint16_t click_in_cksum_pseudohdr_raw(uint32_t csum, uint32_t src, uint32_t dst, int proto, int packet_len);
++#else
++# define click_in_cksum(addr, len) \
++              ip_compute_csum((unsigned char *)(addr), (len))
++# define click_in_cksum_pseudohdr_raw(csum, src, dst, proto, transport_len) \
++              csum_tcpudp_magic((src), (dst), (transport_len), (proto), ~(csum) & 0xFFFF)
++#endif
++uint16_t click_in_cksum_pseudohdr_hard(uint32_t csum, const struct click_ip *iph, int packet_len);
++
++/* use if you're not sure whether there are source routing options */
++static inline uint16_t
++click_in_cksum_pseudohdr(uint32_t csum, const struct click_ip *iph,
++                       int transport_len)
++{
++    if (iph->ip_hl == 5)
++      return click_in_cksum_pseudohdr_raw(csum, iph->ip_src.s_addr, iph->ip_dst.s_addr, iph->ip_p, transport_len);
++    else
++      return click_in_cksum_pseudohdr_hard(csum, iph, transport_len);
++}
++
++static inline void
++click_update_in_cksum(uint16_t *csum, uint16_t old_hw, uint16_t new_hw)
++{
++    /* incrementally update IP checksum according to RFC1624:
++       new_sum = ~(~old_sum + ~old_halfword + new_halfword) */
++    uint32_t sum = (~*csum & 0xFFFF) + (~old_hw & 0xFFFF) + new_hw;
++    sum = (sum & 0xFFFF) + (sum >> 16);
++    *csum = ~(sum + (sum >> 16));
++}
++
++CLICK_CXX_UNPROTECT
++#include <click/cxxunprotect.h>
++#endif
+diff -Nurb click-1.6.0/inst/include/clicknet/ip6.h click-1.6.0-27/inst/include/clicknet/ip6.h
+--- click-1.6.0/inst/include/clicknet/ip6.h    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicknet/ip6.h 2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,85 @@
++/* -*- mode: c; c-basic-offset: 4 -*- */
++#ifndef CLICKNET_IP6_H
++#define CLICKNET_IP6_H
++#include <clicknet/ip.h>
++#undef s6_addr
++#undef s6_addr16
++#undef s6_addr32
++#undef s6_addr64
++
++/*
++ * <clicknet/ip6.h> -- our own definitions of IP6 headers
++ * based on RFC 2460
++ */
++
++/* IPv6 address , same as from /usr/include/netinet/in.h  */
++struct click_in6_addr {
++    union {
++      uint8_t         u6_addr8[16];
++      uint16_t        u6_addr16[8];
++      uint32_t        u6_addr32[4];
++#ifdef HAVE_INT64_TYPES
++      uint64_t        u6_addr64[2];
++#endif
++    } in6_u;
++#define s6_addr in6_u.u6_addr8
++#define s6_addr16 in6_u.u6_addr16
++#define s6_addr32 in6_u.u6_addr32
++#define s6_addr64 in6_u.u6_addr64
++};
++
++struct click_ip6 {
++    union {
++      uint32_t ip6_un1_flow;          /* 0-3   version, class, flow label */
++      struct {
++#if CLICK_BYTE_ORDER == CLICK_LITTLE_ENDIAN
++          unsigned ip6_un2_tc : 4;    /* 0     top of traffic class */
++          unsigned ip6_un2_v : 4;     /*       version == 6 */
++#elif CLICK_BYTE_ORDER == CLICK_BIG_ENDIAN
++          unsigned ip6_un2_v : 4;     /* 0     version == 6 */
++          unsigned ip6_un2_tc : 4;    /*       top of traffic class */
++#else
++# error "unknown endianness!"
++#endif
++          uint8_t ip6_un2_flow[3];
++      } ip6_un2_vfc;
++    } ip6_flun;
++#define ip6_v                         ip6_flun.ip6_un2_vfc.ip6_un2_v
++#define ip6_tc                                ip6_flun.ip6_un2_vfc.ip6_un2_tc
++#define ip6_flow                      ip6_flun.ip6_un1_flow
++    uint16_t ip6_plen;                        /* 4-5   payload length */
++    uint8_t ip6_nxt;                  /* 6     next header */
++    uint8_t ip6_hlim;                 /* 7     hop limit  */
++    struct click_in6_addr ip6_src;    /* 8-23  source address */
++    struct click_in6_addr ip6_dst;    /* 24-39 dest address */
++};
++
++#define IP6_FLOW_MASK                 0x000FFFFFU
++#define IP6_FLOW_SHIFT                        0
++#define IP6_CLASS_MASK                        0x0FF00000U
++#define IP6_CLASS_SHIFT                       20
++#define IP6_DSCP_MASK                 0x0FC00000U
++#define IP6_DSCP_SHIFT                        22
++#define IP6_V_MASK                    0xF0000000U
++#define IP6_V_SHIFT                   28
++
++CLICK_DECLS
++
++uint16_t in6_fast_cksum(const struct click_in6_addr *saddr,
++                      const struct click_in6_addr *daddr,
++                      uint16_t len,
++                      uint8_t proto,
++                      uint16_t ori_csum,
++                      const unsigned char *addr,
++                      uint16_t len2);
++
++uint16_t in6_cksum(const struct click_in6_addr *saddr,
++                 const struct click_in6_addr *daddr,
++                 uint16_t len,
++                 uint8_t proto,
++                 uint16_t ori_csum,
++                 unsigned char *addr,
++                 uint16_t len2);
++
++CLICK_ENDDECLS
++#endif
+diff -Nurb click-1.6.0/inst/include/clicknet/llc.h click-1.6.0-27/inst/include/clicknet/llc.h
+--- click-1.6.0/inst/include/clicknet/llc.h    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicknet/llc.h 2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,153 @@
++/*
++ * <clicknet/llc.h> - contains the definitions for llc frames.
++ * It was originally taken from freebsd and modified for click use.
++ * John Bicket
++ */
++
++/*
++ * Copyright (c) 1988, 1993
++ *    The Regents of the University of California.  All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ *    notice, this list of conditions and the following disclaimer.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ *    notice, this list of conditions and the following disclaimer in the
++ *    documentation and/or other materials provided with the distribution.
++ * 3. All advertising materials mentioning features or use of this software
++ *    must display the following acknowledgement:
++ *    This product includes software developed by the University of
++ *    California, Berkeley and its contributors.
++ * 4. Neither the name of the University nor the names of its contributors
++ *    may be used to endorse or promote products derived from this software
++ *    without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
++ * SUCH DAMAGE.
++ *
++ *      @(#)if_llc.h  8.1 (Berkeley) 6/10/93
++ * $FreeBSD: src/sys/net/if_llc.h,v 1.7 1999/08/28 00:48:18 peter Exp $
++ */
++
++#ifndef CLICKNET_LLC_H
++#define CLICKNET_LLC_H
++
++/*
++ * IEEE 802.2 Link Level Control headers, for use in conjunction with
++ * 802.{3,4,5} media access control methods.
++ *
++ * Headers here do not use bit fields due to shortcomings in many
++ * compilers.
++ */
++
++struct click_llc {
++      uint8_t llc_dsap;
++      uint8_t llc_ssap;
++      union {
++          struct {
++              uint8_t control;
++              uint8_t format_id;
++              uint8_t _class;
++              uint8_t window_x2;
++          } type_u;
++          struct {
++              uint8_t num_snd_x2;
++              uint8_t num_rcv_x2;
++          } type_i;
++          struct {
++              uint8_t control;
++              uint8_t num_rcv_x2;
++          } type_s;
++          struct {
++              uint8_t control;
++              struct frmrinfo {
++                      uint8_t rej_pdu_0;
++                      uint8_t rej_pdu_1;
++                      uint8_t frmr_control;
++                      uint8_t frmr_control_ext;
++                      uint8_t frmr_cause;
++              } frmrinfo;
++          } type_frmr;
++          struct {
++              uint8_t control;
++              uint8_t org_code[3];
++              uint16_t ether_type;
++          } type_snap;
++          struct {
++              uint8_t control;
++              uint8_t control_ext;
++          } type_raw;
++      } llc_un;
++};
++
++#define llc_control            llc_un.type_u.control
++#define       llc_control_ext        llc_un.type_raw.control_ext
++#define llc_fid                llc_un.type_u.format_id
++#define llc_class              llc_un.type_u._class
++#define llc_window             llc_un.type_u.window_x2
++#define llc_frmrinfo           llc_un.type_frmr.frmrinfo
++#define llc_frmr_pdu0          llc_un.type_frmr.frmrinfo.rej_pdu0
++#define llc_frmr_pdu1          llc_un.type_frmr.frmrinfo.rej_pdu1
++#define llc_frmr_control       llc_un.type_frmr.frmrinfo.frmr_control
++#define llc_frmr_control_ext   llc_un.type_frmr.frmrinfo.frmr_control_ext
++#define llc_frmr_cause         llc_un.type_frmr.frmrinfo.frmr_control_ext
++
++/*
++ * Don't use sizeof(struct llc_un) for LLC header sizes
++ */
++#define LLC_ISFRAMELEN 4
++#define LLC_UFRAMELEN  3
++#define LLC_FRMRLEN    7
++
++/*
++ * Unnumbered LLC format commands
++ */
++#define LLC_UI                0x3
++#define LLC_UI_P      0x13
++#define LLC_DISC      0x43
++#define       LLC_DISC_P      0x53
++#define LLC_UA                0x63
++#define LLC_UA_P      0x73
++#define LLC_TEST      0xe3
++#define LLC_TEST_P    0xf3
++#define LLC_FRMR      0x87
++#define       LLC_FRMR_P      0x97
++#define LLC_DM                0x0f
++#define       LLC_DM_P        0x1f
++#define LLC_XID               0xaf
++#define LLC_XID_P     0xbf
++#define LLC_SABME     0x6f
++#define LLC_SABME_P   0x7f
++
++/*
++ * Supervisory LLC commands
++ */
++#define       LLC_RR          0x01
++#define       LLC_RNR         0x05
++#define       LLC_REJ         0x09
++
++/*
++ * Info format - dummy only
++ */
++#define       LLC_INFO        0x00
++
++/*
++ * ISO PDTR 10178 contains among others
++ */
++#define LLC_IP_LSAP   0x06
++#define LLC_X25_LSAP  0x7e
++#define LLC_SNAP_LSAP 0xaa
++#define LLC_ISO_LSAP  0xfe
++
++#endif
+diff -Nurb click-1.6.0/inst/include/clicknet/ppp.h click-1.6.0-27/inst/include/clicknet/ppp.h
+--- click-1.6.0/inst/include/clicknet/ppp.h    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicknet/ppp.h 2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,69 @@
++#ifndef CLICKNET_PPP_H
++#define CLICKNET_PPP_H
++
++/*
++ * <clicknet/ppp.h> -- our own definition of the PPP header, borrowed from
++ * tcpdump
++ *
++ * Copyright 1989 by Carnegie Mellon.
++ *
++ * Permission to use, copy, modify, and distribute this program for any
++ * purpose and without fee is hereby granted, provided that this copyright
++ * and permission notice appear on all copies and supporting documentation,
++ * the name of Carnegie Mellon not be used in advertising or publicity
++ * pertaining to distribution of the program without specific prior
++ * permission, and notice be given in supporting documentation that copying
++ * and distribution is by permission of Carnegie Mellon and Stanford
++ * University.  Carnegie Mellon makes no representations about the
++ * suitability of this software for any purpose.  It is provided "as is"
++ * without express or implied warranty.
++ */
++
++#define PPP_ADDRESS   0xff    /* The address byte value */
++#define PPP_CONTROL   0x03    /* The control byte value */
++
++/* Protocol numbers */
++#define PPP_IP                0x0021  /* Raw IP */
++#define PPP_OSI               0x0023  /* OSI Network Layer */
++#define PPP_NS                0x0025  /* Xerox NS IDP */
++#define PPP_DECNET    0x0027  /* DECnet Phase IV */
++#define PPP_APPLE     0x0029  /* Appletalk */
++#define PPP_IPX               0x002b  /* Novell IPX */
++#define PPP_VJC               0x002d  /* Van Jacobson Compressed TCP/IP */
++#define PPP_VJNC      0x002f  /* Van Jacobson Uncompressed TCP/IP */
++#define PPP_BRPDU     0x0031  /* Bridging PDU */
++#define PPP_STII      0x0033  /* Stream Protocol (ST-II) */
++#define PPP_VINES     0x0035  /* Banyan Vines */
++#define PPP_IPV6      0x0057  /* IPv6 */
++#define       PPP_COMP        0x00fd  /* Compressed Datagram */
++
++#define PPP_HELLO     0x0201  /* 802.1d Hello Packets */
++#define PPP_LUXCOM    0x0231  /* Luxcom */
++#define PPP_SNS               0x0233  /* Sigma Network Systems */
++#define PPP_MPLS_UCAST  0x0281  /* rfc 3032 */
++#define PPP_MPLS_MCAST  0x0283  /* rfc 3022 */
++
++#define PPP_IPCP      0x8021  /* IP Control Protocol */
++#define PPP_OSICP     0x8023  /* OSI Network Layer Control Protocol */
++#define PPP_NSCP      0x8025  /* Xerox NS IDP Control Protocol */
++#define PPP_DECNETCP  0x8027  /* DECnet Control Protocol */
++#define PPP_APPLECP   0x8029  /* Appletalk Control Protocol */
++#define PPP_IPXCP     0x802b  /* Novell IPX Control Protocol */
++#define PPP_STIICP    0x8033  /* Strean Protocol Control Protocol */
++#define PPP_VINESCP   0x8035  /* Banyan Vines Control Protocol */
++#define PPP_IPV6CP    0x8057  /* IPv6 Control Protocol */
++#define PPP_CCP               0x80fd  /* Compress Control Protocol */
++#define PPP_MPLSCP      0x8281  /* rfc 3022 */
++
++#define PPP_LCP               0xc021  /* Link Control Protocol */
++#define PPP_PAP               0xc023  /* Password Authentication Protocol */
++#define PPP_LQM               0xc025  /* Link Quality Monitoring */
++#define PPP_SPAP        0xc027
++#define PPP_CHAP      0xc223  /* Challenge Handshake Authentication Protocol */
++#define PPP_BACP      0xc02b  /* Bandwidth Allocation Control Protocol */
++#define PPP_BAP               0xc02d  /* BAP */
++#define PPP_MP                0xc03d  /* Multi-Link */
++#define PPP_SPAP_OLD    0xc123
++#define PPP_EAP         0xc227
++
++#endif
+diff -Nurb click-1.6.0/inst/include/clicknet/radiotap.h click-1.6.0-27/inst/include/clicknet/radiotap.h
+--- click-1.6.0/inst/include/clicknet/radiotap.h       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicknet/radiotap.h    2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,243 @@
++/* $FreeBSD: src/sys/net80211/ieee80211_radiotap.h,v 1.5 2005/01/22 20:12:05 sam Exp $ */
++/* $NetBSD: ieee80211_radiotap.h,v 1.10 2005/01/04 00:34:58 dyoung Exp $ */
++
++/*-
++ * Copyright (c) 2003, 2004 David Young.  All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ *    notice, this list of conditions and the following disclaimer.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ *    notice, this list of conditions and the following disclaimer in the
++ *    documentation and/or other materials provided with the distribution.
++ * 3. The name of David Young may not be used to endorse or promote
++ *    products derived from this software without specific prior
++ *    written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY DAVID YOUNG ``AS IS'' AND ANY
++ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
++ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++ * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL DAVID
++ * YOUNG BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
++ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
++ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
++ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
++ * OF SUCH DAMAGE.
++ */
++#ifndef _NET_IF_IEEE80211RADIOTAP_H_
++#define _NET_IF_IEEE80211RADIOTAP_H_
++
++/* A generic radio capture format is desirable. There is one for
++ * Linux, but it is neither rigidly defined (there were not even
++ * units given for some fields) nor easily extensible.
++ *
++ * I suggest the following extensible radio capture format. It is
++ * based on a bitmap indicating which fields are present.
++ *
++ * I am trying to describe precisely what the application programmer
++ * should expect in the following, and for that reason I tell the
++ * units and origin of each measurement (where it applies), or else I
++ * use sufficiently weaselly language ("is a monotonically nondecreasing
++ * function of...") that I cannot set false expectations for lawyerly
++ * readers.
++ */
++#if defined(__KERNEL__) || defined(_KERNEL)
++#ifndef DLT_IEEE802_11_RADIO
++#define       DLT_IEEE802_11_RADIO    127     /* 802.11 plus WLAN header */
++#endif
++#endif /* defined(__KERNEL__) || defined(_KERNEL) */
++
++/* XXX tcpdump/libpcap do not tolerate variable-length headers,
++ * yet, so we pad every radiotap header to 64 bytes. Ugh.
++ */
++#define IEEE80211_RADIOTAP_HDRLEN     64
++
++/* The radio capture header precedes the 802.11 header. */
++struct ieee80211_radiotap_header {
++      u_int8_t        it_version;     /* Version 0. Only increases
++                                       * for drastic changes,
++                                       * introduction of compatible
++                                       * new fields does not count.
++                                       */
++      u_int8_t        it_pad;
++      u_int16_t       it_len;         /* length of the whole
++                                       * header in bytes, including
++                                       * it_version, it_pad,
++                                       * it_len, and data fields.
++                                       */
++      u_int32_t       it_present;     /* A bitmap telling which
++                                       * fields are present. Set bit 31
++                                       * (0x80000000) to extend the
++                                       * bitmap by another 32 bits.
++                                       * Additional extensions are made
++                                       * by setting bit 31.
++                                       */
++} __attribute__((__packed__));
++
++/* Name                                 Data type       Units
++ * ----                                 ---------       -----
++ *
++ * IEEE80211_RADIOTAP_TSFT              u_int64_t       microseconds
++ *
++ *      Value in microseconds of the MAC's 64-bit 802.11 Time
++ *      Synchronization Function timer when the first bit of the
++ *      MPDU arrived at the MAC. For received frames, only.
++ *
++ * IEEE80211_RADIOTAP_CHANNEL           2 x u_int16_t   MHz, bitmap
++ *
++ *      Tx/Rx frequency in MHz, followed by flags (see below).
++ *
++ * IEEE80211_RADIOTAP_FHSS              u_int16_t       see below
++ *
++ *      For frequency-hopping radios, the hop set (first byte)
++ *      and pattern (second byte).
++ *
++ * IEEE80211_RADIOTAP_RATE              u_int8_t        500kb/s
++ *
++ *      Tx/Rx data rate
++ *
++ * IEEE80211_RADIOTAP_DBM_ANTSIGNAL     int8_t          decibels from
++ *                                                      one milliwatt (dBm)
++ *
++ *      RF signal power at the antenna, decibel difference from
++ *      one milliwatt.
++ *
++ * IEEE80211_RADIOTAP_DBM_ANTNOISE      int8_t          decibels from
++ *                                                      one milliwatt (dBm)
++ *
++ *      RF noise power at the antenna, decibel difference from one
++ *      milliwatt.
++ *
++ * IEEE80211_RADIOTAP_DB_ANTSIGNAL      u_int8_t        decibel (dB)
++ *
++ *      RF signal power at the antenna, decibel difference from an
++ *      arbitrary, fixed reference.
++ *
++ * IEEE80211_RADIOTAP_DB_ANTNOISE       u_int8_t        decibel (dB)
++ *
++ *      RF noise power at the antenna, decibel difference from an
++ *      arbitrary, fixed reference point.
++ *
++ * IEEE80211_RADIOTAP_LOCK_QUALITY      u_int16_t       unitless
++ *
++ *      Quality of Barker code lock. Unitless. Monotonically
++ *      nondecreasing with "better" lock strength. Called "Signal
++ *      Quality" in datasheets.  (Is there a standard way to measure
++ *      this?)
++ *
++ * IEEE80211_RADIOTAP_TX_ATTENUATION    u_int16_t       unitless
++ *
++ *      Transmit power expressed as unitless distance from max
++ *      power set at factory calibration.  0 is max power.
++ *      Monotonically nondecreasing with lower power levels.
++ *
++ * IEEE80211_RADIOTAP_DB_TX_ATTENUATION u_int16_t       decibels (dB)
++ *
++ *      Transmit power expressed as decibel distance from max power
++ *      set at factory calibration.  0 is max power.  Monotonically
++ *      nondecreasing with lower power levels.
++ *
++ * IEEE80211_RADIOTAP_DBM_TX_POWER      int8_t          decibels from
++ *                                                      one milliwatt (dBm)
++ *
++ *      Transmit power expressed as dBm (decibels from a 1 milliwatt
++ *      reference). This is the absolute power level measured at
++ *      the antenna port.
++ *
++ * IEEE80211_RADIOTAP_FLAGS             u_int8_t        bitmap
++ *
++ *      Properties of transmitted and received frames. See flags
++ *      defined below.
++ *
++ * IEEE80211_RADIOTAP_ANTENNA           u_int8_t        antenna index
++ *
++ *      Unitless indication of the Rx/Tx antenna for this packet.
++ *      The first antenna is antenna 0.
++ *
++ * IEEE80211_RADIOTAP_RX_FLAGS          u_int16_t       bitmap
++ *
++ *    Properties of received frames. See flags defined below.
++ *
++ * IEEE80211_RADIOTAP_TX_FLAGS          u_int16_t       bitmap
++ *
++ *    Properties of transmitted frames. See flags defined below.
++ *
++ * IEEE80211_RADIOTAP_RTS_RETRIES       u_int8_t        data
++ *
++ *    Number of rts retries a transmitted frame used.
++ * 
++ * IEEE80211_RADIOTAP_DATA_RETRIES      u_int8_t        data
++ *
++ *    Number of unicast retries a transmitted frame used.
++ * 
++ */
++enum ieee80211_radiotap_type {
++      IEEE80211_RADIOTAP_TSFT = 0,
++      IEEE80211_RADIOTAP_FLAGS = 1,
++      IEEE80211_RADIOTAP_RATE = 2,
++      IEEE80211_RADIOTAP_CHANNEL = 3,
++      IEEE80211_RADIOTAP_FHSS = 4,
++      IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
++      IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
++      IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
++      IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
++      IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
++      IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
++      IEEE80211_RADIOTAP_ANTENNA = 11,
++      IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
++      IEEE80211_RADIOTAP_DB_ANTNOISE = 13,
++      IEEE80211_RADIOTAP_RX_FLAGS = 14,
++      IEEE80211_RADIOTAP_TX_FLAGS = 15,
++      IEEE80211_RADIOTAP_RTS_RETRIES = 16,
++      IEEE80211_RADIOTAP_DATA_RETRIES = 17,
++      IEEE80211_RADIOTAP_EXT = 31
++};
++
++#if !defined(__KERNEL__) && !defined(_KERNEL)
++/* Channel flags. */
++#define IEEE80211_CHAN_TURBO    0x0010  /* Turbo channel */
++#define IEEE80211_CHAN_CCK      0x0020  /* CCK channel */
++#define IEEE80211_CHAN_OFDM     0x0040  /* OFDM channel */
++#define IEEE80211_CHAN_2GHZ     0x0080  /* 2 GHz spectrum channel. */
++#define IEEE80211_CHAN_5GHZ     0x0100  /* 5 GHz spectrum channel */
++#define IEEE80211_CHAN_PASSIVE  0x0200  /* Only passive scan allowed */
++#define       IEEE80211_CHAN_DYN      0x0400  /* Dynamic CCK-OFDM channel */
++#define       IEEE80211_CHAN_GFSK     0x0800  /* GFSK channel (FHSS PHY) */
++#endif /* !defined(__KERNEL__) && !defined(_KERNEL) */
++
++/* For IEEE80211_RADIOTAP_FLAGS */
++#define       IEEE80211_RADIOTAP_F_CFP        0x01    /* sent/received
++                                               * during CFP
++                                               */
++#define       IEEE80211_RADIOTAP_F_SHORTPRE   0x02    /* sent/received
++                                               * with short
++                                               * preamble
++                                               */
++#define       IEEE80211_RADIOTAP_F_WEP        0x04    /* sent/received
++                                               * with WEP encryption
++                                               */
++#define       IEEE80211_RADIOTAP_F_FRAG       0x08    /* sent/received
++                                               * with fragmentation
++                                               */
++#define       IEEE80211_RADIOTAP_F_FCS        0x10    /* frame includes FCS */
++#define       IEEE80211_RADIOTAP_F_DATAPAD    0x20    /* frame has padding between
++                                               * 802.11 header and payload
++                                               * (to 32-bit boundary)
++                                               */
++/* For IEEE80211_RADIOTAP_RX_FLAGS */
++#define       IEEE80211_RADIOTAP_F_RX_BADFCS  0x0001  /* frame failed crc check */
++
++/* For IEEE80211_RADIOTAP_TX_FLAGS */
++#define       IEEE80211_RADIOTAP_F_TX_FAIL    0x0001  /* failed due to excessive 
++                                               * retries */
++#define       IEEE80211_RADIOTAP_F_TX_CTS     0x0002  /* used cts 'protection' */
++#define       IEEE80211_RADIOTAP_F_TX_RTS     0x0004  /* used rts/cts handshake */
++
++
++
++#endif /* _NET_IF_IEEE80211RADIOTAP_H_ */
+diff -Nurb click-1.6.0/inst/include/clicknet/rfc1483.h click-1.6.0-27/inst/include/clicknet/rfc1483.h
+--- click-1.6.0/inst/include/clicknet/rfc1483.h        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicknet/rfc1483.h     2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,20 @@
++/* -*- mode: c; c-basic-offset: 4 -*- */
++#ifndef CLICKNET_RFC1483_H
++#define CLICKNET_RFC1483_H
++
++/*
++ * <clicknet/rfc1483.h>
++ */
++
++struct click_rfc1483 {
++    uint8_t   dsap;
++    uint8_t   ssap;
++    uint8_t   ui;
++    uint8_t   orgcode[3];
++    uint16_t  ether_type;
++};
++
++#define RFC1483_SNAP_IP_EXPECTED      "\xAA\xAA\x03\x00\x00\x00"
++#define RFC1483_SNAP_IP_EXPECTED_LEN  6
++
++#endif
+diff -Nurb click-1.6.0/inst/include/clicknet/tcp.h click-1.6.0-27/inst/include/clicknet/tcp.h
+--- click-1.6.0/inst/include/clicknet/tcp.h    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicknet/tcp.h 2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,78 @@
++/* -*- c-basic-offset: 4 -*- */
++#ifndef CLICKNET_TCP_H
++#define CLICKNET_TCP_H
++
++/*
++ * <clicknet/tcp.h> -- TCP header definitions, based on one of the BSDs.
++ *
++ * Relevant RFCs include:
++ *   RFC793   Transmission Control Protocol
++ *   RFC1323  TCP Extensions for High Performance
++ *   RFC2018  TCP Selective Acknowledgement Options
++ *   RFC2581  TCP Congestion Control
++ *   RFC2883  An Extension to the Selective Acknowledgement (SACK) Option
++ *            for TCP
++ *   RFC3168  The Addition of Explicit Congestion Notification (ECN) to IP
++ *   RFC3540  Robust Explicit Congestion Notification (ECN) Signaling with
++ *            Nonces
++ * among many others.  See "A Roadmap for TCP Specification Documents",
++ * currently an Internet-Draft.
++ */
++
++typedef       uint32_t tcp_seq_t;
++
++struct click_tcp {
++    uint16_t  th_sport;               /* 0-1   source port                 */
++    uint16_t  th_dport;               /* 2-3   destination port            */
++    tcp_seq_t th_seq;                 /* 4-7   sequence number             */
++    tcp_seq_t th_ack;                 /* 8-11  acknowledgement number      */
++#if CLICK_BYTE_ORDER == CLICK_LITTLE_ENDIAN
++    unsigned  th_flags2 : 4;          /* 12    more flags                  */
++    unsigned  th_off : 4;             /*       data offset in words        */
++#elif CLICK_BYTE_ORDER == CLICK_BIG_ENDIAN
++    unsigned  th_off : 4;             /* 12    data offset in words        */
++    unsigned  th_flags2 : 4;          /*       more flags                  */
++#else
++#   error "unknown byte order"
++#endif
++#define TH_NS         0x01            /*       in 'th_flags2'              */
++    uint8_t   th_flags;               /* 13    flags                       */
++#define       TH_FIN          0x01
++#define       TH_SYN          0x02
++#define       TH_RST          0x04
++#define       TH_PUSH         0x08
++#define       TH_ACK          0x10
++#define       TH_URG          0x20
++#define       TH_ECE          0x40
++#define       TH_CWR          0x80
++    uint16_t  th_win;                 /* 14-15 window                      */
++    uint16_t  th_sum;                 /* 16-17 checksum                    */
++    uint16_t  th_urp;                 /* 18-19 urgent pointer              */
++};
++
++/*
++ * TCP sequence number comparisons
++ */
++
++#define SEQ_LT(x,y)   ((int)((x)-(y)) < 0)
++#define SEQ_LEQ(x,y)  ((int)((x)-(y)) <= 0)
++#define SEQ_GT(x,y)   ((int)((x)-(y)) > 0)
++#define SEQ_GEQ(x,y)  ((int)((x)-(y)) >= 0)
++
++/*
++ * TCP options
++ */
++
++#define TCPOPT_EOL            0
++#define TCPOPT_NOP            1
++#define TCPOPT_MAXSEG         2
++#define TCPOLEN_MAXSEG                4
++#define TCPOPT_WSCALE         3
++#define TCPOLEN_WSCALE                3
++#define TCPOPT_SACK_PERMITTED 4
++#define TCPOLEN_SACK_PERMITTED        2
++#define TCPOPT_SACK           5
++#define TCPOPT_TIMESTAMP      8
++#define TCPOLEN_TIMESTAMP     10
++
++#endif
+diff -Nurb click-1.6.0/inst/include/clicknet/udp.h click-1.6.0-27/inst/include/clicknet/udp.h
+--- click-1.6.0/inst/include/clicknet/udp.h    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicknet/udp.h 2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,18 @@
++#ifndef CLICKNET_UDP_H
++#define CLICKNET_UDP_H
++
++/*
++ * <clicknet/udp.h> -- UDP header definitions, based on one of the BSDs.
++ *
++ * Relevant RFCs include:
++ *   RFC768   User Datagram Protocol
++ */
++
++struct click_udp {
++    uint16_t  uh_sport;               /* 0-1   source port                 */
++    uint16_t  uh_dport;               /* 2-3   destination port            */
++    uint16_t  uh_ulen;                /* 4-5   UDP length                  */
++    uint16_t  uh_sum;                 /* 6-7   checksum                    */
++};
++
++#endif
+diff -Nurb click-1.6.0/inst/include/clicknet/wifi.h click-1.6.0-27/inst/include/clicknet/wifi.h
+--- click-1.6.0/inst/include/clicknet/wifi.h   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicknet/wifi.h        2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,410 @@
++/*
++ * <clicknet/wifi.h> - contains the definitions for 802.11 frames. 
++ * It was originally taken from freebsd and modified for click use.
++ * John Bicket
++ */
++
++/*    $NetBSD: if_ieee80211.h,v 1.5 2000/07/21 04:47:40 onoe Exp $    */
++/* $FreeBSD: src/sys/net/if_ieee80211.h,v 1.3.2.3 2001/07/04 00:12:38 brooks Exp $ */
++
++#ifndef _CLICKNET_WIFI_H_
++#define _CLICKNET_WIFI_H_
++
++
++#define WIFI_EXTRA_MAGIC  0x7492001
++
++enum {
++  WIFI_EXTRA_TX                       = (1<<0), /* packet transmission */
++  WIFI_EXTRA_TX_FAIL          = (1<<1), /* transmission failed */
++  WIFI_EXTRA_TX_USED_ALT_RATE = (1<<2), /* used alternate bitrate */
++  WIFI_EXTRA_RX_ERR           = (1<<3), /* failed crc check */
++  WIFI_EXTRA_RX_MORE          = (1<<4), /* first part of a fragmented skb */
++  WIFI_EXTRA_NO_SEQ           = (1<<5),
++  WIFI_EXTRA_NO_TXF           = (1<<6),
++  WIFI_EXTRA_DO_RTS_CTS               = (1<<7),
++  WIFI_EXTRA_DO_CTS           = (1<<8)
++};
++
++
++
++CLICK_SIZE_PACKED_STRUCTURE(
++struct click_wifi_extra {,
++  uint32_t magic;
++  uint32_t flags;
++
++  uint8_t rssi;
++  uint8_t silence;
++  uint8_t power;
++  uint8_t pad;
++
++  uint8_t rate;                       /* bitrate in Mbps*2 */
++  uint8_t rate1;              /* bitrate in Mbps*2 */
++  uint8_t rate2;              /* bitrate in Mbps*2 */
++  uint8_t rate3;              /* bitrate in Mbps*2 */
++
++  uint8_t max_tries;
++  uint8_t max_tries1;
++  uint8_t max_tries2;
++  uint8_t max_tries3;
++
++  uint8_t virt_col;
++  uint8_t retries;
++  uint16_t len;
++});
++
++
++/*
++ * generic definitions for IEEE 802.11 frames
++ */
++#define WIFI_ADDR_LEN 6
++
++CLICK_SIZE_PACKED_STRUCTURE(
++struct click_wifi {,
++      uint8_t         i_fc[2];
++      uint8_t         i_dur[2];
++      uint8_t         i_addr1[WIFI_ADDR_LEN];
++      uint8_t         i_addr2[WIFI_ADDR_LEN];
++      uint8_t         i_addr3[WIFI_ADDR_LEN];
++      uint8_t         i_seq[2];
++});
++
++#define       WIFI_FC0_VERSION_MASK           0x03
++#define       WIFI_FC0_VERSION_0              0x00
++#define       WIFI_FC0_TYPE_MASK              0x0c
++#define       WIFI_FC0_TYPE_MGT               0x00
++#define       WIFI_FC0_TYPE_CTL               0x04
++#define       WIFI_FC0_TYPE_DATA              0x08
++
++#define       WIFI_FC0_SUBTYPE_MASK           0xf0
++/* for TYPE_MGT */
++#define       WIFI_FC0_SUBTYPE_ASSOC_REQ      0x00
++#define       WIFI_FC0_SUBTYPE_ASSOC_RESP     0x10
++#define       WIFI_FC0_SUBTYPE_REASSOC_REQ    0x20
++#define       WIFI_FC0_SUBTYPE_REASSOC_RESP   0x30
++#define       WIFI_FC0_SUBTYPE_PROBE_REQ      0x40
++#define       WIFI_FC0_SUBTYPE_PROBE_RESP     0x50
++#define       WIFI_FC0_SUBTYPE_BEACON         0x80
++#define       WIFI_FC0_SUBTYPE_ATIM           0x90
++#define       WIFI_FC0_SUBTYPE_DISASSOC       0xa0
++#define       WIFI_FC0_SUBTYPE_AUTH           0xb0
++#define       WIFI_FC0_SUBTYPE_DEAUTH         0xc0
++/* for TYPE_CTL */
++#define       WIFI_FC0_SUBTYPE_PS_POLL        0xa0
++#define       WIFI_FC0_SUBTYPE_RTS            0xb0
++#define       WIFI_FC0_SUBTYPE_CTS            0xc0
++#define       WIFI_FC0_SUBTYPE_ACK            0xd0
++#define       WIFI_FC0_SUBTYPE_CF_END         0xe0
++#define       WIFI_FC0_SUBTYPE_CF_END_ACK     0xf0
++/* for TYPE_DATA (bit combination) */
++#define WIFI_FC0_SUBTYPE_DATA         0x00
++#define       WIFI_FC0_SUBTYPE_CF_ACK         0x10
++#define       WIFI_FC0_SUBTYPE_CF_POLL        0x20
++#define       WIFI_FC0_SUBTYPE_CF_ACPL        0x30
++#define       WIFI_FC0_SUBTYPE_NODATA         0x40
++#define       WIFI_FC0_SUBTYPE_CFACK          0x50
++#define       WIFI_FC0_SUBTYPE_CFPOLL         0x60
++#define       WIFI_FC0_SUBTYPE_CF_ACK_CF_ACK  0x70
++#define WIFI_FC0_SUBTYPE_QOS               0x80
++#define WIFI_FC0_SUBTYPE_QOS_NULL          0xc0
++
++
++#define       WIFI_FC1_DIR_MASK               0x03
++#define       WIFI_FC1_DIR_NODS               0x00    /* STA->STA */
++#define       WIFI_FC1_DIR_TODS               0x01    /* STA->AP  */
++#define       WIFI_FC1_DIR_FROMDS             0x02    /* AP ->STA */
++#define       WIFI_FC1_DIR_DSTODS             0x03    /* AP ->AP  */
++
++#define       WIFI_FC1_MORE_FRAG              0x04
++#define       WIFI_FC1_RETRY                  0x08
++#define       WIFI_FC1_PWR_MGT                0x10
++#define       WIFI_FC1_MORE_DATA              0x20
++#define       WIFI_FC1_WEP                    0x40
++#define       WIFI_FC1_ORDER                  0x80
++
++#define       WIFI_NWID_LEN                   32
++
++/*
++ * BEACON management packets
++ *
++ *    octect timestamp[8]
++ *    octect beacon interval[2]
++ *    octect capability information[2]
++ *    information element
++ *            octect elemid
++ *            octect length
++ *            octect information[length]
++ */
++typedef uint8_t *     wifi_mgt_beacon_t;
++
++#define WIFI_BEACON_INTERVAL(beacon) \
++      (beacon[8] + (beacon[9] << 8))
++#define WIFI_BEACON_CAPABILITY(beacon) \
++      (beacon[10] + (beacon[11] << 8))
++
++#define       WIFI_CAPINFO_ESS                0x01
++#define       WIFI_CAPINFO_IBSS               0x02
++#define       WIFI_CAPINFO_CF_POLLABLE        0x04
++#define       WIFI_CAPINFO_CF_POLLREQ         0x08
++#define       WIFI_CAPINFO_PRIVACY            0x10
++
++
++
++#define WIFI_MAX_RETRIES 11
++
++#define WIFI_QOS_HAS_SEQ(wh) \
++        (((wh)->i_fc[0] & \
++          (WIFI_FC0_TYPE_MASK | WIFI_FC0_SUBTYPE_QOS)) == \
++          (WIFI_FC0_TYPE_DATA | WIFI_FC0_SUBTYPE_QOS))
++
++
++/*
++ * Management information elements
++ */
++struct wifi_information {
++      char    ssid[WIFI_NWID_LEN+1];
++      struct rates {
++              uint8_t         *p;
++      } rates;
++      struct fh {
++              uint16_t        dwell;
++              uint8_t         set;
++              uint8_t         pattern;
++              uint8_t         index;
++      } fh;
++      struct ds {
++              uint8_t         channel;
++      } ds;
++      struct cf {
++              uint8_t         count;
++              uint8_t         period;
++              uint8_t         maxdur[2];
++              uint8_t         dur[2];
++      } cf;
++      struct tim {
++              uint8_t         count;
++              uint8_t         period;
++              uint8_t         bitctl;
++              /* uint8_t      pvt[251]; The driver never needs to use this */
++      } tim;
++      struct ibss {
++              uint16_t        atim;
++      } ibss;
++      struct challenge {
++              uint8_t         *p;
++              uint8_t         len;
++      } challenge;
++};
++
++#define WIFI_RATES_MAXSIZE    15
++#define WIFI_NWID_MAXSIZE     32
++
++enum {
++  WIFI_ELEMID_SSID            = 0,
++  WIFI_ELEMID_RATES           = 1,
++  WIFI_ELEMID_FHPARMS         = 2,
++  WIFI_ELEMID_DSPARMS         = 3,
++  WIFI_ELEMID_CFPARMS         = 4,
++  WIFI_ELEMID_TIM             = 5,
++  WIFI_ELEMID_IBSSPARMS               = 6,
++  WIFI_ELEMID_CHALLENGE               = 16,
++  WIFI_ELEMID_ERP             = 42,
++  WIFI_ELEMID_XRATES          = 50,
++  WIFI_ELEMID_VENDOR          = 221
++};
++/*
++ * AUTH management packets
++ *
++ *    octect algo[2]
++ *    octect seq[2]
++ *    octect status[2]
++ *    octect chal.id
++ *    octect chal.length
++ *    octect chal.text[253]
++ */
++typedef uint8_t *     wifi_mgt_auth_t;
++
++#define WIFI_AUTH_ALGORITHM(auth) \
++    (auth[0] + (auth[1] << 8))
++#define WIFI_AUTH_TRANSACTION(auth) \
++    (auth[2] + (auth[3] << 8))
++#define WIFI_AUTH_STATUS(auth) \
++    (auth[4] + (auth[5] << 8))
++
++#define       WIFI_AUTH_ALG_OPEN              0x0000
++#define       WIFI_AUTH_ALG_SHARED            0x0001
++
++#define WIFI_AUTH_OPEN_REQUEST                1
++#define WIFI_AUTH_OPEN_RESPONSE               2
++
++#define WIFI_AUTH_SHARED_REQUEST      1
++#define WIFI_AUTH_SHARED_CHALLENGE    2
++#define WIFI_AUTH_SHARED_RESPONSE     3
++#define WIFI_AUTH_SHARED_PASS         4
++
++/*
++ * Reason codes
++ *
++ * Unlisted codes are reserved
++ */
++#define       WIFI_REASON_UNSPECIFIED         1
++#define       WIFI_REASON_AUTH_EXPIRE         2
++#define       WIFI_REASON_AUTH_LEAVE          3
++#define       WIFI_REASON_ASSOC_EXPIRE        4
++#define       WIFI_REASON_ASSOC_TOOMANY       5
++#define       WIFI_REASON_NOT_AUTHED          6  
++#define       WIFI_REASON_NOT_ASSOCED         7
++#define       WIFI_REASON_ASSOC_LEAVE         8
++#define       WIFI_REASON_ASSOC_NOT_AUTHED    9
++
++/*
++ * Status code
++ *
++ * Unlisted codes are reserved
++ */
++#define WIFI_STATUS_SUCCESS           0x0000
++#define       WIFI_STATUS_UNSPECIFIED         1
++#define       WIFI_STATUS_CAPINFO             10
++#define       WIFI_STATUS_NOT_ASSOCED         11
++#define       WIFI_STATUS_OTHER               12
++#define       WIFI_STATUS_ALG                 13
++#define       WIFI_STATUS_SEQUENCE            14
++#define       WIFI_STATUS_CHALLENGE           15
++#define       WIFI_STATUS_TIMEOUT             16
++#define       WIFI_STATUS_BASIC_RATES         18
++#define WIFI_STATUS_TOO_MANY_STATIONS   22
++#define       WIFI_STATUS_RATES               23
++#define WIFI_STATUS_SHORTSLOT_REQUIRED  25
++
++
++#define       WIFI_WEP_KEYLEN                 5       /* 40bit */
++#define       WIFI_WEP_IVLEN                  3       /* 24bit */
++#define       WIFI_WEP_KIDLEN                 1       /* 1 octet */
++#define       WIFI_WEP_CRCLEN                 4       /* CRC-32 */
++#define       WIFI_WEP_NKID                   4       /* number of key ids */
++
++#define WIFI_WEP_HEADERSIZE (WIFI_WEP_IVLEN + WIFI_WEP_KIDLEN)
++
++
++#define WIFI_WEP_NOSUP        -1
++#define WIFI_WEP_OFF  0
++#define WIFI_WEP_ON   1
++#define WIFI_WEP_MIXED        2
++
++#define WIFI_AUTH_NONE        0
++#define WIFI_AUTH_OPEN        1
++#define WIFI_AUTH_SHARED      2
++
++#define WIFI_POWERSAVE_NOSUP  -1
++#define WIFI_POWERSAVE_OFF            0
++#define WIFI_POWERSAVE_CAM            1
++#define WIFI_POWERSAVE_PSP            2
++#define WIFI_POWERSAVE_PSP_CAM        3
++#define WIFI_POWERSAVE_ON             WIFI_POWERSAVE_CAM
++
++#define       WIFI_RATE_BASIC                 0x80
++#define       WIFI_RATE_VAL                   0x7f
++
++#define WIFI_RATE_SIZE             0x08
++
++#define WIFI_SEQ_FRAG_MASK                 0x000f
++#define WIFI_SEQ_FRAG_SHIFT                0
++#define WIFI_SEQ_SEQ_MASK                  0xfff0
++#define WIFI_SEQ_SEQ_SHIFT                 4
++
++
++/*
++ * 802.11 protocol crypto-related definitions.
++ */
++#define       WIFI_KEYBUF_SIZE        16
++#define       WIFI_MICBUF_SIZE        (8+8)   /* space for both tx+rx keys */
++
++
++#ifndef MAX
++#define MAX(a, b) ((a) > (b) ? (a) : (b))
++#endif
++#ifndef MIN
++#define MIN(a, b) ((a) < (b) ? (a) : (b))
++#endif
++
++
++
++/* ARPHRD_IEEE80211_PRISM uses a bloated version of Prism2 RX frame header
++ * (from linux-wlan-ng) */
++
++/*
++ * For packet capture, define the same physical layer packet header
++ * structure as used in the wlan-ng driver
++ */
++enum {
++  DIDmsg_lnxind_wlansniffrm               = 0x00000044,
++  DIDmsg_lnxind_wlansniffrm_hosttime      = 0x00010044,
++  DIDmsg_lnxind_wlansniffrm_mactime       = 0x00020044,
++  DIDmsg_lnxind_wlansniffrm_channel       = 0x00030044,
++  DIDmsg_lnxind_wlansniffrm_rssi          = 0x00040044,
++  DIDmsg_lnxind_wlansniffrm_sq            = 0x00050044,
++  DIDmsg_lnxind_wlansniffrm_signal        = 0x00060044,
++  DIDmsg_lnxind_wlansniffrm_noise         = 0x00070044,
++  DIDmsg_lnxind_wlansniffrm_rate          = 0x00080044,
++  DIDmsg_lnxind_wlansniffrm_istx          = 0x00090044,
++  DIDmsg_lnxind_wlansniffrm_frmlen        = 0x000A0044
++};
++enum {
++        P80211ENUM_msgitem_status_no_value      = 0x00
++};
++enum {
++        P80211ENUM_truth_false                  = 0x00
++};
++
++
++typedef struct {
++  uint32_t did;
++  uint16_t status;
++  uint16_t len;
++  uint32_t data;
++} p80211item_uint32_t;
++
++typedef struct {
++  uint32_t msgcode;
++  uint32_t msglen;
++#define WLAN_DEVNAMELEN_MAX 16
++  uint8_t devname[WLAN_DEVNAMELEN_MAX];
++  p80211item_uint32_t hosttime;
++  p80211item_uint32_t mactime;
++  p80211item_uint32_t channel;
++  p80211item_uint32_t rssi;
++  p80211item_uint32_t sq;
++  p80211item_uint32_t signal;
++  p80211item_uint32_t noise;
++  p80211item_uint32_t rate;
++  p80211item_uint32_t istx;
++  p80211item_uint32_t frmlen;
++} wlan_ng_prism2_header;
++
++
++#define LWNG_CAP_DID_BASE   (4 | (1 << 6)) /* section 4, group 1 */
++#define LWNG_CAPHDR_VERSION 0x80211001
++
++#define WIFI_SLOT_B 20
++#define WIFI_DIFS_B 50
++#define WIFI_SIFS_B 10
++#define WIFI_ACK_B 304
++#define WIFI_PLCP_HEADER_LONG_B 192
++#define WIFI_PLCP_HEADER_SHORT_B 192
++
++#define WIFI_SLOT_A 9
++#define WIFI_DIFS_A 28
++#define WIFI_SIFS_A 9
++#define WIFI_ACK_A 30
++#define WIFI_PLCP_HEADER_A 20
++
++
++#define is_b_rate(b) ((b == 2) || (b == 4) || (b == 11) || (b == 22))
++
++#define WIFI_CW_MIN 31
++#define WIFI_CW_MAX 1023
++
++// 6-byte LLC header (last byte is terminating NUL)
++#define WIFI_LLC_HEADER               ((const uint8_t *) "\xAA\xAA\x03\x00\x00")
++#define WIFI_LLC_HEADER_LEN   6
++
++#endif /* !_CLICKNET_WIFI_H_ */
+diff -Nurb click-1.6.0/inst/include/clicktool/eclasst.hh click-1.6.0-27/inst/include/clicktool/eclasst.hh
+--- click-1.6.0/inst/include/clicktool/eclasst.hh      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicktool/eclasst.hh   2009-02-05 10:20:38.000000000 -0500
+@@ -0,0 +1,177 @@
++// -*- c-basic-offset: 4 -*-
++#ifndef CLICK_ECLASST_HH
++#define CLICK_ECLASST_HH
++#include <click/string.hh>
++#include <stddef.h>
++#include <click/vector.hh>
++#include <click/hashmap.hh>
++#include "etraits.hh"
++class ErrorHandler;
++class StringAccum;
++class RouterT;
++class ElementT;
++class VariableEnvironment;
++class ElementMap;
++class SynonymElementClassT;
++
++class ElementClassT { public:
++
++    ElementClassT(const String &);
++    virtual ~ElementClassT();
++
++    static void set_base_type_factory(ElementClassT *(*factory)(const String &));
++    static ElementClassT *base_type(const String &);
++    static ElementClassT *tunnel_type();
++
++    void use()                                { _use_count++; }
++    void unuse()                      { if (--_use_count <= 0) delete this; }
++
++    const String &name() const                { return _name; }
++    const char *printable_name_c_str();
++    virtual String landmark() const   { return String(); }
++
++    // 'primitive' means 'not tunnel, not compound, not synonym'.
++    virtual bool primitive() const    { return true; }
++    bool tunnel() const                       { return this == tunnel_type(); }
++    
++    const ElementTraits &traits() const;
++    virtual const ElementTraits *find_traits() const;
++
++    const String &port_count_code() const;
++    const String &processing_code() const;
++    const String &flow_code() const;
++    bool requires(const String &) const;
++    bool provides(const String &) const;
++    const String &package() const;
++    const String &documentation_name() const;
++    String documentation_url() const;
++
++    // where was this type declared?
++    virtual RouterT *declaration_scope() const;
++    virtual ElementClassT *overload_type() const;
++    
++    virtual void collect_types(HashMap<ElementClassT *, int> &) const;
++    virtual void collect_overloads(Vector<ElementClassT *> &) const;
++
++    static ElementT *expand_element(ElementT *, RouterT *, const String &prefix, VariableEnvironment &, ErrorHandler *);
++
++    virtual ElementClassT *resolve(int ninputs, int noutputs, Vector<String> &args, ErrorHandler *, const String &landmark);
++    virtual ElementT *complex_expand_element(ElementT *, const String &, Vector<String> &, RouterT *, const String &prefix, VariableEnvironment &, ErrorHandler *);
++
++    enum UnparseKind { UNPARSE_NAMED, UNPARSE_ANONYMOUS, UNPARSE_OVERLOAD };
++    virtual void unparse_declaration(StringAccum &, const String &, UnparseKind, ElementClassT *stop);
++    virtual String unparse_signature() const;
++    static String unparse_signature(const String &name, const Vector<String> *formal_types, int nargs, int ninputs, int noutputs);
++
++    virtual void *cast(const char *)          { return 0; }
++    virtual SynonymElementClassT *cast_synonym() { return 0; }
++    virtual RouterT *cast_router()            { return 0; }
++
++  private:
++
++    String _name;
++    int _use_count;
++
++    mutable int _traits_version;
++    mutable const ElementTraits *_traits;
++    
++    static ElementClassT *the_tunnel_type;
++    
++    ElementClassT(const ElementClassT &);
++    ElementClassT &operator=(const ElementClassT &);
++
++    ElementT *direct_expand_element(ElementT *, RouterT *, const String &prefix, VariableEnvironment &, ErrorHandler *);
++
++};
++
++class SynonymElementClassT : public ElementClassT { public:
++
++    SynonymElementClassT(const String &, ElementClassT *, RouterT *);
++
++    ElementClassT *synonym_of() const { return _eclass; }
++
++    ElementClassT *resolve(int, int, Vector<String> &, ErrorHandler *, const String &);
++    ElementT *complex_expand_element(ElementT *, const String &, Vector<String> &, RouterT *, const String &prefix, VariableEnvironment &, ErrorHandler *);
++    
++    void collect_types(HashMap<ElementClassT *, int> &) const;
++    void collect_overloads(Vector<ElementClassT *> &) const;
++
++    void unparse_declaration(StringAccum &, const String &, UnparseKind, ElementClassT *);
++
++    bool primitive() const            { return false; }
++    const ElementTraits *find_traits() const;
++    
++    RouterT *declaration_scope() const;
++    ElementClassT *overload_type() const { return _eclass; }
++    
++    SynonymElementClassT *cast_synonym() { return this; }
++    RouterT *cast_router();
++  
++  private:
++
++    ElementClassT *_eclass;
++    RouterT *_declaration_scope;
++
++};
++
++
++extern int32_t default_element_map_version;
++
++inline ElementClassT *
++ElementClassT::tunnel_type()
++{
++    assert(the_tunnel_type);
++    return the_tunnel_type;
++}
++
++inline const ElementTraits &
++ElementClassT::traits() const
++{
++    if (_traits_version != default_element_map_version) {
++      _traits_version = default_element_map_version;
++      _traits = find_traits();
++    }
++    return *_traits;
++}
++
++inline const String &
++ElementClassT::documentation_name() const
++{
++    return traits().documentation_name;
++}
++
++inline const String &
++ElementClassT::port_count_code() const
++{
++    return traits().port_count_code;
++}
++
++inline const String &
++ElementClassT::processing_code() const
++{
++    return traits().processing_code;
++}
++
++inline const String &
++ElementClassT::flow_code() const
++{
++    return traits().flow_code;
++}
++
++inline bool
++ElementClassT::requires(const String &req) const
++{
++    return traits().requires(req);
++}
++
++inline bool
++ElementClassT::provides(const String &req) const
++{
++    return traits().provides(req);
++}
++
++inline size_t hashcode(ElementClassT *e) {
++    return CLICK_NAME(hashcode)(static_cast<void *>(e));
++}
++
++#endif
+diff -Nurb click-1.6.0/inst/include/clicktool/elementmap.hh click-1.6.0-27/inst/include/clicktool/elementmap.hh
+--- click-1.6.0/inst/include/clicktool/elementmap.hh   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicktool/elementmap.hh        2009-02-05 10:20:38.000000000 -0500
+@@ -0,0 +1,181 @@
++// -*- c-basic-offset: 4 -*-
++#ifndef CLICK_ELEMENTMAP_HH
++#define CLICK_ELEMENTMAP_HH
++#include "etraits.hh"
++
++class ElementMap { public:
++
++    ElementMap();
++    ElementMap(const String&, ErrorHandler* = 0);
++    ~ElementMap();
++
++    static ElementMap* default_map()          { return the_element_map; }
++    static void push_default(ElementMap*);
++    static void pop_default();
++    
++    void use()                                        { _use_count++; }
++    void unuse()                              { _use_count--; }
++    
++    int size() const                          { return _e.size(); }
++    bool empty() const                                { return _e.size() == 1; }
++
++    const Traits& traits(const String&) const;
++    const Traits& traits_at(int i) const      { return _e[i]; }
++    bool has_traits(const String&) const;
++    int traits_index(const String&) const;
++
++    bool provides_global(const String&) const;
++
++    int definition_index(int i) const         { return _e[i].def_index; }
++    const String& source_directory(const Traits&) const;
++    const String& package(const Traits&) const;
++    const String& package(const String&) const;
++    String documentation_url(const Traits&) const;
++    
++    class TraitsIterator;
++    TraitsIterator begin_elements() const;
++
++    int add(const Traits&);
++    void remove_at(int);
++
++    void parse(const String& data, ErrorHandler* = 0);
++    void parse(const String& data, const String& package_name, ErrorHandler* = 0);
++    void parse_xml(const String& data, const String& package_name, ErrorHandler*);
++    bool parse_default_file(const String& default_path, ErrorHandler*);
++    bool parse_requirement_files(RouterT*, const String& default_path, ErrorHandler*, String* not_found = 0);
++    bool parse_all_files(RouterT*, const String& default_path, ErrorHandler*);
++    static void report_file_not_found(String default_path, bool found_default, ErrorHandler*);
++    String unparse(const String& package = String()) const;
++    String unparse_nonxml() const;
++
++    int check_completeness(const RouterT*, ErrorHandler*) const;
++    bool driver_indifferent(const RouterT*, int driver_mask = Driver::ALLMASK, ErrorHandler* = 0) const;
++    bool driver_compatible(const RouterT*, int driver, ErrorHandler* = 0) const;
++
++    int driver_mask() const           { return _driver_mask; }
++    void set_driver(int d)            { set_driver_mask(1 << d); }
++    void set_driver_mask(int);
++
++  private:
++
++    struct Globals {
++      String srcdir;
++      String compile_flags;
++      String package;
++      String dochref;
++    };
++    
++    Vector<Traits> _e;
++    HashMap<String, int> _name_map;
++
++    Vector<Globals> _def;
++
++    int _use_count;
++    int _driver_mask;
++
++    int get_driver_mask(const String&);
++    int driver_elt_index(int) const;
++
++    void collect_indexes(const RouterT*, Vector<int>&, ErrorHandler*) const;
++
++    static ElementMap* the_element_map;
++    static void bump_version();
++    void incr_version() const;
++
++};
++
++extern int32_t default_element_map_version;
++
++
++class ElementMap::TraitsIterator { public:
++
++    TraitsIterator(const ElementMap*, bool elements_only);
++
++    operator bool()                   { return _index < _emap->size(); }
++    void operator++(int);
++
++    const ElementTraits& value() const        { return _emap->traits_at(_index); }
++    int traits_index() const          { return _index; }
++
++  private:
++
++    const ElementMap* _emap;
++    int _index;
++    bool _elements_only;
++    
++};
++
++
++inline const Traits&
++ElementMap::traits(const String& name) const
++{
++    int i = _name_map[name];
++    if (!(_e[i].driver_mask & _driver_mask))
++      i = driver_elt_index(i);
++    return _e[i];
++}
++
++inline bool
++ElementMap::has_traits(const String& name) const
++{
++    int i = _name_map[name];
++    if (!(_e[i].driver_mask & _driver_mask) && i > 0)
++      i = driver_elt_index(i);
++    return i > 0;
++}
++
++inline int
++ElementMap::traits_index(const String& name) const
++{
++    int i = _name_map[name];
++    if (!(_e[i].driver_mask & _driver_mask) && i > 0)
++      i = driver_elt_index(i);
++    return i;
++}
++
++inline const String&
++ElementMap::source_directory(const ElementTraits& t) const
++{
++    return _def[t.def_index].srcdir;
++}
++
++inline const String&
++ElementMap::package(const ElementTraits& t) const
++{
++    return _def[t.def_index].package;
++}
++
++inline const String&
++ElementMap::package(const String& name) const
++{
++    return package(traits(name));
++}
++
++inline void
++ElementMap::bump_version()
++{
++    // ensure it stays positive
++    default_element_map_version =
++      (default_element_map_version + 1) & 0x7FFFFFFF;
++}
++
++inline void
++ElementMap::incr_version() const
++{
++    if (this == (const ElementMap *)the_element_map)
++      bump_version();
++}
++
++inline bool
++ElementMap::provides_global(const String& req) const
++{
++    return _e[0].provides(req);
++}
++
++inline ElementMap::TraitsIterator
++ElementMap::begin_elements() const
++{
++    return TraitsIterator(this, true);
++}
++
++#endif
+diff -Nurb click-1.6.0/inst/include/clicktool/elementt.hh click-1.6.0-27/inst/include/clicktool/elementt.hh
+--- click-1.6.0/inst/include/clicktool/elementt.hh     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicktool/elementt.hh  2009-02-05 10:20:38.000000000 -0500
+@@ -0,0 +1,208 @@
++// -*- c-basic-offset: 4 -*-
++#ifndef CLICK_ELEMENTT_HH
++#define CLICK_ELEMENTT_HH
++#include "eclasst.hh"
++
++struct ElementT {
++    
++    int flags;
++
++    ElementT();
++    ElementT(const String &, ElementClassT *, const String &, const String & = String());
++    ~ElementT();
++
++    RouterT *router() const           { return _owner; }
++    int eindex() const                        { return _eindex; }
++    
++    bool live() const                 { return _type; }
++    bool dead() const                 { return !_type; }
++    void kill();
++
++    const String &name() const                { return _name; }
++    const char *name_c_str() const    { return _name.c_str(); }
++    bool anonymous() const            { return _name && _name[0] == ';'; }
++    
++    ElementClassT *type() const               { return _type; }
++    String type_name() const          { return _type->name(); }
++    const char *type_name_c_str() const       { return _type->printable_name_c_str(); }
++    void set_type(ElementClassT *);
++
++    const String &config() const      { return _configuration; }
++    const String &configuration() const       { return _configuration; }
++    void set_config(const String &s)  { _configuration = s; }
++    void set_configuration(const String &s) { _configuration = s; }
++    String &config()                  { return _configuration; }
++    String &configuration()           { return _configuration; }
++    
++    const String &landmark() const    { return _landmark; }
++    void set_landmark(const String &s)        { _landmark = s; }
++    String &landmark()                        { return _landmark; }
++    
++    bool tunnel() const               { return _type==ElementClassT::tunnel_type(); }
++    inline bool tunnel_connected() const;
++    ElementT *tunnel_input() const    { return _tunnel_input; }
++    ElementT *tunnel_output() const   { return _tunnel_output; }
++
++    int ninputs() const                       { return _ninputs; }
++    int noutputs() const              { return _noutputs; }
++    
++    inline String declaration() const;
++
++    void *user_data() const           { return _user_data; }
++    void set_user_data(void *v)               { _user_data = v; }
++    void set_user_data(intptr_t v)    { _user_data = (void *)v; }
++
++    static bool name_ok(const String &, bool allow_anon_names = false);
++    static void redeclaration_error(ErrorHandler *, const char *type, String name, const String &landmark, const String &old_landmark);
++    
++  private:
++
++    int _eindex;
++    String _name;
++    ElementClassT *_type;
++    String _configuration;
++    String _landmark;
++    int _ninputs;
++    int _noutputs;
++    ElementT *_tunnel_input;
++    ElementT *_tunnel_output;
++    RouterT *_owner;
++    void *_user_data;
++
++    ElementT(const ElementT &);
++    ElementT &operator=(const ElementT &);
++
++    friend class RouterT;
++    
++};
++
++struct PortT {
++  
++    ElementT *element;
++    int port;
++
++    PortT()                           : element(0), port(-1) { }
++    PortT(ElementT *e, int p)         : element(e), port(p) { }
++
++    bool live() const                 { return element != 0; }
++    bool dead() const                 { return element == 0; }
++    RouterT *router() const           { return (element ? element->router() : 0); }
++
++    int eindex() const                        { return (element ? element->eindex() : -1); }
++    
++    int index_in(const Vector<PortT> &, int start = 0) const;
++    int force_index_in(Vector<PortT> &, int start = 0) const;
++
++    String unparse_input() const;
++    String unparse_output() const;
++    
++    static void sort(Vector<PortT> &);
++
++};
++
++class ConnectionT { public:
++
++    ConnectionT();
++    ConnectionT(const PortT &, const PortT &, const String & = String());
++    ConnectionT(const PortT &, const PortT &, const String &, int, int);
++
++    bool live() const                 { return _from.live(); }
++    bool dead() const                 { return _from.dead(); }
++    void kill()                               { _from.element = 0; }
++    
++    const PortT &from() const         { return _from; }
++    const PortT &to() const           { return _to; }
++    ElementT *from_element() const    { return _from.element; }
++    int from_eindex() const           { return _from.eindex(); }
++    int from_port() const             { return _from.port; }
++    ElementT *to_element() const      { return _to.element; }
++    int to_eindex() const             { return _to.eindex(); }
++    int to_port() const                       { return _to.port; }
++    const String &landmark() const    { return _landmark; }
++
++    int next_from() const             { return _next_from; }
++    int next_to() const                       { return _next_to; }
++    
++    String unparse() const;
++
++  private:
++
++    PortT _from;
++    PortT _to;
++    String _landmark;
++    int _next_from;
++    int _next_to;
++
++    friend class RouterT;
++    
++};
++
++
++inline void
++ElementT::kill()
++{
++    if (_type)
++      _type->unuse();
++    _type = 0;
++}
++
++inline void
++ElementT::set_type(ElementClassT *t)
++{
++    assert(t);
++    t->use();
++    if (_type)
++      _type->unuse();
++    _type = t;
++}
++
++inline String
++ElementT::declaration() const
++{
++    assert(_type);
++    return _name + " :: " + _type->name();
++}
++
++inline bool
++ElementT::tunnel_connected() const
++{
++    return _tunnel_input || _tunnel_output;
++}
++
++inline bool
++operator==(const PortT &h1, const PortT &h2)
++{
++    return h1.element == h2.element && h1.port == h2.port;
++}
++
++inline bool
++operator!=(const PortT &h1, const PortT &h2)
++{
++    return h1.element != h2.element || h1.port != h2.port;
++}
++
++inline bool
++operator<(const PortT &h1, const PortT &h2)
++{
++    return h1.eindex() < h2.eindex() || (h1.element == h2.element && h1.port < h2.port);
++}
++
++inline bool
++operator>(const PortT &h1, const PortT &h2)
++{
++    return h1.eindex() > h2.eindex() || (h1.element == h2.element && h1.port > h2.port);
++}
++
++inline bool
++operator<=(const PortT &h1, const PortT &h2)
++{
++    return h1.eindex() < h2.eindex() || (h1.element == h2.element && h1.port <= h2.port);
++}
++
++inline bool
++operator>=(const PortT &h1, const PortT &h2)
++{
++    return h1.eindex() > h2.eindex() || (h1.element == h2.element && h1.port >= h2.port);
++}
++
++#endif
+diff -Nurb click-1.6.0/inst/include/clicktool/etraits.hh click-1.6.0-27/inst/include/clicktool/etraits.hh
+--- click-1.6.0/inst/include/clicktool/etraits.hh      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicktool/etraits.hh   2009-02-05 10:20:38.000000000 -0500
+@@ -0,0 +1,85 @@
++// -*- c-basic-offset: 4 -*-
++#ifndef CLICK_ETRAITS_HH
++#define CLICK_ETRAITS_HH
++#include <click/string.hh>
++
++struct Driver {
++    enum {
++      USERLEVEL = 0, LINUXMODULE = 1, BSDMODULE = 2, NSMODULE = 3,
++      ALLMASK = 0xF, COUNT = 4
++    };
++    static const char *name(int);
++    static const char *requirement(int);
++    static int driver(const String&);
++    static int driver_mask(const String&);
++};
++    
++
++struct ElementTraits {
++    
++    String name;
++    String cxx;
++    String documentation_name;
++    String header_file;
++    String source_file;
++    String port_count_code;
++    String processing_code;
++    String flow_code;
++    String flags;
++    String methods;
++    String requirements;
++    String provisions;
++    String libs;
++    int def_index;
++    int driver_mask;
++    int name_next;
++
++    ElementTraits();
++
++    static const ElementTraits &null_traits() { return the_null_traits; }
++    
++    bool allows_driver(int d) const   { return (driver_mask&(1<<d)) != 0; }
++
++    bool requires(const String &) const;
++    bool provides(const String &) const;
++    int flag_value(int) const;
++    
++    String *component(int);
++    String *component(const String &);
++
++    void calculate_driver_mask();
++
++    enum {
++      D_NONE,
++      D_CLASS, D_CXX_CLASS, D_HEADER_FILE, D_PORT_COUNT, D_PROCESSING,
++      D_FLOW_CODE, D_FLAGS, D_METHODS, D_REQUIREMENTS, D_PROVISIONS, D_LIBS,
++      D_SOURCE_FILE, D_DOC_NAME,
++      D_FIRST_DEFAULT = D_CLASS, D_LAST_DEFAULT = D_LIBS
++    };
++    static int parse_component(const String &);
++    static ElementTraits make(int, ...);
++
++  private:
++    
++    static ElementTraits the_null_traits;
++
++    friend class ElementMap;
++    
++};
++
++typedef ElementTraits Traits;
++
++
++inline
++ElementTraits::ElementTraits()
++    : def_index(0), driver_mask(Driver::ALLMASK), name_next(0)
++{
++}
++
++inline String *
++ElementTraits::component(const String &s)
++{
++    return component(parse_component(s));
++}
++
++#endif
+diff -Nurb click-1.6.0/inst/include/clicktool/lexert.hh click-1.6.0-27/inst/include/clicktool/lexert.hh
+--- click-1.6.0/inst/include/clicktool/lexert.hh       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicktool/lexert.hh    2009-02-05 10:20:38.000000000 -0500
+@@ -0,0 +1,145 @@
++// -*- c-basic-offset: 4 -*-
++#ifndef CLICK_LEXERT_HH
++#define CLICK_LEXERT_HH
++#include <click/error.hh>
++#include <click/hashmap.hh>
++#include <stdio.h>
++class RouterT;
++class ElementClassT;
++class StringAccum;
++class LexerTInfo;
++class VariableEnvironment;
++
++enum {
++    lexEOF = 0,
++    lexIdent = 256,
++    lexVariable,
++    lexConfig,
++    lexArrow,
++    lex2Colon,
++    lex2Bar,
++    lex3Dot,
++    lexTunnel,
++    lexElementclass,
++    lexRequire,
++    lexDefine
++};
++
++class Lexeme { public:
++
++    Lexeme()                          : _kind(lexEOF) { }
++    Lexeme(int k, const String &s, const char *p) : _kind(k), _s(s), _pos(p) { }
++    
++    int kind() const                  { return _kind; }
++    bool is(int k) const              { return _kind == k; }
++    operator bool() const             { return _kind != lexEOF; }
++    
++    const String &string() const      { return _s; }
++    String &string()                  { return _s; }
++
++    const char *pos1() const          { return _pos; }
++    const char *pos2() const          { return _pos + _s.length(); }
++  
++  private:
++  
++    int _kind;
++    String _s;
++    const char *_pos;
++
++};
++
++class LexerT { public:
++
++    LexerT(ErrorHandler *, bool ignore_line_directives);
++    virtual ~LexerT();
++  
++    void reset(const String &data, const String &filename = String());
++    void clear();
++    void set_lexinfo(LexerTInfo *);
++    void ignore_line_directives(bool g)       { _ignore_line_directives = g; }
++
++    String remaining_text() const;
++    void set_remaining_text(const String &);
++  
++    const Lexeme &lex();
++    void unlex(const Lexeme &);
++    Lexeme lex_config();
++    String landmark() const;
++  
++    bool yport(int &port, const char *&pos1, const char *&pos2);
++    bool yelement(int &element, bool comma_ok);
++    void ydeclaration(const Lexeme &first_element = Lexeme());
++    bool yconnection();
++    void ycompound_arguments(RouterT *);
++    void yelementclass(const char *pos1);
++    void ytunnel();
++    ElementClassT *ycompound(String, const char *decl_pos1, const char *name_pos1);
++    void yrequire();
++    void yvar();
++    bool ystatement(bool nested = false);
++
++    RouterT *router() const           { return _router; }
++    RouterT *finish(const VariableEnvironment &global_scope);
++  
++  protected:
++  
++    // lexer
++    String _big_string;
++  
++    const char *_data;
++    const char *_end;
++    const char *_pos;
++  
++    String _filename;
++    String _original_filename;
++    unsigned _lineno;
++    bool _ignore_line_directives;
++    
++    bool get_data();
++    const char *skip_line(const char *);
++    const char *skip_slash_star(const char *);
++    const char *skip_backslash_angle(const char *);
++    const char *skip_quote(const char *, char);
++    const char *process_line_directive(const char *);
++    Lexeme next_lexeme();
++    static String lexeme_string(int);
++  
++    // parser
++    enum { TCIRCLE_SIZE = 8 };
++    Lexeme _tcircle[TCIRCLE_SIZE];
++    int _tpos;
++    int _tfull;
++  
++    // router
++    RouterT *_router;
++    
++    int _anonymous_offset;
++  
++    // what names represent types? (builds up linearly)
++    HashMap<String, ElementClassT *> _base_type_map;
++
++    // errors
++    LexerTInfo *_lexinfo;
++    ErrorHandler *_errh;
++
++    void vlerror(const char *, const char *, const String &, const char *, va_list);
++    int lerror(const char *, const char *, const char *, ...);
++    int lerror(const Lexeme &, const char *, ...);
++    String anon_element_name(const String &) const;
++
++    bool expect(int, bool report_error = true);
++    const char *next_pos() const;
++    
++    ElementClassT *element_type(const Lexeme &) const;
++    ElementClassT *force_element_type(const Lexeme &);
++    void ydefine(RouterT *, const String &name, const String &value, bool isformal, const Lexeme &, bool &scope_order_error);
++
++    LexerT(const LexerT &);
++    LexerT &operator=(const LexerT &);
++    int make_element(String, const Lexeme &, const char *decl_pos2, ElementClassT *, const String &, const String &);
++    int make_anon_element(const Lexeme &, const char *decl_pos2, ElementClassT *, const String &, const String &);
++    void connect(int f1, int p1, int p2, int f2);
++  
++};
++
++#endif
+diff -Nurb click-1.6.0/inst/include/clicktool/lexertinfo.hh click-1.6.0-27/inst/include/clicktool/lexertinfo.hh
+--- click-1.6.0/inst/include/clicktool/lexertinfo.hh   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicktool/lexertinfo.hh        2009-02-05 10:20:38.000000000 -0500
+@@ -0,0 +1,29 @@
++// -*- c-basic-offset: 4 -*-
++#ifndef CLICK_LEXERTINFO_HH
++#define CLICK_LEXERTINFO_HH
++#include "lexert.hh"
++class ElementT;
++class ElementClassT;
++
++class LexerTInfo { public:
++
++    LexerTInfo()              { }
++    virtual ~LexerTInfo()     { }
++    
++    virtual void notify_comment(const char *pos1, const char *pos2);
++    virtual void notify_error(const String &message, const char *pos1, const char *pos2);
++    virtual void notify_line_directive(const char *pos1, const char *pos2);
++    virtual void notify_keyword(const String &keyword, const char *pos1, const char *pos2);
++    virtual void notify_config_string(const char *pos1, const char *pos2);
++    virtual void notify_class_declaration(ElementClassT *, bool anonymous,
++              const char *pos1, const char *name_pos1, const char *pos2);
++    virtual void notify_class_extension(ElementClassT *, const char *pos1, const char *pos2);
++    virtual void notify_class_reference(ElementClassT *, const char *pos1, const char *pos2);
++    virtual void notify_element_declaration(
++              ElementT *e, const char *pos1, const char *name_pos2, const char *decl_pos2);
++    virtual void notify_element_reference(
++              ElementT *e, const char *pos1, const char *pos2);
++  
++};
++
++#endif
+diff -Nurb click-1.6.0/inst/include/clicktool/processingt.hh click-1.6.0-27/inst/include/clicktool/processingt.hh
+--- click-1.6.0/inst/include/clicktool/processingt.hh  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicktool/processingt.hh       2009-02-05 10:20:38.000000000 -0500
+@@ -0,0 +1,187 @@
++// -*- c-basic-offset: 4 -*-
++#ifndef CLICK_PROCESSINGT_HH
++#define CLICK_PROCESSINGT_HH
++#include "routert.hh"
++class ElementMap;
++class Bitvector;
++
++class ProcessingT { public:
++
++    enum ProcessingCode { VAGNOSTIC = 0, VPUSH = 1, VPULL = 2 };
++    static const char processing_letters[];
++
++    ProcessingT();
++    ProcessingT(const RouterT *, ErrorHandler *);
++    ProcessingT(const RouterT *, ElementMap *, ErrorHandler *);
++    ProcessingT(const RouterT *, ElementMap *, bool flatten, ErrorHandler *);
++    int reset(const RouterT *, ElementMap *, bool flatten, ErrorHandler *);
++    void resolve_agnostics(); // change remaining AGNOSTICs to PUSH
++
++    int nelements() const     { return _input_pidx.size() - 1; }
++    int ninput_pidx() const   { return _input_pidx.back(); }
++    int noutput_pidx() const  { return _output_pidx.back(); }
++
++    int input_pidx(const ConnectionT &) const;
++    int output_pidx(const ConnectionT &) const;
++    int input_pidx(const PortT &) const;
++    int output_pidx(const PortT &) const;
++    int input_pidx(int ei, int p = 0) const   { return _input_pidx[ei]+p; }
++    int output_pidx(int ei, int p = 0) const  { return _output_pidx[ei]+p; }
++    PortT input_port(int pidx) const;
++    PortT output_port(int pidx) const;
++
++    int input_processing(const PortT &) const;
++    int output_processing(const PortT &) const;
++    int input_processing(int ei, int p) const;
++    int output_processing(int ei, int p) const;
++    bool input_is_pull(int ei, int p) const;
++    bool output_is_push(int ei, int p) const;
++    const PortT &input_connection(int ei, int p) const;
++    const PortT &output_connection(int ei, int p) const;
++
++    bool same_processing(int, int) const;
++
++    String processing_code(const ElementT *) const;
++    
++    static int forward_flow(const String &code, int input_port, int noutputs, Bitvector *, ErrorHandler * = 0);
++    static int forward_flow(const PortT &, Bitvector *, ErrorHandler * = 0);
++    static int backward_flow(const String &code, int output_port, int ninputs, Bitvector *, ErrorHandler * = 0);
++    static int backward_flow(const PortT &, Bitvector *, ErrorHandler * = 0);
++
++    void set_connected_inputs(const Bitvector &, Bitvector &) const;
++    void set_connected_outputs(const Bitvector &, Bitvector &) const;
++    void set_connected_inputs(const PortT &, Bitvector &) const;
++    void set_connected_outputs(const PortT &, Bitvector &) const;
++    void set_flowed_inputs(const Bitvector &, Bitvector &, ErrorHandler* = 0) const;
++    void set_flowed_outputs(const Bitvector &, Bitvector &, ErrorHandler* = 0) const;
++
++    void forward_reachable_inputs(Bitvector &, ErrorHandler * = 0) const;
++
++    String compound_processing_code() const;
++    String compound_flow_code(ErrorHandler * = 0) const;
++    
++  private:
++
++    const RouterT *_router;
++
++    Vector<int> _input_pidx;
++    Vector<int> _output_pidx;
++    Vector<const ElementT *> _input_elt;
++    Vector<const ElementT *> _output_elt;
++    Vector<int> _input_processing;
++    Vector<int> _output_processing;
++    Vector<PortT> _connected_input;
++    Vector<PortT> _connected_output;
++
++    void create_pidx(ErrorHandler *);
++
++    void initial_processing_for(int, ErrorHandler *);
++    void initial_processing(ErrorHandler *);
++    void processing_error(const ConnectionT &, int, ErrorHandler *);
++    void check_processing(ErrorHandler *);
++    void check_connections(ErrorHandler *);
++
++};
++
++
++inline int
++ProcessingT::input_pidx(const PortT &h) const
++{
++    assert(h.router() == _router);
++    return input_pidx(h.eindex(), h.port);
++}
++
++inline int
++ProcessingT::output_pidx(const PortT &h) const
++{
++    assert(h.router() == _router);
++    return output_pidx(h.eindex(), h.port);
++}
++
++inline int
++ProcessingT::input_pidx(const ConnectionT &c) const
++{
++    return input_pidx(c.to());
++}
++
++inline int
++ProcessingT::output_pidx(const ConnectionT &c) const
++{
++    return output_pidx(c.from());
++}
++
++inline PortT
++ProcessingT::input_port(int pidx) const
++{
++    const ElementT *e = _input_elt[pidx];
++    return PortT(const_cast<ElementT *>(e), pidx - _input_pidx[e->eindex()]);
++}
++
++inline PortT
++ProcessingT::output_port(int pidx) const
++{
++    const ElementT *e = _output_elt[pidx];
++    return PortT(const_cast<ElementT *>(e), pidx - _output_pidx[e->eindex()]);
++}
++
++inline int
++ProcessingT::input_processing(const PortT &h) const
++{
++    return _input_processing[input_pidx(h)];
++}
++
++inline int
++ProcessingT::output_processing(const PortT &h) const
++{
++    return _output_processing[output_pidx(h)];
++}
++
++inline int
++ProcessingT::input_processing(int i, int p) const
++{
++    return _input_processing[input_pidx(i, p)];
++}
++
++inline int
++ProcessingT::output_processing(int i, int p) const
++{
++    return _output_processing[output_pidx(i, p)];
++}
++
++inline bool
++ProcessingT::input_is_pull(int i, int p) const
++{
++    return input_processing(i, p) == VPULL;
++}
++
++inline bool
++ProcessingT::output_is_push(int i, int p) const
++{
++    return output_processing(i, p) == VPUSH;
++}
++
++inline const PortT &
++ProcessingT::input_connection(int i, int p) const
++{
++    return _connected_input[input_pidx(i, p)];
++}
++
++inline const PortT &
++ProcessingT::output_connection(int i, int p) const
++{
++    return _connected_output[output_pidx(i, p)];
++}
++
++inline int
++ProcessingT::forward_flow(const PortT &p, Bitvector *bv, ErrorHandler *errh)
++{
++    return forward_flow(p.element->type()->flow_code(), p.port, p.element->noutputs(), bv, errh);
++}
++
++inline int
++ProcessingT::backward_flow(const PortT &p, Bitvector *bv, ErrorHandler *errh)
++{
++    return backward_flow(p.element->type()->flow_code(), p.port, p.element->ninputs(), bv, errh);
++}
++
++#endif
+diff -Nurb click-1.6.0/inst/include/clicktool/routert.hh click-1.6.0-27/inst/include/clicktool/routert.hh
+--- click-1.6.0/inst/include/clicktool/routert.hh      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicktool/routert.hh   2009-02-05 10:20:38.000000000 -0500
+@@ -0,0 +1,462 @@
++// -*- c-basic-offset: 4 -*-
++#ifndef CLICK_ROUTERT_HH
++#define CLICK_ROUTERT_HH
++#include "elementt.hh"
++#include "eclasst.hh"
++#include <click/error.hh>
++#include <click/hashmap.hh>
++#include <click/archive.hh>
++#include <click/variableenv.hh>
++typedef HashMap<String, int> StringMap;
++
++class RouterT : public ElementClassT { public:
++
++    RouterT();
++    RouterT(const String &name, const String &landmark, RouterT *declaration_scope = 0);
++    virtual ~RouterT();
++
++    // ELEMENTS
++    int nelements() const             { return _elements.size(); }
++    int n_live_elements() const               { return _n_live_elements; }
++    
++    inline const ElementT *element(const String &) const;
++    inline ElementT *element(const String &);
++    int eindex(const String &s) const { return _element_name_map[s]; }
++    
++    const ElementT *element(int i) const{ return _elements[i]; }
++    ElementT *element(int i)          { return _elements[i]; }
++    
++    class iterator;
++    class const_iterator;
++    class type_iterator;
++    class const_type_iterator;
++    inline iterator begin_elements();
++    inline const_iterator begin_elements() const;
++    inline type_iterator begin_elements(ElementClassT *);
++    inline const_type_iterator begin_elements(ElementClassT *) const;
++    inline iterator end_elements();
++    inline const_iterator end_elements() const;
++    
++    bool elive(int i) const           { return _elements[i]->live(); }
++    bool edead(int i) const           { return _elements[i]->dead(); }
++    inline String ename(int) const;
++    inline ElementClassT *etype(int) const;
++    inline String etype_name(int) const;
++    
++    ElementT *get_element(const String &name, ElementClassT *, const String &configuration, const String &landmark);
++    ElementT *add_anon_element(ElementClassT *, const String &configuration = String(), const String &landmark = String());
++    void change_ename(int, const String &);
++    void deanonymize_elements();
++    void free_element(ElementT *);
++    void free_dead_elements();
++
++    void set_new_eindex_collector(Vector<int> *v) { _new_eindex_collector=v; }
++
++    // TYPES
++    ElementClassT *locally_declared_type(const String &) const;
++    inline ElementClassT *declared_type(const String &) const;
++    void add_declared_type(ElementClassT *, bool anonymous);
++
++    void collect_types(HashMap<ElementClassT *, int> &) const;
++    void collect_locally_declared_types(Vector<ElementClassT *> &) const;
++    void collect_overloads(Vector<ElementClassT *> &) const;
++
++    // CONNECTIONS
++    int nconnections() const                  { return _conn.size(); }
++    const Vector<ConnectionT> &connections() const { return _conn; }
++    const ConnectionT &connection(int c) const        { return _conn[c]; }
++    bool connection_live(int c) const         { return _conn[c].live(); }
++
++    void add_tunnel(const String &, const String &, const String &, ErrorHandler *);
++
++    bool add_connection(const PortT &, const PortT &, const String &landmark = String());
++    inline bool add_connection(ElementT *, int, ElementT *, int, const String &landmark = String());
++    void kill_connection(int);
++    void kill_bad_connections();
++    void compact_connections();
++
++    inline bool has_connection(const PortT &, const PortT &) const;
++    int find_connection(const PortT &, const PortT &) const;
++    void change_connection_to(int, PortT);
++    void change_connection_from(int, PortT);
++    bool find_connection_from(const PortT &, PortT &) const;
++    void find_connections_from(const PortT &, Vector<PortT> &) const;
++    void find_connections_from(const PortT &, Vector<int> &) const;
++    void find_connections_to(const PortT &, Vector<PortT> &) const;
++    void find_connections_to(const PortT &, Vector<int> &) const;
++    void find_connection_vector_from(ElementT *, Vector<int> &) const;
++    void find_connection_vector_to(ElementT *, Vector<int> &) const;
++
++    bool insert_before(const PortT &, const PortT &);
++    bool insert_after(const PortT &, const PortT &);
++    inline bool insert_before(ElementT *, const PortT &);
++    inline bool insert_after(ElementT *, const PortT &);
++
++    // REQUIREMENTS
++    void add_requirement(const String &);
++    void remove_requirement(const String &);
++    const Vector<String> &requirements() const        { return _requirements; }
++
++    // ARCHIVE
++    void add_archive(const ArchiveElement &);
++    int narchive() const                      { return _archive.size(); }
++    int archive_index(const String &s) const  { return _archive_map[s]; }
++    const Vector<ArchiveElement> &archive() const{ return _archive; }
++    ArchiveElement &archive(int i)            { return _archive[i]; }
++    const ArchiveElement &archive(int i) const        { return _archive[i]; }
++    inline ArchiveElement &archive(const String &s);
++    inline const ArchiveElement &archive(const String &s) const;
++
++    void add_components_to(RouterT *, const String &prefix = String()) const;
++
++    // CHECKING, FLATTENING AND EXPANDING
++    void check() const;
++
++    void remove_duplicate_connections();
++    void remove_dead_elements(ErrorHandler * = 0);
++
++    void remove_compound_elements(ErrorHandler *, bool expand_vars);
++    void remove_tunnels(ErrorHandler * = 0);
++
++    void expand_into(RouterT *, const String &prefix, VariableEnvironment &, ErrorHandler *);
++    void flatten(ErrorHandler *, bool expand_vars = false);
++
++    // UNPARSING
++    void unparse(StringAccum &, const String & = String()) const;
++    void unparse_requirements(StringAccum &, const String & = String()) const;
++    void unparse_defines(StringAccum &, const String & = String()) const;
++    void unparse_declarations(StringAccum &, const String & = String()) const;
++    void unparse_connections(StringAccum &, const String & = String()) const;
++    String configuration_string() const;
++
++    // COMPOUND ELEMENTS
++    String landmark() const           { return _type_landmark; }
++    const ElementTraits *find_traits() const;
++    
++    bool primitive() const            { return false; }
++    
++    int nformals() const              { return _nformals; }
++    const VariableEnvironment &scope() const { return _scope; }
++    inline bool define(const String &name, const String &value, bool isformal);
++    inline void redefine(const VariableEnvironment &);
++    int ninputs() const                       { return _ninputs; }
++    int noutputs() const              { return _noutputs; }
++    
++    RouterT *declaration_scope() const        { return _declaration_scope; }
++    ElementClassT *overload_type() const { return _overload_type; }
++    void set_overload_type(ElementClassT *);
++
++    int finish_type(ErrorHandler *);
++    
++    ElementClassT *resolve(int, int, Vector<String> &, ErrorHandler *, const String &landmark);
++    ElementT *complex_expand_element(ElementT *, const String &, Vector<String> &, RouterT *, const String &prefix, VariableEnvironment &, ErrorHandler *);
++
++    String unparse_signature() const;
++    void unparse_declaration(StringAccum &, const String &, UnparseKind, ElementClassT *);    
++
++    RouterT *cast_router()            { return this; }
++
++  private:
++  
++    struct Pair {
++      int from;
++      int to;
++      Pair() : from(-1), to(-1) { }
++      Pair(int f, int t) : from(f), to(t) { }
++    };
++
++    struct ElementType {
++      ElementClassT * const type;
++      int scope_cookie;
++      int prev_name;
++      ElementType(ElementClassT *c, int sc, int pn) : type(c), scope_cookie(sc), prev_name(pn) { assert(type); type->use(); }
++      ElementType(const ElementType &o) : type(o.type), scope_cookie(o.scope_cookie), prev_name(o.prev_name) { type->use(); }
++      ~ElementType()                  { type->unuse(); }
++      const String &name() const      { return type->name(); }
++      private:
++      ElementType &operator=(const ElementType &);
++    };
++
++    StringMap _element_name_map;
++    Vector<ElementT *> _elements;
++    ElementT *_free_element;
++    int _n_live_elements;
++    Vector<int> *_new_eindex_collector;
++
++    Vector<ConnectionT> _conn;
++    Vector<Pair> _first_conn;
++    int _free_conn;
++    
++    StringMap _declared_type_map;
++    Vector<ElementType> _declared_types;
++
++    Vector<String> _requirements;
++
++    StringMap _archive_map;
++    Vector<ArchiveElement> _archive;
++
++    RouterT *_declaration_scope;
++    int _declaration_scope_cookie;
++    int _scope_cookie;
++
++    VariableEnvironment _scope;
++    int _nformals;
++    int _ninputs;
++    int _noutputs;
++    bool _scope_order_error : 1;
++    ElementClassT *_overload_type;
++    String _type_landmark;
++    mutable ElementTraits _traits;
++    bool _circularity_flag;
++    
++    RouterT(const RouterT &);
++    RouterT &operator=(const RouterT &);
++
++    ElementClassT *declared_type(const String &, int scope_cookie) const;
++    void update_noutputs(int);
++    void update_ninputs(int);
++    ElementT *add_element(const ElementT &);
++    void assign_element_name(int);
++    void free_connection(int ci);
++    void unlink_connection_from(int ci);
++    void unlink_connection_to(int ci);
++    void expand_tunnel(Vector<PortT> *port_expansions, const Vector<PortT> &ports, bool is_output, int which, ErrorHandler *) const;
++    int assign_arguments(const Vector<String> &, Vector<String> *) const;
++
++    friend class RouterUnparserT;
++    
++};
++
++class RouterT::const_iterator { public:
++    operator bool() const             { return _e; }
++    int eindex() const                        { return _e->eindex(); }
++    void operator++(int)              { if (_e) step(_e->router(), eindex()+1);}
++    void operator++()                 { (*this)++; }
++    operator const ElementT *() const { return _e; }
++    const ElementT *operator->() const        { return _e; }
++    const ElementT &operator*() const { return *_e; }
++  private:
++    const ElementT *_e;
++    const_iterator()                  : _e(0) { }
++    const_iterator(const RouterT *r, int ei) { step(r, ei); }
++    void step(const RouterT *, int);
++    friend class RouterT;
++    friend class RouterT::iterator;
++};
++
++class RouterT::iterator : public RouterT::const_iterator { public:
++    operator ElementT *() const               { return const_cast<ElementT *>(_e); }
++    ElementT *operator->() const      { return const_cast<ElementT *>(_e); }
++    ElementT &operator*() const               { return const_cast<ElementT &>(*_e); }
++  private:
++    iterator()                                : const_iterator() { }
++    iterator(RouterT *r, int ei)      : const_iterator(r, ei) { }
++    friend class RouterT;
++};
++
++class RouterT::const_type_iterator { public:
++    operator bool() const             { return _e; }
++    int eindex() const                        { return _e->eindex(); }
++    inline void operator++(int);
++    inline void operator++();
++    operator const ElementT *() const { return _e; }
++    const ElementT *operator->() const        { return _e; }
++    const ElementT &operator*() const { return *_e; }
++  private:
++    const ElementT *_e;
++    const_type_iterator()             : _e(0) { }
++    const_type_iterator(const RouterT *r, ElementClassT *t, int i) { step(r, t, i); }
++    void step(const RouterT *, ElementClassT *, int);
++    friend class RouterT;
++    friend class RouterT::type_iterator;
++};
++
++class RouterT::type_iterator : public RouterT::const_type_iterator { public:
++    operator ElementT *() const               { return const_cast<ElementT *>(_e); }
++    ElementT *operator->() const      { return const_cast<ElementT *>(_e); }
++    ElementT &operator*() const               { return const_cast<ElementT &>(*_e); }
++  private:
++    type_iterator()                   : const_type_iterator() { }
++    type_iterator(RouterT *r, ElementClassT *t, int ei)       : const_type_iterator(r, t, ei) { }
++    friend class RouterT;
++};
++
++
++inline RouterT::iterator
++RouterT::begin_elements()
++{
++    return iterator(this, 0);
++}
++
++inline RouterT::const_iterator
++RouterT::begin_elements() const
++{
++    return const_iterator(this, 0);
++}
++
++inline RouterT::type_iterator
++RouterT::begin_elements(ElementClassT *t)
++{
++    return type_iterator(this, t, 0);
++}
++
++inline RouterT::const_type_iterator
++RouterT::begin_elements(ElementClassT *t) const
++{
++    return const_type_iterator(this, t, 0);
++}
++
++inline RouterT::const_iterator
++RouterT::end_elements() const
++{
++    return const_iterator();
++}
++
++inline RouterT::iterator
++RouterT::end_elements()
++{
++    return iterator();
++}
++
++inline void
++RouterT::const_type_iterator::operator++(int)
++{
++    if (_e)
++      step(_e->router(), _e->type(), _e->eindex() + 1);
++}
++
++inline void
++RouterT::const_type_iterator::operator++()
++{
++    (*this)++;
++}
++
++inline const ElementT *
++RouterT::element(const String &s) const
++{
++    int i = _element_name_map[s];
++    return (i >= 0 ? _elements[i] : 0);
++}
++
++inline ElementT *
++RouterT::element(const String &s)
++{
++    int i = _element_name_map[s];
++    return (i >= 0 ? _elements[i] : 0);
++}
++
++inline String
++RouterT::ename(int e) const
++{
++    return _elements[e]->name();
++}
++
++inline ElementClassT *
++RouterT::etype(int e) const
++{
++    return _elements[e]->type();
++}
++
++inline String
++RouterT::etype_name(int e) const
++{
++    return _elements[e]->type()->name();
++}
++
++inline ElementClassT *
++RouterT::declared_type(const String &name) const
++{
++    return declared_type(name, 0x7FFFFFFF);
++}
++
++inline bool
++RouterT::add_connection(ElementT *from_elt, int from_port, ElementT *to_elt,
++                      int to_port, const String &landmark)
++{
++    return add_connection(PortT(from_elt, from_port), PortT(to_elt, to_port), landmark);
++}
++
++inline bool
++RouterT::has_connection(const PortT &hfrom, const PortT &hto) const
++{
++    return find_connection(hfrom, hto) >= 0;
++}
++
++inline bool
++RouterT::insert_before(ElementT *e, const PortT &h)
++{
++    return insert_before(PortT(e, 0), h);
++}
++
++inline bool
++RouterT::insert_after(ElementT *e, const PortT &h)
++{
++    return insert_after(PortT(e, 0), h);
++}
++
++inline bool
++RouterT::define(const String &name, const String &value, bool isformal)
++{
++    assert(!isformal || _nformals == _scope.size());
++    bool retval = _scope.define(name, value, false);
++    if (isformal)
++      _nformals = _scope.size();
++    return retval;
++}
++
++inline void
++RouterT::redefine(const VariableEnvironment &ve)
++{
++    for (int i = 0; i < ve.size(); i++)
++      _scope.define(ve.name(i), ve.value(i), true);
++}
++
++inline ArchiveElement &
++RouterT::archive(const String &name)
++{
++    return _archive[_archive_map[name]];
++}
++
++inline const ArchiveElement &
++RouterT::archive(const String &name) const
++{
++    return _archive[_archive_map[name]];
++}
++
++inline bool
++operator==(const RouterT::const_iterator &i, const RouterT::const_iterator &j)
++{
++    return i.operator->() == j.operator->();
++}
++
++inline bool
++operator!=(const RouterT::const_iterator &i, const RouterT::const_iterator &j)
++{
++    return i.operator->() != j.operator->();
++}
++
++inline bool
++operator==(const RouterT::const_type_iterator &i, const RouterT::const_type_iterator &j)
++{
++    return i.operator->() == j.operator->();
++}
++
++inline bool
++operator!=(const RouterT::const_type_iterator &i, const RouterT::const_type_iterator &j)
++{
++    return i.operator->() != j.operator->();
++}
++
++inline bool
++operator==(const RouterT::const_type_iterator &i, const RouterT::const_iterator &j)
++{
++    return i.operator->() == j.operator->();
++}
++
++inline bool
++operator!=(const RouterT::const_type_iterator &i, const RouterT::const_iterator &j)
++{
++    return i.operator->() != j.operator->();
++}
++
++#endif
+diff -Nurb click-1.6.0/inst/include/clicktool/runparse.hh click-1.6.0-27/inst/include/clicktool/runparse.hh
+--- click-1.6.0/inst/include/clicktool/runparse.hh     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicktool/runparse.hh  2009-02-05 10:20:38.000000000 -0500
+@@ -0,0 +1,31 @@
++// -*- c-basic-offset: 4 -*-
++#ifndef CLICK_RUNPARSE_HH
++#define CLICK_RUNPARSE_HH
++#include "routert.hh"
++#include <click/pair.hh>
++
++class RouterUnparserT { public:
++
++    RouterUnparserT(ErrorHandler *);
++
++    struct Pair {
++      ElementClassT *first;
++      ElementClassT *second;
++      Pair(ElementClassT *a, ElementClassT *b) : first(a), second(b) { }
++    };
++
++  private:
++    
++    HashMap<int, int> _tuid_map;
++    Vector<ElementClassT *> _types;
++
++    enum { X_BAD = 0, X_UNK = 1, X_LT = 2, X_LEQ = 3, X_EQ = 4, X_GEQ = 5, X_GT = 6, X_NUM = 7 };
++    static int relation_negater[X_NUM];
++    static uint8_t relation_combiner[X_NUM][X_NUM];
++    HashMap<Pair<ElementClassT *, ElementClassT *>, int> _relation;
++
++    ErrorHandler *_errh;
++    
++};
++
++#endif
+diff -Nurb click-1.6.0/inst/include/clicktool/toolutils.hh click-1.6.0-27/inst/include/clicktool/toolutils.hh
+--- click-1.6.0/inst/include/clicktool/toolutils.hh    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/include/clicktool/toolutils.hh 2009-02-05 10:20:38.000000000 -0500
+@@ -0,0 +1,18 @@
++#ifndef CLICK_TOOLUTILS_HH
++#define CLICK_TOOLUTILS_HH
++#include <click/userutils.hh>
++class RouterT;
++
++extern bool ignore_line_directives;
++int click_maybe_define(const char *arg, ErrorHandler *errh);
++RouterT *read_router_string(const String &text, const String &landmark, ErrorHandler *);
++RouterT *read_router_string(String text, const String &landmark, bool, RouterT *, ErrorHandler *);
++RouterT *read_router_file(const char *filename, ErrorHandler *);
++RouterT *read_router_file(const char *filename, bool empty_ok, ErrorHandler *);
++RouterT *read_router(const String &, bool is_expr, ErrorHandler *);
++void write_router_file(RouterT *, FILE *, ErrorHandler * = 0);
++int write_router_file(RouterT *, const char *, ErrorHandler * = 0);
++
++String xml_quote(const String &);
++
++#endif
+Files click-1.6.0/inst/lib/click.ko and click-1.6.0-27/inst/lib/click.ko differ
+Files click-1.6.0/inst/lib/libclick.a and click-1.6.0-27/inst/lib/libclick.a differ
+Files click-1.6.0/inst/lib/libclicktool.a and click-1.6.0-27/inst/lib/libclicktool.a differ
+Files click-1.6.0/inst/lib/proclikefs.ko and click-1.6.0-27/inst/lib/proclikefs.ko differ
+Files click-1.6.0/inst/sbin/click-install and click-1.6.0-27/inst/sbin/click-install differ
+Files click-1.6.0/inst/sbin/click-uninstall and click-1.6.0-27/inst/sbin/click-uninstall differ
+diff -Nurb click-1.6.0/inst/share/click/config.mk click-1.6.0-27/inst/share/click/config.mk
+--- click-1.6.0/inst/share/click/config.mk     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/click/config.mk  2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,13 @@
++clickprefix=/d/click/click-1.6.0-27/inst
++clickbindir=/d/click/click-1.6.0-27/inst/bin
++clicksbindir=/d/click/click-1.6.0-27/inst/sbin
++clicklibdir=/d/click/click-1.6.0-27/inst/lib
++clickincludedir=/d/click/click-1.6.0-27/inst/include
++clickdatadir=/d/click/click-1.6.0-27/inst/share/click
++clicklinuxdir=/d/kernels/linux-2.6.27.10-clickport
++clicksrcdir=/d/click/click-1.6.0-27/inst/share/click/src
++CLICK_HAVE_USERLEVEL_DRIVER=1
++CLICK_HAVE_LINUXMODULE_DRIVER=1
++CLICK_HAVE_BSDMODULE_DRIVER=0
++CLICK_LINUXMODULE_2_6=1
++CLICK_GMAKE=make
+diff -Nurb click-1.6.0/inst/share/click/elementmap.xml click-1.6.0-27/inst/share/click/elementmap.xml
+--- click-1.6.0/inst/share/click/elementmap.xml        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/click/elementmap.xml     2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,219 @@
++<?xml version="1.0" standalone="yes"?>
++<?xml-stylesheet type="application/xml" href="http://www.lcdf.org/click/xml/elementmap.xsl"?>
++<?xml-stylesheet type="application/xml" href="file:///d/click/click-1.6.0-27/etc/elementmap.xsl"?>
++<elementmap xmlns="http://www.lcdf.org/click/xml/" sourcedir="/d/click/click-1.6.0-27" src="file:///d/click/click-1.6.0-27" provides="i686 i386 i586 int64 linux linux_2_6 pcap" drivers="userlevel linuxmodule">
++<entry name="ARPFaker" cxxclass="ARPFaker" docname="ARPFaker" headerfile="elements/ethernet/arpfaker.hh" sourcefile="elements/ethernet/arpfaker.cc" portcount="0/1" processing="h/h" flowcode="x/x" />
++<entry name="ARPPrint" cxxclass="ARPPrint" docname="ARPPrint" headerfile="elements/ethernet/arpprint.hh" sourcefile="elements/ethernet/arpprint.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="ARPQuerier" cxxclass="ARPQuerier" docname="ARPQuerier" headerfile="elements/ethernet/arpquerier.hh" sourcefile="elements/ethernet/arpquerier.cc" portcount="2/1-2" processing="h/h" flowcode="xy/x" />
++<entry name="ARPResponder" cxxclass="ARPResponder" docname="ARPResponder" headerfile="elements/ethernet/arpresponder.hh" sourcefile="elements/ethernet/arpresponder.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="AdaptiveRED" cxxclass="AdaptiveRED" docname="AdaptiveRED" headerfile="elements/aqm/adaptivered.hh" sourcefile="elements/aqm/adaptivered.cc" portcount="1/1-2" processing="a/ah" flowcode="x/x" requires="RED" />
++<entry name="AddressInfo" cxxclass="AddressInfo" docname="AddressInfo" headerfile="&lt;click/standard/addressinfo.hh>" sourcefile="elements/standard/addressinfo.cc" portcount="0/0" processing="a/a" flowcode="x/x" />
++<entry name="Align" cxxclass="Align" docname="Align" headerfile="elements/standard/align.hh" sourcefile="elements/standard/align.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="AlignmentInfo" cxxclass="AlignmentInfo" docname="AlignmentInfo" headerfile="&lt;click/standard/alignmentinfo.hh>" sourcefile="elements/standard/alignmentinfo.cc" portcount="0/0" processing="a/a" flowcode="x/x" />
++<entry name="AverageCounter" cxxclass="AverageCounter" docname="AverageCounter" headerfile="elements/standard/averagecounter.hh" sourcefile="elements/standard/averagecounter.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="BandwidthMeter" cxxclass="BandwidthMeter" docname="BandwidthMeter" headerfile="elements/standard/bandwidthmeter.hh" sourcefile="elements/standard/bandwidthmeter.cc" portcount="1/2-" processing="h/h" flowcode="x/x" />
++<entry name="BandwidthRatedSplitter" cxxclass="BandwidthRatedSplitter" docname="BandwidthRatedSplitter" headerfile="elements/standard/bwratedsplitter.hh" sourcefile="elements/standard/bwratedsplitter.cc" portcount="1/2" processing="h/h" flowcode="x/x" requires="RatedSplitter" />
++<entry name="BandwidthRatedUnqueue" cxxclass="BandwidthRatedUnqueue" docname="BandwidthRatedUnqueue" headerfile="elements/standard/bwratedunqueue.hh" sourcefile="elements/standard/bwratedunqueue.cc" portcount="1/1" processing="l/h" flowcode="x/x" requires="RatedUnqueue" />
++<entry name="BandwidthShaper" cxxclass="BandwidthShaper" docname="BandwidthShaper" headerfile="elements/standard/bandwidthshaper.hh" sourcefile="elements/standard/bandwidthshaper.cc" portcount="1/1" processing="l/l" flowcode="x/x" requires="Shaper" />
++<entry name="BpfyFilter" cxxclass="BpfyFilter" headerfile="elements/ip/crapfilter3.hh" sourcefile="elements/ip/crapfilter3.cc" portcount="1/1-2" processing="h/h" flowcode="x/x" />
++<entry name="Burster" cxxclass="Burster" docname="Burster" headerfile="elements/standard/burster.hh" sourcefile="elements/standard/burster.cc" portcount="1/1" processing="l/h" flowcode="x/x" />
++<entry name="CPUQueue" cxxclass="CPUQueue" docname="CPUQueue" headerfile="elements/linuxmodule/cpuqueue.hh" sourcefile="elements/linuxmodule/cpuqueue.cc" portcount="1/1-" processing="h/l" flowcode="x/x" requires="linuxmodule" />
++<entry name="CPUSwitch" cxxclass="CPUSwitch" docname="CPUSwitch" headerfile="elements/linuxmodule/cpuswitch.hh" sourcefile="elements/linuxmodule/cpuswitch.cc" portcount="1/1-" processing="h/h" flowcode="x/x" requires="linuxmodule" />
++<entry name="ChangeUID" cxxclass="ChangeUID" docname="ChangeUID" headerfile="elements/userlevel/changeuid.hh" sourcefile="elements/userlevel/changeuid.cc" portcount="0/0" processing="a/a" flowcode="x/x" requires="userlevel" />
++<entry name="ChatterSocket" cxxclass="ChatterSocket" docname="ChatterSocket" headerfile="elements/userlevel/chattersocket.hh" sourcefile="elements/userlevel/chattersocket.cc" portcount="0/0" processing="a/a" flowcode="x/x" requires="userlevel" />
++<entry name="CheckARPHeader" cxxclass="CheckARPHeader" docname="CheckARPHeader" headerfile="elements/ethernet/checkarpheader.hh" sourcefile="elements/ethernet/checkarpheader.cc" portcount="1/1-2" processing="a/ah" flowcode="x/x" />
++<entry name="CheckCRC32" cxxclass="CheckCRC32" docname="CheckCRC32" headerfile="elements/standard/checkcrc32.hh" sourcefile="elements/standard/checkcrc32.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="CheckICMPHeader" cxxclass="CheckICMPHeader" docname="CheckICMPHeader" headerfile="elements/icmp/checkicmpheader.hh" sourcefile="elements/icmp/checkicmpheader.cc" portcount="1/1-2" processing="a/ah" flowcode="x/x" />
++<entry name="CheckIPHeader" cxxclass="CheckIPHeader" docname="CheckIPHeader" headerfile="elements/ip/checkipheader.hh" sourcefile="elements/ip/checkipheader.cc" portcount="1/1-2" processing="a/ah" flowcode="x/x" flags="A" methods="static_initialize static_cleanup" />
++<entry name="CheckIPHeader2" cxxclass="CheckIPHeader2" docname="CheckIPHeader2" headerfile="elements/ip/checkipheader2.hh" sourcefile="elements/ip/checkipheader2.cc" portcount="1/1-2" processing="a/ah" flowcode="x/x" flags="A" requires="CheckIPHeader" />
++<entry name="CheckLength" cxxclass="CheckLength" docname="CheckLength" headerfile="elements/standard/checklength.hh" sourcefile="elements/standard/checklength.cc" portcount="1/1-2" processing="a/ah" flowcode="x/x" />
++<entry name="CheckPaint" cxxclass="CheckPaint" docname="CheckPaint" headerfile="elements/standard/checkpaint.hh" sourcefile="elements/standard/checkpaint.cc" portcount="1/1-2" processing="a/ah" flowcode="x/x" />
++<entry name="CheckTCPHeader" cxxclass="CheckTCPHeader" docname="CheckTCPHeader" headerfile="elements/tcpudp/checktcpheader.hh" sourcefile="elements/tcpudp/checktcpheader.cc" portcount="1/1-2" processing="a/ah" flowcode="x/x" />
++<entry name="CheckUDPHeader" cxxclass="CheckUDPHeader" docname="CheckUDPHeader" headerfile="elements/tcpudp/checkudpheader.hh" sourcefile="elements/tcpudp/checkudpheader.cc" portcount="1/1-2" processing="a/ah" flowcode="x/x" />
++<entry name="CiscyFilter" cxxclass="CiscyFilter" headerfile="elements/ip/crapfilter2.hh" sourcefile="elements/ip/crapfilter2.cc" portcount="1/1-2" processing="h/h" flowcode="x/x" />
++<entry name="Classifier" cxxclass="Classifier" docname="Classifier" headerfile="elements/standard/classifier.hh" sourcefile="elements/standard/classifier.cc" portcount="1/-" processing="h/h" flowcode="x/x" flags="A" requires="AlignmentInfo" />
++<entry name="CompareBlock" cxxclass="CompareBlock" docname="CompareBlock" headerfile="elements/standard/compblock.hh" sourcefile="elements/standard/compblock.cc" portcount="1/2" processing="a/a" flowcode="x/x" />
++<entry name="ControlSocket" cxxclass="ControlSocket" docname="ControlSocket" headerfile="elements/userlevel/controlsocket.hh" sourcefile="elements/userlevel/controlsocket.cc" portcount="0/0" processing="a/a" flowcode="x/x" requires="userlevel" />
++<entry name="Counter" cxxclass="Counter" docname="Counter" headerfile="elements/standard/counter.hh" sourcefile="elements/standard/counter.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="CrapFilter" cxxclass="CrapFilter" headerfile="elements/ip/crapfilter.hh" sourcefile="elements/ip/crapfilter.cc" portcount="1/1-2" processing="h/h" flowcode="x/x" />
++<entry name="CycleCountAccum" cxxclass="CycleCountAccum" docname="CycleCountAccum" headerfile="elements/linuxmodule/cyclecountaccum.hh" sourcefile="elements/linuxmodule/cyclecountaccum.cc" portcount="1/1" processing="a/a" flowcode="x/x" requires="linuxmodule int64" />
++<entry name="DRRSched" cxxclass="DRRSched" docname="DRRSched" headerfile="elements/standard/drr.hh" sourcefile="elements/standard/drr.cc" portcount="-/1" processing="l/l" flowcode="x/x" />
++<entry name="DecIPTTL" cxxclass="DecIPTTL" docname="DecIPTTL" headerfile="elements/ip/decipttl.hh" sourcefile="elements/ip/decipttl.cc" portcount="1/1-2" processing="a/ah" flowcode="x/x" />
++<entry name="DelayShaper" cxxclass="DelayShaper" docname="DelayShaper" headerfile="elements/standard/delayshaper.hh" sourcefile="elements/standard/delayshaper.cc" portcount="1/1" processing="l/l" flowcode="x/x" />
++<entry name="DelayUnqueue" cxxclass="DelayUnqueue" docname="DelayUnqueue" headerfile="elements/standard/delayunqueue.hh" sourcefile="elements/standard/delayunqueue.cc" portcount="1/1" processing="l/h" flowcode="x/x" />
++<entry name="DevirtualizeInfo" cxxclass="DevirtualizeInfo" headerfile="elements/standard/devirtualizeinfo.hh" sourcefile="elements/standard/devirtualizeinfo.cc" portcount="0/0" processing="a/a" flowcode="x/x" />
++<entry name="DirectIPLookup" cxxclass="DirectIPLookup" docname="DirectIPLookup" headerfile="elements/ip/directiplookup.hh" sourcefile="elements/ip/directiplookup.cc" portcount="1/-" processing="h/h" requires="IPRouteTable userlevel|bsdmodule" />
++<entry name="Discard" cxxclass="Discard" docname="Discard" headerfile="elements/standard/discard.hh" sourcefile="elements/standard/discard.cc" portcount="1/0" processing="a/a" flowcode="x/x" />
++<entry name="DiscardNoFree" cxxclass="DiscardNoFree" docname="DiscardNoFree" headerfile="elements/standard/discardnofree.hh" sourcefile="elements/standard/discardnofree.cc" portcount="1/0" processing="a/a" flowcode="x/x" />
++<entry name="DriverManager" cxxclass="DriverManager" docname="DriverManager" headerfile="elements/standard/drivermanager.hh" sourcefile="elements/standard/drivermanager.cc" portcount="0/0" processing="a/a" flowcode="x/x" requires="Script" />
++<entry name="DropBroadcasts" cxxclass="DropBroadcasts" docname="DropBroadcasts" headerfile="elements/standard/dropbroadcasts.hh" sourcefile="elements/standard/dropbroadcasts.cc" portcount="1/1-2" processing="a/ah" flowcode="x/x" />
++<entry name="DynamicUDPIPEncap" cxxclass="DynamicUDPIPEncap" docname="DynamicUDPIPEncap" headerfile="elements/tcpudp/dynudpipencap.hh" sourcefile="elements/tcpudp/dynudpipencap.cc" portcount="1/1" processing="a/a" flowcode="x/x" flags="A" />
++<entry name="EnsureEther" cxxclass="EnsureEther" docname="EnsureEther" headerfile="elements/ethernet/ensureether.hh" sourcefile="elements/ethernet/ensureether.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="Error" cxxclass="ErrorElement" docname="Error" headerfile="&lt;click/standard/errorelement.hh>" sourcefile="elements/standard/errorelement.cc" portcount="-/-" processing="a/a" flowcode="x/y" />
++<entry name="EtherEncap" cxxclass="EtherEncap" docname="EtherEncap" headerfile="elements/ethernet/etherencap.hh" sourcefile="elements/ethernet/etherencap.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="EtherMirror" cxxclass="EtherMirror" docname="EtherMirror" headerfile="elements/ethernet/ethermirror.hh" sourcefile="elements/ethernet/ethermirror.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="FTPPortMapper" cxxclass="FTPPortMapper" docname="FTPPortMapper" headerfile="elements/app/ftpportmapper.hh" sourcefile="elements/app/ftpportmapper.cc" portcount="1/1" processing="a/a" flowcode="x/x" requires="TCPRewriter" />
++<entry name="FastTCPFlows" cxxclass="FastTCPFlows" docname="FastTCPFlows" headerfile="elements/linuxmodule/fasttcpflows.hh" sourcefile="elements/linuxmodule/fasttcpflows.cc" portcount="0/1" processing="l/l" flowcode="x/x" requires="linuxmodule" />
++<entry name="FastUDPFlows" cxxclass="FastUDPFlows" docname="FastUDPFlows" headerfile="elements/linuxmodule/fastudpflows.hh" sourcefile="elements/linuxmodule/fastudpflows.cc" portcount="0/1" processing="l/l" flowcode="x/x" requires="linuxmodule" />
++<entry name="FastUDPSource" cxxclass="FastUDPSource" docname="FastUDPSource" headerfile="elements/linuxmodule/fastudpsrc.hh" sourcefile="elements/linuxmodule/fastudpsrc.cc" portcount="0/1" processing="l/l" flowcode="x/x" requires="linuxmodule" />
++<entry name="FixIPSrc" cxxclass="FixIPSrc" docname="FixIPSrc" headerfile="elements/ip/fixipsrc.hh" sourcefile="elements/ip/fixipsrc.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="FromDevice" cxxclass="FromDevice" docname="FromDevice" headerfile="elements/linuxmodule/fromdevice.hh" sourcefile="elements/linuxmodule/fromdevice.cc" portcount="0/1" processing="h/h" methods="static_initialize static_cleanup" requires="AnyDevice linuxmodule" />
++<entry name="FromDevice" cxxclass="FromDevice" docname="FromDevice.u" headerfile="elements/userlevel/fromdevice.hh" sourcefile="elements/userlevel/fromdevice.cc" portcount="0/1" processing="h/h" flowcode="x/x" requires="userlevel FakePcap" />
++<entry name="FromDump" cxxclass="FromDump" docname="FromDump" headerfile="elements/userlevel/fromdump.hh" sourcefile="elements/userlevel/fromdump.cc" portcount="0/1-2" processing="a/ah" flowcode="x/x" requires="userlevel|ns FakePcap FromFile" />
++<entry name="FromHost" cxxclass="FromHost" docname="FromHost" headerfile="elements/linuxmodule/fromhost.hh" sourcefile="elements/linuxmodule/fromhost.cc" portcount="0/1" processing="h/h" methods="static_initialize" requires="AnyDevice linuxmodule" />
++<entry name="FromHost" cxxclass="FromHost" docname="FromHost.u" headerfile="elements/userlevel/fromhost.hh" sourcefile="elements/userlevel/fromhost.cc" portcount="0/1" processing="h/h" flowcode="x/x" requires="userlevel linux" />
++<entry name="FromRawSocket" cxxclass="FromRawSocket" docname="FromRawSocket" headerfile="elements/userlevel/fromrawsocket.hh" sourcefile="elements/userlevel/fromrawsocket.cc" portcount="0-1/0-1" processing="h/h" flowcode="x/y" requires="RawSocket" />
++<entry name="FromSocket" cxxclass="FromSocket" docname="FromSocket" headerfile="elements/userlevel/fromsocket.hh" sourcefile="elements/userlevel/fromsocket.cc" portcount="0-1/0-1" processing="h/h" flowcode="x/y" requires="Socket" />
++<entry name="FrontDropQueue" cxxclass="FrontDropQueue" docname="FrontDropQueue" headerfile="elements/standard/frontdropqueue.hh" sourcefile="elements/standard/frontdropqueue.cc" portcount="1/1" processing="h/l" flowcode="x/x" requires="NotifierQueue" />
++<entry name="FullNoteQueue" cxxclass="FullNoteQueue" docname="Queue" headerfile="elements/standard/fullnotequeue.hh" sourcefile="elements/standard/fullnotequeue.cc" portcount="1/1" processing="h/l" flowcode="x/x" requires="NotifierQueue" />
++<entry name="GetIPAddress" cxxclass="GetIPAddress" docname="GetIPAddress" headerfile="elements/ip/getipaddress.hh" sourcefile="elements/ip/getipaddress.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="HashSwitch" cxxclass="HashSwitch" docname="HashSwitch" headerfile="elements/standard/hashswitch.hh" sourcefile="elements/standard/hashswitch.cc" portcount="1/1-" processing="h/h" flowcode="x/x" />
++<entry name="HostEtherFilter" cxxclass="HostEtherFilter" docname="HostEtherFilter" headerfile="elements/ethernet/hostetherfilter.hh" sourcefile="elements/ethernet/hostetherfilter.cc" portcount="1/1-2" processing="a/ah" flowcode="x/x" />
++<entry name="ICMPError" cxxclass="ICMPError" docname="ICMPError" headerfile="elements/icmp/icmperror.hh" sourcefile="elements/icmp/icmperror.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="ICMPPingEncap" cxxclass="ICMPPingEncap" docname="ICMPPingEncap" headerfile="elements/icmp/icmppingencap.hh" sourcefile="elements/icmp/icmppingencap.cc" portcount="1/1" processing="a/a" flowcode="x/x" flags="A" />
++<entry name="ICMPPingResponder" cxxclass="ICMPPingResponder" docname="ICMPPingResponder" headerfile="elements/icmp/icmppingresponder.hh" sourcefile="elements/icmp/icmppingresponder.cc" portcount="1/1-2" processing="a/ah" flowcode="x/x" />
++<entry name="ICMPPingRewriter" cxxclass="ICMPPingRewriter" docname="ICMPPingRewriter" headerfile="elements/icmp/icmppingrewriter.hh" sourcefile="elements/icmp/icmppingrewriter.cc" portcount="1-2/1-2" processing="h/h" flowcode="x/x" />
++<entry name="ICMPPingSource" cxxclass="ICMPPingSource" docname="ICMPPingSource" headerfile="elements/icmp/icmpsendpings.hh" sourcefile="elements/icmp/icmpsendpings.cc" portcount="0-1/1" processing="h/a" flowcode="x/x" />
++<entry name="ICMPRewriter" cxxclass="ICMPRewriter" docname="ICMPRewriter" headerfile="elements/icmp/icmprewriter.hh" sourcefile="elements/icmp/icmprewriter.cc" portcount="1/1-2" processing="a/a" flowcode="x/x" requires="IPRw ICMPPingRewriter" />
++<entry name="ICMPSendPings" cxxclass="ICMPPingSource" docname="ICMPPingSource" headerfile="elements/icmp/icmpsendpings.hh" sourcefile="elements/icmp/icmpsendpings.cc" portcount="0-1/1" processing="h/a" flowcode="x/x" />
++<entry name="IPAddrPairRewriter" cxxclass="IPAddrPairRewriter" docname="IPAddrPairRewriter" headerfile="elements/ip/ipaddrpairrewriter.hh" sourcefile="elements/ip/ipaddrpairrewriter.cc" portcount="1-/1-256" processing="h/h" requires="IPRw IPRewriterPatterns" />
++<entry name="IPAddrRewriter" cxxclass="IPAddrRewriter" docname="IPAddrRewriter" headerfile="elements/ip/ipaddrrewriter.hh" sourcefile="elements/ip/ipaddrrewriter.cc" portcount="1-/1-256" processing="h/h" requires="IPRw IPRewriterPatterns" />
++<entry name="IPClassifier" cxxclass="IPClassifier" docname="IPClassifier" headerfile="elements/ip/ipclassifier.hh" sourcefile="elements/ip/ipclassifier.cc" portcount="1/-" processing="h/h" flowcode="x/x" flags="" requires="IPFilter" />
++<entry name="IPEncap" cxxclass="IPEncap" docname="IPEncap" headerfile="elements/ip/ipencap.hh" sourcefile="elements/ip/ipencap.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="IPFieldInfo" cxxclass="IPFieldInfo" headerfile="elements/ip/ipfieldinfo.hh" sourcefile="elements/ip/ipfieldinfo.cc" portcount="0/0" processing="a/a" flowcode="x/x" methods="static_initialize static_cleanup" />
++<entry name="IPFilter" cxxclass="IPFilter" docname="IPFilter" headerfile="elements/ip/ipfilter.hh" sourcefile="elements/ip/ipfilter.cc" portcount="1/-" processing="h/h" flowcode="x/x" flags="" methods="static_initialize static_cleanup" requires="Classifier" />
++<entry name="IPFragmenter" cxxclass="IPFragmenter" docname="IPFragmenter" headerfile="elements/ip/ipfragmenter.hh" sourcefile="elements/ip/ipfragmenter.cc" portcount="1/1-2" processing="h/h" flowcode="x/x" />
++<entry name="IPGWOptions" cxxclass="IPGWOptions" docname="IPGWOptions" headerfile="elements/ip/ipgwoptions.hh" sourcefile="elements/ip/ipgwoptions.cc" portcount="1/1-2" processing="a/ah" flowcode="x/x" />
++<entry name="IPInputCombo" cxxclass="IPInputCombo" docname="IPInputCombo" headerfile="elements/ip/ipinputcombo.hh" sourcefile="elements/ip/ipinputcombo.cc" portcount="1/1" processing="a/a" flowcode="x/x" flags="A" requires="CheckIPHeader" />
++<entry name="IPMirror" cxxclass="IPMirror" docname="IPMirror" headerfile="elements/ip/ipmirror.hh" sourcefile="elements/ip/ipmirror.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="IPNameInfo" cxxclass="IPNameInfo" docname="IPNameInfo" headerfile="elements/ip/ipnameinfo.hh" sourcefile="elements/ip/ipnameinfo.cc" portcount="0/0" processing="a/a" flowcode="x/x" methods="static_initialize static_cleanup" />
++<entry name="IPOutputCombo" cxxclass="IPOutputCombo" docname="IPOutputCombo" headerfile="elements/ip/ipoutputcombo.hh" sourcefile="elements/ip/ipoutputcombo.cc" portcount="1/5" processing="h/h" flowcode="x/x" />
++<entry name="IPPrint" cxxclass="IPPrint" docname="IPPrint" headerfile="elements/ip/ipprint.hh" sourcefile="elements/ip/ipprint.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="IPRateMonitor" cxxclass="IPRateMonitor" docname="IPRateMonitor" headerfile="elements/ip/ipratemon.hh" sourcefile="elements/ip/ipratemon.cc" portcount="1-2/1-2" processing="a/a" flowcode="x/x" requires="userlevel" />
++<entry name="IPReassembler" cxxclass="IPReassembler" docname="IPReassembler" headerfile="elements/ip/ipreassembler.hh" sourcefile="elements/ip/ipreassembler.cc" portcount="1/1-2" processing="a/ah" flowcode="x/x" />
++<entry name="IPRewriter" cxxclass="IPRewriter" docname="IPRewriter" headerfile="elements/tcpudp/iprewriter.hh" sourcefile="elements/tcpudp/iprewriter.cc" portcount="1-/1-256" processing="h/h" requires="IPRw IPRewriterPatterns" />
++<entry name="IPRewriterPatterns" cxxclass="IPRewriterPatterns" docname="IPRewriterPatterns" headerfile="elements/ip/iprwpatterns.hh" sourcefile="elements/ip/iprwpatterns.cc" portcount="0/0" processing="a/a" flowcode="x/x" requires="IPRw" />
++<entry name="Idle" cxxclass="Idle" docname="Idle" headerfile="elements/standard/idle.hh" sourcefile="elements/standard/idle.cc" portcount="-/-" processing="a/a" flowcode="x/y" flags="S0" />
++<entry name="InfiniteSource" cxxclass="InfiniteSource" docname="InfiniteSource" headerfile="elements/standard/infinitesource.hh" sourcefile="elements/standard/infinitesource.cc" portcount="0/1" processing="a/a" flowcode="x/x" flags="S1" />
++<entry name="KernelFilter" cxxclass="KernelFilter" docname="KernelFilter" headerfile="elements/userlevel/kernelfilter.hh" sourcefile="elements/userlevel/kernelfilter.cc" portcount="0/0" processing="a/a" flowcode="x/x" requires="userlevel" />
++<entry name="KernelHandlerProxy" cxxclass="KernelHandlerProxy" docname="KernelHandlerProxy" headerfile="elements/userlevel/khandlerproxy.hh" sourcefile="elements/userlevel/khandlerproxy.cc" requires="userlevel HandlerProxy" />
++<entry name="KernelTap" cxxclass="KernelTap" docname="KernelTap" headerfile="elements/userlevel/kerneltap.hh" sourcefile="elements/userlevel/kerneltap.cc" portcount="0-1/1-2" processing="a/h" flowcode="x/y" flags="S3" requires="userlevel KernelTun" />
++<entry name="KernelTun" cxxclass="KernelTun" docname="KernelTun" headerfile="elements/userlevel/kerneltun.hh" sourcefile="elements/userlevel/kerneltun.cc" portcount="0-1/1-2" processing="a/h" flowcode="x/y" flags="S3" requires="userlevel FakePcap" />
++<entry name="LinearIPLookup" cxxclass="LinearIPLookup" docname="LinearIPLookup" headerfile="elements/ip/lineariplookup.hh" sourcefile="elements/ip/lineariplookup.cc" portcount="1/-" processing="h/h" requires="IPRouteTable" />
++<entry name="LinkUnqueue" cxxclass="LinkUnqueue" docname="LinkUnqueue" headerfile="elements/standard/linkunqueue.hh" sourcefile="elements/standard/linkunqueue.cc" portcount="1/1" processing="l/h" flowcode="x/x" />
++<entry name="LinuxIPLookup" cxxclass="LinuxIPLookup" docname="LinuxIPLookup" headerfile="elements/ip/lookupiproutelinux.hh" sourcefile="elements/ip/lookupiproutelinux.cc" portcount="1/1-" processing="a/a" flowcode="x/x" requires="userlevel" />
++<entry name="LookupIPRouteMP" cxxclass="LookupIPRouteMP" docname="LookupIPRouteMP" headerfile="elements/ip/lookupiproutemp.hh" sourcefile="elements/ip/lookupiproutemp.cc" portcount="1/-" processing="a/a" flowcode="x/x" requires="linuxmodule" />
++<entry name="MSQueue" cxxclass="MSQueue" docname="MSQueue" headerfile="elements/standard/msqueue.hh" sourcefile="elements/standard/msqueue.cc" portcount="1/1" processing="h/l" flowcode="x/x" />
++<entry name="MarkIPCE" cxxclass="MarkIPCE" docname="MarkIPCE" headerfile="elements/ip/markipce.hh" sourcefile="elements/ip/markipce.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="MarkIPHeader" cxxclass="MarkIPHeader" docname="MarkIPHeader" headerfile="elements/ip/markipheader.hh" sourcefile="elements/ip/markipheader.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="Message" cxxclass="MessageElement" docname="Message" headerfile="elements/standard/messageelement.hh" sourcefile="elements/standard/messageelement.cc" portcount="0/0" processing="a/a" flowcode="x/x" />
++<entry name="Meter" cxxclass="Meter" docname="Meter" headerfile="elements/standard/meter.hh" sourcefile="elements/standard/meter.cc" portcount="1/2-" processing="h/h" flowcode="x/x" requires="BandwidthMeter" />
++<entry name="MixedQueue" cxxclass="MixedQueue" docname="MixedQueue" headerfile="elements/standard/mixedqueue.hh" sourcefile="elements/standard/mixedqueue.cc" portcount="2/1" processing="h/l" flowcode="x/x" requires="NotifierQueue" />
++<entry name="NotifierQueue" cxxclass="NotifierQueue" docname="NotifierQueue" headerfile="elements/standard/notifierqueue.hh" sourcefile="elements/standard/notifierqueue.cc" portcount="1/1" processing="h/l" flowcode="x/x" requires="SimpleQueue" />
++<entry name="Null" cxxclass="NullElement" docname="Null" headerfile="elements/standard/nullelement.hh" sourcefile="elements/standard/nullelement.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="Null1" cxxclass="Null1" docname="Null1" headerfile="elements/standard/nulls.hh" sourcefile="elements/standard/nulls.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="Null2" cxxclass="Null2" headerfile="elements/standard/nulls.hh" sourcefile="elements/standard/nulls.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="Null3" cxxclass="Null3" headerfile="elements/standard/nulls.hh" sourcefile="elements/standard/nulls.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="Null4" cxxclass="Null4" headerfile="elements/standard/nulls.hh" sourcefile="elements/standard/nulls.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="Null5" cxxclass="Null5" headerfile="elements/standard/nulls.hh" sourcefile="elements/standard/nulls.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="Null6" cxxclass="Null6" headerfile="elements/standard/nulls.hh" sourcefile="elements/standard/nulls.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="Null7" cxxclass="Null7" headerfile="elements/standard/nulls.hh" sourcefile="elements/standard/nulls.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="Null8" cxxclass="Null8" headerfile="elements/standard/nulls.hh" sourcefile="elements/standard/nulls.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="Paint" cxxclass="Paint" docname="Paint" headerfile="elements/standard/paint.hh" sourcefile="elements/standard/paint.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="PaintSwitch" cxxclass="PaintSwitch" docname="PaintSwitch" headerfile="elements/standard/paintswitch.hh" sourcefile="elements/standard/paintswitch.cc" portcount="1/-" processing="h/h" flowcode="x/x" />
++<entry name="PaintTee" cxxclass="PaintTee" docname="PaintTee" headerfile="elements/standard/painttee.hh" sourcefile="elements/standard/painttee.cc" portcount="1/2" processing="a/ah" flowcode="x/x" />
++<entry name="PerfCountAccum" cxxclass="PerfCountAccum" docname="PerfCountAccum" headerfile="elements/linuxmodule/perfcountaccum.hh" sourcefile="elements/linuxmodule/perfcountaccum.cc" portcount="1/1" processing="a/a" requires="linuxmodule i586 int64 PerfCountUser" />
++<entry name="PerfCountInfo" cxxclass="PerfCountInfo" docname="PerfCountInfo" headerfile="elements/linuxmodule/perfcountinfo.hh" sourcefile="elements/linuxmodule/perfcountinfo.cc" requires="linuxmodule PerfCountUser" />
++<entry name="PokeHandlers" cxxclass="PokeHandlers" docname="PokeHandlers" headerfile="elements/standard/pokehandlers.hh" sourcefile="elements/standard/pokehandlers.cc" portcount="0/0" processing="a/a" flowcode="x/x" />
++<entry name="PollDevice" cxxclass="PollDevice" docname="PollDevice" headerfile="elements/linuxmodule/polldevice.hh" sourcefile="elements/linuxmodule/polldevice.cc" portcount="0/1" processing="h/h" methods="static_initialize static_cleanup" requires="AnyDevice linuxmodule" />
++<entry name="PortInfo" cxxclass="PortInfo" docname="PortInfo" headerfile="&lt;click/standard/portinfo.hh>" sourcefile="elements/standard/portinfo.cc" portcount="0/0" processing="a/a" flowcode="x/x" />
++<entry name="Print" cxxclass="Print" docname="Print" headerfile="elements/standard/print.hh" sourcefile="elements/standard/print.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="PrioSched" cxxclass="PrioSched" docname="PrioSched" headerfile="elements/standard/priosched.hh" sourcefile="elements/standard/priosched.cc" portcount="-/1" processing="l/l" flowcode="x/x" />
++<entry name="ProgressBar" cxxclass="ProgressBar" docname="ProgressBar" headerfile="elements/userlevel/progressbar.hh" sourcefile="elements/userlevel/progressbar.cc" portcount="0/0" processing="a/a" flowcode="x/x" requires="userlevel" />
++<entry name="PullNull" cxxclass="PullNullElement" headerfile="elements/standard/nullelement.hh" sourcefile="elements/standard/nullelement.cc" portcount="1/1" processing="l/l" flowcode="x/x" />
++<entry name="PullSwitch" cxxclass="PullSwitch" docname="PullSwitch" headerfile="elements/standard/pullswitch.hh" sourcefile="elements/standard/pullswitch.cc" portcount="-/1" processing="l/l" flowcode="x/x" />
++<entry name="PullTee" cxxclass="PullTee" docname="PullTee" headerfile="elements/standard/tee.hh" sourcefile="elements/standard/tee.cc" portcount="1/1-" processing="l/lh" flowcode="x/x" />
++<entry name="PushNull" cxxclass="PushNullElement" headerfile="elements/standard/nullelement.hh" sourcefile="elements/standard/nullelement.cc" portcount="1/1" processing="h/h" flowcode="x/x" />
++<entry name="Queue" cxxclass="FullNoteQueue" docname="Queue" headerfile="elements/standard/fullnotequeue.hh" sourcefile="elements/standard/fullnotequeue.cc" portcount="1/1" processing="h/l" flowcode="x/x" requires="NotifierQueue" />
++<entry name="QuitWatcher" cxxclass="QuitWatcher" docname="QuitWatcher" headerfile="elements/standard/quitwatcher.hh" sourcefile="elements/standard/quitwatcher.cc" portcount="0/0" processing="a/a" flowcode="x/x" />
++<entry name="RED" cxxclass="RED" docname="RED" headerfile="elements/aqm/red.hh" sourcefile="elements/aqm/red.cc" portcount="1/1-2" processing="a/ah" flowcode="x/x" requires="int64" />
++<entry name="RFC2507Comp" cxxclass="RFC2507c" docname="RFC2507Comp" headerfile="elements/ip/rfc2507c.hh" sourcefile="elements/ip/rfc2507c.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="RFC2507Decomp" cxxclass="RFC2507d" docname="RFC2507Decomp" headerfile="elements/ip/rfc2507d.hh" sourcefile="elements/ip/rfc2507d.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="RIPSend" cxxclass="RIPSend" docname="RIPSend" headerfile="elements/ip/ripsend.hh" sourcefile="elements/ip/ripsend.cc" portcount="0/1" processing="h/h" flowcode="x/x" />
++<entry name="RadixIPLookup" cxxclass="RadixIPLookup" docname="RadixIPLookup" headerfile="elements/ip/radixiplookup.hh" sourcefile="elements/ip/radixiplookup.cc" portcount="1/-" processing="h/h" requires="IPRouteTable" />
++<entry name="RandomBitErrors" cxxclass="RandomBitErrors" docname="RandomBitErrors" headerfile="elements/standard/randomerror.hh" sourcefile="elements/standard/randomerror.cc" portcount="1/1" processing="a/a" flowcode="x/x" requires="int64" />
++<entry name="RandomSample" cxxclass="RandomSample" docname="RandomSample" headerfile="elements/standard/randomsample.hh" sourcefile="elements/standard/randomsample.cc" portcount="1/1-2" processing="a/ah" flowcode="x/x" />
++<entry name="RandomSource" cxxclass="RandomSource" docname="RandomSource" headerfile="elements/standard/randomsource.hh" sourcefile="elements/standard/randomsource.cc" portcount="0/1" processing="a/a" flowcode="x/x" />
++<entry name="RandomSwitch" cxxclass="RandomSwitch" docname="RandomSwitch" headerfile="elements/standard/randomswitch.hh" sourcefile="elements/standard/randomswitch.cc" portcount="1/1-" processing="h/h" flowcode="x/x" />
++<entry name="RangeIPLookup" cxxclass="RangeIPLookup" docname="RangeIPLookup" headerfile="elements/ip/rangeiplookup.hh" sourcefile="elements/ip/rangeiplookup.cc" portcount="1/-" processing="h/h" requires="DirectIPLookup" />
++<entry name="RatedSource" cxxclass="RatedSource" docname="RatedSource" headerfile="elements/standard/ratedsource.hh" sourcefile="elements/standard/ratedsource.cc" portcount="0/1" processing="a/a" flowcode="x/x" />
++<entry name="RatedSplitter" cxxclass="RatedSplitter" docname="RatedSplitter" headerfile="elements/standard/ratedsplitter.hh" sourcefile="elements/standard/ratedsplitter.cc" portcount="1/2" processing="h/h" flowcode="x/x" />
++<entry name="RatedUnqueue" cxxclass="RatedUnqueue" docname="RatedUnqueue" headerfile="elements/standard/ratedunqueue.hh" sourcefile="elements/standard/ratedunqueue.cc" portcount="1/1" processing="l/h" flowcode="x/x" />
++<entry name="RawSocket" cxxclass="RawSocket" docname="RawSocket" headerfile="elements/userlevel/rawsocket.hh" sourcefile="elements/userlevel/rawsocket.cc" portcount="0-1/0-1" processing="l/h" flowcode="x/y" requires="userlevel linux" />
++<entry name="RoundRobinIPMapper" cxxclass="RoundRobinIPMapper" docname="RoundRobinIPMapper" headerfile="elements/ip/rripmapper.hh" sourcefile="elements/ip/rripmapper.cc" portcount="0/0" processing="a/a" flowcode="x/x" requires="IPRw" />
++<entry name="RoundRobinSched" cxxclass="RRSched" docname="RoundRobinSched" headerfile="elements/standard/rrsched.hh" sourcefile="elements/standard/rrsched.cc" portcount="-/1" processing="l/l" flowcode="x/x" />
++<entry name="RoundRobinSwitch" cxxclass="RoundRobinSwitch" docname="RoundRobinSwitch" headerfile="elements/standard/rrswitch.hh" sourcefile="elements/standard/rrswitch.cc" portcount="1/1-" processing="h/h" flowcode="x/x" />
++<entry name="RoundTripCycleCount" cxxclass="RTCycles" docname="RoundTripCycleCount" headerfile="elements/linuxmodule/rtcycles.hh" sourcefile="elements/linuxmodule/rtcycles.cc" portcount="1/1" processing="a/a" flowcode="x/x" requires="linuxmodule int64" />
++<entry name="ScheduleInfo" cxxclass="ScheduleInfo" docname="ScheduleInfo" headerfile="&lt;click/standard/scheduleinfo.hh>" sourcefile="elements/standard/scheduleinfo.cc" portcount="0/0" processing="a/a" flowcode="x/x" />
++<entry name="ScheduleLinux" cxxclass="ScheduleLinux" docname="ScheduleLinux" headerfile="elements/linuxmodule/schedulelinux.hh" sourcefile="elements/linuxmodule/schedulelinux.cc" portcount="0/0" processing="a/a" flowcode="x/x" requires="linuxmodule" />
++<entry name="Script" cxxclass="Script" docname="Script" headerfile="elements/standard/script.hh" sourcefile="elements/standard/script.cc" portcount="0/0" processing="a/a" flowcode="x/x" methods="static_initialize static_cleanup" />
++<entry name="SetAnnoByte" cxxclass="SetAnnoByte" docname="SetAnnoByte" headerfile="elements/standard/setannobyte.hh" sourcefile="elements/standard/setannobyte.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="SetCRC32" cxxclass="SetCRC32" docname="SetCRC32" headerfile="elements/standard/setcrc32.hh" sourcefile="elements/standard/setcrc32.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="SetCycleCount" cxxclass="SetCycleCount" docname="SetCycleCount" headerfile="elements/linuxmodule/setcyclecount.hh" sourcefile="elements/linuxmodule/setcyclecount.cc" portcount="1/1" processing="a/a" flowcode="x/x" requires="linuxmodule int64" />
++<entry name="SetIPAddress" cxxclass="SetIPAddress" docname="SetIPAddress" headerfile="elements/ip/setipaddress.hh" sourcefile="elements/ip/setipaddress.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="SetIPChecksum" cxxclass="SetIPChecksum" docname="SetIPChecksum" headerfile="elements/ip/setipchecksum.hh" sourcefile="elements/ip/setipchecksum.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="SetIPDSCP" cxxclass="SetIPDSCP" docname="SetIPDSCP" headerfile="elements/ip/setipdscp.hh" sourcefile="elements/ip/setipdscp.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="SetPacketType" cxxclass="SetPacketType" docname="SetPacketType" headerfile="elements/standard/setpackettype.hh" sourcefile="elements/standard/setpackettype.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="SetPerfCount" cxxclass="SetPerfCount" docname="SetPerfCount" headerfile="elements/linuxmodule/setperfcount.hh" sourcefile="elements/linuxmodule/setperfcount.cc" portcount="1/1" processing="a/a" requires="linuxmodule i586 int64 PerfCountUser" />
++<entry name="SetRandIPAddress" cxxclass="SetRandIPAddress" docname="SetRandIPAddress" headerfile="elements/ip/setrandipaddress.hh" sourcefile="elements/ip/setrandipaddress.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="SetTCPChecksum" cxxclass="SetTCPChecksum" docname="SetTCPChecksum" headerfile="elements/tcpudp/settcpchecksum.hh" sourcefile="elements/tcpudp/settcpchecksum.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="SetTimestamp" cxxclass="SetTimestamp" docname="SetTimestamp" headerfile="elements/standard/settimestamp.hh" sourcefile="elements/standard/settimestamp.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="SetUDPChecksum" cxxclass="SetUDPChecksum" docname="SetUDPChecksum" headerfile="elements/tcpudp/setudpchecksum.hh" sourcefile="elements/tcpudp/setudpchecksum.cc" portcount="1/1-2" processing="a/ah" flowcode="x/x" />
++<entry name="Shaper" cxxclass="Shaper" docname="Shaper" headerfile="elements/standard/shaper.hh" sourcefile="elements/standard/shaper.cc" portcount="1/1" processing="l/l" flowcode="x/x" />
++<entry name="SimpleQueue" cxxclass="SimpleQueue" docname="SimpleQueue" headerfile="elements/standard/simplequeue.hh" sourcefile="elements/standard/simplequeue.cc" portcount="1/1" processing="h/l" flowcode="x/x" provides="Storage" />
++<entry name="Socket" cxxclass="Socket" docname="Socket" headerfile="elements/userlevel/socket.hh" sourcefile="elements/userlevel/socket.cc" portcount="0-1/0-1" processing="a/h" flowcode="x/y" requires="userlevel IPRouteTable" />
++<entry name="SortedIPLookup" cxxclass="SortedIPLookup" docname="SortedIPLookup" headerfile="elements/ip/sortediplookup.hh" sourcefile="elements/ip/sortediplookup.cc" portcount="1/-" processing="h/h" requires="LinearIPLookup" />
++<entry name="SourceIPHashMapper" cxxclass="SourceIPHashMapper" docname="SourceIPHashMapper" headerfile="elements/ip/siphmapper.hh" sourcefile="elements/ip/siphmapper.cc" portcount="0/0" processing="a/a" flowcode="x/x" requires="IPRw" />
++<entry name="SpinlockAcquire" cxxclass="SpinlockAcquire" docname="SpinlockAcquire" headerfile="elements/standard/spinlockacquire.hh" sourcefile="elements/standard/spinlockacquire.cc" portcount="-/-" processing="a/a" flowcode="x/x" />
++<entry name="SpinlockInfo" cxxclass="SpinlockInfo" docname="SpinlockInfo" headerfile="elements/standard/spinlockinfo.hh" sourcefile="elements/standard/spinlockinfo.cc" portcount="0/0" processing="a/a" flowcode="x/x" />
++<entry name="SpinlockRelease" cxxclass="SpinlockRelease" docname="SpinlockRelease" headerfile="elements/standard/spinlockrelease.hh" sourcefile="elements/standard/spinlockrelease.cc" portcount="-/-" processing="a/a" flowcode="x/x" />
++<entry name="StaticIPLookup" cxxclass="StaticIPLookup" docname="StaticIPLookup" headerfile="elements/ip/lookupiproute.hh" sourcefile="elements/ip/lookupiproute.cc" portcount="1/-" processing="h/h" requires="LinearIPLookup" />
++<entry name="StaticPullSwitch" cxxclass="StaticPullSwitch" docname="StaticPullSwitch" headerfile="elements/standard/staticpullswitch.hh" sourcefile="elements/standard/staticpullswitch.cc" portcount="-/1" processing="l/l" flowcode="x/x" />
++<entry name="StaticSwitch" cxxclass="StaticSwitch" docname="StaticSwitch" headerfile="elements/standard/staticswitch.hh" sourcefile="elements/standard/staticswitch.cc" portcount="1/-" processing="h/h" flowcode="x/x" />
++<entry name="StaticThreadSched" cxxclass="StaticThreadSched" docname="StaticThreadSched" headerfile="elements/linuxmodule/staticthreadsched.hh" sourcefile="elements/linuxmodule/staticthreadsched.cc" portcount="0/0" processing="a/a" flowcode="x/x" requires="linuxmodule" />
++<entry name="StoreData" cxxclass="StoreData" docname="StoreData" headerfile="elements/standard/storedata.hh" sourcefile="elements/standard/storedata.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="StoreIPAddress" cxxclass="StoreIPAddress" docname="StoreIPAddress" headerfile="elements/ip/storeipaddress.hh" sourcefile="elements/ip/storeipaddress.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="StrideSched" cxxclass="StrideSched" docname="StrideSched" headerfile="elements/standard/stridesched.hh" sourcefile="elements/standard/stridesched.cc" portcount="1-/1" processing="l/l" flowcode="x/x" />
++<entry name="StrideSwitch" cxxclass="StrideSwitch" docname="StrideSwitch" headerfile="elements/standard/strideswitch.hh" sourcefile="elements/standard/strideswitch.cc" portcount="1/1-" processing="h/h" flowcode="x/x" requires="StrideSched" />
++<entry name="Strip" cxxclass="Strip" docname="Strip" headerfile="elements/standard/strip.hh" sourcefile="elements/standard/strip.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="StripIPHeader" cxxclass="StripIPHeader" docname="StripIPHeader" headerfile="elements/ip/stripipheader.hh" sourcefile="elements/ip/stripipheader.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="StripToNetworkHeader" cxxclass="StripToNetworkHeader" docname="StripToNetworkHeader" headerfile="elements/standard/striptonet.hh" sourcefile="elements/standard/striptonet.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="Suppressor" cxxclass="Suppressor" docname="Suppressor" headerfile="elements/standard/suppressor.hh" sourcefile="elements/standard/suppressor.cc" portcount="-/=" processing="a/a" flowcode="#/#" />
++<entry name="Switch" cxxclass="Switch" docname="Switch" headerfile="elements/standard/switch.hh" sourcefile="elements/standard/switch.cc" portcount="1/-" processing="h/h" flowcode="x/x" />
++<entry name="TCPRewriter" cxxclass="TCPRewriter" docname="TCPRewriter" headerfile="elements/tcpudp/tcprewriter.hh" sourcefile="elements/tcpudp/tcprewriter.cc" portcount="1-/1-256" processing="h/h" requires="IPRw IPRewriterPatterns" />
++<entry name="Tee" cxxclass="Tee" docname="Tee" headerfile="elements/standard/tee.hh" sourcefile="elements/standard/tee.cc" portcount="1/1-" processing="h/h" flowcode="x/x" />
++<entry name="TimedSink" cxxclass="TimedSink" docname="TimedSink" headerfile="elements/standard/timedsink.hh" sourcefile="elements/standard/timedsink.cc" portcount="1/0" processing="l/l" flowcode="x/x" />
++<entry name="TimedSource" cxxclass="TimedSource" docname="TimedSource" headerfile="elements/standard/timedsource.hh" sourcefile="elements/standard/timedsource.cc" portcount="0/1" processing="h/h" flowcode="x/x" />
++<entry name="ToDevice" cxxclass="ToDevice" docname="ToDevice" headerfile="elements/linuxmodule/todevice.hh" sourcefile="elements/linuxmodule/todevice.cc" portcount="1/0" processing="l/l" methods="static_initialize static_cleanup" requires="AnyDevice linuxmodule" />
++<entry name="ToDevice" cxxclass="ToDevice" docname="ToDevice.u" headerfile="elements/userlevel/todevice.hh" sourcefile="elements/userlevel/todevice.cc" portcount="1/0-2" processing="l/h" flowcode="x/x" flags="S2" requires="FromDevice userlevel" />
++<entry name="ToDump" cxxclass="ToDump" docname="ToDump" headerfile="elements/userlevel/todump.hh" sourcefile="elements/userlevel/todump.cc" portcount="1/0-1" processing="a/a" flowcode="x/x" flags="S2" requires="userlevel|ns FakePcap" />
++<entry name="ToHost" cxxclass="ToHost" docname="ToHost" headerfile="elements/linuxmodule/tohost.hh" sourcefile="elements/linuxmodule/tohost.cc" portcount="1/0" processing="h/h" flags="S2" methods="static_initialize static_cleanup" requires="linuxmodule AnyDevice" />
++<entry name="ToHost" cxxclass="ToHost" docname="ToHost.u" headerfile="elements/userlevel/tohost.hh" sourcefile="elements/userlevel/tohost.cc" portcount="1/0" processing="h/h" flowcode="x/x" requires="userlevel FromHost" />
++<entry name="ToHostSniffers" cxxclass="ToHostSniffers" docname="ToHostSniffers" headerfile="elements/linuxmodule/tohostsniffers.hh" sourcefile="elements/linuxmodule/tohostsniffers.cc" portcount="1/0" processing="h/h" flowcode="x/x" requires="linuxmodule ToHost" />
++<entry name="ToRawSocket" cxxclass="ToRawSocket" docname="ToRawSocket" headerfile="elements/userlevel/torawsocket.hh" sourcefile="elements/userlevel/torawsocket.cc" portcount="0-1/0-1" processing="l/l" flowcode="x/y" requires="RawSocket" />
++<entry name="ToSocket" cxxclass="ToSocket" docname="ToSocket" headerfile="elements/userlevel/tosocket.hh" sourcefile="elements/userlevel/tosocket.cc" portcount="0-1/0-1" processing="l/l" flowcode="x/y" requires="Socket" />
++<entry name="Truncate" cxxclass="Truncate" docname="Truncate" headerfile="elements/standard/truncate.hh" sourcefile="elements/standard/truncate.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="UDPIPEncap" cxxclass="UDPIPEncap" docname="UDPIPEncap" headerfile="elements/tcpudp/udpipencap.hh" sourcefile="elements/tcpudp/udpipencap.cc" portcount="1/1" processing="a/a" flowcode="x/x" flags="A" />
++<entry name="UMLSwitch" cxxclass="UMLSwitch" docname="UMLSwitch" headerfile="elements/userlevel/umlswitch.hh" sourcefile="elements/userlevel/umlswitch.cc" portcount="0-1/0-1" processing="l/h" flowcode="x/y" requires="Socket" />
++<entry name="Unqueue" cxxclass="Unqueue" docname="Unqueue" headerfile="elements/standard/unqueue.hh" sourcefile="elements/standard/unqueue.cc" portcount="1/1" processing="l/h" flowcode="x/x" />
++<entry name="Unqueue2" cxxclass="Unqueue2" docname="Unqueue2" headerfile="elements/standard/unqueue2.hh" sourcefile="elements/standard/unqueue2.cc" portcount="1/1" processing="l/h" flowcode="x/x" />
++<entry name="Unstrip" cxxclass="Unstrip" docname="Unstrip" headerfile="elements/standard/unstrip.hh" sourcefile="elements/standard/unstrip.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry name="UnstripIPHeader" cxxclass="UnstripIPHeader" docname="UnstripIPHeader" headerfile="elements/ip/unstripipheader.hh" sourcefile="elements/ip/unstripipheader.cc" portcount="1/1" processing="a/a" flowcode="x/x" />
++<entry headerfile="elements/linuxmodule/anydevice.hh" sourcefile="elements/linuxmodule/anydevice.cc" requires="linuxmodule" provides="AnyDevice" />
++<entry headerfile="elements/userlevel/fakepcap.hh" sourcefile="elements/userlevel/fakepcap.cc" requires="userlevel|ns" provides="FakePcap" />
++<entry headerfile="elements/userlevel/fromfile.hh" sourcefile="elements/userlevel/fromfile.cc" requires="userlevel|ns FakePcap" provides="FromFile" />
++<entry headerfile="elements/userlevel/handlerproxy.hh" sourcefile="elements/userlevel/handlerproxy.cc" requires="userlevel" provides="HandlerProxy" />
++<entry docname="IPRouteTable" headerfile="elements/ip/iproutetable.hh" sourcefile="elements/ip/iproutetable.cc" provides="IPRouteTable" />
++<entry headerfile="elements/ip/iprw.hh" sourcefile="elements/ip/iprw.cc" provides="IPRw" />
++<entry headerfile="elements/linuxmodule/perfcountuser.hh" sourcefile="elements/linuxmodule/perfcountuser.cc" requires="linuxmodule i586" provides="PerfCountUser" />
++</elementmap>
+diff -Nurb click-1.6.0/inst/share/click/mkinstalldirs click-1.6.0-27/inst/share/click/mkinstalldirs
+--- click-1.6.0/inst/share/click/mkinstalldirs 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/click/mkinstalldirs      2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,158 @@
++#! /bin/sh
++# mkinstalldirs --- make directory hierarchy
++
++scriptversion=2005-06-29.22
++
++# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
++# Created: 1993-05-16
++# Public domain.
++#
++# This file is maintained in Automake, please report
++# bugs to <bug-automake@gnu.org> or send patches to
++# <automake-patches@gnu.org>.
++
++errstatus=0
++dirmode=
++
++usage="\
++Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
++
++Create each directory DIR (with mode MODE, if specified), including all
++leading file name components.
++
++Report bugs to <bug-automake@gnu.org>."
++
++# process command line arguments
++while test $# -gt 0 ; do
++  case $1 in
++    -h | --help | --h*)         # -h for help
++      echo "$usage"
++      exit $?
++      ;;
++    -m)                         # -m PERM arg
++      shift
++      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
++      dirmode=$1
++      shift
++      ;;
++    --version)
++      echo "$0 $scriptversion"
++      exit $?
++      ;;
++    --)                         # stop option processing
++      shift
++      break
++      ;;
++    -*)                         # unknown option
++      echo "$usage" 1>&2
++      exit 1
++      ;;
++    *)                          # first non-opt arg
++      break
++      ;;
++  esac
++done
++
++for file
++do
++  if test -d "$file"; then
++    shift
++  else
++    break
++  fi
++done
++
++case $# in
++  0) exit 0 ;;
++esac
++
++# Solaris 8's mkdir -p isn't thread-safe.  If you mkdir -p a/b and
++# mkdir -p a/c at the same time, both will detect that a is missing,
++# one will create a, then the other will try to create a and die with
++# a "File exists" error.  This is a problem when calling mkinstalldirs
++# from a parallel make.  We use --version in the probe to restrict
++# ourselves to GNU mkdir, which is thread-safe.
++case $dirmode in
++  '')
++    if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
++      echo "mkdir -p -- $*"
++      exec mkdir -p -- "$@"
++    else
++      # On NextStep and OpenStep, the `mkdir' command does not
++      # recognize any option.  It will interpret all options as
++      # directories to create, and then abort because `.' already
++      # exists.
++      test -d ./-p && rmdir ./-p
++      test -d ./--version && rmdir ./--version
++    fi
++    ;;
++  *)
++    if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
++       test ! -d ./--version; then
++      echo "mkdir -m $dirmode -p -- $*"
++      exec mkdir -m "$dirmode" -p -- "$@"
++    else
++      # Clean up after NextStep and OpenStep mkdir.
++      for d in ./-m ./-p ./--version "./$dirmode";
++      do
++        test -d $d && rmdir $d
++      done
++    fi
++    ;;
++esac
++
++for file
++do
++  case $file in
++    /*) pathcomp=/ ;;
++    *)  pathcomp= ;;
++  esac
++  oIFS=$IFS
++  IFS=/
++  set fnord $file
++  shift
++  IFS=$oIFS
++
++  for d
++  do
++    test "x$d" = x && continue
++
++    pathcomp=$pathcomp$d
++    case $pathcomp in
++      -*) pathcomp=./$pathcomp ;;
++    esac
++
++    if test ! -d "$pathcomp"; then
++      echo "mkdir $pathcomp"
++
++      mkdir "$pathcomp" || lasterr=$?
++
++      if test ! -d "$pathcomp"; then
++      errstatus=$lasterr
++      else
++      if test ! -z "$dirmode"; then
++        echo "chmod $dirmode $pathcomp"
++        lasterr=
++        chmod "$dirmode" "$pathcomp" || lasterr=$?
++
++        if test ! -z "$lasterr"; then
++          errstatus=$lasterr
++        fi
++      fi
++      fi
++    fi
++
++    pathcomp=$pathcomp/
++  done
++done
++
++exit $errstatus
++
++# Local Variables:
++# mode: shell-script
++# sh-indentation: 2
++# eval: (add-hook 'write-file-hooks 'time-stamp)
++# time-stamp-start: "scriptversion="
++# time-stamp-format: "%:y-%02m-%02d.%02H"
++# time-stamp-end: "$"
++# End:
+diff -Nurb click-1.6.0/inst/share/click/pkg-Makefile click-1.6.0-27/inst/share/click/pkg-Makefile
+--- click-1.6.0/inst/share/click/pkg-Makefile  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/click/pkg-Makefile       2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,112 @@
++# pkg-Makefile -- build tools for Click
++# Eddie Kohler
++#
++# Copyright (c) 2006 Regents of the University of California
++#
++# Permission is hereby granted, free of charge, to any person obtaining a
++# copy of this software and associated documentation files (the "Software"),
++# to deal in the Software without restriction, subject to the conditions
++# listed in the Click LICENSE file. These conditions include: you must
++# preserve this copyright notice, and you cannot mention the copyright
++# holders in advertising related to the Software without their permission.
++# The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++# notice is a summary of the Click LICENSE file; the license in that file is
++# legally binding.
++
++VPATH ?= .:$(top_srcdir)/$(subdir):$(top_srcdir)
++
++include $(clickdatadir)/pkg-config.mk
++
++ifeq ($(CLICK_PACKAGE_MAKING),userlevel)
++include $(clickdatadir)/pkg-userlevel.mk
++endif
++
++ifeq ($(CLICK_PACKAGE_MAKING),linuxmodule)
++include $(clickdatadir)/pkg-linuxmodule.mk
++endif
++
++ifeq ($(CLICK_PACKAGE_MAKING),bsdmodule)
++include $(clickdatadir)/pkg-bsdmodule.mk
++endif
++
++ifeq ($(CLICK_PACKAGE_MAKING),)
++
++INSTALL ?= $(CLICKINSTALL)
++INSTALL_DATA ?= $(CLICKINSTALL) -m 644
++mkinstalldirs ?= $(clickdatadir)/mkinstalldirs
++
++CLICK_BUILDTOOL = $(clickbindir)/click-buildtool
++CLICK_ELEM2PACKAGE = $(CLICK_BUILDTOOL) elem2package $(ELEM2PACKAGE_INCLUDES)
++
++# set TARGETS, etc. based on MAKE_UPACKAGE, MAKE_KPACKAGE, and MAKE_BPACKAGE
++ifeq ($(MAKE_UPACKAGE),1)
++TARGETS += $(package).uo
++DRIVERS += userlevel
++endif
++ifeq ($(MAKE_KPACKAGE),1)
++TARGETS += $(package).ko
++DRIVERS += linuxmodule
++endif
++ifeq ($(MAKE_BPACKAGE),1)
++TARGETS += $(package).bo
++DRIVERS += bsdmodule
++endif
++
++all: $(TARGETS)
++
++$(package).uo: Makefile always
++      $(MAKE) CLICK_PACKAGE_MAKING=userlevel $(package).uo
++
++$(package).ko: Makefile always
++      $(MAKE) CLICK_PACKAGE_MAKING=linuxmodule $(package).ko
++
++ifneq ($(wildcard $(srcdir)/Makefile.in),)
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++      cd $(top_builddir) \
++        && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
++endif
++
++ifneq ($(wildcard $(top_srcdir)/configure.ac),)
++$(top_builddir)/config.status: $(top_srcdir)/configure
++      cd $(top_builddir) && ./config.status --recheck
++$(top_srcdir)/configure: $(top_srcdir)/configure.ac
++      cd $(top_srcdir) && autoconf
++endif
++
++elemlist:
++      for i in $(DRIVERS); do $(MAKE) CLICK_PACKAGE_MAKING=$$i elemlist; done
++
++elementmap-$(package).xml: $(clickbindir)/click-mkelemmap always
++      r="$(DRIVERS) $(package)"; echo $(srcdir) | $(CLICK_BUILDTOOL) findelem -r "$$r" -P | $(clickbindir)/click-mkelemmap -r "$(package)" -t "$(DRIVERS)" -s `cd $(srcdir) && pwd` > elementmap-$(package).xml
++
++install: install-obj install-man elementmap-$(package).xml always
++      $(mkinstalldirs) $(DESTDIR)$(clickdatadir)
++      $(INSTALL_DATA) elementmap-$(package).xml $(DESTDIR)$(clickdatadir)/elementmap-$(package).xml
++install-obj: $(TARGETS) always
++      $(mkinstalldirs) $(DESTDIR)$(libdir)
++      for i in $(TARGETS); do $(INSTALL_DATA) $$i $(DESTDIR)$(libdir)/$$i; done
++install-man: always elementmap-$(package).xml
++      $(mkinstalldirs) $(DESTDIR)$(mandir)
++      $(mkinstalldirs) $(DESTDIR)$(mandir)/mann
++      $(clickbindir)/click-elem2man -L -d $(DESTDIR)$(mandir)/mann -P $(package) -e $(clickdatadir)/elementmap.xml elementmap-$(package).xml
++
++uninstall: uninstall-obj uninstall-man always
++      /bin/rm -f $(DESTDIR)$(clickdatadir)/elementmap-$(package).xml
++uninstall-obj: always
++      for i in $(TARGETS); do /bin/rm -f $(DESTDIR)$(libdir)/$$i; done
++uninstall-man: always elementmap-$(package).xml
++      $(clickbindir)/click-elem2man -L -d $(DESTDIR)$(mandir)/mann -P $(package) -e $(clickdatadir)/elementmap.xml -u elementmap-$(package).xml
++
++clean: always
++      @for i in $(DRIVERS); do make CLICK_PACKAGE_MAKING=$$i clean; done
++      -rm -f elementmap-$(package).xml conftest.*
++distclean: clean
++      -rm -f Makefile config.h config.status config.cache config.log
++
++always:
++      @:
++
++.PHONY: all always clean distclean elemlist \
++      install install-obj install-man uninstall uninstall-obj uninstall-man
++
++endif
+diff -Nurb click-1.6.0/inst/share/click/pkg-config.mk click-1.6.0-27/inst/share/click/pkg-config.mk
+--- click-1.6.0/inst/share/click/pkg-config.mk 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/click/pkg-config.mk      2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,43 @@
++# pkg-config.mk -- build tools for Click
++# Eddie Kohler
++#
++# Copyright (c) 2006 Regents of the University of California
++#
++# Permission is hereby granted, free of charge, to any person obtaining a
++# copy of this software and associated documentation files (the "Software"),
++# to deal in the Software without restriction, subject to the conditions
++# listed in the Click LICENSE file. These conditions include: you must
++# preserve this copyright notice, and you cannot mention the copyright
++# holders in advertising related to the Software without their permission.
++# The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++# notice is a summary of the Click LICENSE file; the license in that file is
++# legally binding.
++
++CLICKCC = gcc -W -Wall
++CLICKCPP = gcc -W -Wall -E
++CLICKCXX = g++ -W -Wall 
++CLICKCXXCPP = g++ -W -Wall  -E
++
++CLICKAR_CREATE = ar cru
++CLICKRANLIB = ranlib
++CLICKSTRIP = strip
++
++CLICKKERNEL_CC = gcc -w -W -Wall
++CLICKKERNEL_CXX = g++ -w -W -Wall -fno-exceptions -fno-rtti  -D__SMP__
++
++CLICKCPPFLAGS = 
++CLICKCFLAGS = -g -O2
++CLICKCFLAGS_NDEBUG =  -O2
++CLICKCXXFLAGS = -g -O2
++CLICKCXXFLAGS_NDEBUG =  -O2
++CLICKDEPCFLAGS = -MD
++
++CLICKDEFS = -DHAVE_CONFIG_H
++CLICKINCLUDES = -I$(clickincludedir) -I$(clicksrcdir) 
++CLICKLDFLAGS = 
++CLICKLDMODULEFLAGS = -shared
++
++CLICKAUTOCONF = autoconf
++CLICKGMAKE = make
++CLICKINSTALL = /usr/bin/install -c
++
+diff -Nurb click-1.6.0/inst/share/click/pkg-linuxmodule-26.mk click-1.6.0-27/inst/share/click/pkg-linuxmodule-26.mk
+--- click-1.6.0/inst/share/click/pkg-linuxmodule-26.mk 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/click/pkg-linuxmodule-26.mk      2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,92 @@
++# pkg-linuxmodule-26.mk -- build tools for Click
++# Eddie Kohler
++#
++# Copyright (c) 2006-2007 Regents of the University of California
++#
++# Permission is hereby granted, free of charge, to any person obtaining a
++# copy of this software and associated documentation files (the "Software"),
++# to deal in the Software without restriction, subject to the conditions
++# listed in the Click LICENSE file. These conditions include: you must
++# preserve this copyright notice, and you cannot mention the copyright
++# holders in advertising related to the Software without their permission.
++# The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++# notice is a summary of the Click LICENSE file; the license in that file is
++# legally binding.
++
++CLICKBUILD = linux26module
++
++CLICKCPPFLAGS += -DCLICK_LINUXMODULE
++CLICKINCLUDES := -I$(clickincludedir) -I$(clicksrcdir) -I$(clicklinuxdir)/include
++
++LINUXCFLAGS = $(shell echo "$(CPPFLAGS) $(CFLAGS)" | sed \
++      -e s,-fno-unit-at-a-time,, -e s,-Wstrict-prototypes,, \
++      -e s,-Wdeclaration-after-statement,, \
++      -e s,-Wno-pointer-sign,, -e s,-fno-common,,)
++
++CXXFLAGS ?= $(CLICKCXXFLAGS_NDEBUG)
++DEPCFLAGS ?= -Wp,-MD,$(depfile)
++
++DEFS ?= $(CLICKDEFS)
++INCLUDES ?= $(CLICKINCLUDES)
++
++CXXCOMPILE = $(CLICKKERNEL_CXX) $(LINUXCFLAGS) $(CLICKCPPFLAGS) \
++      $(CLICKCFLAGS_NDEBUG) $(CXXFLAGS) $(PACKAGE_CXXFLAGS) \
++      $(DEFS) $(INCLUDES) $(DEPCFLAGS)
++COMPILE = $(CLICKKERNEL_CC) $(LINUXCFLAGS) $(CLICKCPPFLAGS) \
++      $(CLICKCFLAGS_NDEBUG) $(PACKAGE_CFLAGS) \
++      $(DEFS) $(INCLUDES) $(DEPCFLAGS)
++
++packagesrcdir ?= $(srcdir)
++PACKAGE_OBJS ?= kpackage.ko
++
++CLICK_BUILDTOOL ?= $(clickbindir)/click-buildtool
++CLICK_ELEM2PACKAGE ?= $(CLICK_BUILDTOOL) elem2package $(ELEM2PACKAGE_INCLUDES)
++
++quiet_cmd_cxxcompile = CXX $(quiet_modtag) $(subst $(obj)/,,$@)
++cmd_cxxcompile = $(CXXCOMPILE) -c -o $@ $<
++
++quiet_cmd_ccompile = CC $(quiet_modtag) $(subst $(obj)/,,$@)
++cmd_ccompile = $(COMPILE) -c -o $@ $<
++
++EXTRA_CFLAGS += $(CLICKCPPFLAGS) $(CLICKCFLAGS_NDEBUG) $(CLICKDEFS) $(CLICKINCLUDES) 
++
++ifneq ($(KBUILD_EXTMOD),)
++ifeq ($(srcdir),.)
++top_srcdir := $(src)/..
++srcdir := $(src)
++else
++ifneq ($(patsubst /%,/,$(srcdir)),/)
++top_srcdir := $(obj)/$(top_srcdir)
++srcdir := $(obj)/$(srcdir)
++endif
++top_builddir := $(obj)/$(top_builddir)
++builddir := $(obj)
++endif
++
++-include $(obj)/kelements.mk
++
++$(package)-objs := $(ELEMENT_OBJS) $(PACKAGE_OBJS) kversion.ko
++endif
++
++obj-m += $(package).o
++
++$(obj)/kelements.conf: $(CLICK_BUILDTOOL)
++      echo $(packagesrcdir) | $(CLICK_BUILDTOOL) findelem -r linuxmodule -r $(package) -P $(CLICKFINDELEMFLAGS) > $(obj)/kelements.conf
++$(obj)/kelements.mk: $(obj)/kelements.conf $(CLICK_BUILDTOOL)
++      $(CLICK_BUILDTOOL) elem2make -t linuxmodule < $(obj)/kelements.conf > $(obj)/kelements.mk
++$(obj)/kpackage.ko: $(obj)/kpackage.cc
++      $(call if_changed_dep,cxxcompile)
++$(obj)/kpackage.cc: $(obj)/kelements.conf $(CLICK_BUILDTOOL)
++      $(CLICK_ELEM2PACKAGE) $(package) < $(obj)/kelements.conf > $(obj)/kpackage.cc
++      @rm -f $(obj)/kpackage.kd
++$(obj)/kversion.ko: $(obj)/kversion.c
++      $(call if_changed_dep,ccompile)
++$(obj)/kversion.c: $(CLICK_BUILDTOOL)
++      $(CLICK_BUILDTOOL) kversion $(KVERSIONFLAGS) > $(obj)/kversion.c
++
++DEPFILES := $(wildcard *.kd)
++ifneq ($(DEPFILES),)
++include $(DEPFILES)
++endif
++
++.PHONY: clean elemlist
+diff -Nurb click-1.6.0/inst/share/click/pkg-linuxmodule.mk click-1.6.0-27/inst/share/click/pkg-linuxmodule.mk
+--- click-1.6.0/inst/share/click/pkg-linuxmodule.mk    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/click/pkg-linuxmodule.mk 2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,115 @@
++# pkg-linuxmodule.mk -- build tools for Click
++# Eddie Kohler
++#
++# Copyright (c) 2006 Regents of the University of California
++#
++# Permission is hereby granted, free of charge, to any person obtaining a
++# copy of this software and associated documentation files (the "Software"),
++# to deal in the Software without restriction, subject to the conditions
++# listed in the Click LICENSE file. These conditions include: you must
++# preserve this copyright notice, and you cannot mention the copyright
++# holders in advertising related to the Software without their permission.
++# The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++# notice is a summary of the Click LICENSE file; the license in that file is
++# legally binding.
++
++CLICKBUILD = linuxmodule
++
++CC ?= $(CLICKKERNEL_CC)
++CPP ?= $(CLICKCPP)
++CXX ?= $(CLICKKERNEL_CXX)
++CXXCPP ?= $(CLICKCXXCPP)
++AR_CREATE ?= $(CLICKAR_CREATE)
++RANLIB ?= $(CLICKRANLIB)
++STRIP ?= $(CLICKSTRIP)
++
++CPPFLAGS ?= $(CLICKCPPFLAGS) -DCLICK_LINUXMODULE
++CFLAGS ?= $(CLICKCFLAGS_NDEBUG)
++CXXFLAGS ?= $(CLICKCXXFLAGS_NDEBUG)
++DEPCFLAGS ?= $(CLICKDEPCFLAGS)
++
++DEFS ?= $(CLICKDEFS)
++INCLUDES ?=  -I$(clickincludedir) -I$(clicksrcdir) -I$(clicklinuxdir)/include
++LDFLAGS ?= $(CLICKLDFLAGS)
++
++packagesrcdir ?= $(srcdir)
++PACKAGE_OBJS ?= kpackage.ko
++
++CLICK_BUILDTOOL ?= $(clickbindir)/click-buildtool
++CLICK_ELEM2PACKAGE ?= $(CLICK_BUILDTOOL) elem2package $(ELEM2PACKAGE_INCLUDES)
++
++ifneq ($(CLICK_LINUXMODULE_2_6),1)
++
++CXXCOMPILE = $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(PACKAGE_CXXFLAGS) $(DEFS) $(INCLUDES) $(DEPCFLAGS)
++CXXLD = $(CXX)
++CXXLINK = $(CXXLD) $(CXXFLAGS) $(LDFLAGS) -o $@
++COMPILE = $(CC) $(CPPFLAGS) $(CFLAGS) $(PACKAGE_CFLAGS) $(DEFS) $(INCLUDES) $(DEPCFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(CFLAGS) $(LDFLAGS) -o $@
++FIXDEP = @-sed 's/\.o:/\.ko:/' < $*.d > $*.kd; /bin/rm -f $*.d
++
++ifeq ($(V),1)
++ccompile = $(COMPILE) $(1)
++cxxcompile = $(CXXCOMPILE) $(1)
++else
++ccompile = @/bin/echo ' ' $(2) $< && $(COMPILE) $(1)
++cxxcompile = @/bin/echo ' ' $(2) $< && $(CXXCOMPILE) $(1)
++endif
++
++.SUFFIXES:
++.SUFFIXES: .c .cc .ko .kii
++
++.c.ko:
++      $(call ccompile,-c $< -o $@,CC)
++      $(FIXDEP)
++.cc.ko:
++      $(call cxxcompile,-c $< -o $@,CXX)
++      $(FIXDEP)
++.cc.kii:
++      $(call cxxcompile,-E $< > $@,CXXCPP)
++
++ifneq ($(MAKECMDGOALS),clean)
++-include kelements.mk
++endif
++
++OBJS = $(ELEMENT_OBJS) $(PACKAGE_OBJS) kversion.ko
++
++endif
++
++ifeq ($(CLICK_LINUXMODULE_2_6),1)
++# Jump through hoops to avoid missing symbol warnings
++$(package).ko: Makefile Kbuild always
++      { ( $(MAKE) -C $(clicklinuxdir) M=$(shell pwd) CLICK_PACKAGE_MAKING=linuxmodule-26 modules 2>&1 1>&3; echo $$? > .$(package).ko.status ) | grep -v '^\*\*\* Warning:.*undefined' 1>&2; } 3>&1; v=`cat .$(package).ko.status`; rm .$(package).ko.status; exit $$v
++Kbuild: $(CLICK_BUILDTOOL)
++      echo 'include $$(obj)/Makefile' > Kbuild
++      $(CLICK_BUILDTOOL) kbuild >> Kbuild
++else
++$(package).ko: $(clickdatadir)/pkg-linuxmodule.mk $(OBJS)
++      $(LD) -r -o $(package).ko $(OBJS)
++      $(STRIP) -g $(package).ko
++endif
++
++elemlist kelements.conf: $(CLICK_BUILDTOOL)
++      echo $(packagesrcdir) | $(CLICK_BUILDTOOL) findelem -r linuxmodule -r $(package) -P $(CLICKFINDELEMFLAGS) > kelements.conf
++kelements.mk: kelements.conf $(CLICK_BUILDTOOL)
++      $(CLICK_BUILDTOOL) elem2make -t linuxmodule < kelements.conf > kelements.mk
++kpackage.cc: kelements.conf $(CLICK_BUILDTOOL)
++      $(CLICK_ELEM2PACKAGE) $(package) < kelements.conf > kpackage.cc
++      @rm -f kpackage.kd
++kversion.c: $(CLICK_BUILDTOOL)
++      $(CLICK_BUILDTOOL) kversion $(KVERSIONFLAGS) > kversion.c
++
++DEPFILES := $(wildcard *.kd)
++ifneq ($(DEPFILES),)
++include $(DEPFILES)
++endif
++
++always:
++      @:
++clean:
++      -rm -f $(package).ko .$(package).ko.status
++      -rm -f *.kd *.ko kelements.conf kelements.mk kpackage.cc kversion.c Kbuild
++      -rm -f .*.o.cmd .*.ko.cmd $(package).mod.c $(package).mod.o $(package).o
++      -rm -rf .tmp_versions
++
++.PHONY: clean elemlist always
+diff -Nurb click-1.6.0/inst/share/click/pkg-userlevel.mk click-1.6.0-27/inst/share/click/pkg-userlevel.mk
+--- click-1.6.0/inst/share/click/pkg-userlevel.mk      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/click/pkg-userlevel.mk   2009-02-05 10:20:41.000000000 -0500
+@@ -0,0 +1,96 @@
++# pkg-userlevel.mk -- build tools for Click
++# Eddie Kohler
++#
++# Copyright (c) 2006-2007 Regents of the University of California
++#
++# Permission is hereby granted, free of charge, to any person obtaining a
++# copy of this software and associated documentation files (the "Software"),
++# to deal in the Software without restriction, subject to the conditions
++# listed in the Click LICENSE file. These conditions include: you must
++# preserve this copyright notice, and you cannot mention the copyright
++# holders in advertising related to the Software without their permission.
++# The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++# notice is a summary of the Click LICENSE file; the license in that file is
++# legally binding.
++
++CLICKBUILD = userlevel
++
++CC ?= $(CLICKCC)
++CPP ?= $(CLICKCPP)
++CXX ?= $(CLICKCXX)
++CXXCPP ?= $(CLICKCXXCPP)
++AR_CREATE ?= $(CLICKAR_CREATE)
++RANLIB ?= $(CLICKRANLIB)
++STRIP ?= $(CLICKSTRIP)
++
++CPPFLAGS ?= $(CLICKCPPFLAGS) -DCLICK_USERLEVEL
++CFLAGS ?= $(CLICKCFLAGS) -fPIC
++CXXFLAGS ?= $(CLICKCXXFLAGS) -fPIC
++DEPCFLAGS ?= $(CLICKDEPCFLAGS)
++
++DEFS ?= $(CLICKDEFS)
++INCLUDES ?= $(CLICKINCLUDES)
++LDFLAGS ?= $(CLICKLDMODULEFLAGS)
++
++packagesrcdir ?= $(srcdir)
++PACKAGE_OBJS ?= upackage.uo
++
++CLICK_BUILDTOOL ?= $(clickbindir)/click-buildtool
++CLICK_ELEM2PACKAGE ?= $(CLICK_BUILDTOOL) elem2package $(ELEM2PACKAGE_INCLUDES)
++STRIP_UPACKAGE ?= true
++
++CXXCOMPILE = $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(PACKAGE_CXXFLAGS) $(DEFS) $(INCLUDES) $(DEPCFLAGS)
++CXXLD = $(CXX)
++CXXLINK = $(CXXLD) $(CXXFLAGS) $(LDFLAGS) -o $@
++COMPILE = $(CC) $(CPPFLAGS) $(CFLAGS) $(PACKAGE_CFLAGS) $(DEFS) $(INCLUDES) $(DEPCFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(CFLAGS) $(LDFLAGS) -o $@
++FIXDEP = @-sed 's/\.o:/\.uo:/' < $*.d > $*.ud; /bin/rm -f $*.d
++
++ifeq ($(V),1)
++ccompile = $(COMPILE) $(1)
++cxxcompile = $(CXXCOMPILE) $(1)
++else
++ccompile = @/bin/echo ' ' $(2) $< && $(COMPILE) $(1)
++cxxcompile = @/bin/echo ' ' $(2) $< && $(CXXCOMPILE) $(1)
++endif
++
++.SUFFIXES:
++.SUFFIXES: .c .cc .uo .uii
++
++.c.uo:
++      $(call ccompile,-c $< -o $@,CC)
++      $(FIXDEP)
++.cc.uo:
++      $(call cxxcompile,-c $< -o $@,CXX)
++      $(FIXDEP)
++.cc.uii:
++      $(call cxxcompile,-E $< > $@,CXXCPP)
++
++ifneq ($(MAKECMDGOALS),clean)
++-include uelements.mk
++endif
++
++OBJS = $(ELEMENT_OBJS) $(PACKAGE_OBJS)
++
++$(package).uo: $(clickdatadir)/pkg-userlevel.mk $(OBJS)
++      $(CXXLINK) -o $(package).uo $(OBJS) $(ELEMENT_LIBS)
++      $(STRIP_UPACKAGE) $(package).uo
++
++elemlist uelements.conf: $(CLICK_BUILDTOOL)
++      echo $(packagesrcdir) | $(CLICK_BUILDTOOL) findelem -r userlevel -r $(package) -P $(CLICKFINDELEMFLAGS) > uelements.conf
++uelements.mk: uelements.conf $(CLICK_BUILDTOOL)
++      $(CLICK_BUILDTOOL) elem2make -t userlevel < uelements.conf > uelements.mk
++upackage.cc: uelements.conf $(CLICK_BUILDTOOL)
++      $(CLICK_ELEM2PACKAGE) $(package) < uelements.conf > upackage.cc
++      @rm -f upackage.ud
++
++DEPFILES := $(wildcard *.ud)
++ifneq ($(DEPFILES),)
++include $(DEPFILES)
++endif
++
++clean:
++      -rm -f *.ud *.uo uelements.conf uelements.mk upackage.cc $(package).uo
++
++.PHONY: clean elemlist
+diff -Nurb click-1.6.0/inst/share/click/srcdir click-1.6.0-27/inst/share/click/srcdir
+--- click-1.6.0/inst/share/click/srcdir        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/click/srcdir     2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1 @@
++/d/click/click-1.6.0-27
+diff -Nurb click-1.6.0/inst/share/info/click.info click-1.6.0-27/inst/share/info/click.info
+--- click-1.6.0/inst/share/info/click.info     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/info/click.info  2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,2656 @@
++This is click.info, produced by makeinfo version 4.8 from
++../../doc/click.texi.
++
++INFO-DIR-SECTION Click modular router
++START-INFO-DIR-ENTRY
++* Click: (click).           The Click modular router programming manual.
++END-INFO-DIR-ENTRY
++
++\1f
++File: click.info,  Node: Top,  Next: Overview,  Prev: (dir),  Up: (dir)
++
++Click
++*****
++
++This document describes the Click modular router's programming
++interface. Read this if you're interested in writing new elements for
++Click. You shouldn't need to read it if you are just building routers
++that use existing elements.
++
++   Most of Click's programming interface documentation is now stored in
++the source code as structured comments.  The formatted documentation is
++on the Web: <http://www.read.cs.ucla.edu/click/doxygen>
++
++* Menu:
++
++* Overview::
++* Helper Classes::
++* Packets::
++* Tasks::
++* Timers::
++* Notification::
++* Coding Standards::
++* Index::                       Index.
++
++ --- The Detailed Node Listing ---
++
++Overview
++
++* Packet Transfer::
++
++Helper Classes
++
++* ErrorHandler::
++
++ErrorHandler
++
++* ErrorHandler Initialization::
++* Reporting Errors::
++* Error Format Strings::
++* Counting Errors::
++* Basic ErrorHandlers::
++* Error Veneers::
++* Writing ErrorHandlers::
++
++Packets
++
++* Packet Structure and Contents::
++* Packet Creation::
++* Packets and sk_buffs::
++* Packet Sharing::
++* Packet Buffer Manipulation::
++* Annotations::
++* Packet Out-of-Memory::
++* Handlers::
++
++Annotations
++
++* Header Annotations::
++* User Annotations::
++* Specific User Annotations::
++* Other Annotations::
++* Annotations In General::
++
++Other Annotations
++
++* Destination Address Annotation::
++* Timestamp Annotation::
++* Device Annotation::
++* Packet Type Annotation::
++* Performance Counter Annotation::
++
++Handlers
++
++* Read and Write Handler Overview::
++* Adding Handlers::
++* Default Handlers::
++* Accessing Handlers Internally::
++* LLRPC Overview::
++
++Accessing Handlers Internally
++
++* Handler Objects::
++* Handlers By Name or Index::
++
++Tasks
++
++* Task Initialization::
++* Scheduling Tasks::
++* Tickets::
++* Task Thread Choice::
++* Task Status::
++* Task Handlers::
++* Task Cleanup::
++
++Timers
++
++* Timer Initialization::
++* Scheduling Timers::
++* Timer Status Methods::
++* Timer Cleanup::
++
++Coding Standards
++
++* Upper and lower case names::
++* Common name patterns::
++
++\1f
++File: click.info,  Node: Overview,  Next: Helper Classes,  Prev: Top,  Up: Top
++
++1 Overview
++**********
++
++* Menu:
++
++* Packet Transfer::
++
++\1f
++File: click.info,  Node: Packet Transfer,  Prev: Overview,  Up: Overview
++
++1.1 Packet Transfer
++===================
++
++\1f
++File: click.info,  Node: Helper Classes,  Next: Packets,  Prev: Overview,  Up: Top
++
++2 Helper Classes
++****************
++
++* Menu:
++
++* ErrorHandler::
++
++\1f
++File: click.info,  Node: ErrorHandler,  Prev: Helper Classes,  Up: Helper Classes
++
++2.1 ErrorHandler
++================
++
++All Click error messages are passed to an instance of the
++`ErrorHandler' class. `ErrorHandler' separates the generation of error
++messages from the particular way those messages should be printed. It
++also makes it easy to automatically decorate errors with context
++information.
++
++   Most Click users must know how to report errors to an
++`ErrorHandler', and how `ErrorHandler's count the messages they
++receive. This section also describes how to decorate error messages
++with error veneers, and how to write new `ErrorHandler's.
++
++   `ErrorHandler' and its important subclasses are defined in
++`<click/error.hh>'.
++
++* Menu:
++
++* ErrorHandler Initialization::
++* Reporting Errors::
++* Error Format Strings::
++* Counting Errors::
++* Basic ErrorHandlers::
++* Error Veneers::
++* Writing ErrorHandlers::
++
++\1f
++File: click.info,  Node: ErrorHandler Initialization,  Next: Reporting Errors,  Prev: ErrorHandler,  Up: ErrorHandler
++
++2.1.1 Class Initialization
++--------------------------
++
++The `ErrorHandler' class maintains some global state that must be
++initialized by calling `static_initialize' at the beginning of the
++program, and may be freed by calling `static_cleanup' when execution is
++complete.
++
++ -- Static Method on ErrorHandler: void static_initialize (ErrorHandler
++          *DEFAULT_ERRH)
++     Call this function exactly once, at the beginning of the program,
++     before any error messages are reported to any `ErrorHandler'. It
++     is OK to create arbitrary `ErrorHandler' objects before calling
++     this method, however. The DEFAULT_ERRH argument becomes the default
++     `ErrorHandler'; see *Note Basic ErrorHandlers::.
++
++ -- Static Method on ErrorHandler: void static_cleanup ()
++     Call this function exactly once, just before the program exits.
++     Destroys the default and silent `ErrorHandler's and cleans up other
++     `ErrorHandler'-related memory. It is an error to call any
++     `ErrorHandler' method after calling `static_cleanup'.
++
++\1f
++File: click.info,  Node: Reporting Errors,  Next: Error Format Strings,  Prev: ErrorHandler Initialization,  Up: ErrorHandler
++
++2.1.2 Reporting Errors
++----------------------
++
++`ErrorHandler''s basic error reporting methods take a format string,
++which may use `printf'-like `%' escape sequences, and additional
++arguments as required by the format string. *Note Error Format
++Strings::, for more details on the format string. The five methods
++differ in the seriousness of the error they report.
++
++ -- Method on ErrorHandler: void debug (const char *FORMAT, ...)
++ -- Method on ErrorHandler: void message (const char *FORMAT, ...)
++ -- Method on ErrorHandler: int warning (const char *FORMAT, ...)
++ -- Method on ErrorHandler: int error (const char *FORMAT, ...)
++ -- Method on ErrorHandler: int fatal (const char *FORMAT, ...)
++     Report the error described by FORMAT and any additional arguments.
++     The methods are listed by increasing seriousness. Use `debug' for
++     debugging messages that should not be printed in a production
++     environment; `message' for explanatory messages that do not
++     indicate errors; `warning' for warnings (this function prepends the
++     string `warning: ' to every line of the error message); `error'
++     for errors; and `fatal' for errors so serious that they should
++     halt the execution of the program. The three functions that
++     indicate errors, `warning', `error', and `fatal', always return
++     `-EINVAL'. In some environments, `fatal' will actually exit the
++     program with exit code 1.
++
++   Each of these methods has an analogue that additionally takes a
++"landmark": a string representing where the error took place. A typical
++landmark contains a file name and line number, separated by a
++colon--`foo.click:31', for example.
++
++ -- Method on ErrorHandler: void ldebug (const String &LANDMARK, const
++          char *FORMAT, ...)
++ -- Method on ErrorHandler: void lmessage (const String &LANDMARK,
++          const char *FORMAT, ...)
++ -- Method on ErrorHandler: int lwarning (const String &LANDMARK, const
++          char *FORMAT, ...)
++ -- Method on ErrorHandler: int lerror (const String &LANDMARK, const
++          char *FORMAT, ...)
++ -- Method on ErrorHandler: int lfatal (const String &LANDMARK, const
++          char *FORMAT, ...)
++     Report the error described by FORMAT and any additional arguments.
++     The error took place at LANDMARK. Most `ErrorHandler's will simply
++     prepend `LANDMARK: ' to each line of the error message.
++
++   These methods are all implemented as wrappers around the `verror'
++function. This function takes a landmark, a format string, a `va_list'
++packaging up any additional arguments, and a "seriousness value", which
++encodes how serious the error was. The `Seriousness' enumerated type,
++which is defined in the `ErrorHandler' class, represents seriousness
++values. There are five constants, corresponding to the five
++error-reporting methods:
++
++`ERR_DEBUG'
++     Corresponds to `debug' and `ldebug'.
++
++`ERR_MESSAGE'
++     Corresponds to `message' and `lmessage'.
++
++`ERR_WARNING'
++     Corresponds to `warning' and `lwarning'.
++
++`ERR_ERROR'
++     Corresponds to `error' and `lerror'.
++
++`ERR_FATAL'
++     Corresponds to `fatal' and `lfatal'.
++
++ -- Method on ErrorHandler: int verror (Seriousness SERIOUSNESS, const
++          String &LANDMARK, const char *FORMAT, va_list VAL)
++     Report the error described by FORMAT and VAL. The error took place
++     at LANDMARK, if LANDMARK is nonempty. The SERIOUSNESS value is one
++     of the five constants described above.  Always returns `-EINVAL'.
++
++\1f
++File: click.info,  Node: Error Format Strings,  Next: Counting Errors,  Prev: Reporting Errors,  Up: ErrorHandler
++
++2.1.3 Format Strings
++--------------------
++
++`ErrorHandler''s format strings closely follow C's standard `printf'
++format strings. Most characters in the format string are printed
++verbatim. The `%' character introduces a "conversion", which prints
++data read from the remaining arguments. The format string may contain
++newlines `\n', but it need not end with a newline; `ErrorHandler' will
++add a final newline if one does not exist.
++
++   Each conversion, or formatting escape, follows this pattern:
++
++   * First, the `%' character introduces each conversion.
++
++   * Next comes zero or more "flag characters";
++
++   * then an optional "field width";
++
++   * then an optional "precision";
++
++   * then an optional "length modifier";
++
++   * and finally, the mandatory "conversion specifier", which is
++     usually a single character, but may be a name enclosed in braces.
++
++We discuss each of these is turn.
++
++   Any conversion may be modified by zero or more of these flag
++characters.
++
++`#'
++     The value should be converted to an "alternate form". For `o'
++     conversions, the first character of the output string is made `0',
++     by prepending a `0' if there was not one already. For `x' and `X'
++     conversions, nonzero values have `0x' or `0X' prepended,
++     respectively.
++
++`0'
++     The value should be zero padded. For `d', `i', `u', `o', `x', and
++     `X' conversions, the converted value is padded on the left with
++     `0' characters rather than spaces.
++
++`-'
++     The value should be left-justified within the field width.
++
++` ' (a space)
++     Leave a blank before a nonnegative number produced by a signed
++     conversion.
++
++`+'
++     Print a `+' character before a nonnegative number produced by a
++     signed conversion.
++
++
++   The optional "field width", a decimal digit string, forces the
++conversion to use a minimum number of characters. The result of a
++conversion is padded on the left with space characters to reach the
++minimum field width, unless one of the `0' or `-' flags was supplied.
++
++   The optional "precision" is a decimal digit string preceded by a
++period `.'. For `d', `i', `u', `o', `x', and `X' conversions, the
++precision specifies the minimum number of digits that must appear;
++results with fewer digits are padded on the left with `0' characters.
++For the `s' conversion, the precision specifies the maximum number of
++characters that can be printed. For `e', `f', `E', and `F' conversions,
++it specifies the number of digits to appear after the radix character;
++for `g' and `G' conversions, the number of significant digits.
++
++   If either the field width or precision is specified as a star `*',
++`ErrorHandler' reads the next argument as an integer and uses that
++instead.
++
++   Length modifiers affect the argument type read by the conversion.
++There are three modifiers:
++
++`h'
++     The next argument is a `short' or `unsigned short'. Affects the
++     `d', `i', `u', `o', `x', and `X' conversions.
++
++`l'
++     The next argument is a `long' or `unsigned long'. Affects the `d',
++     `i', `u', `o', `x', and `X' conversions.
++
++`ll'
++     The next argument is a `long long' or `unsigned long long'.
++     Affects the `d', `i', `u', `o', `x', and `X' conversions.
++
++   Finally, these are the conversions themselves.
++
++`s'
++     Print the `const char *' argument, treated as a C string.
++
++`c'
++     The `int' argument is treated as a character constant. Printable
++     ASCII characters (values between 32 and 126) are printed verbatim.
++     Characters `\n', `\t', `\r', and `\0' use those C escape
++     representations. Other characters use the representation `\%03o'.
++
++`d', `i'
++     The argument is an `int'; print its decimal representation.
++
++`u'
++     The argument is an `unsigned int'; print its decimal
++     representation.
++
++`o'
++     The argument is an `unsigned int'; print its octal representation.
++
++`x', `X'
++     The argument is an `unsigned int'; print its hexadecimal
++     representation. The `%x' conversion uses lowercase letters; `%X'
++     uses uppercase letters.
++
++`e', `f', `g', `E', `F', `G'
++     The argument is a `double'; print its representation as if by
++     `printf' (user-level drivers only).
++
++`p'
++     The `void *' argument is cast to `unsigned long' and printed as by
++     `%#lx'.
++
++`%'
++     Print a literal `%' character.
++
++`{element}'
++     The argument is an `Element *'. Print that element's declaration.
++
++
++   Note that `ErrorHandler' does not support the `n' conversion.
++
++\1f
++File: click.info,  Node: Counting Errors,  Next: Basic ErrorHandlers,  Prev: Error Format Strings,  Up: ErrorHandler
++
++2.1.4 Counting Errors
++---------------------
++
++`ErrorHandler' objects count the number of errors and warnings they
++have received and make those values available to the user.
++
++ -- Method on ErrorHandler: virtual int nwarnings () const
++ -- Method on ErrorHandler: virtual int nerrors () const
++     Returns the number of warnings or errors received by this
++     `ErrorHandler' so far.
++
++ -- Method on ErrorHandler: virtual void reset_counts ()
++     Resets the `nwarnings' and `nerrors' counters to zero.
++
++   These counters are typically used to determine whether an error has
++taken place in some complex piece of code. For example:
++
++     int before_nerrors = errh->nerrors();
++     // ... complex code that may report errors to `errh' ...
++     if (errh->nerrors() != before_nerrors) {
++         // an error has taken place
++     }
++
++\1f
++File: click.info,  Node: Basic ErrorHandlers,  Next: Error Veneers,  Prev: Counting Errors,  Up: ErrorHandler
++
++2.1.5 Basic `ErrorHandler's
++---------------------------
++
++Every Click error message eventually reaches some "basic"
++`ErrorHandler', which generally prints the messages it receives.  The
++user-level driver's basic `ErrorHandler' prints error messages to
++standard error, while in the Linux kernel module, the basic
++`ErrorHandler' logs messages to the syslog and stores them for access
++via `/click/errors'.
++
++   Two basic `ErrorHandlers' are always accessible via static methods:
++the "default `ErrorHandler'", returned by `default_handler' and set by
++`set_default_handler'; and the "silent `ErrorHandler'", returned by
++`silent_handler', which ignores any error messages it receives.
++
++ -- Static Method on ErrorHandler: ErrorHandler * default_handler ()
++     Returns the default `ErrorHandler'.
++
++ -- Static Method on ErrorHandler: void set_default_handler
++          (ErrorHandler *errh)
++     Sets the default `ErrorHandler' to ERRH. The `static_initialize'
++     method also sets the default `ErrorHandler'; see *Note
++     ErrorHandler Initialization::.
++
++ -- Static Method on ErrorHandler: ErrorHandler * silent_handler ()
++     Returns the silent `ErrorHandler'. This handler ignores any error
++     messages it receives. It maintains correct `nwarnings' and
++     `nerrors' counts, however.
++
++   `FileErrorHandler', a kind of basic `ErrorHandler', is available in
++any user-level program. It prints every message it receives to some
++file, usually standard error. It can also prepend an optional context
++string to every line of every error message.
++
++ -- Constructor on FileErrorHandler:  FileErrorHandler (FILE *F,
++          const String &PREFIX = "")
++     Constructs a `FileErrorHandler' that prints error messages to file
++     F. If PREFIX is nonempty, then every line of every error message
++     is prepended by PREFIX.
++
++\1f
++File: click.info,  Node: Error Veneers,  Next: Writing ErrorHandlers,  Prev: Basic ErrorHandlers,  Up: ErrorHandler
++
++2.1.6 Error Veneers
++-------------------
++
++"Error veneers" wrap around basic `ErrorHandler' objects and change how
++error text is generated. An error veneer generally changes each error
++message's text in some way, perhaps by adding a context message or some
++indentation. It then passes the altered text to the basic
++`ErrorHandler' for printing. Error veneers can be easily nested.
++
++   The first argument to each error veneer constructor is a pointer to
++another `ErrorHandler' object. The veneer will pass altered error text
++to this handler, the "base handler", for further processing and
++printing. It also delegates `nwarnings()' and `nerrors()' calls to the
++base handler.
++
++   Click comes with three error veneers: one for adding context, one for
++prepending text to every line, and one for supplying missing landmarks.
++It is easy to write others; see *Note Writing ErrorHandlers::, for
++details.
++
++ -- Constructor on ContextErrorHandler:  ContextErrorHandler
++          (ErrorHandler *BASE_ERRH, const String &CONTEXT,
++          const String &INDENT = "  ")
++     Constructs a `ContextErrorHandler' with BASE_ERRH as base.
++
++     The first time this handler receives an error message, it will
++     precede the message with the CONTEXT string--generally more
++     detailed information about where the error has occurred. Every
++     line in every received error message is prepended with INDENT, two
++     spaces by default, to set off the message from its context.
++
++ -- Constructor on PrefixErrorHandler:  PrefixErrorHandler
++          (ErrorHandler *BASE_ERRH, const String &PREFIX)
++     Constructs a `PrefixErrorHandler' with BASE_ERRH as base.
++
++     This handler precedes every line of every error message with
++     PREFIX.
++
++ -- Constructor on LandmarkErrorHandler:  LandmarkErrorHandler
++          (ErrorHandler *BASE_ERRH, const String &LANDMARK)
++     Constructs a `LandmarkErrorHandler' with BASE_ERRH as base.
++
++     This handler supplies LANDMARK in place of any blank landmark
++     passed to it. This will cause the base handler to include LANDMARK
++     in its error message.
++
++   To demonstrate these veneers in practice, we'll use the following
++function, which prints two error messages:
++
++     void f(ErrorHandler *errh) {
++         errh->error("First line\nSecond line");
++         errh->lwarning("here", "Third line");
++     }
++
++   A simple `FileErrorHandler' shows the base case.
++
++     FileErrorHandler errh1(stderr);
++     f(&errh1);
++         -| First line
++         -| Second line
++         -| here: warning: Third line
++
++   The simplest error veneer, `PrefixErrorHandler', just prepends text
++to every line.
++
++     PrefixErrorHandler errh2(&errh1, "prefix - ");
++     f(&errh2);
++         -| prefix - First line
++         -| prefix - Second line
++         -| prefix - here: warning: Third line
++
++   `ContextErrorHandler' supplies a line of context before the first
++error message, and indents all messages except the context.
++
++     ContextErrorHandler errh3(&errh1, "This was called from ...", "** ");
++     f(&errh3);
++         -| This was called from ...
++         -| ** First line
++         -| ** Second line
++         -| here: ** warning: Third line
++
++Note that the indentation `** ' is printed after the landmark.  This
++often looks better than the alternative.
++
++   Of course, an error veneer can take another error veneer as its "base
++handler", leading to cumulative effects.
++
++     ContextErrorHandler errh4(&errh2, "This was called from ...", "** ");
++     f(&errh4);
++         -| prefix - This was called from ...
++         -| prefix - ** First line
++         -| prefix - ** Second line
++         -| prefix - here: ** warning: Third line
++
++\1f
++File: click.info,  Node: Writing ErrorHandlers,  Prev: Error Veneers,  Up: ErrorHandler
++
++2.1.7 Writing `ErrorHandler's
++-----------------------------
++
++`ErrorHandler' constructs an error message using three virtual
++functions. The first, `make_text', parses a format string and argument
++list into a single `String'. This is passed to the second function,
++`decorate_text', which may transform the string. The final function,
++`handle_text', prints the resulting error message.  This structure
++makes `ErrorHandler' easy to extend. To write a new basic
++`ErrorHandler', you will need to override just `handle_text' and the
++counting functions (`nwarnings', `nerrors', and `reset_counts'). The
++`ErrorVeneer' helper class, described below, lets you override just
++`decorate_text' when writing an error veneer.
++
++ -- Method on ErrorHandler: virtual String make_text (Seriousness S,
++          const char *FORMAT, va_list VAL)
++     Parses the format string FORMAT with arguments from VAL, returning
++     the results as a STRING object.
++
++     The default implementation processes the formatting escapes
++     described above (*note Error Format Strings::). It also prepends
++     every line of the error message with `warning: ' if S equals
++     `ERR_WARNING'.
++
++ -- Method on ErrorHandler: virtual String decorate_text (Seriousness
++          S, const String &PREFIX, const String &LANDMARK, const String
++          &TEXT)
++     Decorates the error message TEXT as appropriate and returns the
++     result. At minimum, every line of the result should be prepended by
++     PREFIX and, if it is nonempty, the landmark string LANDMARK.
++
++     The default implementation creates lines like this:
++
++          PREFIXLANDMARK: TEXT     (if LANDMARK is nonempty)
++          PREFIXTEXT               (if LANDMARK is empty)
++
++     Any spaces and/or a final colon are stripped from the end of
++     LANDMARK. Special landmarks, which begin and end with a backslash
++     `\', are ignored.
++
++ -- Method on ErrorHandler: virtual void handle_text
++          (Seriousness S, const String &TEXT)
++     This method is responsible for printing or otherwise informing the
++     user about the error message TEXT. If S equals `ERR_FATAL', the
++     method should exit the program or perform some other drastic
++     action.  It should also maintain the `nwarnings()' and `nerrors()'
++     counters. In most cases, it should ensure that the last character
++     in TEXT is a newline.
++
++     This method has no default implementation.
++
++   The `ErrorVeneer' class, a subclass of `ErrorHandler', supplies
++default implementations for these functions that ease the construction
++of new error veneers. `ErrorVeneer''s single instance variable,
++`ErrorHandler *_errh', is the base handler.  `ErrorVeneer' overrides
++all the relevant virtual functions--`nwarnings', `nerrors',
++`reset_counts', `make_text', `decorate_text', and `handle_text'. Its
++versions simply delegate to the corresponding methods on `_errh'.  An
++error veneer designer will generally subclass `ErrorVeneer' rather than
++`ErrorHandler'; then she will override only the methods she cares about
++(usually `decorate_text'), relying on `ErrorVeneer''s default
++implementations for the rest.
++
++ -- Constructor on ErrorVeneer:  ErrorVeneer (ErrorHandler *BASE_ERRH)
++     Constructs an `ErrorVeneer' helper class with BASE_ERRH as its
++     base error handler. This constructor simply sets `_errh =
++     base_errh'.
++
++\1f
++File: click.info,  Node: Packets,  Next: Tasks,  Prev: Helper Classes,  Up: Top
++
++3 Packets
++*********
++
++The `Packet' class represents Click packets. The single `Packet'
++interface has multiple implementations, one per driver.  Inside the
++Linux kernel driver, a `Packet' object is equivalent to a Linux
++`sk_buff' structure; most `Packet' methods are inline functions that
++expand to `sk_buff' calls. The user-level driver, however, uses a
++purpose-built `Packet' implementation.
++
++   Click packets separate header information from data. The `Packet *'
++pointer points to a header structure, which holds pointers to the
++actual packet data and a set of "annotations". Packet data may be
++shared by two or more packet headers. Packet headers, however, should
++never be shared.
++
++   Packets come in two flavors, `Packet' and `WritablePacket'. A
++`Packet' object represents a packet header whose data might be shared
++with other packets. Because of this potential sharing, `Packet' data is
++read-only, and its methods return `const' pointers to data. A
++`WritablePacket' object, in contrast, represents a packet header whose
++data is known not to be shared. Its methods return non-`const'
++pointers. The `uniqueify' method turns a `Packet' into a
++`WritablePacket', possibly by making a copy of the packet's data.
++`WritablePacket' is a subclass of `Packet', so you can turn a
++`WritablePacket' into a `Packet' implicitly.
++
++   The `Packet' and `WritablePacket' classes are defined in
++`<click/packet.hh>'.
++
++* Menu:
++
++* Packet Structure and Contents::
++* Packet Creation::
++* Packets and sk_buffs::
++* Packet Sharing::
++* Packet Buffer Manipulation::
++* Annotations::
++* Packet Out-of-Memory::
++* Handlers::
++
++\1f
++File: click.info,  Node: Packet Structure and Contents,  Next: Packet Creation,  Prev: Packets,  Up: Packets
++
++3.1 Structure and Contents
++==========================
++
++Packet data is stored in a single flat array of bytes. There is no
++support for linked chains a` la BSD `mbuf'. The actual packet data is
++embedded inside a buffer that may be much larger, leaving unused spaces
++called "headroom" and "tailroom" before and after the data proper.
++Therefore, tasks like prepending a header need not always reallocate
++memory. If the headroom is big enough, prepending space for a new
++header just requires bumping a pointer.
++
++   This diagram shows how a typical packet is laid out, with the
++relevant `Packet' methods' names.
++
++                           data
++             |<- headroom ->|<----- length ----->|<- tailroom ->|
++             |              |                    |              |
++             +==============+====================+==============+
++             |XXXXXXXXXXXXXX| PACKET CONTENTS... |XXXXXXXXXXXXXX|
++             +==============+====================+==============+
++             |                                                  |
++             |<---------------- buffer_length ----------------->|
++        buffer_data
++
++
++   And here are those methods' descriptions.
++
++ -- Method on Packet: const unsigned char * data () const
++     Returns a pointer to the packet data proper.
++
++ -- Method on Packet: unsigned length () const
++     Returns the length of the packet data proper.
++
++ -- Method on Packet: const unsigned char * buffer_data () const
++     Returns a pointer to the buffer that contains the packet data.
++
++ -- Method on Packet: unsigned headroom () const
++ -- Method on Packet: unsigned tailroom () const
++ -- Method on Packet: unsigned buffer_length () const
++     Returns the length of the headroom area, the tailroom area, and the
++     whole buffer, respectively.
++
++ -- Method on WritablePacket: unsigned char * data () const
++ -- Method on WritablePacket: unsigned char * buffer_data () const
++     These `WritablePacket' methods are identical to `Packet''s `data'
++     and `buffer_data' methods except for their non-`const' return type.
++
++   Two invariants relate these methods' values:
++
++     buffer_length() = headroom() + length() + tailroom()
++     data() = buffer_data() + headroom()
++
++\1f
++File: click.info,  Node: Packet Creation,  Next: Packets and sk_buffs,  Prev: Packet Structure and Contents,  Up: Packets
++
++3.2 Creation and Destruction
++============================
++
++Packets are created with the `Packet::make' static methods, and
++destroyed with the `Packet::kill' method. (The `Packet' and
++`WritablePacket' classes have private constructors and destructors; you
++cannot create or destroy packets with `new' or `delete'.)
++
++3.2.1 `Packet::make'
++--------------------
++
++The `make' methods always take the length of the packet data; some of
++them take the packet contents and the headroom and tailroom lengths as
++well. (The contents of any headroom and tailroom areas are always
++undefined.) Most of them return a `WritablePacket *', since new packets
++are not shared.
++
++   The `Packet' class defines two constants related to packet creation,
++`DEFAULT_HEADROOM' and `MIN_BUFFER_LENGTH'. Those `make' methods that
++do not take an explicit headroom parameter use `DEFAULT_HEADROOM'
++instead. Furthermore, no `make' method will create a packet with buffer
++length less than `MIN_BUFFER_LENGTH'.  If the sum of a packet's
++headroom and length is less than this, the packet buffer is given extra
++tailroom to bump the buffer length up to `MIN_BUFFER_LENGTH'. These
++constants have the values `DEFAULT_HEADROOM' = 28 and
++`MIN_BUFFER_LENGTH' = 64.
++
++ -- Static Method on Packet: WritablePacket * make (unsigned LEN)
++     Returns a new packet containing LEN bytes of undefined data.
++
++ -- Static Method on Packet: WritablePacket * make
++          (const char *DATA, unsigned LEN)
++ -- Static Method on Packet: WritablePacket * make
++          (const unsigned char *DATA, unsigned LEN)
++     Returns a new packet whose contents equal the first LEN bytes of
++     DATA. DATA may be a null pointer, in which case the packet
++     contains LEN bytes of undefined data.
++
++ -- Static Method on Packet: WritablePacket * make (unsigned HEADROOM,
++          const unsigned char *DATA, unsigned LEN, unsigned TAILROOM)
++     Returns a new packet containing HEADROOM bytes of headroom, LEN
++     bytes of contents, and at least TAILROOM bytes of tailroom. The
++     packet contents will equal the first LEN bytes of DATA unless DATA
++     is a null pointer, in which case the contents are undefined.
++
++   The following `make' method is only available in the user-level
++driver.
++
++ -- Static Method on Packet: WritablePacket * make
++          (unsigned char *DATA, unsigned LEN,
++          void (*DESTRUCTOR)(unsigned char *, size_t))
++     Returns a new packet that uses DATA as a buffer. That is, the new
++     packet will have the following characteristics:
++
++     `buffer_data'     DATA
++     `buffer_length'   LEN
++     `headroom'        0
++     `length'          LEN
++     `tailroom'        0
++
++     When the resulting packet is destroyed, the function DESTRUCTOR
++     will be called with DATA and LEN as arguments.  DESTRUCTOR may be
++     a null pointer, in which case `Packet' calls `delete[] DATA'
++     instead.
++
++     This method lets a user-level element manage packet memory itself,
++     rather than relying on `Packet'.
++
++*Note Packets and sk_buffs::, for a `make' method only available in the
++Linux kernel driver.
++
++3.2.2 `Packet::kill'
++--------------------
++
++To destroy a `Packet', simply call its `kill' method.
++
++ -- Method on Packet: void kill ()
++     Frees this packet. If this packet contained the last reference to
++     its data buffer, then frees the data buffer as well.
++
++\1f
++File: click.info,  Node: Packets and sk_buffs,  Next: Packet Sharing,  Prev: Packet Creation,  Up: Packets
++
++3.3 `Packet's and `sk_buff's
++============================
++
++In the Linux kernel driver, `Packet' objects are equivalent to `struct
++sk_buff's. This avoids indirection overhead and makes it cheap to pass
++packets back and forth between Linux and Click. The `Packet' operations
++described in this section are mostly inline functions that expand to
++conventional `sk_buff' calls like `skb_clone()'.
++
++   Click `Packet' `sk_buff's should always have `skb->users' equal to
++1. That is, the `sk_buff' headers should not be shared, although the
++data buffers they point to may be shared.
++
++   The `make', `skb', and `steal_skb' methods described in this section
++convert `Packet's to `sk_buff's and vice versa.
++
++ -- Static Method on Packet: Packet * make (struct sk_buff *SKB)
++     Returns a new packet equivalent to the `sk_buff' SKB. All of SKB's
++     data pointers and annotations are left unchanged. This method
++     generally does nothing, since `Packet's and `sk_buff's are
++     equivalent in the Linux kernel. However, if `SKB->users' field is
++     bigger than 1, the method will return a clone of SKB.  This method
++     returns a `Packet *', not a `WritablePacket *', because the SKB
++     argument might share data with some other `sk_buff'.
++
++     Do not use or manipulate SKB after passing it to this method,
++     since Click and the `Packet' implementation now own SKB.
++
++ -- Method on Packet: struct sk_buff * skb ()
++ -- Method on Packet: const struct sk_buff * skb () const
++     Returns the `sk_buff' corresponding to this packet. Use this method
++     to examine the `sk_buff' version of a `Packet'.
++
++     Do not pass the result to a function that might free it or
++     increment its `users' field; use `steal_skb' for that.
++
++ -- Method on Packet: struct sk_buff * steal_skb ()
++     Returns the `sk_buff' corresponding to this packet. Use this
++     method to permanently change a `Packet' into an `sk_buff'--for
++     example, to create an `sk_buff' you'd like to send to Linux.
++
++     Do not use or manipulate a `Packet' after calling its `steal_skb'
++     method, since Linux now owns the resulting `sk_buff'.
++
++\1f
++File: click.info,  Node: Packet Sharing,  Next: Packet Buffer Manipulation,  Prev: Packets and sk_buffs,  Up: Packets
++
++3.4 Sharing--`clone' and `uniqueify'
++====================================
++
++The `clone' method creates a new packet header that shares data with an
++existing packet. The `uniqueify' method, in contrast, ensures that a
++packet's data is not shared by anyone, perhaps by making a copy of the
++data.
++
++ -- Method on Packet: Packet * clone ()
++     Creates and returns a new packet header that shares this packet's
++     data.  The new packet's annotations are copied from this packet's
++     annotations.
++
++     The result may be a null pointer if there was not enough memory to
++     make a new packet header.
++
++ -- Method on Packet: WritablePacket * uniqueify ()
++     Ensures that this packet does not share data with any other
++     packet. This may involve copying the packet data, and perhaps
++     creating a new packet header, but if this packet is already
++     unshared, no real work is required. Returns a `WritablePacket *'
++     because the new packet is unshared.
++
++     Do not use, manipulate, or free a `Packet' after calling its
++     `uniqueify' method. Manipulate the returned `WritablePacket *'
++     instead.
++
++     The result may be a null pointer if there was not enough memory to
++     make a required data copy. In this case, the old packet is freed.
++
++ -- Method on Packet: bool shared () const
++     Returns true if and only if this packet shares data with some other
++     packet.
++
++\1f
++File: click.info,  Node: Packet Buffer Manipulation,  Next: Annotations,  Prev: Packet Sharing,  Up: Packets
++
++3.5 Buffer Manipulation--`push', `pull', `put', and `take'
++==========================================================
++
++The `push', `pull', `put', and `take' methods manipulate a packet's
++contents by adding or removing space from its headroom or tailroom.
++Given a packet, use `push' to add space to its beginning, `pull' to
++remove space from its beginning, `put' to add space to its end, and
++`take' to remove space from its end. The methods that add space, `push'
++and `put', uniqueify the relevant packet as a side effect. This ensures
++that the packet's data is unshared so you can immediately manipulate
++the added space.
++
++ -- Method on Packet: WritablePacket * push (unsigned AMT)
++     Adds AMT bytes of space to the beginning of the packet's data and
++     returns the resulting packet. The new space is uninitialized. The
++     result will not share data with any other packet; thus, it is a
++     `WritablePacket *'. If this packet is unshared and its headroom is
++     bigger than AMT, then this operation is cheap, amounting to a bit
++     of pointer arithmetic. Otherwise, it requires copying the packet
++     data and possibly creating a new packet header.
++
++     Do not use, manipulate, or free a `Packet' after calling its
++     `push' method. Manipulate the returned `WritablePacket *' instead.
++
++     The result may be a null pointer if there was not enough memory to
++     make a required new packet. In this case, the old packet is freed.
++
++ -- Method on Packet: void pull (unsigned AMT)
++     Removes AMT bytes of space from the beginning of the packet's
++     data. AMT must be less than or equal to the packet's `length()'.
++     This operation is always cheap, amounting to a bit of pointer
++     arithmetic.
++
++ -- Method on Packet: WritablePacket * put (unsigned AMT)
++     Adds AMT bytes of space to the end of the packet's data and
++     returns the resulting packet. The new space is uninitialized. The
++     result will not share data with any other packet; thus, it is a
++     `WritablePacket *'. If this packet is unshared and its tailroom is
++     bigger than AMT, then this operation is cheap, amounting to a bit
++     of pointer arithmetic. Otherwise, it requires copying the packet
++     data and possibly creating a new packet header.
++
++     Do not use, manipulate, or free a `Packet' after calling its `put'
++     method. Manipulate the returned `WritablePacket *' instead.
++
++     The result may be a null pointer if there was not enough memory to
++     make a required new packet. In this case, the old packet is freed.
++
++ -- Method on Packet: void take (unsigned AMT)
++     Removes AMT bytes of space from the end of the packet's data.  AMT
++     must be less than or equal to the packet's `length()'.  This
++     operation is always cheap, amounting to a bit of pointer
++     arithmetic.
++
++   The `push' and `put' methods have "nonunique" variants,
++`nonunique_push' and `nonunique_put', which do not have the side effect
++of uniqueifying their resulting packet. These methods are rarely used.
++
++ -- Method on Packet: Packet * nonunique_push (unsigned AMT)
++     Adds AMT bytes of space to the beginning of the packet's data and
++     returns the resulting packet. The new space is uninitialized. The
++     result may share data with other packets. If this packet's
++     headroom is bigger than AMT, then this operation is cheap,
++     amounting to a bit of pointer arithmetic. Otherwise, it requires
++     copying the packet data and possibly creating a new packet header.
++
++     Do not use, manipulate, or free a `Packet' after calling its
++     `nonunique_push' method. Manipulate the returned `Packet *'
++     instead.
++
++     The result may be a null pointer if there was not enough memory to
++     make a required new packet. In this case, the old packet is freed.
++
++ -- Method on Packet: Packet * nonunique_put (unsigned AMT)
++     Adds AMT bytes of space to the end of the packet's data, returning
++     the resulting packet. The new space is uninitialized. The result
++     may share data with other packets. If this packet's tailroom is
++     bigger than AMT, then this operation is cheap, amounting to a bit
++     of pointer arithmetic. Otherwise, it requires copying the packet
++     data and possibly creating a new packet header.
++
++     Do not use, manipulate, or free a `Packet' after calling its
++     `nonunique_put' method. Manipulate the returned `Packet *' instead.
++
++     The result may be a null pointer if there was not enough memory to
++     make a required new packet. In this case, the old packet is freed.
++
++\1f
++File: click.info,  Node: Annotations,  Next: Packet Out-of-Memory,  Prev: Packet Buffer Manipulation,  Up: Packets
++
++3.6 Annotations
++===============
++
++Each packet header has space for a number of "annotations", extra
++information about the packet that is not contained in its data. Click
++supports "header annotations", which indicate where in the packet a
++network header, such as an IP header, is located; "user annotations",
++whose semantics are left undefined by Click--different elements can
++treat them in different ways; and other specialized annotations, such
++as the "timestamp annotation", the "destination IP address annotation",
++and so forth.
++
++   New packets begin with all annotations cleared: numeric annotations
++are zero, pointer annotations are null pointers. `clone', `uniqueify',
++and their equivalents always copy each of the original packet's
++annotations in the appropriate way. (For example, the new header
++annotations will point into the new data, if a data copy was made.)
++
++* Menu:
++
++* Header Annotations::
++* User Annotations::
++* Specific User Annotations::
++* Other Annotations::
++* Annotations In General::
++
++\1f
++File: click.info,  Node: Header Annotations,  Next: User Annotations,  Prev: Annotations,  Up: Annotations
++
++3.6.1 Header Annotations
++------------------------
++
++Many packets contain a network header of some kind, such as an IP
++header. This header may be located anywhere in the packet depending on
++how the packet was encapsulated. Furthermore, the data encapsulated by
++that network header may be located anywhere after the network header,
++given the presence of options. With the "network header annotation" and
++the "transport header annotation", one element can determine where a
++network header is and how long it is, then store this information for
++other elements to use. For example, the `CheckIPHeader' element sets
++the header annotations on packets it receives. Elements like
++`SetIPDSCP' then require a non-null IP header annotation on their input
++packets.
++
++   The header annotations on new packets are each set to a null pointer.
++
++ -- Method on Packet: const unsigned char * network_header () const
++ -- Method on WritablePacket: unsigned char * network_header () const
++     Returns the network header annotation. The resulting pointer is
++     read-only on `Packet's and read/write on `WritablePacket's.
++
++ -- Method on Packet: const unsigned char * transport_header () const
++ -- Method on WritablePacket: unsigned char * transport_header () const
++     Returns the transport header annotation. The resulting pointer is
++     read-only on `Packet's and read/write on `WritablePacket's.
++
++ -- Method on Packet: int network_header_offset () const
++     Returns the offset from `data()' to `network_header()'. The result
++     might be negative, since the `data' pointer may have been advanced
++     past the network header annotation with the `pull' method.
++
++ -- Method on Packet: int network_header_length () const
++     Returns the network header's length. This equals
++     `transport_header()' - `network_header()'.
++
++ -- Method on Packet: unsigned transport_header_offset () const
++     Returns the offset from `data()' to `transport_header()'. The
++     result might be negative, since the `data' pointer may have been
++     advanced past the transport header annotation with the `pull'
++     method.
++
++   Several invariants relate these methods' values whenever the header
++annotations are non-null:
++
++     `buffer_data()' <= `network_header()' <= `transport_header()'
++                  <= `buffer_data()' + `buffer_length()'
++     `network_header_offset()' = `network_header()' - `data()'
++     `transport_header_offset()' = `transport_header()' - `data()'
++     `network_header_length()' = `transport_header()' - `network_header()'
++
++
++   Set the network and transport header annotations simultaneously with
++the `set_network_header' method.
++
++ -- Method on Packet: void set_network_header
++          (const unsigned char *HEADER, unsigned LEN)
++     Sets the network header annotation to HEADER, which must lie
++     between `buffer_data()' and `buffer_data()' + `buffer_length()'.
++     The network header is LEN bytes long, so `network_header_length()'
++     will equal LEN and `transport_header()' will equal HEADER + LEN.
++
++3.6.1.1 Typed Header Annotations
++................................
++
++For convenience, `Packet' provides methods for accessing and setting
++the network header annotation as an IP or IPv6 header. These methods
++use the same annotations as the generic `network_header' methods; they
++are just typed differently.
++
++ -- Method on Packet: const click_ip * ip_header () const
++ -- Method on WritablePacket: click_ip * ip_header () const
++ -- Method on Packet: const click_ip6 * ip6_header () const
++ -- Method on WritablePacket: click_ip6 * ip6_header () const
++     Returns `network_header()' as a pointer to an IP or IPv6 header
++     structure.
++
++ -- Method on Packet: int ip_header_offset () const
++ -- Method on Packet: unsigned ip_header_length () const
++ -- Method on Packet: int ip6_header_offset () const
++ -- Method on Packet: unsigned ip6_header_length () const
++     Equivalent to `network_header_offset()' and
++     `network_header_length()'.
++
++ -- Method on Packet: void set_ip_header (const click_ip *HEADER,
++          unsigned LEN)
++ -- Method on Packet: void set_ip6_header (const click_ip6 *HEADER,
++          unsigned LEN)
++     Equivalent to `set_network_header(HEADER, LEN)'.
++
++ -- Method on Packet: void set_ip6_header (const click_ip6 *HEADER)
++     Equivalent to `set_ip6_header(HEADER, 40)'.
++
++ -- Method on Packet: const click_tcp * tcp_header () const
++ -- Method on WritablePacket: click_tcp * tcp_header () const
++ -- Method on Packet: const click_udp * udp_header () const
++ -- Method on WritablePacket: click_udp * udp_header () const
++     Returns `transport_header()' as a pointer to a TCP or UDP header
++     structure.
++
++\1f
++File: click.info,  Node: User Annotations,  Next: Specific User Annotations,  Prev: Header Annotations,  Up: Annotations
++
++3.6.2 User Annotations
++----------------------
++
++Each packet header has a "user annotation area", space reserved for
++arbitrary annotations. Different methods access this space as an array
++of bytes, integers, or unsigned integers. The `Packet' class does not
++assign semantics to any particular byte in the user annotation area.
++Instead, macros in `<click/packet_anno.hh>' provide names for
++particular bytes. Some of these names have overlapping byte ranges; the
++user must take care not to define a configuration whose elements use an
++annotation byte on a packet for different purposes. The next section
++describes the macros in Click's default `<click/packet_anno.hh>'.
++
++   These constants define the size of the annotation area.
++
++`Packet::USER_ANNO_SIZE'
++     The size of the annotation area in bytes.
++
++`Packet::USER_ANNO_US_SIZE'
++     The size of the annotation area in `unsigned short's.
++
++`Packet::USER_ANNO_S_SIZE'
++     The size of the annotation area in `short's.
++
++`Packet::USER_ANNO_U_SIZE'
++     The size of the annotation area in `unsigned int's.
++
++`Packet::USER_ANNO_I_SIZE'
++     The size of the annotation area in `int's.
++
++Currently, `USER_ANNO_SIZE' is 24, `USER_ANNO_U_SIZE' and
++`USER_ANNO_I_SIZE' are both 6, and `USER_ANNO_US_SIZE' and
++`USER_ANNO_S_SIZE' are both 12.
++
++   The user annotation area may be accessed as an array of bytes, an
++array of `unsigned int's, or an array of `int's. The elements of these
++arrays are numbered from 0 to K - 1, where K is the appropriate `SIZE'
++constant.
++
++ -- Method on Packet: unsigned char user_anno_c (int I) const
++     Returns the Ith byte in the user annotation area. I must be
++     between 0 and `USER_ANNO_SIZE' - 1.
++
++ -- Method on Packet: unsigned user_anno_u (int I)
++ -- Method on Packet: int user_anno_i (int I)
++     Returns the Ith `unsigned int' or `int' in the user annotation
++     area. I must be between 0 and `USER_ANNO_U_SIZE' - 1. The Ith
++     `unsigned int' or `int' annotation occupies bytes 4I through 4I +
++     3 of the user annotation area.
++
++ -- Method on Packet: void set_user_anno_c (int I, unsigned char VALUE)
++ -- Method on Packet: void set_user_anno_u (int I, unsigned VALUE)
++ -- Method on Packet: void set_user_anno_i (int I, int VALUE)
++     Sets the Ith byte, `unsigned int', or `int' user annotation to
++     VALUE.
++
++ -- Method on Packet: unsigned * all_user_anno_u ()
++     Returns a pointer to the user annotation area, treated as an array
++     of `unsigned int's.
++
++\1f
++File: click.info,  Node: Specific User Annotations,  Next: Other Annotations,  Prev: User Annotations,  Up: Annotations
++
++3.6.3 Specific User Annotations
++-------------------------------
++
++The `<click/packet_anno.hh>' header file defines macros for accessing a
++packet's user annotation area by name. These macros follow some simple
++guidelines. Each user annotation is given a name like `PAINT' or
++`FIX_IP_SRC'. Then, two macros are written for each annotation,
++`NAME_ANNO' and `SET_NAME_ANNO'.
++
++ -- Macro:  NAME_ANNO (const Packet *P)
++     Returns the value of P's NAME annotation.
++
++ -- Macro:  SET_NAME_ANNO (Packet *P, VALUE)
++     Sets P's NAME annotation to VALUE.
++
++For example, here are the definitions of `PAINT_ANNO' and
++`SET_PAINT_ANNO' from Click's default `<click/packet_anno.hh>'.
++
++     #define PAINT_ANNO(p)          ((p)->user_anno_c(0))
++     #define SET_PAINT_ANNO(p, v)   ((p)->set_user_anno_c(0, (v)))
++
++
++   This table lists the annotations declared in Click's default
++`<click/packet_anno.hh>'.
++
++Annotation name     Type              Bytes   Some relevant elements
++`PAINT'             `unsigned char'   0       `Paint', `CheckPaint', `PaintTee'
++`ICMP_PARAM_PROB'   `unsigned char'   1       `IPGWOptions', `ICMPError'
++`FIX_IP_SRC'        `unsigned char'   3       `ICMPError', `FixIPSrc'
++`FWD_RATE'          `int'             4-7     `IPRateMonitor'
++`REV_RATE'          `int'             8-11    `IPRateMonitor'
++
++\1f
++File: click.info,  Node: Other Annotations,  Next: Annotations In General,  Prev: Specific User Annotations,  Up: Annotations
++
++3.6.4 Other Annotations
++-----------------------
++
++Packet headers have space for four other particular annotations, and
++special methods for accessing them. These annotations do not overlap the
++user annotation area. There are annotations that hold a destination IP
++address, a timestamp, the device on which the packet arrived, a packet
++type constant, and, in the Linux kernel module, a performance counter
++value.
++
++* Menu:
++
++* Destination Address Annotation::
++* Timestamp Annotation::
++* Device Annotation::
++* Packet Type Annotation::
++* Performance Counter Annotation::
++
++\1f
++File: click.info,  Node: Destination Address Annotation,  Next: Timestamp Annotation,  Prev: Other Annotations,  Up: Other Annotations
++
++3.6.4.1 Destination Address
++...........................
++
++The destination address annotation stores the IP or IPv6 address of the
++next hop towards the packet's destination. Elements check and manipulate
++this address, rather than the IP header's destination address, since the
++next-hop address often differs from the final destination. The
++destination IP address and IPv6 address are different annotations, but
++they overlap; you may set only one at a time.
++
++ -- Method on Packet: IPAddress dst_ip_anno () const
++     Returns this packet's destination IP address annotation.
++
++ -- Method on Packet: const IP6Address & dst_ip6_anno () const
++     Returns a reference to this packet's destination IPv6 address
++     annotation.
++
++ -- Method on Packet: void set_dst_ip_anno (IPAddress VALUE)
++ -- Method on Packet: void set_dst_ip6_anno (const IP6Address &VALUE)
++     Sets this packet's destination IP or IPv6 address annotation to
++     VALUE.
++
++   The destination IP address annotation is set by the `GetIPAddress'
++and `SetIPAddress' elements, manipulated by `LookupIPRoute' and its
++cousins, and used by `ARPQuerier'. It defaults to zero.
++
++\1f
++File: click.info,  Node: Timestamp Annotation,  Next: Device Annotation,  Prev: Destination Address Annotation,  Up: Other Annotations
++
++3.6.4.2 Timestamp
++.................
++
++The timestamp annotation generally indicates when a packet was received.
++
++ -- Method on Packet: const struct timeval & timestamp_anno () const
++ -- Method on Packet: struct timeval & timestamp_anno ()
++     Returns a reference to this packet's timestamp annotation.
++
++ -- Method on Packet: void set_timestamp_anno
++          (const struct timeval &VALUE)
++     Sets this packet's timestamp annotation to VALUE.
++
++ -- Method on Packet: void set_timestamp_anno (int SEC, int USEC)
++     Sets this packet's timestamp annotation to SEC and USEC.
++     Equivalent to `struct timeval tv; tv.tv_sec = SEC; tv.tv_usec =
++     USEC; set_timestamp_anno(tv)'.
++
++   Linux device drivers set this annotation, so packets emitted by
++`FromDevice' and `PollDevice' in the Linux kernel driver have the
++annotation set. Packet sources like `InfiniteSource' and `RatedSource'
++also set the annotation, as does `FromDump' in the user-level driver.
++Debugging elements like `Print' generally take a keyword argument that
++makes them print packet timestamps.
++
++   The timestamp annotation defaults to zero.
++
++\1f
++File: click.info,  Node: Device Annotation,  Next: Packet Type Annotation,  Prev: Timestamp Annotation,  Up: Other Annotations
++
++3.6.4.3 Device
++..............
++
++In the Linux kernel, packets received from some device are annotated
++with a pointer to the relevant `struct net_device' object. (In versions
++of the kernel prior to 2.3, this type was called `struct device'.) The
++`Packet' class provides access to this annotation.  The annotation has
++type `net_device *'; Click defines `net_device' as a synonym for
++`struct device' in kernel versions 2.2 and prior.
++
++ -- Method on Packet: net_device * device_anno () const
++     Returns this packet's device annotation.
++
++ -- Method on Packet: void set_device_anno (net_device *VALUE)
++     Sets this packet's device annotation to VALUE.
++
++In the user-level driver, `device_anno' always returns 0, and
++`set_device_anno' does nothing.
++
++   The `ARPResponder' element sets this annotation on every generated
++response to the value of the annotation on the relevant query. Because
++of this, those responses can be safely forwarded to Linux: Linux's
++ARP-response code requires a correct device annotation.
++
++   The device annotation defaults to a null pointer.
++
++\1f
++File: click.info,  Node: Packet Type Annotation,  Next: Performance Counter Annotation,  Prev: Device Annotation,  Up: Other Annotations
++
++3.6.4.4 Packet Type
++...................
++
++The packet type annotation specifies how a packet was received. Its
++value is one of the following constants, which are defined in the
++`Packet::PacketType' enumeration.
++
++`HOST'
++     The packet was sent to this host.
++
++`BROADCAST'
++     The packet was sent to a link-level broadcast address.
++
++`MULTICAST'
++     The packet was sent to a link-level multicast address.
++
++`OTHERHOST'
++     The packet was sent to a different host, but received anyway. The
++     relevant device is probably in promiscuous mode.
++
++`OUTGOING'
++     The packet was generated at this host and is being sent to another
++     host.
++
++`LOOPBACK', `FASTROUTE'
++     See the Linux kernel documentation. These values correspond to
++     `PACKET_LOOPBACK' and `PACKET_FASTROUTE', which are defined in
++     `<linux/if_packet.h>'.
++
++ -- Method on Packet: Packet::PacketType packet_type_anno () const
++     Returns this packet's packet type annotation.
++
++ -- Method on Packet: void set_packet_type_anno
++          (Packet::PacketType VALUE)
++     Sets this packet's packet type annotation to VALUE.
++
++   In the Linux kernel, device drivers set the packet type annotation
++for the packets they receive. Thus, the `FromDevice' and `PollDevice'
++elements generate packets with correct packet type annotations. The
++user-level driver's `FromDevice' also sets the packet type annotation.
++The `ICMPError' and `DropBroadcasts' elements use the annotation's
++value.
++
++   The packet type annotation defaults to `Packet::HOST'.
++
++\1f
++File: click.info,  Node: Performance Counter Annotation,  Prev: Packet Type Annotation,  Up: Other Annotations
++
++3.6.4.5 Performance Counter
++...........................
++
++This annotation is available only in the Linux kernel driver. Its value
++is an `unsigned long long' that generally corresponds to some
++performance counter value.
++
++ -- Method on Packet: unsigned long long perfctr_anno () const
++     Returns this packet's performance counter annotation.
++
++ -- Method on Packet: void set_perfctr_anno (unsigned long long VALUE)
++     Sets this packet's performance counter annotation to VALUE.
++
++   The `SetCycleCount', `SetPerfCount', `CycleCountAccum', and
++`PerfCountAccum' elements manipulate this annotation. Its default value
++is zero.
++
++\1f
++File: click.info,  Node: Annotations In General,  Prev: Other Annotations,  Up: Annotations
++
++3.6.5 Annotations In General
++----------------------------
++
++`Packet' provides methods for clearing a packet's annotations, and for
++copying all of a packet's annotations from another packet.
++
++ -- Method on Packet: void clear_annotations ()
++     Clears all of this packet's annotations to their default state,
++     which is generally zero.
++
++ -- Method on Packet: void copy_annotations (const Packet *P)
++     Copies all of P's annotations into this packet except for its
++     header annotations. (This packet's current header annotations are
++     left unchanged.)
++
++\1f
++File: click.info,  Node: Packet Out-of-Memory,  Next: Handlers,  Prev: Annotations,  Up: Packets
++
++3.7 Out-of-Memory Conditions
++============================
++
++Any method that potentially allocates memory for a `Packet' may fail
++due to an out-of-memory condition. The complete list of these methods
++follows:
++
++   * `make' variants
++
++   * `clone'
++
++   * `uniqueify'
++
++   * `push'
++
++   * `put'
++
++   * `nonunique_push'
++
++   * `nonunique_put'
++
++These methods always return a null pointer on out-of-memory. Methods
++that manipulate existing packets--`uniqueify', `push', `put',
++`nonunique_push', and `nonunique_put'--additionally free any existing
++packet before returning a null pointer. You should always check the
++results of these methods to see if you have run out of memory.
++
++\1f
++File: click.info,  Node: Handlers,  Prev: Packet Out-of-Memory,  Up: Packets
++
++3.8 Handlers
++============
++
++"Handlers" are access points through which users can interact with
++elements in a running Click router, or with the router as a whole.
++"Read" and "write handlers" behave like files in a file system, while
++"LLRPCs" provide a remote procedure call interface.
++
++* Menu:
++
++* Read and Write Handler Overview::
++* Adding Handlers::
++* Default Handlers::
++* Accessing Handlers Internally::
++* LLRPC Overview::
++
++\1f
++File: click.info,  Node: Read and Write Handler Overview,  Next: Adding Handlers,  Prev: Handlers,  Up: Handlers
++
++3.8.1 Read and Write Handler Overview
++-------------------------------------
++
++Read and write handlers appear to the user like files in a file system,
++or alternatively, like a limited RPC mechanism that uses ASCII strings
++for data transfer. To the element programmer, a read handler is simply a
++function that takes an element and returns a String; a write handler is
++a function that takes an element and a String and returns an error code.
++
++ -- Function Type: String (*ReadHandler) (Element *ELEMENT, void *THUNK)
++     Read handler functions have this type. When the user accesses a
++     read handler on an element, Click calls some `ReadHandler' function
++     and passes the element as an argument. The THUNK argument contains
++     callback data specified when the handler was added. The function's
++     String return value is passed back to the user.
++
++ -- Function Type: int (*WriteHandler) (const String &DATA,
++          Element *ELEMENT, void *THUNK, ErrorHandler *ERRH)
++     Write handler functions have this type. When the user accesses some
++     element write handler by passing in a string, Click calls some
++     `WriteHandler' function and passes the data and the relevant
++     element as arguments. The THUNK argument contains callback data
++     specified when the handler was added. The return value is an error
++     code: zero when there are no errors, and the negative of some
++     `errno' value when there is an error. More detailed information
++     about any errors should be reported to the ERRH argument.
++
++   Each handler has an ASCII "name". Handler names must be unique
++within each element; for example, there can be at most one `x' read
++handler in a given element. A given name can be shared by a read handler
++and a write handler, however. Such a handler pair is colloquially called
++a "read/write handler", although its two components need not have
++anything to do with one another.
++
++   There is currently no way to pass data to a read handler or return
++data from a write handler. Use LLRPCs if you need a more RPC-like
++read-write interface.
++
++   Note that read and write handler functions are regular functions, not
++virtual functions. Often, therefore, handler functions are defined as
++private static member functions in the relevant element class.
++
++   Read and write handlers need not use ASCII-formatted data. Most
++existing handlers do format their data in ASCII, however, and use
++`cp_uncomment' to ignore leading and trailing whitespace and comments.
++You may want to do the same for consistency's sake.
++
++   Be careful when writing handlers that modify element state, or read
++state that packet processing can modify. On an SMP machine, a handler
++may be called on one processor while packets are passing through the
++router on another processor. Furthermore, multiple read handlers and
++safe LLRPCs (*note LLRPC Overview::) may be active simultaneously on
++different processors. Write handlers are serialized with respect to
++other handlers and LLRPCs (but not packet processing). That is, no other
++handler or LLRPC will proceed while a write handler is active.
++
++\1f
++File: click.info,  Node: Adding Handlers,  Next: Default Handlers,  Prev: Read and Write Handler Overview,  Up: Handlers
++
++3.8.2 Adding Handlers
++---------------------
++
++Use `Element''s `add_read_handler' and `add_write_handler' methods to
++add handlers for an element. You will generally call these methods only
++from within your element's `add_handlers' method, although nothing
++prevents you from adding handlers at any time.
++
++ -- Method on Element: void add_read_handler (const String &NAME,
++          ReadHandler FUNC, void *THUNK)
++     Adds a read handler named NAME for this element. When the handler
++     is accessed, FUNC will be called with `this' and THUNK as
++     parameters.
++
++ -- Method on Element: void add_write_handler (const String &NAME,
++          WriteHandler FUNC, void *THUNK)
++     Adds a write handler named NAME for this element. When the handler
++     is accessed, FUNC will be called with the relevant data, `this',
++     THUNK, and an `ErrorHandler' as parameters.
++
++   To create a read/write handler, call `add_read_handler' and
++`add_write_handler' and supply the same handler name.
++
++   These methods simply forward their requests to static
++`add_read_handler' and `add_write_handler' methods on the `Router'
++class. Call those methods directly to add handlers to other elements,
++or to add global handlers.
++
++ -- Static Method on Router: void add_read_handler
++          (const Element *ELEMENT, const String &NAME,
++          ReadHandler FUNC, void *THUNK)
++ -- Static Method on Router: void add_write_handler
++          (const Element *ELEMENT, const String &NAME,
++          WriteHandler FUNC, void *THUNK)
++     Adds a read or write handler for ELEMENT, or a global read or
++     write handler if ELEMENT is null. The handler is named NAME.
++
++   The `change_handler_flags' method lets you change a handler's flags
++word (*note Handler Objects::).
++
++ -- Static Method on Router: void change_handler_flags
++          (Element *ELEMENT, const String &NAME, uint32_t CLEAR_FLAGS,
++          uint32_t SET_FLAGS)
++     Changes the flags for ELEMENT's NAME handler, or the global NAME
++     handler if ELEMENT is null. The flags are changed by first
++     clearing the bits set in CLEAR_FLAGS, then setting the bits set in
++     SET_FLAGS. This method fails and returns -1 when the specified
++     handler does not exist; otherwise, it returns 0.
++
++\1f
++File: click.info,  Node: Default Handlers,  Next: Accessing Handlers Internally,  Prev: Adding Handlers,  Up: Handlers
++
++3.8.3 Default Read and Write Handlers
++-------------------------------------
++
++Every element automatically provides five handlers, `class', `name',
++`config', `ports', and `handlers'. There is no need to add these
++handlers yourself. The default handlers behave as follows:
++
++`class'
++     Returns the element's class name, as returned by `class_name()',
++     followed by a newline. Example result: "ARPQueriern".
++
++`name'
++     Returns the element's name, as returned by `id()', followed by a
++     newline. Example result: "arpq_0n".
++
++`config'
++     Returns the element's configuration string. If the configuration
++     string does not end in newline, the hander appends a newline
++     itself. Example result: "18.26.7.1, 00:00:C0:4F:71:EFn".
++
++     If `can_live_reconfigure' returns true, `config' is also a write
++     handler, and writing to it reconfigures the element.
++
++`ports'
++     Returns a multi-line string describing the element's ports and
++     what they are connected to. The string has the form
++
++          M input[s]
++          ... M input port descriptions, one per line ...
++          N output[s]
++          ... N output port descriptions, one per line ...
++
++     Each port description lists the port's processing type, a dash,
++     and then a comma-separated list of all the ports to which this
++     port is connected.  The processing type is either `push' or
++     `pull'; formerly agnostic ports are indicated by a trailing tilde
++     (`push~' or `pull~'). Example result:
++
++          1 input
++          push~   -       Strip@2 [0]
++          2 outputs
++          push~   -       [0] GetIPAddress@4
++          push    -       [0] Print@7
++
++     If Click was compiled with statistics collection enabled, the dash
++     on each line is replaced by a packet count.
++
++`handlers'
++     Returns a string listing the element's visible handlers, one per
++     line.  Each line contains the handler name, a tab, and then either
++     `r', `w', or `rw', depending on whether the handler is read-only,
++     write-only, or read/write. Example result for an `InfiniteSource'
++     element, which has many handlers:
++
++          scheduled       r
++          tickets r
++          reset   w
++          count   r
++          active  rw
++          burstsize       rw
++          limit   rw
++          data    rw
++          handlers        r
++          ports   r
++          config  rw
++          name    r
++          class   r
++
++\1f
++File: click.info,  Node: Accessing Handlers Internally,  Next: LLRPC Overview,  Prev: Default Handlers,  Up: Handlers
++
++3.8.4 Accessing Handlers Internally
++-----------------------------------
++
++Element handlers are stored in the relevant `Router' as objects of type
++`Router::Handler'. (This design allows handler objects to be shared
++between elements when possible.) Handlers are often referred to by
++index; indexes between 0 and `Router::FIRST_GLOBAL_HANDLER - 1' refer
++to element handlers, while indexes above `Router::FIRST_GLOBAL_HANDLER'
++refer to global handlers. Indexes less than 0 are used for error
++returns, such as nonexistent handlers.  `Router' methods translate
++between handler indexes and `Router::Handler' objects, and find
++handlers or handler indexes given handler names.
++
++* Menu:
++
++* Handler Objects::
++* Handlers By Name or Index::
++
++\1f
++File: click.info,  Node: Handler Objects,  Next: Handlers By Name or Index,  Prev: Accessing Handlers Internally,  Up: Accessing Handlers Internally
++
++3.8.4.1 The Router::Handler Type
++................................
++
++The `Router::Handler' type allows you to check a handler's properties
++and call the handler. All of its methods are `const'; you must go
++through `Router' to change a handler's properties.  `Router::Handler'
++objects do not contain element references, since they are shared among
++elements. That means you can't easily find the element (if any) to
++which a particular `Router::Handler' is attached.
++
++ -- Method on Router::Handler: const String & name () const
++     Returns the handler's name.
++
++ -- Method on Router::Handler: uint32_t flags () const
++     Returns the handler's flags as an integer. The lower bits of the
++     flags word are reserved for the system, and four bits are reserved
++     for drivers, but the upper bits (at least 16) are left
++     uninterpreted, and may be used by elements. The first user flag
++     bit is called `Router::Handler::USER_FLAG_0'; its position in the
++     word equals `Router::Handler::USER_FLAG_SHIFT'. To change a
++     handler's flags, use the `Router::change_handler_flags' method
++     (*note Changing Handler Flags::).
++
++ -- Method on Router::Handler: bool readable () const
++     Returns true iff this handler is readable.
++
++ -- Method on Router::Handler: bool read_visible () const
++     Returns true iff this handler is readable, and that read handler
++     should be externally visible. Drivers and the ControlSocket
++     element use `read_visible' rather than `readable' when deciding
++     whether to tell the user that a read handler exists. Inter-element
++     communication within the router, however, may use `readable'
++     rather than `read_visible'.
++
++ -- Method on Router::Handler: bool writable () const
++ -- Method on Router::Handler: bool write_visible () const
++     The analogous methods for write handlers.
++
++ -- Method on Router::Handler: bool visible () const
++     Equivalent to `read_visible() || write_visible()'.
++
++ -- Method on Router::Handler: String unparse_name (Element *ELEMENT)
++          const
++     Returns the handler's name, including its attached element's name
++     if ELEMENT is non-null. For example, calling `unparse_name' on
++     element `e''s `foo' handler would return `e.foo', while calling it
++     on a global `bar' handler would return `bar'.
++
++ -- Static Method on Router::Handler: String unparse_name
++          (Element *ELEMENT, const String &NAME)
++     Returns a string representing ELEMENT's hypothetical NAME handler,
++     or the global NAME handler if ELEMENT is null.
++
++ -- Method on Router::Handler: String call_read (Element *ELEMENT) const
++     Calls this read handler on ELEMENT and returns the result. Do not
++     use this method unless you know the handler is `readable()'.
++
++ -- Method on Router::Handler: int call_write (const String &DATA,
++          Element *ELEMENT, ErrorHandler *ERRH) const
++     Calls this write handler on ELEMENT, passing it DATA and ERRH, and
++     returns the result. Do not use this method unless you know the
++     handler is `writable()'.
++
++\1f
++File: click.info,  Node: Handlers By Name or Index,  Prev: Handler Objects,  Up: Accessing Handlers Internally
++
++3.8.4.2 Handlers By Name or Index
++.................................
++
++These `Router' methods locate handlers by name, returning either a
++pointer to a handler object or a handler index. The methods are static
++to allow access to global handlers outside the context of a running
++router.
++
++ -- Static Method on Router: const Router::Handler * handler
++          (const Element *ELEMENT, const String &NAME)
++     Returns a pointer to the handler object for ELEMENT's handler
++     named NAME, or null if no such handler exists. ELEMENT may be
++     null, in which case the method looks for a global handler named
++     NAME.
++
++     *Caution*: Handler pointers returned by `Router::handler' and
++     similar methods should be treated as transient, since they may
++     become invalid when new handlers are added.
++
++ -- Static Method on Router: int hindex (const Element *ELEMENT,
++          const String &NAME)
++     Like `Router::handler', above, but returns an integer handler
++     index for the named handler, or a negative number if no such
++     handler exists. All valid handler indexes are nonnegative.
++
++ -- Static Method on Router: const Router::Handler * handler
++          (const Router *ROUTER, int HINDEX)
++     Returns ROUTER's handler object corresponding to HINDEX, or a null
++     pointer if HINDEX is invalid with respect to ROUTER. There are
++     three possibilities: (1) HINDEX coresponds to a valid global
++     handler, which is returned. In this case, ROUTER need not be
++     valid. (2) HINDEX corresponds to a valid local handler in class
++     ROUTER, which is returned. (3) Otherwise, a null pointer is
++     returned.
++
++ -- Static Method on Router: const Router::Handler * handler
++          (const Element *ELEMENT, int HINDEX)
++     Convenience function equivalent to `handler(ELEMENT->router(),
++     HINDEX)'. Note that HINDEX need not refer to one of ELEMENT's
++     handlers.
++
++ -- Method on Router: const Router::Handler * handler (int HINDEX) const
++     Convenience function equivalent to `handler(this, HINDEX)'.
++
++   Finally, the `element_hindexes' static method returns all the
++handler indices that apply to a given element.
++
++ -- Static Method on Router: void element_hindexes
++          (const Element *ELEMENT, Vector<int> &RESULTS)
++     Appends to RESULTS all the handler indexes for ELEMENT's handlers,
++     or all global handlers if ELEMENT is null.
++
++\1f
++File: click.info,  Node: LLRPC Overview,  Prev: Accessing Handlers Internally,  Up: Handlers
++
++3.8.5 LLRPC Overview
++--------------------
++
++\1f
++File: click.info,  Node: Tasks,  Next: Timers,  Prev: Packets,  Up: Top
++
++4 Tasks
++*******
++
++Click schedules a router's CPU or CPUs with one or more "task queues".
++These queues are simply lists of "tasks", which represent functions
++that would like access to the CPU. Tasks are generally associated with
++elements. When scheduled, most tasks call some element's `run_task'
++method.
++
++   Click tasks are represented by `Task' objects. An element that would
++like special access to a router's CPU should include and initialize a
++`Task' instance variable.
++
++   Tasks are generally called very frequently, up to tens of thousands
++of times per second. For infrequent events, it is far more efficient to
++use timers than to use tasks; see *Note Timers::.
++
++   Executing a task should not take a long time. The Click driver loop
++is not currently adaptive, so very long tasks can inappropriately delay
++timers and other periodic events. We may address this problem in a
++future release, but for now, keep tasks short.
++
++   See the Doxygen documentation on class `Task' for more information.
++
++   The `Task' class is defined in the `<click/task.hh>' header file.
++
++* Menu:
++
++* Task Initialization::
++* Scheduling Tasks::
++* Tickets::
++* Task Thread Choice::
++* Task Status::
++* Task Handlers::
++* Task Cleanup::
++
++\1f
++File: click.info,  Node: Task Initialization,  Next: Scheduling Tasks,  Prev: Tasks,  Up: Tasks
++
++4.1 Task Initialization
++=======================
++
++Task initialization is a two-step process. First, when a `Task' object
++is constructed, you must supply information about the function that it
++should call when it is scheduled. Second, when the router is
++initialized, you must initialize the task by supplying it with the
++relevant router. (You must initialize the task even if it will not be
++scheduled right away.)
++
++   `Task' has two constructors. One of them asks the task to call an
++element's `run_task' method when scheduled; the other asks it to call
++an arbitrary function pointer.
++
++ -- Constructor on Task:  Task (Element *E)
++     When this task is scheduled, call `E->run_task()'.
++
++ -- Constructor on Task:  Task (TaskHook HOOK, void *THUNK)
++     When this task is scheduled, call `HOOK(this, THUNK)'.  The HOOK
++     argument is a function pointer with type `void (*)(Task *, void
++     *)'.
++
++   The `Task::initialize' method places the task on a router-wide list
++of `Task's, associates the task with a particular task queue, and,
++optionally, schedules it. Typically, an element's `initialize' method
++calls `Task::initialize'.
++
++ -- Method on Task: void initialize (Router *R, bool SCHEDULED)
++ -- Method on Task: void initialize (Element *E, bool SCHEDULED)
++     Attaches the task to the router object R (or `E->router()').
++     Additionally sets the task's tickets to a default value, and
++     schedules the task if SCHEDULED is true.
++
++   Many elements call `ScheduleInfo::initialize_task' instead of
++calling `Task::initialize' directly. This method queries any
++`ScheduleInfo' elements in the configuration to determine the task's
++scheduling parameters, sets those parameters, and calls
++`Task::initialize' to schedule the task. The
++`ScheduleInfo::initialize_task' method is defined in the
++`<click/standard/scheduleinfo.hh>' header file.
++
++ -- Static Method on ScheduleInfo: void initialize_task (Element *E,
++          Task *TASK, bool SCHEDULE, ErrorHandler *ERRH)
++     Sets TASK's scheduling parameters as specified by any
++     `ScheduleInfo' elements in the router configuration. The element E
++     is used to find the correct router, and provides the relevant name
++     for parameter lookup--the user supplies parameters to
++     `ScheduleInfo' by element name. If SCHEDULE is true, also
++     schedules TASK on `E->router()''s task queue. Reports any errors
++     to ERRH.
++
++ -- Static Method on ScheduleInfo: void initialize_task (Element *E,
++          Task *TASK, ErrorHandler *ERRH)
++     A synonym for `initialize_task(E, TASK, true, ERRH)'.
++
++ -- Static Method on ScheduleInfo: void join_scheduler (Element *E,
++          Task *TASK, ErrorHandler *ERRH)
++     A synonym for `initialize_task(E, TASK, true, ERRH)'.
++
++   The `initialize_task' method is generally called like this:
++
++     int
++     SomeElement::initialize(ErrorHandler *errh)
++     {
++         ScheduleInfo::initialize_task(this, &_task, errh);
++     }
++
++Here, `_task', a `Task' object, is one of `SomeElement''s instance
++variables.
++
++\1f
++File: click.info,  Node: Scheduling Tasks,  Next: Tickets,  Prev: Task Initialization,  Up: Tasks
++
++4.2 Scheduling Tasks
++====================
++
++The user may take a task off its task queue with the `unschedule'
++method, and place it back onto its task queue with the `reschedule'
++method. As tasks move to the head of the task queue, they are
++unscheduled and their callbacks are called. Within these callback
++functions, the user will typically call `fast_reschedule', which is
++like `reschedule' without the locking overhead.
++
++ -- Method on Task: void unschedule ()
++     Unschedules the task by removing it from its task queue. Does
++     nothing if if the task is currently unscheduled, or if it was
++     never initialized.  When this function returns, the task will not
++     be scheduled.
++
++ -- Method on Task: void reschedule ()
++     Reschedules the task by placing it on its task queue. If the task
++     is already scheduled, then this method does nothing.
++
++   All three functions lock the task queue before manipulating it. This
++avoids corruption when there are multiple processors executing
++simultaneously. If `reschedule' cannot immediately lock a task
++queue--perhaps because it is being used on another processor--then they
++register a task request, which will be executed in the near future. In
++contrast, the `unschedule' function will wait until it can lock the
++task queue.
++
++   Sometimes unscheduling a task is not enough: you don't want the task
++to run, even if someone else (an upstream queue, for example) were to
++reschedule it. The `strong_unschedule' method both unschedules the task
++and shifts the task to the quiescent thread, which never runs. Thus, a
++`strong_unschedule'd task will not run until someone calls
++`strong_reschedule', which reschedules the task on its original
++preferred thread.
++
++ -- Method on Task: void strong_unschedule ()
++     Unschedules the task by removing it from its task queue and
++     shifting it to the quiescent thread. Does nothing if if the task
++     is currently unscheduled, or if it was never initialized. When
++     this function returns, the task will not be scheduled.
++
++ -- Method on Task: void strong_reschedule ()
++     Reschedules the task by placing it on the task queue corresponding
++     to its thread preference. The task will not be scheduled
++     immediately upon return, but it will become scheduled
++     soon--`strong_reschedule' uses a task request to avoid locking.
++
++   The `fast_reschedule' method avoids locking overhead in the common
++case that a task must be rescheduled from within its callback.
++
++ -- Method on Task: void fast_reschedule ()
++     Reschedules the task by placing it on its preferred task queue.
++     This method avoids locking overhead, so it is faster than
++     `reschedule'.
++
++          *Caution*: You may call a `Task''s `fast_reschedule' method
++          only from within its callback function. For instance, if an
++          element has a task, `_task', that calls the element's
++          `run_task' method when scheduled, and if `run_task' is called
++          only by that task's callback, then that element's `run_task'
++          method should call `_task.fast_reschedule()' instead of
++          `_task.reschedule()'.
++
++   The `fast_unschedule' method is to `unschedule' as `fast_reschedule'
++is to `reschedule'. It is rarely used, since tasks are automatically
++unscheduled before they are run.
++
++ -- Method on Task: void fast_unschedule ()
++     Unschedules the task by removing it from its task queue. Does
++     nothing if if the task is currently unscheduled, or if it was
++     never initialized.  This method avoids locking overhead, so it is
++     faster than `unschedule'.
++
++          *Caution*: You may call a `Task''s `fast_unschedule' method
++          only from within its callback function.
++
++\1f
++File: click.info,  Node: Tickets,  Next: Task Thread Choice,  Prev: Scheduling Tasks,  Up: Tasks
++
++4.3 Tickets
++===========
++
++Click tasks are scheduled using the flexible, lightweight stride
++scheduling algorithm.(1) This algorithm assigns each task a parameter
++called its "tickets". A task with twice as many tickets as usual is
++scheduled twice as frequently.
++
++   `Task's have methods for querying, setting, and adjusting their
++tickets.
++
++ -- Method on Task: int tickets () const
++     Returns this task's tickets. This number will be at least 1 and no
++     more than `Task::MAX_TICKETS', which equals 32768.
++
++ -- Method on Task: void set_tickets (int T)
++     Sets this task's tickets to T. The T parameter should lie between
++     1 and `Task::MAX_TICKETS', inclusive; numbers outside this range
++     are constrained to the nearest valid value.
++
++ -- Method on Task: void adj_tickets (int DELTA)
++     Equivalent to `set_tickets(tickets() + DELTA)'.
++
++   ---------- Footnotes ----------
++
++   (1) For more information, see MIT Laboratory for Computer Science
++Technical Memo MIT/LCS/TM-528, `Stride scheduling: deterministic
++proportional-share resource management', by Carl A. Waldspurger and
++William E. Weihl, June 1995.
++
++\1f
++File: click.info,  Node: Task Thread Choice,  Next: Task Status,  Prev: Tickets,  Up: Tasks
++
++4.4 Choosing a Thread
++=====================
++
++Each task belongs to some task queue, which generally corresponds to a
++thread of control. Single-threaded Click has one active thread, and
++therefore one task queue, but multithreaded Click can have an arbitrary
++number of threads. Either Click has a special thread, the "quiescent
++thread", numbered -1; tasks belonging to the quiescent thread never
++run, whether or not they are scheduled. Every task starts out belonging
++to the first thread, thread 0. The `change_thread' method moves a task
++to another thread.
++
++ -- Method on Task: void change_thread (int THREAD_ID)
++     Move this task to thread THREAD_ID, which should be a number
++     between -1 and the relevant `Router''s `nthreads()'.
++
++     The task is scheduled on the new task queue if and only if it was
++     scheduled on the old task queue.
++
++   Like `reschedule', `change_thread' must lock the task queue before
++manipulating it. (Unlike those methods, `change_thread' must lock two
++task queues, the old and the new.) If `change_thread' cannot lock a
++task queue, then it registers a task request that will be executed in
++the near future. This implies that a task may remain on the same
++thread, or become unscheduled, for some time after `change_thread' is
++called.
++
++\1f
++File: click.info,  Node: Task Status,  Next: Task Handlers,  Prev: Task Thread Choice,  Up: Tasks
++
++4.5 Task Status Methods
++=======================
++
++These methods let a user check various properties of a task--for
++instance, whether it is initialized or scheduled.
++
++ -- Method on Task: bool initialized () const
++     Returns true iff the task has been initialized--that is, if it is
++     associated with some router.
++
++ -- Method on Task: bool scheduled () const
++     Returns true iff the task is currently scheduled on some task
++     queue.
++
++ -- Method on Task: RouterThread * scheduled_list () const
++     Returns the task queue with which this task is associated. Even
++     unscheduled tasks are associated with some task queue; this is the
++     task queue on which the task will be placed if `reschedule' is
++     called.
++
++ -- Method on Task: TaskHook hook () const
++     Returns the callback function that is called when the task is
++     scheduled.  If the task is associated with some element, this
++     method returns a null pointer.
++
++ -- Method on Task: void * thunk () const
++     Returns the extra data passed to the callback function when the
++     task is scheduled.
++
++ -- Method on Task: Element * element () const
++     If the task is associated with some element, this method returns
++     that element. Otherwise, returns a null pointer.
++
++\1f
++File: click.info,  Node: Task Handlers,  Next: Task Cleanup,  Prev: Task Status,  Up: Tasks
++
++4.6 Task Handlers
++=================
++
++By convention, elements with tasks should provide handlers that access
++task properties. The `Element::add_task_handlers' method automatically
++adds these handlers for a given `Task' object.
++
++ -- Method on Element: void add_task_handlers (Task *TASK,
++          const String &PREFIX = String())
++     Adds task handlers for TASK to this element. The string PREFIX is
++     prepended to every handler name.
++
++   This method adds at least the following handlers:
++
++`scheduled'
++     Returns a Boolean value saying whether the task is currently
++     scheduled on some task queue. Example result: "truen".
++
++`tickets'
++     Returns or sets the task's currently allocated tickets. This
++     handler is only available if Click was compiled to support stride
++     scheduling.  Example result: "1024n".
++
++`thread_preference'
++     Returns the task's thread preference. This handler is only
++     available on multithreaded Click. Example result: "2n".
++
++\1f
++File: click.info,  Node: Task Cleanup,  Prev: Task Handlers,  Up: Tasks
++
++4.7 Task Cleanup
++================
++
++You generally don't need to worry about destroying `Task' objects: they
++are automatically unscheduled and removed when the `Router' is
++destroyed. This only works if the `Task' objects have the same lifetime
++as the `Router', however. This includes the normal case, when `Task's
++are element instance variables. If you create and destroy `Task'
++objects as the router runs, however, you will need to call the
++following method before deleting the `Task'.
++
++ -- Method on Task: void cleanup ()
++     Cleans up the `Task' object.
++
++\1f
++File: click.info,  Node: Timers,  Next: Notification,  Prev: Tasks,  Up: Top
++
++5 Timers
++********
++
++Click "timers", like Click tasks, represent callback functions that the
++driver calls when appropriate. Unlike tasks, however, you schedule
++timers to go off at a specified time. Timers are intended for more
++infrequent and/or slower tasks.
++
++   As with `Task', most `Timer' objects are declared as instance
++variables of elements and scheduled when needed.
++
++   Timers may be scheduled with microsecond precision, but on current
++hardware, only millisecond precision is likely to be achievable.
++
++   The `Timer' class is defined in the `<click/timer.hh>' header file.
++
++* Menu:
++
++* Timer Initialization::
++* Scheduling Timers::
++* Timer Status Methods::
++* Timer Cleanup::
++
++\1f
++File: click.info,  Node: Timer Initialization,  Next: Scheduling Timers,  Prev: Timers,  Up: Timers
++
++5.1 Timer Initialization
++========================
++
++Timer initialization resembles task initialization. When the timer is
++constructed, you must supply it with information about its callback
++function. Later, after the router is initialized, you must initialize
++and, optionally, schedule it.
++
++ -- Constructor on Timer:  Timer (Element *E)
++     When this timer goes off, call `E->run_timer()'.
++
++ -- Constructor on Timer:  Timer (Task *T)
++     When this timer goes off, call `T->reschedule()'.
++
++ -- Constructor on Timer:  Timer (TimerHook HOOK, void *THUNK)
++     When this timer goes off, call `HOOK(this, THUNK)'. The HOOK
++     argument is a function pointer with type `void (*)(Timer *, void
++     *)'.
++
++ -- Method on Timer: void initialize (Router *R)
++ -- Method on Timer: void initialize (Element *E)
++     Attaches the timer to the router object R (or `E->router()').
++
++   Typically, an element's `initialize' method calls
++`Timer::initialize', and possibly one of the `schedule' functions
++described below.
++
++\1f
++File: click.info,  Node: Scheduling Timers,  Next: Timer Status Methods,  Prev: Timer Initialization,  Up: Timers
++
++5.2 Scheduling Timers
++=====================
++
++A variety of methods schedule timers to go off at specified times. The
++basic method is `schedule_at', which schedules the timer for a
++specified time. Subsidiary methods schedule the timer relative to the
++current time (the `schedule_after' methods), or relative to the last
++time the timer was scheduled to run (the `reschedule_after' methods).
++Finally, `unschedule' unschedules the timer.
++
++   All `schedule' and `reschedule' functions first unschedule the timer
++if it was already scheduled.
++
++   The `reschedule' methods are particularly useful for timers that
++should occur periodically. For example, this callback function will
++cause its timer to go off at 20-second intervals:
++
++     void timer_callback(Timer *t, void *) {
++         t->reschedule_after_s(20);
++     }
++
++ -- Method on Timer: void schedule_at (const struct timeval &WHEN)
++     Schedule the timer to go off at WHEN. You must have initialized
++     the timer earlier.
++
++ -- Method on Timer: void schedule_now ()
++     Schedule the timer to go off as soon as possible.
++
++ -- Method on Timer: void schedule_after (const struct timeval &DELAY)
++     Schedule the timer to go off DELAY after the current time.
++
++ -- Method on Timer: void schedule_after_s (uint32_t DELAY)
++     Schedule the timer to go off DELAY seconds after the current time.
++
++ -- Method on Timer: void schedule_after_ms (uint32_t DELAY)
++     Schedule the timer to go off DELAY milliseconds after the current
++     time.
++
++ -- Method on Timer: void reschedule_after (const struct timeval &DELAY)
++     Schedule the timer to go off DELAY after it was last scheduled to
++     go off. If the timer was never previously scheduled, this method
++     will schedule the timer for some arbitrary time.
++
++ -- Method on Timer: void reschedule_after_s (uint32_t DELAY)
++     Schedule the timer to go off DELAY seconds after it was last
++     scheduled to go off.
++
++ -- Method on Timer: void reschedule_after_ms (uint32_t DELAY)
++     Schedule the timer to go off DELAY milliseconds after it was last
++     scheduled to go off.
++
++ -- Method on Timer: void unschedule ()
++     Unschedules the timer, if it was scheduled.
++
++\1f
++File: click.info,  Node: Timer Status Methods,  Next: Timer Cleanup,  Prev: Scheduling Timers,  Up: Timers
++
++5.3 Timer Status Methods
++========================
++
++These methods return information about a timer, including when it is
++scheduled to expire.
++
++ -- Method on Timer: bool initialized () const
++     Returns true iff the timer has been initialized with a call to
++     `initialize()'. Uninitialized timers must not be scheduled.
++
++ -- Method on Timer: bool scheduled () const
++     Returns true iff the timer is scheduled to expire some time in the
++     future.
++
++ -- Method on Timer: const struct timeval & expiry () const
++     Returns the time that the timer is set to expire. If the timer has
++     never been scheduled, the value is garbage. If the timer was
++     scheduled but is not scheduled currently, the value is most
++     recently set expiry time.
++
++\1f
++File: click.info,  Node: Timer Cleanup,  Prev: Timer Status Methods,  Up: Timers
++
++5.4 Timer Cleanup
++=================
++
++You don't need to worry about cleaning up `Timer' objects. They are
++automatically unscheduled and removed when the `Router' is destroyed,
++and deleting a `Timer' automatically removes it from any relevant
++lists. The following function is nevertheless provided for consistency
++with `Task's, which do need to be cleaned up in certain circumstances
++(*note Task Cleanup::).
++
++ -- Method on Timer: void cleanup ()
++     Cleans up the `Timer' object.
++
++\1f
++File: click.info,  Node: Notification,  Next: Coding Standards,  Prev: Timers,  Up: Top
++
++6 Notification
++**************
++
++\1f
++File: click.info,  Node: Coding Standards,  Next: Index,  Prev: Notification,  Up: Top
++
++7 Coding Standards
++******************
++
++* Menu:
++
++* Upper and lower case names::
++* Common name patterns::
++
++\1f
++File: click.info,  Node: Upper and lower case names,  Next: Common name patterns,  Prev: Coding Standards,  Up: Coding Standards
++
++7.1 Upper and Lower Case in Names
++=================================
++
++Keep to the following consistent scheme for choosing between upper and
++lower case when naming variables, types, and functions.
++
++*Classes*
++     Use mixed case with an initial capital letter and no underscores:
++     `LookupIPRoute'.
++
++*Methods*
++     Use all lower case with underscores separating words:
++     `negation_is_simple'.
++
++*Constants*
++     Use all upper case with underscores separating words:
++     `TYPE_ICMP_TYPE'.
++
++*Instance variables*
++     Begin with an underscore, then use all lower case with underscores
++     separating words: `_length'.
++
++*Regular variables*
++     Use all lower case with underscores separating words: `i',
++     `the_handler'.
++
++*Class variables*
++     These variables are declared as `static' in the class header. Name
++     them like regular variables: `nelements_allocated'.
++
++*Functions*
++     Name them like methods: `quicksort_hook'.
++
++*Other types*
++     This includes typedefs and enumerated types. Name them like
++     classes: `CpVaParseCmd', `ConfigurePhase'.
++
++   There are exceptions to these guidelines. In particular:
++
++   * Instance variables in C structs--that is, classes with few methods
++     whose instance variables are mostly public--may be named like
++     regular variables, without a preceding underscore. The same goes
++     for the components of unions.
++
++   * Classes that act like simple types, such as `uatomic32_t', take
++     names similar to the types they replace (in this case `uint32_t').
++
++\1f
++File: click.info,  Node: Common name patterns,  Prev: Upper and lower case names,  Up: Coding Standards
++
++7.2 Common Name Patterns
++========================
++
++   * Many instance variables have associated "getter methods" that
++     return their values, and/or "setter methods" that change their
++     values. For an instance variable named `_x', the getter method
++     should be named `x()' and the setter method should be named
++     `set_x()'.
++
++   * A variable or method which counts something is often named
++     `nOBJECTs'--for instance, `_nwarnings', `ninputs()', `_npackets'.
++
++   * Use a bare `0' for a null pointer, except where some ambiguity
++     might arise (for example, where an incorrect overloading might be
++     selected).
++
++\1f
++File: click.info,  Node: Index,  Prev: Coding Standards,  Up: Top
++
++Index
++*****
++
++\0\b[index\0\b]
++* Menu:
++
++* (*ReadHandler):                        Read and Write Handler Overview.
++                                                              (line  13)
++* (*WriteHandler):                       Read and Write Handler Overview.
++                                                              (line  21)
++* add_read_handler on Element:           Adding Handlers.     (line  13)
++* add_read_handler on Router:            Adding Handlers.     (line  34)
++* add_task_handlers on Element:          Task Handlers.       (line  12)
++* add_write_handler on Element:          Adding Handlers.     (line  19)
++* add_write_handler on Router:           Adding Handlers.     (line  37)
++* adj_tickets on Task:                   Tickets.             (line  24)
++* all_user_anno_u on Packet:             User Annotations.    (line  60)
++* buffer_data on Packet:                 Packet Structure and Contents.
++                                                              (line  37)
++* buffer_data on WritablePacket:         Packet Structure and Contents.
++                                                              (line  47)
++* buffer_length on Packet:               Packet Structure and Contents.
++                                                              (line  42)
++* call_read on Router::Handler:          Handler Objects.     (line  57)
++* call_write on Router::Handler:         Handler Objects.     (line  62)
++* change_handler_flags on Router:        Adding Handlers.     (line  46)
++* change_thread on Task:                 Task Thread Choice.  (line  16)
++* cleanup on Task:                       Task Cleanup.        (line  15)
++* cleanup on Timer:                      Timer Cleanup.       (line  14)
++* clear_annotations on Packet:           Annotations In General.
++                                                              (line  10)
++* clone on Packet:                       Packet Sharing.      (line  12)
++* ContextErrorHandler on ContextErrorHandler: Error Veneers.  (line  26)
++* copy_annotations on Packet:            Annotations In General.
++                                                              (line  14)
++* data on Packet:                        Packet Structure and Contents.
++                                                              (line  31)
++* data on WritablePacket:                Packet Structure and Contents.
++                                                              (line  46)
++* debug on ErrorHandler:                 Reporting Errors.    (line  13)
++* decorate_text on ErrorHandler:         Writing ErrorHandlers.
++                                                              (line  30)
++* default ErrorHandler:                  Basic ErrorHandlers. (line  13)
++* default_handler on ErrorHandler:       Basic ErrorHandlers. (line  19)
++* device_anno on Packet:                 Device Annotation.   (line  14)
++* dst_ip6_anno on Packet:                Destination Address Annotation.
++                                                              (line  17)
++* dst_ip_anno on Packet:                 Destination Address Annotation.
++                                                              (line  14)
++* element on Task:                       Task Status.         (line  33)
++* element_hindexes on Router:            Handlers By Name or Index.
++                                                              (line  52)
++* error on ErrorHandler:                 Reporting Errors.    (line  16)
++* ErrorHandler, default:                 Basic ErrorHandlers. (line  13)
++* ErrorVeneer:                           Writing ErrorHandlers.
++                                                              (line  54)
++* ErrorVeneer on ErrorVeneer:            Writing ErrorHandlers.
++                                                              (line  67)
++* expiry on Timer:                       Timer Status Methods.
++                                                              (line  18)
++* fast_reschedule on Task:               Scheduling Tasks.    (line  55)
++* fast_unschedule on Task:               Scheduling Tasks.    (line  72)
++* fatal on ErrorHandler:                 Reporting Errors.    (line  17)
++* FileErrorHandler on FileErrorHandler:  Basic ErrorHandlers. (line  39)
++* flags on Router::Handler:              Handler Objects.     (line  17)
++* handle_text on ErrorHandler:           Writing ErrorHandlers.
++                                                              (line  45)
++* handler on Router:                     Handlers By Name or Index.
++                                                              (line  13)
++* headroom on Packet:                    Packet Structure and Contents.
++                                                              (line  40)
++* hindex on Router:                      Handlers By Name or Index.
++                                                              (line  24)
++* hook on Task:                          Task Status.         (line  24)
++* initialize on Task:                    Task Initialization. (line  31)
++* initialize on Timer:                   Timer Initialization.
++                                                              (line  23)
++* initialize_task on ScheduleInfo:       Task Initialization. (line  46)
++* initialized on Task:                   Task Status.         (line  10)
++* initialized on Timer:                  Timer Status Methods.
++                                                              (line  10)
++* ip6_header on Packet:                  Header Annotations.  (line  76)
++* ip6_header on WritablePacket:          Header Annotations.  (line  77)
++* ip6_header_length on Packet:           Header Annotations.  (line  84)
++* ip6_header_offset on Packet:           Header Annotations.  (line  83)
++* ip_header on Packet:                   Header Annotations.  (line  74)
++* ip_header on WritablePacket:           Header Annotations.  (line  75)
++* ip_header_length on Packet:            Header Annotations.  (line  82)
++* ip_header_offset on Packet:            Header Annotations.  (line  81)
++* join_scheduler on ScheduleInfo:        Task Initialization. (line  60)
++* kill on Packet:                        Packet Creation.     (line  80)
++* LandmarkErrorHandler on LandmarkErrorHandler: Error Veneers.
++                                                              (line  43)
++* ldebug on ErrorHandler:                Reporting Errors.    (line  36)
++* length on Packet:                      Packet Structure and Contents.
++                                                              (line  34)
++* lerror on ErrorHandler:                Reporting Errors.    (line  42)
++* lfatal on ErrorHandler:                Reporting Errors.    (line  44)
++* lmessage on ErrorHandler:              Reporting Errors.    (line  38)
++* lwarning on ErrorHandler:              Reporting Errors.    (line  40)
++* make on Packet <1>:                    Packets and sk_buffs.
++                                                              (line  20)
++* make on Packet:                        Packet Creation.     (line  31)
++* make_text on ErrorHandler:             Writing ErrorHandlers.
++                                                              (line  19)
++* message on ErrorHandler:               Reporting Errors.    (line  14)
++* name on Router::Handler:               Handler Objects.     (line  14)
++* NAME_ANNO:                             Specific User Annotations.
++                                                              (line  13)
++* nerrors on ErrorHandler:               Counting Errors.     (line  11)
++* network_header on Packet:              Header Annotations.  (line  21)
++* network_header on WritablePacket:      Header Annotations.  (line  22)
++* network_header_length on Packet:       Header Annotations.  (line  36)
++* network_header_offset on Packet:       Header Annotations.  (line  31)
++* nonunique_push on Packet:              Packet Buffer Manipulation.
++                                                              (line  62)
++* nonunique_put on Packet:               Packet Buffer Manipulation.
++                                                              (line  77)
++* nwarnings on ErrorHandler:             Counting Errors.     (line  10)
++* packet_type_anno on Packet:            Packet Type Annotation.
++                                                              (line  33)
++* perfctr_anno on Packet:                Performance Counter Annotation.
++                                                              (line  11)
++* PrefixErrorHandler on PrefixErrorHandler: Error Veneers.    (line  36)
++* pull on Packet:                        Packet Buffer Manipulation.
++                                                              (line  31)
++* push on Packet:                        Packet Buffer Manipulation.
++                                                              (line  16)
++* put on Packet:                         Packet Buffer Manipulation.
++                                                              (line  37)
++* read_visible on Router::Handler:       Handler Objects.     (line  30)
++* readable on Router::Handler:           Handler Objects.     (line  27)
++* reschedule on Task:                    Scheduling Tasks.    (line  20)
++* reschedule_after on Timer:             Scheduling Timers.   (line  42)
++* reschedule_after_ms on Timer:          Scheduling Timers.   (line  51)
++* reschedule_after_s on Timer:           Scheduling Timers.   (line  47)
++* reset_counts on ErrorHandler:          Counting Errors.     (line  15)
++* schedule_after on Timer:               Scheduling Timers.   (line  32)
++* schedule_after_ms on Timer:            Scheduling Timers.   (line  38)
++* schedule_after_s on Timer:             Scheduling Timers.   (line  35)
++* schedule_at on Timer:                  Scheduling Timers.   (line  25)
++* schedule_now on Timer:                 Scheduling Timers.   (line  29)
++* scheduled on Task:                     Task Status.         (line  14)
++* scheduled on Timer:                    Timer Status Methods.
++                                                              (line  14)
++* scheduled_list on Task:                Task Status.         (line  18)
++* set_default_handler on ErrorHandler:   Basic ErrorHandlers. (line  23)
++* set_device_anno on Packet:             Device Annotation.   (line  17)
++* set_dst_ip6_anno on Packet:            Destination Address Annotation.
++                                                              (line  22)
++* set_dst_ip_anno on Packet:             Destination Address Annotation.
++                                                              (line  21)
++* set_ip6_header on Packet:              Header Annotations.  (line  91)
++* set_ip_header on Packet:               Header Annotations.  (line  89)
++* SET_NAME_ANNO:                         Specific User Annotations.
++                                                              (line  16)
++* set_network_header on Packet:          Header Annotations.  (line  60)
++* set_packet_type_anno on Packet:        Packet Type Annotation.
++                                                              (line  37)
++* set_perfctr_anno on Packet:            Performance Counter Annotation.
++                                                              (line  14)
++* set_tickets on Task:                   Tickets.             (line  19)
++* set_timestamp_anno on Packet:          Timestamp Annotation.
++                                                              (line  14)
++* set_user_anno_c on Packet:             User Annotations.    (line  54)
++* set_user_anno_i on Packet:             User Annotations.    (line  56)
++* set_user_anno_u on Packet:             User Annotations.    (line  55)
++* shared on Packet:                      Packet Sharing.      (line  34)
++* silent_handler on ErrorHandler:        Basic ErrorHandlers. (line  28)
++* skb on Packet:                         Packets and sk_buffs.
++                                                              (line  32)
++* static_cleanup on ErrorHandler:        ErrorHandler Initialization.
++                                                              (line  20)
++* static_initialize on ErrorHandler:     ErrorHandler Initialization.
++                                                              (line  13)
++* steal_skb on Packet:                   Packets and sk_buffs.
++                                                              (line  40)
++* strong_reschedule on Task:             Scheduling Tasks.    (line  46)
++* strong_unschedule on Task:             Scheduling Tasks.    (line  40)
++* tailroom on Packet:                    Packet Structure and Contents.
++                                                              (line  41)
++* take on Packet:                        Packet Buffer Manipulation.
++                                                              (line  52)
++* Task on Task:                          Task Initialization. (line  18)
++* tcp_header on Packet:                  Header Annotations.  (line  97)
++* tcp_header on WritablePacket:          Header Annotations.  (line  98)
++* thunk on Task:                         Task Status.         (line  29)
++* tickets on Task:                       Tickets.             (line  15)
++* Timer on Timer:                        Timer Initialization.
++                                                              (line  12)
++* timestamp_anno on Packet:              Timestamp Annotation.
++                                                              (line   9)
++* transport_header on Packet:            Header Annotations.  (line  26)
++* transport_header on WritablePacket:    Header Annotations.  (line  27)
++* transport_header_offset on Packet:     Header Annotations.  (line  40)
++* udp_header on Packet:                  Header Annotations.  (line  99)
++* udp_header on WritablePacket:          Header Annotations.  (line 100)
++* uniqueify on Packet:                   Packet Sharing.      (line  20)
++* unparse_name on Router::Handler:       Handler Objects.     (line  46)
++* unschedule on Task:                    Scheduling Tasks.    (line  14)
++* unschedule on Timer:                   Scheduling Timers.   (line  55)
++* user_anno_c on Packet:                 User Annotations.    (line  43)
++* user_anno_i on Packet:                 User Annotations.    (line  48)
++* user_anno_u on Packet:                 User Annotations.    (line  47)
++* verror on ErrorHandler:                Reporting Errors.    (line  73)
++* visible on Router::Handler:            Handler Objects.     (line  42)
++* warning on ErrorHandler:               Reporting Errors.    (line  15)
++* writable on Router::Handler:           Handler Objects.     (line  38)
++* write_visible on Router::Handler:      Handler Objects.     (line  39)
++
++
++\1f
++Tag Table:
++Node: Top\7f233
++Node: Overview\7f2218
++Node: Packet Transfer\7f2353
++Node: Helper Classes\7f2470
++Node: ErrorHandler\7f2618
++Node: ErrorHandler Initialization\7f3523
++Node: Reporting Errors\7f4673
++Node: Error Format Strings\7f8229
++Node: Counting Errors\7f12734
++Node: Basic ErrorHandlers\7f13677
++Node: Error Veneers\7f15602
++Node: Writing ErrorHandlers\7f19343
++Node: Packets\7f22748
++Node: Packet Structure and Contents\7f24424
++Node: Packet Creation\7f26727
++Node: Packets and sk_buffs\7f30171
++Node: Packet Sharing\7f32385
++Node: Packet Buffer Manipulation\7f33889
++Node: Annotations\7f38510
++Node: Header Annotations\7f39633
++Node: User Annotations\7f44362
++Node: Specific User Annotations\7f46926
++Node: Other Annotations\7f48352
++Node: Destination Address Annotation\7f49046
++Node: Timestamp Annotation\7f50312
++Node: Device Annotation\7f51557
++Node: Packet Type Annotation\7f52750
++Node: Performance Counter Annotation\7f54390
++Node: Annotations In General\7f55128
++Node: Packet Out-of-Memory\7f55784
++Node: Handlers\7f56549
++Node: Read and Write Handler Overview\7f57053
++Node: Adding Handlers\7f60246
++Ref: Changing Handler Flags\7f62106
++Node: Default Handlers\7f62591
++Node: Accessing Handlers Internally\7f65097
++Node: Handler Objects\7f65946
++Node: Handlers By Name or Index\7f69116
++Node: LLRPC Overview\7f71591
++Node: Tasks\7f71730
++Node: Task Initialization\7f73013
++Node: Scheduling Tasks\7f76105
++Node: Tickets\7f79882
++Ref: Tickets-Footnote-1\7f80864
++Node: Task Thread Choice\7f81096
++Node: Task Status\7f82460
++Node: Task Handlers\7f83806
++Node: Task Cleanup\7f84870
++Node: Timers\7f85502
++Node: Timer Initialization\7f86263
++Node: Scheduling Timers\7f87370
++Node: Timer Status Methods\7f89646
++Node: Timer Cleanup\7f90505
++Node: Notification\7f91069
++Node: Coding Standards\7f91191
++Node: Upper and lower case names\7f91386
++Node: Common name patterns\7f93028
++Node: Index\7f93763
++\1f
++End Tag Table
+diff -Nurb click-1.6.0/inst/share/info/dir click-1.6.0-27/inst/share/info/dir
+--- click-1.6.0/inst/share/info/dir    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/info/dir 2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,18 @@
++This is the file .../info/dir, which contains the
++topmost node of the Info hierarchy, called (dir)Top.
++The first time you invoke Info you start off looking at this node.
++\1f
++File: dir,    Node: Top       This is the top of the INFO tree
++
++  This (the Directory node) gives a menu of major topics.
++  Typing "q" exits, "?" lists all Info commands, "d" returns here,
++  "h" gives a primer for first-timers,
++  "mEmacs<Return>" visits the Emacs manual, etc.
++
++  In Emacs, you can click mouse button 2 on a menu item or cross reference
++  to select it.
++
++* Menu:
++
++Click modular router
++* Click: (click).           The Click modular router programming manual.
+diff -Nurb click-1.6.0/inst/share/man/man1/click-align.1 click-1.6.0-27/inst/share/man/man1/click-align.1
+--- click-1.6.0/inst/share/man/man1/click-align.1      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/man1/click-align.1   2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,129 @@
++.\" -*- mode: nroff -*-
++.ds V 1.0
++.ds E " \-\- 
++.if t .ds E \(em
++.de Sp
++.if n .sp
++.if t .sp 0.4
++..
++.de Es
++.Sp
++.RS 5
++.nf
++..
++.de Ee
++.fi
++.RE
++.PP
++..
++.de Rs
++.RS
++.Sp
++..
++.de Re
++.Sp
++.RE
++..
++.de M
++.BR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RB "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH CLICK-ALIGN 1 "27/Nov/1999" "Version \*V"
++.SH NAME
++click-align \- adds required Align elements to a Click configuration
++'
++.SH SYNOPSIS
++.B click-align
++.RI \%[ options ]
++.RI \%[ param = value " ...]"
++.RI \%[ router\-file ]
++'
++.SH DESCRIPTION
++The
++.B click-align
++tool makes Click router configurations usable on machines that don't
++support unaligned accesses. It reads a router configuration file in the
++.M click 5
++language, adds any required
++.M Align n
++elements, and writes the new configuration to the standard output.
++.PP
++Several Click elements, such as
++.M CheckIPHeader n
++and
++.M ToLinux n ,
++have alignment requirements. The CheckIPHeader element, for example,
++expects that the packet begins with an IP header, and that this IP header
++is four-byte-aligned. Normally, Click does not guarantee this: elements
++cannot know how input packets will be aligned. The
++.B click-align
++tool first analyzes the router configuration, then inserts
++.M Align n
++elements as required to ensure that packets will be properly aligned. It
++also adds an
++.M AlignmentInfo n
++element so elements can figure out what packet alignment they can expect.
++.PP
++The list of alignment requirements is currently built in to the
++.B click-align
++tool and cannot be changed except by recompilation.
++'
++.SH "OPTIONS"
++'
++If any filename argument is a single dash "-",
++.B click-align
++will use the standard input or output instead, as appropriate.
++'
++.TP 5
++.BI \-f " file"
++.PD 0
++.TP
++.BI \-\-file " file"
++Read the router configuration to transform from
++.IR file .
++The default is the standard input.
++'
++.Sp
++.TP
++.BI \-e " expr"
++.PD 0
++.TP
++.BI \-\-expr " expr"
++Use
++.IR expr ,
++a string in the Click language, as the router configuration to transform.
++'
++.Sp
++.TP
++.BI \-o " file"
++.TP
++.BI \-\-output " file"
++Write the output router configuration to
++.IR file .
++The default is the standard output.
++'
++.Sp
++.TP 5
++.BI \-\-help
++Print usage information and exit.
++'
++.Sp
++.TP
++.BI \-\-version
++Print the version number and some quickie warranty information and exit.
++'
++.PD
++'
++.SH "SEE ALSO"
++.M click 5 ,
++.M Align n ,
++.M AlignmentInfo n
++'
++.SH AUTHOR
++.na
++Eddie Kohler, kohler@cs.ucla.edu
++.br
++http://www.pdos.lcs.mit.edu/click/
++'
+diff -Nurb click-1.6.0/inst/share/man/man1/click-combine.1 click-1.6.0-27/inst/share/man/man1/click-combine.1
+--- click-1.6.0/inst/share/man/man1/click-combine.1    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/man1/click-combine.1 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,182 @@
++.\" -*- mode: nroff -*-
++.ds V 1.0.5
++.ds E " \-\- 
++.if t .ds E \(em
++.de Sp
++.if n .sp
++.if t .sp 0.4
++..
++.de Es
++.Sp
++.RS 5
++.nf
++..
++.de Ee
++.fi
++.RE
++.PP
++..
++.de Rs
++.RS
++.Sp
++..
++.de Re
++.Sp
++.RE
++..
++.de M
++.BR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RB "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH CLICK-COMBINE 1 "27/Apr/2000" "Version \*V"
++.SH NAME
++click-combine \- combines two or more Click configurations into one
++'
++.SH SYNOPSIS
++.B click-combine
++.RI \%[ options ]
++\%\fIname\fR=\fIfile\fR ... \e
++.br
++\%        \fIname1\fR.\fIelement1\fR=\fIname2\fR.\fIelement2\fR ...
++'
++.SH DESCRIPTION
++The
++.B click-combine
++tool combines two or more Click router configurations into a single
++configuration representing the network. For example, say there is a
++point-to-point link from router A's eth0 interface to router B's eth1
++interface. Then in the combined configuration, A's ToDevice(eth0) element
++and B's PollDevice(eth1) element will be replaced with a new RouterLink
++element; packets will flow from A to B via the RouterLink element. You can
++edit the combined configuration with tools, which are effectively able to
++consider the whole network. For example, they can check cross-router
++properties or perform cross-router optimizations. Use the
++.M click-uncombine 1
++tool to extract a component router configuration from the combination.
++.PP
++Component routers are identified by name. This name must be a legal Click
++identifier (see
++.M click 5 )
++that does not contain a slash. To add a router component named
++.I N
++whose configuration is in the file
++.IR f ,
++supply the option
++.RI ` N = f '.
++You will generally supply at least two such options.
++.PP
++A link says that packets leaving one router via one element will arrive at
++another router via another element. The routers are specified by component
++name, and the elements can be specified by element name or by device name.
++To connect the
++.I e1
++element from  router component
++.I A
++to the
++.I e2
++element from router component
++.IR B ,
++supply the option
++.RI ` A . e1 = B . e2 '.
++If
++.I e1
++is a
++.M ToDevice n
++element, then you can use its device name argument instead of its name.
++Similarly, if
++.I e2
++is a
++.M PollDevice n
++or
++.M FromDevice n
++element, you can use its device name argument instead of its name.
++.PP
++Link options are one-way, so if there is a duplex connection, you will need
++to give two arguments: `A.eth0=B.eth1 B.eth1=A.eth0', for example. You can
++also support more than two routers sharing a link; for example,
++`A.eth0=B.eth1 A.eth0=C.eth2'.
++'
++.SH "OPTIONS"
++'
++If any filename argument is a single dash "-",
++.B click-combine
++will use the standard input or output instead, as appropriate.
++'
++.TP 5
++.BR \-o ", " \-\-output " \fIfile"
++.PD 0
++Write the output router configuration to
++.IR file .
++The default is the standard output.
++'
++.Sp
++.TP
++.BR \-n ", " \-\-name " \fIname"
++The next router component will be named
++.IR name .
++This option and the
++.BR \-\-file
++provide an alternative to the
++.IR name = file
++syntax.
++'
++.Sp
++.TP
++.BR \-f ", " \-\-file " \fIfile"
++Read a router configuration from
++.IR file .
++Together with the
++.BR \-\-name
++option, the
++.B \-\-file
++and
++.B \-\-expression
++options provide an alternative to the
++.IR name = file
++syntax.
++'
++.Sp
++.TP
++.BR \-e ", " \-\-expression " \fIexpr"
++Use
++.IR expr ,
++a string in the Click language, as the next router configuration.
++'
++.Sp
++.TP
++.BR \-l ", " \-\-link " \fIcomponent1\fR.\fIelement1\fR=\fIcomponent2\fR.\fIelement2"
++Add a link specification as described above.
++'
++.Sp
++.TP
++.BR \-c ", " \-\-config
++Output new configuration only (not an archive with extra information).
++'
++.Sp
++.TP 5
++.BI \-\-help
++Print usage information and exit.
++'
++.Sp
++.TP
++.BI \-\-version
++Print the version number and some quickie warranty information and exit.
++'
++.PD
++'
++.SH "SEE ALSO"
++.M click-uncombine 1 ,
++.M click-xform 1 ,
++.M click 5 ,
++.M PollDevice n ,
++.M FromDevice n ,
++.M ToDevice n
++'
++.SH AUTHOR
++.na
++Eddie Kohler, kohler@cs.ucla.edu
++.br
++http://www.pdos.lcs.mit.edu/click/
++'
+diff -Nurb click-1.6.0/inst/share/man/man1/click-devirtualize.1 click-1.6.0-27/inst/share/man/man1/click-devirtualize.1
+--- click-1.6.0/inst/share/man/man1/click-devirtualize.1       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/man1/click-devirtualize.1    2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,190 @@
++.\" -*- mode: nroff -*-
++.ds V 1.0.3
++.ds E " \-\- 
++.if t .ds E \(em
++.de Sp
++.if n .sp
++.if t .sp 0.4
++..
++.de Es
++.Sp
++.RS 5
++.nf
++..
++.de Ee
++.fi
++.RE
++.PP
++..
++.de Rs
++.RS
++.Sp
++..
++.de Re
++.Sp
++.RE
++..
++.de M
++.BR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RB "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH CLICK-DEVIRTUALIZE 1 "31/Mar/2000" "Version \*V"
++.SH NAME
++click-devirtualize \- removes virtual function calls from a Click configuration
++'
++.SH SYNOPSIS
++.B click-devirtualize
++.RI \%[ options ]
++.RI \%[ param = value " ...]"
++.RI \%[ router\-file ]
++'
++.SH DESCRIPTION
++The
++.B click-devirtualize
++tool speeds up a Click configuration by removing virtual function calls
++from its elements. It reads a router configuration file in the
++.M click 5
++language and creates specialized C++ source code for each element. The
++virtual function calls in this specialized C++ code are replaced with
++direct function calls to other elements in the configuration.
++.PP
++After creating the source code,
++.B click-devirtualize
++will optionally compile it into dynamically loadable packages. The elements
++in the input configuration are changed to use new, specially generated
++element classes, and the resulting configuration, plus source code and any
++compiled packages, are combined into an archive and written to the standard
++output. You can install such an archive into the
++.M click.o 8
++Linux kernel module with
++.M click-install 1 :
++.Sp
++.nf
++  % click-devirtualize -k CONFIGURATION | click-install
++.fi
++.Sp
++The
++.M click 1
++user level driver can read the archives directly.
++.PP
++The
++.B click-devirtualize
++transformation can be reversed with the
++.B \-\-reverse
++option.
++'
++.SH "OPTIONS"
++'
++If any filename argument is a single dash "-",
++.B click-devirtualize
++will use the standard input or output instead, as appropriate.
++'
++.TP 5
++.BI \-f " file"
++.PD 0
++.TP
++.BI \-\-file " file"
++Read the router configuration to transform from
++.IR file .
++The default is the standard input.
++'
++.Sp
++.TP 5
++.BI \-e " expr"
++.PD 0
++.TP
++.BI \-\-expr " expr"
++Use
++.IR expr ,
++a string in the Click language, as the router configuration to transform.
++'
++.Sp
++.TP
++.BI \-o " file"
++.TP
++.BI \-\-output " file"
++Write the output router configuration to
++.IR file .
++The default is the standard output.
++'
++.Sp
++.TP
++.BR \-l ", " \-\-linuxmodule
++Generate a dynamically loadable package for the
++.M click.o 8
++Linux kernel module.
++'
++.Sp
++.TP
++.BR \-u ", " \-\-userlevel
++Generate a dynamically loadable package for the
++.M click 1
++user-level driver.
++'
++.Sp
++.TP 5
++.BR \-s ", " \-\-source
++Output only the specialized element class source code.
++'
++.Sp
++.TP 5
++.BR \-c ", " \-\-config
++Output only the new configuration (the one that includes specialized
++elements).
++'
++.Sp
++.TP 5
++.BR \-r ", " \-\-reverse
++Reverse the tranformation. That is, change any existing devirtualized 
++element classes into the equivalent normal elements.
++'
++.Sp
++.TP
++.BI \-n " class"
++.TP
++.BI \-\-no\-devirtualize " class"
++Do not devirtualize elements whose element class is
++.IR class .
++Such elements will continue using normal source code.
++'
++.Sp
++.TP
++.BI \-i " file"
++.TP
++.BI \-\-instructions " file"
++Read devirtualization instructions from
++.IR file .
++This file can contain any number of lines. Comments start with `#';
++non-blank, non-comment lines should have devirtualization directives. There
++is currently one directive: "noclass
++.IR "class1 class2" "..."""
++is equivalent to several `\-\-no\-devirtualize
++.IR class "i'"
++options.
++'
++.Sp
++.TP 5
++.BI \-\-help
++Print usage information and exit.
++'
++.Sp
++.TP
++.BI \-\-version
++Print the version number and some quickie warranty information and exit.
++'
++.PD
++'
++.SH "SEE ALSO"
++.M click 1 ,
++.M click-install 1 ,
++.M click 5 ,
++.M click.o 8
++'
++.SH AUTHOR
++.na
++Eddie Kohler, kohler@cs.ucla.edu
++.br
++http://www.pdos.lcs.mit.edu/click/
++'
+diff -Nurb click-1.6.0/inst/share/man/man1/click-fastclassifier.1 click-1.6.0-27/inst/share/man/man1/click-fastclassifier.1
+--- click-1.6.0/inst/share/man/man1/click-fastclassifier.1     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/man1/click-fastclassifier.1  2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,194 @@
++.\" -*- mode: nroff -*-
++.ds V 1.0.3
++.ds E " \-\- 
++.if t .ds E \(em
++.de Sp
++.if n .sp
++.if t .sp 0.4
++..
++.de Es
++.Sp
++.RS 5
++.nf
++..
++.de Ee
++.fi
++.RE
++.PP
++..
++.de Rs
++.RS
++.Sp
++..
++.de Re
++.Sp
++.RE
++..
++.de M
++.BR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RB "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH CLICK-FASTCLASSIFIER 1 "9/Feb/2000" "Version \*V"
++.SH NAME
++click-fastclassifier \- specializes Classifier code in a Click configuration
++'
++.SH SYNOPSIS
++.B click-fastclassifier
++.RI \%[ options ]
++.RI \%[ param = value " ...]"
++.RI \%[ router\-file ]
++'
++.SH DESCRIPTION
++The
++.B click-fastclassifier
++tool speeds up a Click configuration by creating fast versions of all its
++.M Classifier n ,
++.M IPClassifier n ,
++and
++.M IPFilter n
++elements. It reads a router configuration file in the
++.M click 5
++language and creates specialized C++ source code for each Classifier-like
++element. A Classifier is expanded into a series of if statements; for
++example, the expansion of `Classifier(0/80, -)' contains something like
++this function:
++.PP
++.nf
++inline void
++FastClassifier_a_ac::length_unchecked_push(Packet *p)
++{
++  const unsigned *data = (const unsigned *)(p->data() - 0);
++ step_0:
++  if ((data[0] & 255U) == 128U) {
++    output(0).push(p);
++    return;
++  }
++  output(1).push(p);
++  return;
++}
++.fi
++.PP
++After creating the source code,
++.B click-fastclassifier
++will optionally compile it into dynamically loadable packages. The
++Classifier elements in the input configuration are changed to use new
++FastClassifier elements, and the resulting configuration, plus source code
++and any compiled packages, are combined into an archive and written to the
++standard output. You can install such an archive into the
++.M click.o 8
++Linux kernel module with
++.M click-install 1 :
++.Sp
++.nf
++  % click-fastclassifier -k CONFIGURATION | click-install
++.fi
++.Sp
++The
++.M click 1
++user level driver can read the archives directly.
++.PP
++The
++.B click-fastclassifier
++transformation can be reversed with the
++.B \-\-reverse
++option.
++'
++.SH "OPTIONS"
++'
++If any filename argument is a single dash "-",
++.B click-fastclassifier
++will use the standard input or output instead, as appropriate.
++'
++.TP 5
++.BI \-f " file"
++.PD 0
++.TP
++.BI \-\-file " file"
++Read the router configuration to transform from
++.IR file .
++The default is the standard input.
++'
++.Sp
++.TP 5
++.BI \-e " expr"
++.PD 0
++.TP
++.BI \-\-expression " expr"
++Use
++.IR expr ,
++a string in the Click language, as the router configuration to transform.
++'
++.Sp
++.TP
++.BI \-o " file"
++.TP
++.BI \-\-output " file"
++Write the output router configuration to
++.IR file .
++The default is the standard output.
++'
++.Sp
++.TP
++.BR \-k ", " \-\-kernel
++Generate a dynamically loadable package for the
++.M click.o 8
++Linux kernel module.
++'
++.Sp
++.TP
++.BR \-u ", " \-\-user
++Generate a dynamically loadable package for the
++.M click 1
++user-level driver.
++'
++.Sp
++.TP 5
++.BR \-s ", " \-\-source
++Output only the source code for the FastClassifier elements.
++'
++.Sp
++.TP 5
++.BR \-c ", " \-\-config
++Output only the new configuration (the one that includes FastClassifiers).
++'
++.Sp
++.TP 5
++.BR \-r ", " \-\-reverse
++Reverse the tranformation. That is, remove any existing FastClassifier
++elements and replace them with equivalent Classifiers.
++'
++.Sp
++.TP 5
++.BR \-q ", " \-\-quiet
++Compile code quietly (without echoing commands or top-level warnings).
++'
++.Sp
++.TP 5
++.BI \-\-help
++Print usage information and exit.
++'
++.Sp
++.TP
++.BI \-\-version
++Print the version number and some quickie warranty information and exit.
++'
++.PD
++'
++.SH "SEE ALSO"
++.M click 1 ,
++.M click-devirtualize 1 ,
++.M click-install 1 ,
++.M click 5 ,
++.M click.o 8 ,
++.M Classifier n ,
++.M IPClassifier n ,
++.M IPFilter n
++'
++.SH AUTHOR
++.na
++Eddie Kohler, kohler@cs.ucla.edu
++.br
++http://www.pdos.lcs.mit.edu/click/
++'
+diff -Nurb click-1.6.0/inst/share/man/man1/click-flatten.1 click-1.6.0-27/inst/share/man/man1/click-flatten.1
+--- click-1.6.0/inst/share/man/man1/click-flatten.1    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/man1/click-flatten.1 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,133 @@
++.\" -*- mode: nroff -*-
++.ds V 1.5.0
++.ds E " \-\- 
++.if t .ds E \(em
++.de Sp
++.if n .sp
++.if t .sp 0.4
++..
++.de Es
++.Sp
++.RS 5
++.nf
++..
++.de Ee
++.fi
++.RE
++.PP
++..
++.de Rs
++.RS
++.Sp
++..
++.de Re
++.Sp
++.RE
++..
++.de M
++.BR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RB "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH CLICK-FLATTEN 1 "21/May/2001" "Version \*V"
++.SH NAME
++click-flatten \- removes compound elements from a Click configuration
++'
++.SH SYNOPSIS
++.B click-flatten
++.RI \%[ options ]
++.RI \%[ param = value " ...]"
++.RI \%[ router\-file ]
++'
++.SH DESCRIPTION
++The
++.B click-flatten
++tool flattens a Click router configuration, compiling all its compound
++elements away, and writes the resulting configuration to the standard
++output. It can also output information about the file.
++'
++.SH "OPTIONS"
++'
++If any filename argument is a single dash "-",
++.B click-flatten
++will use the standard input or output instead, as appropriate.
++'
++.TP 5
++.BR \-c ", " \-\-classes
++.PD 0
++Output an alphabetical list of the element classes used by the flattened
++router file, one per line, instead of the usual configuration.
++'
++.Sp
++.TP 5
++.BR \-n ", " \-\-elements
++Output an alphabetical list of the element names in the flattened router
++file, one per line, instead of the usual configuration.
++'
++.Sp
++.TP 5
++.BR \-d ", " \-\-declaration
++Output the element declarations in the flattened router file, one per line,
++instead of the usual configuration.
++'
++.Sp
++.TP 5
++.BR \-f ", " \-\-file " \fIfile"
++Read the router configuration to flatten from
++.IR file .
++The default is the standard input.
++'
++.Sp
++.TP 5
++.BR \-e ", " \-\-expression " \fIexpr"
++Use
++.IR expr ,
++a string in the Click language, as the router configuration to flatten.
++'
++.Sp
++.TP
++.BR \-\-config
++Output flattened configuration only -- if the input was an archive, ignore
++other archive elements.
++'
++.Sp
++.TP
++.BR \-\-expand\-vars
++Expand global variables.  By default,
++.B click-flatten
++does not expand global variables into configuration strings, allowing later
++operations, such as
++.BR click-install ,
++to override their values.
++'
++.Sp
++.TP
++.BR \-o ", " \-\-output " \fIfile"
++Write the flattened router configuration to
++.IR file .
++The default is the standard output.
++'
++.Sp
++.TP 5
++.BI \-\-help
++Print usage information and exit.
++'
++.Sp
++.TP
++.BI \-\-version
++Print the version number and some quickie warranty information and exit.
++'
++.PD
++'
++.SH "SEE ALSO"
++.M click 5 ,
++.M click-check 1 ,
++.M click-xform 1
++'
++.SH AUTHOR
++.na
++Eddie Kohler, kohler@cs.ucla.edu
++.br
++http://www.pdos.lcs.mit.edu/click/
++'
+diff -Nurb click-1.6.0/inst/share/man/man1/click-install.1 click-1.6.0-27/inst/share/man/man1/click-install.1
+--- click-1.6.0/inst/share/man/man1/click-install.1    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/man1/click-install.1 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,237 @@
++.\" -*- mode: nroff -*-
++.ds V 1.2
++.ds D 27/Apr/2000
++.ds E " \-\- 
++.if t .ds E \(em
++.de Sp
++.if n .sp
++.if t .sp 0.4
++..
++.de Es
++.Sp
++.RS 5
++.nf
++..
++.de Ee
++.fi
++.RE
++.PP
++..
++.de Rs
++.RS
++.Sp
++..
++.de Re
++.Sp
++.RE
++..
++.de M
++.BR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RB "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH CLICK-INSTALL 1 "\*D" "Version \*V"
++.SH NAME
++click-install \- installs a Click configuration into the kernel module driver
++'
++.SH SYNOPSIS
++.B click-install
++.RI \%[ options ]
++.RI \%[ param = value " ...]"
++.RI \%[ router\-file ]
++'
++.SH DESCRIPTION
++.B Click-install
++is a convenience program that installs a Click router configuration
++into the current Linux kernel. It reads a router configuration file in the
++.M click 5
++language, installs the
++.M click.o 8
++kernel module if necessary, compiles and/or installs any dynamically
++loadable packages required by the router configuration, installs the router
++configuration itself by writing it to /click/config, and uninstalls
++any unused packages. It reports any errors to standard error, including
++errors reported by the Click module, and returns a zero (true) exit status
++if and only if the configuration was successfully installed.
++'
++.SH "OPTIONS"
++'
++Arguments such as "NAME=value" set configuration parameters, overriding any
++existing settings. Thus, "echo \%'Message($MSG)' | \fBclick\-install\fR
++MSG=Hi" will cause the kernel module to print "Hi".
++.PP
++If any filename argument is a single dash "-",
++.B click-install
++will use the standard input or output instead, as appropriate.
++'
++.TP 5
++.BI \-f " file"
++.PD 0
++.TP
++.BI \-\-file " file"
++Read the router configuration to transform from
++.IR file .
++The default is the standard input.
++'
++.Sp
++.TP
++.BI \-e " expr"
++.TP
++.BI \-\-expression " expr"
++Use
++.IR expr ,
++a string in the Click language, as the router configuration.
++'
++.Sp
++.TP 5
++.BR \-h ", " \-\-hotswap
++Hot-swap install the new configuration. If you supply this option, the new
++configuration will only be installed if it initializes correctly. If it
++fails, the old configuration will continue to route packets without
++interruption. Furthermore, state from the old configuration\*Esuch as
++packets contained in
++.M Queue n
++elements\*Ewill be swapped into the new configuration under certain
++conditions. See under
++.B /click/hotconfig
++in
++.M click.o 8
++for details.
++'
++.Sp
++.TP 5
++.BR \-u ", " \-\-uninstall
++Uninstall and reinstall the Click kernel module.
++.B \-\-hotswap
++and
++.B \-\-uninstall
++are mutually exclusive.
++'
++.Sp
++.TP 5
++.BR \-t ", " "\-\-threads=\fIN\fP"
++The Click kernel module will run
++.I N
++threads per router. Click must have been build with
++\f(CW\-\-enable\-multithread\fR. This option only matters when
++.B click-install
++installs a Click kernel module. The thread count on an installed kernel
++module cannot be changed. (The
++.B \-\-uninstall
++option is useful here.)
++'
++.Sp
++.TP 5
++.BR \-n ", " "\-\-priority=\fIN\fP"
++Set the Click kernel thread's priority to
++.IR N .
++Lower numbers have higher priority. A typical range for priority values is
++-20 (highest) to +19 (lowest). If you do not give a
++.B \-\-priority
++option, then the current priority is left unchanged.
++'
++.Sp
++.TP 5
++.BR \-G ", " "\-\-greedy"
++The Click kernel module will claim an entire CPU, not allowing any other
++process to run.  This option only matters when
++.B click-install
++installs a Click kernel module; the greediness of an installed kernel
++module cannot be changed.  (The
++.B \-\-uninstall
++option is useful here.)
++'
++.Sp
++.TP 5
++.BR \-p ", " "\-\-private"
++Make the /click directory hierarchy readable only by the owning user, which
++is usually root. Generally, files under /click are writable only by the
++owner, but readable by everyone. Works only when simultaneously loading a
++Click kernel module; see
++.BR \-\-uninstall .
++'
++.Sp
++.TP 5
++.BR \-U ", " "\-\-user=\fIUSER\fR[:\fIGROUP\fR]"
++Set the user ID and group ID of the /click directory hierarchy to
++.I USER
++and group
++.IR GROUP .
++By default
++.IR USER " and " GROUP
++are both root. Works only when simultaneously loading a
++Click kernel module; see
++.BR \-\-uninstall .
++'
++.Sp
++.TP 5
++.BR \-\-\cpu =\fIN
++Sets the Click thread to preferentially run on CPU
++.IR N .
++If Click is running
++.I K
++threads, they are run preferentially on CPUs
++.I N
++up to, but not including,
++.I N
+++
++.IR K .
++Thread affinities are ignored if they refer to unavailable CPUs. Works
++only when simultaneously loading a Click kernel module; see
++.BR \-\-uninstall .
++'
++.Sp
++.TP 5
++.BR \-m ", " \-\-map
++(Linux 2.4 only) If a Click kernel module is installed, write its load map
++to standard output. This can make it easier to debug kernel panics.
++'
++.Sp
++.TP 5
++.BR \-V ", " \-\-verbose
++Print information about each step in the install process, including the
++filenames of any installed modules.
++'
++.Sp
++.TP 5
++.BI \-\-help
++Print usage information and exit.
++'
++.Sp
++.TP
++.BI \-\-version
++Print the version number and some quickie warranty information and exit.
++'
++.PD
++'
++.SH "EXIT STATUS"
++.B Click-install
++exits with one of the following return values:
++.TP 5
++.B 0
++The configuration was successfully installed.
++.TP
++.B 1
++Some error prevented
++.B click-install
++from attempting to install the configuration. For example, perhaps the
++configuration could not be parsed, or the kernel module could not be
++loaded.
++.TP
++.B 2
++The configuration was installed, but the kernel module reports that it
++could not be initialized.
++.PD
++'
++.SH "SEE ALSO"
++.M click-uninstall 1 ,
++.M click 5 ,
++.M click.o 8
++'
++.SH AUTHOR
++.na
++Eddie Kohler, kohler@cs.ucla.edu
++.br
++http://www.pdos.lcs.mit.edu/click/
++'
+diff -Nurb click-1.6.0/inst/share/man/man1/click-mkmindriver.1 click-1.6.0-27/inst/share/man/man1/click-mkmindriver.1
+--- click-1.6.0/inst/share/man/man1/click-mkmindriver.1        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/man1/click-mkmindriver.1     2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,196 @@
++.\" -*- mode: nroff -*-
++.ds V 1.2.0
++.ds E " \-\- 
++.if t .ds E \(em
++.de Sp
++.if n .sp
++.if t .sp 0.4
++..
++.de Es
++.Sp
++.RS 5
++.nf
++..
++.de Ee
++.fi
++.RE
++.PP
++..
++.de Rs
++.RS
++.Sp
++..
++.de Re
++.Sp
++.RE
++..
++.de M
++.BR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RB "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH CLICK-MKMINDRIVER 1 "28/Apr/2001" "Version \*V"
++.SH NAME
++click-mkmindriver \- generates a build environment for a minimal Click driver
++'
++.SH SYNOPSIS
++.B click-mkmindriver
++.RI "-p " packagename
++.RI \%[ options "] \e"
++.RI \%[ param = value " ...]"
++.br
++.RI "\%        [" router\-files... ]
++'
++.SH DESCRIPTION
++The
++.B click-mkmindriver
++tool generates a build environment for a minimal Click driver\*Ethat is, a
++driver containing only the elements necessary to run the configurations in
++the
++.IR router\-files .
++You must supply a name for the driver,
++.IR packagename .
++Running
++.RI "`make MINDRIVER=" packagename "'"
++will create either a user-level driver named
++.RI "`" packagename "click',"
++or a Linux kernel module named
++.RI "`" packagename "click.o'."
++Run
++.B click-mkmindriver
++from the respective Click build directory, or supply a relevant
++.B \-\-directory
++option.
++.PP
++Sometimes one element depends weakly on another, especially for parsing.
++For instance, the
++.M IPEncap n
++element can take advantage of protocol names supplied by the
++.M IPNameInfo n
++class; if IPNameInfo is not available, IPEncap will still work, it just
++won't be able to parse protocol names.
++.B Click-mkmindriver
++does not include weakly dependent elements automatically, so you must
++supply them explicitly with
++.B \-E
++options if you want them.  Common examples include IPNameInfo and
++IPFieldInfo.  If a configuration fails to parse, try including these
++elements.
++'
++.SH "OPTIONS"
++'
++If any filename argument is a single dash "-",
++.B click-mkmindriver
++will use the standard input or output instead, as appropriate.
++'
++.TP 5
++.BI \-p " packagename"
++.PD 0
++.TP
++.BI \-\-package " packagename"
++Specifies the package name.
++'
++.Sp
++.TP
++.BI \-f " file"
++.TP
++.BI \-\-file " file"
++Read a router configuration from
++.IR file .
++'
++.Sp
++.TP
++.BI \-e " expr"
++.TP
++.BI \-\-expression " expr"
++Use
++.IR expr ,
++a string in the Click language, as a router configuration.
++'
++.Sp
++.TP
++.BR \-a ", " \-\-all
++Include every primitive element class, even those in compound elements that
++are not themselves used, in the following router configurations. This is
++useful to add support for
++.M click-xform 1 ,
++for example.
++'
++.Sp
++.TP
++.BR \-l ", " \-\-linuxmodule
++Output a build environment for a Linux kernel module driver.
++'
++.Sp
++.TP
++.BR \-u ", " \-\-userlevel
++Output a build environment for a user-level driver. This is the default.
++'
++.Sp
++.TP
++.BI \-d " dir"
++.TP
++.BI \-\-directory " dir"
++Write output file `elements_\fIpackagename\fR.conf' to the directory
++.IR dir .
++This directory must already contain a normal build environment for the
++Click Linux module or user-level driver. (The driver required depends on
++the 
++.B \-k
++and
++.B \-u
++options.) The default directory is `.'.
++'
++'
++.Sp
++.TP
++.BI \-E " elts"
++.TP
++.BI \-\-elements " elts"
++Include the element classes
++.IR elts ,
++a space-separated list of element class names.
++.B Click-mkmindriver
++will also read a router configuration, but see
++.B \-\-no\-file
++below.
++'
++.Sp
++.TP
++.BR \-\-no\-extras
++Do not add optional, but useful, element classes by default.  Currently,
++these classes are
++.M Align n
++and
++.M IPNameInfo n ". "
++If a configuration or option explicitly requires one of these classes, it
++will of course be included.
++'
++.Sp
++.TP
++.BR \-V ", " \-\-verbose
++Print verbose progress information to standard error.
++'
++.Sp
++.TP 5
++.BI \-\-help
++Print usage information and exit.
++'
++.Sp
++.TP
++.BI \-\-version
++Print the version number and some quickie warranty information and exit.
++'
++.PD
++'
++.SH "SEE ALSO"
++.M click 1 ,
++.M click.o 8
++'
++.SH AUTHOR
++.na
++Eddie Kohler, kohler@cs.ucla.edu
++.br
++http://www.read.cs.ucla.edu/click/
++'
+diff -Nurb click-1.6.0/inst/share/man/man1/click-pretty.1 click-1.6.0-27/inst/share/man/man1/click-pretty.1
+--- click-1.6.0/inst/share/man/man1/click-pretty.1     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/man1/click-pretty.1  2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,591 @@
++.\" -*- mode: nroff -*-
++.ds V 1.5.0
++.ds E " \-\- 
++.if t .ds E \(em
++.de Sp
++.if n .sp
++.if t .sp 0.4
++..
++.de Es
++.Sp
++.RS 5
++.nf
++..
++.de Ee
++.fi
++.RE
++.PP
++..
++.de Rs
++.RS
++.Sp
++..
++.de Re
++.Sp
++.RE
++..
++.de M
++.BR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RB "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH CLICK-PRETTY 1 "4/Jan/2002" "Version \*V"
++.SH NAME
++click-pretty \- pretty-prints a Click configuration in HTML
++'
++.SH SYNOPSIS
++.B click-pretty
++.RI \%[ options ", " param = value " ...]"
++.RI \%[ routerfile ]
++.RI "> " output\fR.html
++.br
++.B click-pretty
++.B \-\-dot
++.RI \%[...]
++.RI \%[ routerfile \]
++.RB "| " "dot \fR\-Tpng"
++.RI "> " output\fR.png
++'
++.SH DESCRIPTION
++The
++.B click-pretty
++tool pretty-prints Click configurations into HTML files, including syntax
++highlighting and optional indexes; or, optionally, it can output a graph
++definition suitable for passing to
++.M dot 1 .
++.B Click-pretty
++reads a router configuration and, optionally, an HTML-like template file,
++replaces special tags in the template with HTML code derived from the
++configuration, and writes the result to the standard output.
++'
++.SH "HTML TEMPLATES"
++.BR Click-pretty 's
++HTML output is based on a template file that contains special HTML-like
++tags.  These tags, which start with a tilde "~", control
++.BR click-pretty 's
++operation.
++'
++.SS "The config Tag"
++'
++.PP
++The
++.B <~config>
++tag expands to a pretty-printed version of the router configuration.
++Various features in the configuration are highlighted with HTML
++.B <span class=xxx>
++tags; the class differs from feature to feature, so you can affect the
++output with CSS. The classes are:
++.PP
++.TP 10
++.B c-cmt
++.PD 0
++Comments.
++.TP
++.B c-kw
++Keywords.
++.TP
++.B c-cfg
++Configuration strings.
++.TP
++.B c-cd
++Element class declarations.
++.TP
++.B c-ed
++Element declarations.
++.TP
++.B c-err
++Configuration errors.
++.PD
++.PP
++Other features of the output include:
++.TP 3
++\(bu
++'
++Anchors marking element declarations and element class declarations. For
++example, the tag
++.BR "<a name='e-X'>"
++encloses the declaration of an element named
++.BR X .
++'
++.TP
++\(bu
++'
++A
++.B span title
++attribute encloses every element reference, giving that element's
++declaration. Thus, a user can find out what class an element has by
++hovering their mouse over a reference to it.
++'
++.TP
++\(bu
++'
++Similarly,
++.BR "span title" s
++explain configuration errors in more detail.
++'
++.TP
++\(bu
++'
++Element class names are linked to element class declarations, for compound
++elements, or, optionally, to Web documentation, for primitive element
++classes. See the
++.B \-u
++option, below.
++'
++.SS "The elements Tag"
++'
++.PP
++The
++.B "<~elements>"
++tag expands to an alphabetical list of the elements and/or element classes
++used in the router configuration. The
++.B entry
++attribute determines how elements are rendered;
++.B typeentry
++does the same for classes. Inside these attributes, subtags like
++.BR <~name> ,
++.BR <~type> ,
++and
++.BR <~inputs>
++expand to information about the relevant element or type. For example, this
++.B <~elements>
++tag expands to a comma-separated list of the configuration's elements:
++.Es
++<~elements entry="<~name>" sep=", ">
++.Ee
++This one expands to an unordered list of declarations, with element names
++and type names linked to relevant declarations in the configuration:
++.Es
++<ul>
++<~elements entry="<li><~name link> :: <~type link></li>">
++</ul>
++.Ee
++'
++.SS "elements Tag Attributes"
++.TP 5
++.BR entry =\fItext
++Sets the text used for each element in the configuration. If this attribute
++is absent, the
++.B <~element>
++tag's expansion will not mention elements.
++'
++.TP 5
++.BR typeentry =\fItext
++Sets the text used for each element type used by the configuration. If this
++attribute is absent, the
++.B <~element>
++tag's expansion will not mention element types.
++'
++.TP 5
++.BR sep =\fItext
++Sets the text used to separate entries in the expansion.
++'
++.TP 5
++.BR column =\fIwhich\fR/\fIcount
++If present,
++.I count
++should be a number greater than 1, and
++.I which
++should be between 1 and
++.IR count .
++The
++.B <~element>
++tag is expanded, then broken into
++.I count
++columns at entry boundaries. Only the
++.IR which th
++column is printed.
++'
++.TP 5
++.BR configlink =\fItext
++See the
++.B <~configlink>
++subtag below.
++'
++.TP 5
++.BR typeref =\fItext
++See the
++.B <~typerefs>
++subtag below.
++'
++.TP 5
++.BR inputentry "=\fItext\fR, " noinputentry "=\fItext\fR"
++See the
++.B <~inputs>
++subtag below.
++'
++.TP 5
++.BR outputentry "=\fItext\fR, " nooutputentry "=\fItext\fR"
++See the
++.B <~outputs>
++subtag below.
++'
++.TP 5
++.BR inputconnection "=\fItext\fR, " noinputconnection "=\fItext\fR"
++See the
++.B <~inputconnections>
++subtag below.
++'
++.TP 5
++.BR outputconnection "=\fItext\fR, " nooutputconnection "=\fItext\fR"
++See the
++.B <~outputconnections>
++subtag below.
++'
++.PD
++'
++.SS "Subtags"
++.PP
++These subtags apply only within
++.B <~elements>
++entries and type entries.
++'
++.TP 5
++.BR "<~name [link" "=\fIlink\fR" "]>"
++Expands to the current element's name. When the
++.B link
++attribute is present, the name is contained in a link pointing at the
++declaration site within the router configuration or, when
++.I link
++equals "type", the element class's Web documentation.
++'
++.TP 5
++.BR "<~type [link]>"
++Expands to the current element type's name, or the current element's
++type-name. When the
++.B link
++attribute is present, the name is contained in a link pointing at the
++the element class's Web documentation.
++'
++.TP 5
++.BR "<~config [limit" "=\fIlimit" "] [parens]>"
++Elements only. Expands to the current element's configuration string. The
++result contains at most \fIlimit\fR characters; if the configuration string
++was longer,
++.B click-pretty
++prints its first \fIlimit\fR characters, followed by an ellipsis. If
++.B parens
++was supplied, non-empty configuration strings are enclosed in parentheses.
++'
++.TP 5
++.BR "<~configlink [text" "=\fItext" "]>"
++Elements only. Expands to a link to the element's declaration in the router
++configuration. The
++.B text
++attribute gives the link text; it defaults to the
++.B <~elements>
++tag's
++.B configlink
++attribute.
++'
++.TP 5
++.BR "<~typerefs [entry" "=\fItext" "] [sep" "=\fIsep" "]>"
++Expands to an alphabetical list of elements in the configuration that have
++the current element type, separated by \fIsep\fR. The
++.B entry
++attribute specifies how to render each element; it defaults to the
++.B <~elements>
++tag's
++.B typeref
++attribute.
++'
++.TP 5
++.BR "<~ninputs [english]>"
++Elements only. Expands to the current element's number of input ports. If
++.B english
++was supplied, either "input" or "inputs" follows the number.
++'
++.TP 5
++.BR "<~outputs [english]>"
++Elements only. Expands to the current element's number of output ports. If
++.B english
++was supplied, either "input" or "inputs" follows the number.
++'
++.TP 5
++.BR "<~inputs [entry" "=\fItext" "] [noentry" "=\fItext" "] [sep" "=\fIsep" "]>"
++Elements only. Expands to a list of the element's input ports. The
++.B entry
++attribute specifies how to render each port; it defaults to the
++.B <~elements>
++tag's
++.B inputentry
++attribute. If the element has no input ports, the
++.B noentry
++attribute is used instead, which defaults to the
++.B <~elements>
++tag's
++.B noinputentry
++attribute.
++'
++.TP 5
++.BR "<~outputs [entry" "=\fItext" "] [noentry" "=\fItext" "] [sep" "=\fIsep" "]>"
++Elements only. Expands to a list of the element's output ports. The
++.B entry
++attribute specifies how to render each port; it defaults to the
++.B <~elements>
++tag's
++.B outputentry
++attribute. If the element has no output ports, the
++.B noentry
++attribute is used instead, which defaults to the
++.B <~elements>
++tag's
++.B nooutputentry
++attribute.
++.PD
++'
++.TP 5
++.BR "<~if test" "=\fItext" " [then" "=\fItext" "] [else" "=\fItext" "] [eq" "=\fItext" "]"
++.PD 0
++.TP
++.BR "     [ne" "=\fItext" "] [gt" "=\fItext" "] [lt" "=\fItext" "] [ge" "=\fItext" "] [le" "=\fItext" "]>"
++.PD
++Silently expands the
++.B test
++attribute, then makes a comparison. If that comparison is true, expands the
++.B then
++attribute; otherwise, expands the
++.B else
++attribute. The comparison depends on which of the other attributes is
++present. When
++.B eq
++is supplied, the comparison is true if
++.BR test 's
++expansion equals
++.BR eq 's
++expansion.
++.B ne
++checks for inequality.
++The
++.BR gt ,
++.BR lt ,
++.BR ge ,
++and
++.BR le
++attributes compare strings (or integers) in alphabetical (or numeric)
++sorting order. A
++.B gt
++comparison is true when
++.BR test 's
++expansion is greater than
++.BR gt 's
++expansion; similarly,
++.B lt
++checks for less than,
++.B ge
++for greater-than-or-equal-to, and
++.B le
++for less-than-or-equal-to. If none of these attributes are present, the
++test is true if
++.B test
++expands to a nonempty string.
++'
++.SS "Port-Specific Subtags"
++These subtags apply only within
++.B <~inputs>
++and
++.B <~outputs>
++entries.
++'
++.TP 5
++.BR "<~port>"
++Expands to the current port number.
++'
++.TP 5
++.BR "<~processing>"
++Expands to the current port's processing value: either "push", "pull", or
++(rarely) "agnostic".
++'
++.TP 5
++.BR "<~inputconnections [entry" "=\fItext" "] [noentry" "=\fItext" "] [sep" "=\fIsep\fR" "]>"
++Expands to a list of the output ports to which this input port is
++connected. List entries are separated by \fIsep\fR. The
++.B entry
++attribute specifies how to render each port; it defaults to the
++.B <~elements>
++tag's
++.B inputconnection
++attribute. If the port is not connected to anything, the
++.B noentry
++attribute is used instead, which defaults to the
++.B <~elements>
++tag's
++.B noinputconnection
++attribute.
++'
++.TP 5
++.BR "<~outputconnections [entry" "=\fItext" "] [noentry" "=\fItext" "] [sep" "=\fIsep\fR" "]>"
++Expands to a list of the input ports to which this output port is
++connected. List entries are separated by \fIsep\fR. The
++.B entry
++attribute specifies how to render each port; it defaults to the
++.B <~elements>
++tag's
++.B outputconnection
++attribute. If the port is not connected to anything, the
++.B noentry
++attribute is used instead, which defaults to the
++.B <~elements>
++tag's
++.B nooutputconnection
++attribute.
++.PD
++'
++.SH "OPTIONS"
++'
++If any filename argument is a single dash "-",
++.B click-align
++will use the standard input or output instead, as appropriate.
++'
++.TP 5
++.BI \-f " file"
++.PD 0
++.TP
++.BI \-\-file " file"
++Read the router configuration from
++.IR file .
++The default is the standard input.
++'
++.Sp
++.TP
++.BI \-e " expr"
++.TP
++.BI \-\-expression " expr"
++Use
++.IR expr ,
++a string in the Click language, as the router configuration.
++'
++.Sp
++.TP
++.BI \-o " file"
++.TP
++.BI \-\-output " file"
++Write HTML output to
++.IR file .
++The default is the standard output.
++'
++.Sp
++.TP
++.BI \-t " file"
++.TP
++.BI \-\-template " file"
++Use
++.I file
++as the HTML template file. If no template is specified,
++.B click-pretty
++will use a built-in default.
++'
++.Sp
++.TP
++.BI \-d "name\fR=\fItext"
++.TP
++.BI \-\-define " name\fR=\fItext"
++Defines a new tag named
++.IR name .
++Occurrences of
++.BI <~ name >
++in the template will be replaced with the expansion of
++.IR text .
++'
++.Sp
++.TP
++.BR \-\-userlevel
++.TP
++.BR \-k ", " \-\-linuxmodule
++.TP
++.BR \-b ", " \-\-bsdmodule
++Specifies the driver for which the configuration was designed. This is
++necessary to discover whether ports are push or pull. Usually, you don't
++have to give any of these options;
++.B click-pretty
++will figure out the right answer by looking at the configuration.
++'
++.Sp
++.TP
++.BI \-u " url"
++.TP
++.BI \-\-class\-docs " url"
++Web documentation for primitive element classes is available at
++.IR url .
++The
++.I url
++may contain a single "%s", which is replaced with the element class's
++documentation name. (This is the same as its regular name, unless
++.B =title
++was specified in the documentation comment.) URLs specified in elementmap
++files with $webdoc take precedence over
++.BR \-u .
++'
++.Sp
++.TP
++.BI \-\-package\-docs " package\fR=\fIurl"
++Web documentation for primitive element classes in package
++.I package
++is available at
++.IR url .
++The
++.I url
++may contain a single "%s", which is replaced with the element class's
++documentation name. URLs specified in elementmap files take precedence over
++.BR \-\-package\-docs .
++'
++.Sp
++.TP
++.BI \-\-write\-template
++Output the template unmodified. This is useful for getting a look at the
++built-in default.
++'
++.Sp
++.TP
++.BI \-\-dot
++Rather than generating HTML, generate a graph definition suitable for input
++to the
++.M dot 1
++program (part of the
++.B graphviz
++suite originally from Bell Labs).  Using
++.BR \-\-dot ,
++you can automatically generate a PNG or PostScript graphic showing a
++picture of the Click configuration, as in "\fBclick-pretty\fR router.click
++| \fBdot\fR \-Tpng >routerpicture.png".
++'
++.Sp
++.TP
++.BI \-C " path"
++.TP
++.BI \-\-clickpath " path"
++Use
++.I path
++for CLICKPATH.
++'
++.Sp
++.TP 5
++.BI \-\-help
++Print usage information and exit.
++'
++.Sp
++.TP
++.BI \-\-version
++Print the version number and some quickie warranty information and exit.
++'
++.PD
++'
++.SH FILES
++.TP 5
++.B CLICKDIR/share/click/elementmap
++.B Click-pretty
++uses elementmap files to determine whether ports are push or pull. You can
++also add `$webdoc URL' lines to elementmap files;
++.B click-pretty
++will use that URL for element classes described in that elementmap. As with
++the
++.B \-u
++option, a $webdoc URL can contain `%s', which is replaced with the element
++class name.
++'
++.SH AUTHOR
++.na
++Eddie Kohler, kohler@cs.ucla.edu
++.br
++http://www.pdos.lcs.mit.edu/click/
+diff -Nurb click-1.6.0/inst/share/man/man1/click-uncombine.1 click-1.6.0-27/inst/share/man/man1/click-uncombine.1
+--- click-1.6.0/inst/share/man/man1/click-uncombine.1  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/man1/click-uncombine.1       2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,107 @@
++.\" -*- mode: nroff -*-
++.ds V 1.0.5
++.ds E " \-\- 
++.if t .ds E \(em
++.de Sp
++.if n .sp
++.if t .sp 0.4
++..
++.de Es
++.Sp
++.RS 5
++.nf
++..
++.de Ee
++.fi
++.RE
++.PP
++..
++.de Rs
++.RS
++.Sp
++..
++.de Re
++.Sp
++.RE
++..
++.de M
++.BR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RB "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH CLICK-UNCOMBINE 1 "27/Apr/2000" "Version \*V"
++.SH NAME
++click-uncombine \- separates a component from a combined Click configuration
++'
++.SH SYNOPSIS
++.B click-uncombine
++.RI \%[ param = value " ...]"
++.RI \%[ options ]
++.RI \%[ router\-file " [" \fIcomponent\fR ]]
++'
++.SH DESCRIPTION
++The
++.B click-uncombine
++tool reads a combined router configuration created by
++.M click-combine 1
++and outputs one of its components. The chosen component is specified by its
++name, as originally specified to
++.M click-combine 1 .
++'
++.SH "OPTIONS"
++'
++If any filename argument is a single dash "-",
++.B click-uncombine
++will use the standard input or output instead, as appropriate. You can give
++one or two non-option arguments; the first is the router file and the
++second, the component name.
++'
++.TP 5
++.BI \-f " file"
++.PD 0
++.TP
++.BI \-\-file " file"
++Read the combined router configuration from
++.IR file .
++The default is the standard input.
++'
++.Sp
++.TP
++.BI \-n " name"
++.TP
++.BI \-\-name " name"
++Output the router component named
++.IR name .
++'
++.Sp
++.TP 5
++.BI \-o " file"
++.TP
++.BI \-\-output " file"
++Write the output router configuration to
++.IR file .
++The default is the standard output.
++'
++.Sp
++.TP 5
++.BI \-\-help
++Print usage information and exit.
++'
++.Sp
++.TP
++.BI \-\-version
++Print the version number and some quickie warranty information and exit.
++'
++.PD
++'
++.SH "SEE ALSO"
++.M click-combine 1 ,
++.M click 5
++'
++.SH AUTHOR
++.na
++Eddie Kohler, kohler@cs.ucla.edu
++.br
++http://www.pdos.lcs.mit.edu/click/
++'
+diff -Nurb click-1.6.0/inst/share/man/man1/click-undead.1 click-1.6.0-27/inst/share/man/man1/click-undead.1
+--- click-1.6.0/inst/share/man/man1/click-undead.1     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/man1/click-undead.1  2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,203 @@
++.\" -*- mode: nroff -*-
++.ds V 1.1
++.ds E " \-\- 
++.if t .ds E \(em
++.de Sp
++.if n .sp
++.if t .sp 0.4
++..
++.de Es
++.Sp
++.RS 5
++.nf
++..
++.de Ee
++.fi
++.RE
++.PP
++..
++.de Rs
++.RS
++.Sp
++..
++.de Re
++.Sp
++.RE
++..
++.de M
++.BR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RB "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH CLICK-UNDEAD 1 "28/Aug/2000" "Version \*V"
++.SH NAME
++click-undead \- removes dead code from a Click configuration
++'
++.SH SYNOPSIS
++.B click-undead
++.RI \%[ param = value " ...]"
++.RI \%[ options ]
++.RI \%[ router\-file ]
++'
++.SH DESCRIPTION
++The
++.B click-undead
++tool speeds up some Click configurations by removing dead code. This
++includes:
++.IP "\(bu" 3
++Any
++.M Null n ,
++.M StaticSwitch n ,
++and
++.M StaticPullSwitch n
++elements.
++.IP "\(bu" 3
++Any elements not reachable from both a 
++.I source element
++and a
++.IR "sink element" .
++Click packet source elements include
++.M FromDevice n
++and
++.M InfiniteSource n ;
++packet sink elements include
++.M ToDump n ,
++.M ToDevice n ,
++and
++.M Discard n
++(when it is used as a pull element).
++.IP "\(bu" 3
++Dead ports on scheduler elements 
++.RM ( RoundRobinSched n ,
++.M PrioSched n ,
++.M StrideSched n ,
++and so on) are removed. These are ports that no packet could ever enter.
++.IP "\(bu" 3
++Scheduler elements that have only one attached input are redundant, so they
++are removed.
++.IP "\(bu" 3
++Dead ports on tee elements
++.RM ( Tee n ,
++.M PullTee n )
++are removed. These are ports with no packet sink downstream.
++.IP "\(bu" 3
++Tee elements that have only one attached output are redundant, so they are
++removed.
++.PP
++.B click-undead
++will not remove any information elements. Connections to removed elements
++are rerouted appropriately.
++.PP
++For example,
++.B click-undead 
++will transform this configuration,
++.Sp
++.nf
++   Idle -> Counter -> td1 :: ToDump(a);
++   InfiniteSource -> ss :: StaticSwitch(1);
++     ss[0] -> ToDump(c);
++     ss[1] -> Queue -> rr :: RoundRobinSched;
++     Idle -> [1]rr;
++     rr -> td2 :: ToDump(b);
++.fi
++.Sp
++into this configuration:
++.Sp
++.nf
++   InfiniteSource -> Queue -> td2 :: ToDump(b);
++.fi
++.Sp
++Note that the resulting configuration is not guaranteed to have the same
++semantics as the input configuration. Here, for example, the result
++configuration does not truncate the files `a' and `c'.
++.PP
++The resulting configuration is written to the standard output. 
++'
++.SH "OPTIONS"
++'
++If any filename argument is a single dash "-",
++.B click-undead
++will use the standard input or output instead, as appropriate.
++'
++.TP 5
++.BI \-f " file"
++.PD 0
++.TP
++.BI \-\-file " file"
++Read the router configuration to transform from
++.IR file .
++The default is the standard input.
++'
++.Sp
++.TP
++.BI \-e " expr"
++.TP
++.BI \-\-expression " expr"
++Use
++.IR expr ,
++a string in the Click language, as the router configuration to transform.
++'
++.Sp
++.TP
++.BI \-o " file"
++.TP
++.BI \-\-output " file"
++Write the output router configuration to
++.IR file .
++The default is the standard output.
++'
++.Sp
++.TP
++.BR \-k ", " \-\-kernel
++Check the configuration only for the
++.M click.o 8
++Linux kernel module driver.
++'
++.Sp
++.TP
++.BR \-u ", " \-\-user
++Check the configuration only for the
++.M click 1
++user-level driver.
++'
++.Sp
++.TP 5
++.BR \-c ", " \-\-config
++Output only the new configuration, not any archived packages.
++'
++.Sp
++.TP 5
++.BR \-V ", " \-\-verbose
++Print debugging information about the transformation\*Efor example, which
++elements are chosen as sources and sinks.
++'
++.Sp
++.TP 5
++.BI \-\-help
++Print usage information and exit.
++'
++.Sp
++.TP
++.BI \-\-version
++Print the version number and some quickie warranty information and exit.
++'
++.PD
++'
++.SH "SEE ALSO"
++.M click 1 ,
++.M click-install 1 ,
++.M click 5 ,
++.M click.o 8 ,
++.M Discard n ,
++.M FromDevice n ,
++.M InfiniteSource n ,
++.M ToDump n ,
++.M ToDevice n
++'
++.SH AUTHOR
++.na
++Eddie Kohler, kohler@cs.ucla.edu
++.br
++http://www.pdos.lcs.mit.edu/click/
++'
+diff -Nurb click-1.6.0/inst/share/man/man1/click-uninstall.1 click-1.6.0-27/inst/share/man/man1/click-uninstall.1
+--- click-1.6.0/inst/share/man/man1/click-uninstall.1  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/man1/click-uninstall.1       2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,73 @@
++.\" -*- mode: nroff -*-
++.ds V 1.0
++.ds E " \-\- 
++.if t .ds E \(em
++.de Sp
++.if n .sp
++.if t .sp 0.4
++..
++.de Es
++.Sp
++.RS 5
++.nf
++..
++.de Ee
++.fi
++.RE
++.PP
++..
++.de Rs
++.RS
++.Sp
++..
++.de Re
++.Sp
++.RE
++..
++.de M
++.BR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RB "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH CLICK-UNINSTALL 1 "9/Feb/2000" "Version \*V"
++.SH NAME
++click-uninstall \- uninstalls the Click kernel module
++'
++.SH SYNOPSIS
++.B click-uninstall
++.I \%[options]
++'
++.SH DESCRIPTION
++.B Click-uninstall
++is a convenience program that uninstalls Click from the current Linux
++kernel. It uninstalls the currently running configuration, any dynamically
++loadable Click packages, and the
++.M click.o 8
++kernel module itself.
++'
++.SH "OPTIONS"
++'
++.TP 5
++.BI \-\-help
++.PD 0
++Print usage information and exit.
++'
++.Sp
++.TP
++.BI \-\-version
++Print the version number and some quickie warranty information and exit.
++'
++.PD
++'
++.SH "SEE ALSO"
++.M click-install 1 ,
++.M click 5 ,
++.M click.o 8
++'
++.SH AUTHOR
++.na
++Eddie Kohler, kohler@cs.ucla.edu
++.br
++http://www.pdos.lcs.mit.edu/click/
++'
+diff -Nurb click-1.6.0/inst/share/man/man1/click-xform.1 click-1.6.0-27/inst/share/man/man1/click-xform.1
+--- click-1.6.0/inst/share/man/man1/click-xform.1      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/man1/click-xform.1   2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,310 @@
++.\" -*- mode: nroff -*-
++.ds V 1.0.3
++.ds E " \-\- 
++.if t .ds E \(em
++.de Sp
++.if n .sp
++.if t .sp 0.4
++..
++.de Es
++.Sp
++.RS 5
++.nf
++..
++.de Ee
++.fi
++.RE
++.PP
++..
++.de Rs
++.RS
++.Sp
++..
++.de Re
++.Sp
++.RE
++..
++.de M
++.BR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RB "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH CLICK-XFORM 1 "31/Mar/2000" "Version \*V"
++.SH NAME
++click-xform \- pattern-based Click configuration optimizer
++'
++.SH SYNOPSIS
++.B click-xform
++.RI \%[ options ]
++.RI \%[ param = value " ...]"
++.RI \%[ router\-file " [" pattern\-files ...]]
++'
++.SH DESCRIPTION
++The
++.B click-xform
++tool is a Click router configuration optimizer. It reads files giving Click
++configuration patterns and their replacements, and a router configuration
++file. Then it replaces pattern matches in the configuration until none
++remain and writes the new configuration to the standard output.
++.PP
++Pattern files use the Click language (see
++.M click 5 ).
++They contain pairs of `elementclass' definitions, where each pair consists
++of one pattern text and one replacement text. The replacement for a pattern
++named
++.RI ` X '
++must be named
++.RI ` X _Replacement'.
++This example pattern file replaces all Queues with Queue-Shaper
++combinations:
++.Rs
++.nf
++elementclass QueuePattern {
++  input -> Queue -> output;
++}
++elementclass QueuePattern_Replacement {
++  input -> Queue -> Shaper(200) -> output;
++}
++.fi
++.Re
++.PP
++A pattern text can contain an arbitrary number of elements, and an
++arbitrary number of input and output ports. Basically, a pattern matches a
++fragment of a router configuration when they have the same number of
++elements; their element classes match; all of the pattern's connections are
++duplicated in the fragment; and any connections into or out of the fragment
++correspond to connections to or from the pattern's input and output ports.
++The formal definition of matching is given below.
++.PP
++Any configuration strings in the pattern must match the configuration
++strings in the configuration subset. The pattern can use variables, which
++look like `$[letters, numbers and underscores]', to match a set of
++configuration strings; except for variables, the strings must match
++verbatim. A variable matches a single configuration argument. The same
++variable can be used multiple times in a pattern; if so, then it must match
++the same text on each occurrence. If a variable is used in the
++replacement's configuration strings, then when a replacement is made, the
++text that matched in the pattern will be inserted instead. For example,
++applying this pattern
++.Rs
++.nf
++elementclass Meters {
++  input -> Meter($a)
++        -> Shaper($b) -> output;
++}
++elementclass Meters_Replacement {
++  input -> Meter($b)
++        -> SlowShaper($a) -> output;
++}
++.fi
++.Re
++to this configuration
++.Rs
++.nf
++\&... -> Meter(1000) -> Shaper(2000) -> ...
++.fi
++.Re
++will create this result:
++.Rs
++.nf
++\&... -> Meter(2000) -> SlowShaper(1000) -> ...
++.fi
++.Re
++.PP
++The optimizer will not apply the same pattern to a configuration subset
++twice in succession. Specifically, every replacement element is marked with
++the pattern that generated it; a pattern will not match a configuration
++fragment if every element in that fragment came from that pattern. Thus, a
++pattern like the QueuePattern above won't cause an infinite loop. You can
++still cause an infinite loop, if you'd like, by having two patterns that
++match the same text:
++.Rs
++.nf
++elementclass Evil1 {
++  input -> Queue -> output;
++}
++elementclass Evil1_Replacement {
++  input -> Queue -> output;
++}
++elementclass Evil2 {
++  input -> Queue -> output;
++}
++elementclass Evil2_Replacement {
++  input -> Queue -> output;
++}
++.fi
++.Re
++This collection of patterns will make the optimizer run forever on any
++configuration that has a Queue.
++.PP
++The
++.B click-xform
++transformation can be reversed with the
++.B \-\-reverse
++option.
++'
++.SH "OPTIONS"
++'
++If any filename argument is a single dash "-",
++.B click-xform
++will use the standard input or output instead, as appropriate.
++'
++.TP 5
++.BI \-p " file"
++.PD 0
++.TP
++.BI \-\-patterns " file"
++Read patterns and replacements from
++.IR file .
++You can give any number of these options.
++'
++.Sp
++.TP
++.BI \-f " file"
++.TP
++.BI \-\-file " file"
++Read the router configuration to transform from
++.IR file .
++The default is the standard input.
++'
++.Sp
++.TP
++.BI \-e " expr"
++.TP
++.BI \-\-expression " expr"
++Use
++.IR expr ,
++a string in the Click language, as the router configuration to transform.
++'
++.Sp
++.TP
++.BI \-o " file"
++.TP
++.BI \-\-output " file"
++Write the output router configuration to
++.IR file .
++The default is the standard output.
++'
++.Sp
++.TP
++.BR \-r ", " \-\-reverse
++Apply the patterns in reverse. That is, replace occurrences of the
++replacement texts with the corresponding pattern texts.
++'
++.Sp
++.TP 5
++.BI \-\-help
++Print usage information and exit.
++'
++.Sp
++.TP
++.BI \-\-version
++Print the version number and some quickie warranty information and exit.
++'
++.PD
++'
++.SH "FORMAL DEFINITION OF MATCHING"
++'
++A pattern
++.I P
++matches a subset
++.I S
++of the configuration's elements if the following conditions hold:
++.TP 4
++\(bu
++There is a one-to-one mapping 
++.I map
++from
++.I P
++to
++.I S
++that respects element classes (that is, if an element
++.IR p " in " P
++has class
++.IR K ,
++then
++.RI map( p ") also has class " K ).
++.TP 4
++\(bu
++The configuration strings match, possibly by using a consistent variable
++assignment.
++.TP 4
++\(bu
++For every connection
++.RI ` p1 " [" x "] -> [" y "] " p2 '
++in the pattern
++.IR P ,
++there exists a connection
++.RI `map( p1 ") [" x "] -> [" y "] map(" p2 )'
++in the configuration subset
++.IR S .
++.TP 4
++\(bu
++For every connection
++.RI ` c1 " [" x "] -> [" y "] " c2 '
++in the configuration, one of four conditions hold:
++.RS
++.TP 3
++\(bu
++The connection is wholly outside the subset
++.IR S .
++(That is,
++.IR c1 " is not in " S
++and
++.IR c2 " is not in " S .)
++.TP 3
++\(bu
++The connection is inside the subset, and corresponds to a connection in the
++pattern. (That is,
++.IR c1 " is in " S ,
++.IR c2 " is in " S ,
++and
++.I P
++has a connection
++.RI "`map-1(" c1 ") [" x "] -> [" y "] map-1(" c2 ")'.)"
++.TP 3
++\(bu
++The connection goes into the subset, and corresponds to an input port in
++the pattern. (That is,
++.IR c1 " is not in " S
++but
++.IR c2 " is in " S ,
++and there exists an input port number
++.I i
++so that
++.I P
++has a connection
++.RI "`input [" i "] -> [" y "] map-1(" c2 ")',"
++and for every connection in the pattern
++.RI "`input [" i "] -> [" z "] " q ',
++there is a connection in the configuration
++.RI ` c1 " [" x "] -> [" z "] map(" q ")'.)"
++.TP 3
++\(bu
++The connection goes out of the subset, and corresponds to an output port in
++the pattern. (That is,
++.IR c1 " is in " S
++but
++.IR c2 " is not in " S ,
++and there exists an output port number
++.I o
++so that
++.I P
++has a connection
++.RI "`map-1(" c1 ") [" x "] -> [" o "] output',"
++and for every connection in the pattern
++.RI ` q " [" z "] -> [" o "] output',"
++there is a connection in the configuration
++.RI "`map(" q ") [" z "] -> [" y "] " c2 "'.)"
++.RE
++'
++.SH "SEE ALSO"
++.M click 5
++'
++.SH AUTHOR
++.na
++Eddie Kohler, kohler@cs.ucla.edu
++.br
++http://www.pdos.lcs.mit.edu/click/
++'
+diff -Nurb click-1.6.0/inst/share/man/man1/click.1 click-1.6.0-27/inst/share/man/man1/click.1
+--- click-1.6.0/inst/share/man/man1/click.1    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/man1/click.1 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,259 @@
++.\" -*- mode: nroff -*-
++.ds V 1.3
++.ds E " \-\- 
++.if t .ds E \(em
++.de Sp
++.if n .sp
++.if t .sp 0.4
++..
++.de Es
++.Sp
++.RS 5
++.nf
++..
++.de Ee
++.fi
++.RE
++.PP
++..
++.de Rs
++.RS
++.Sp
++..
++.de Re
++.Sp
++.RE
++..
++.de M
++.BR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RB "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH CLICK 1 "26/Mar/2003" "Version \*V"
++.SH NAME
++click \- Click user-level driver
++'
++.SH SYNOPSIS
++.B click
++.RI \%[ options ]
++.RI \%[ param = value " ...]"
++.RI \%[ router\-file ]
++'
++.SH DESCRIPTION
++The
++.B click
++driver executes a Click modular router specification in a user-level
++program. It reads a router configuration file, sets up the router according
++to that file, and generally continues until interrupted. The router
++configuration is written in the Click language (see
++.M click 5 ),
++and can contain dynamically loadable code, which
++.B click
++will link against before installing the configuration.
++.PP
++The
++.B click
++program can read and write packets from the network using Berkeley Packet
++Filters\*Esee
++.M FromDevice.u n
++and
++.M ToDevice.u n .
++It can also read and write BPF dump files, such as those created by
++.M tcpdump 1 "\*Esee"
++.M FromDump n
++and
++.M ToDump n .
++The
++.M InfiniteSource n
++element, and others like it, may be useful for testing configurations
++without affecting the network.
++'
++.SH "OPTIONS"
++'
++Arguments such as "NAME=value" set configuration parameters, overriding any
++existing settings. Thus, "echo \%'Message($MSG)' | \fBclick\fR MSG=Hi" will
++print "Hi".
++.PP
++If any filename argument is a single dash "-",
++.B click
++will use the standard input or output instead, as appropriate.
++'
++.TP 5
++.BI \-f " file"
++.PD 0
++.TP
++.BI \-\-file " file"
++Read the router configuration from
++.IR file .
++The default is the standard input.
++'
++.Sp
++.TP
++.BI \-e " expr"
++.TP
++.BI \-\-expression " expr"
++Use
++.IR expr ,
++a string in the Click language, as the router configuration.
++'
++.Sp
++.TP
++.BI \-p " port"
++.TP
++.BI \-\-port " port"
++Open a
++.M ControlSocket n
++connection listening on TCP port
++.IR port .
++ControlSockets allow users to connect to the router and call its read and
++write handlers remotely.
++'
++.Sp
++.TP
++.BI \-u " file"
++.TP
++.BI \-\-unix\-socket " file"
++Open a
++.M ControlSocket n
++connection listening on a Unix socket, on file
++.IR file .
++'
++.Sp
++.TP
++.BR \-R ", " \-\-allow\-reconfigure
++Provide a "hotconfig" handler, which allows remote
++.M ControlSocket n
++users, and elements within the router, to reconfigure the router
++dynamically. See
++.M click.o 8 's
++"/click/hotconfig" section for more information on hot-swapping.
++'
++.Sp
++.TP
++.BI \-h " \fR[\fPelement\fR.]\fPhandler"
++.TP
++.BI \-\-handler " \fR[\fPelement\fR.]\fPhandler"
++After running the driver, call
++.IR element 's
++read handler named
++.IR handler ,
++or the global read handler named
++.IR handler ,
++and print the result to standard output.  Each element has several generic
++handlers\*Efor example,
++.BR config
++returns the element's configuration string and
++.BR class
++returns the element's class name.  Some elements have additional handlers;
++.M Counter n ,
++for example, has
++.BR count " and " rate
++handlers that return the number of packets arrived and the recent arrival
++rate in packets per second.  See
++.M click.o 8
++for more information on generic handlers, and the element documentation for
++more information on element-specific handlers.
++.Sp
++.I element
++may be a pattern that uses the shell's globbing syntax (*, ?, and
++[...]).  In this case,
++.B click
++will run each
++.I handler
++whose element's name matches the pattern.
++.I element
++may also be an element class or interface name, such as "Queue" or "Storage";
++.B click
++will run each
++.I handler
++whose element has that class or interface.
++'
++.Sp
++.TP
++.BI \-x " \fR[\fPelement\fR.]\fPhandler"
++.TP
++.BI \-\-exit-handler " \fR[\fPelement\fR.]\fPhandler"
++After running the driver, call
++.IR element 's
++read handler named
++.IR handler ,
++or the global read handler named
++.IR handler ,
++and use the result as the
++.B click
++process exit value.  The handler should return an integer, which is used directly, or a boolean (true means 0, false means 1).
++'
++.Sp
++.TP
++.BI \-o " file"
++.TP
++.BI \-\-output " file"
++Write a flattened version of the router configuration to
++.IR file .
++The flattening process removes all compound elements and additional archive
++members.
++'
++.Sp
++.TP 5
++.BR \-q ", " \-\-quit
++Do not run the driver. This option can be used to check a configuration for
++errors, or to check handler results (with the
++.B \-\-handler
++option) without running the configuration.
++'
++.Sp
++.TP 5
++.BR \-t ", " \-\-time
++Print the time it took to run the driver.
++'
++.Sp
++.TP 5
++.BR \-w ", " \-\-no\-warnings
++Do not print any warning messages.
++'
++.Sp
++.TP
++.BI \-C " path"
++.TP
++.BI \-\-clickpath " path"
++Use
++.I path
++for CLICKPATH.
++'
++.Sp
++.TP 5
++.BI \-\-help
++Print usage information and exit.
++'
++.Sp
++.TP
++.BI \-\-version
++Print the version number and some quickie warranty information and exit.
++'
++.PD
++'
++.SH "BUGS"
++If you get an unaligned access error, try running your configuration
++through
++.M click-align 1
++first.
++'
++.SH "SEE ALSO"
++.M click-align 1 ,
++.M click 5 ,
++.M click.o 8 ,
++.M ControlSocket n ,
++.M FromDevice.u n ,
++.M ToDevice.u n ,
++.M FromDump n ,
++.M ToDump n ,
++.M tcpdump 1 ,
++.M InfiniteSource n
++'
++.SH AUTHOR
++.na
++Eddie Kohler, kohler@cs.ucla.edu
++.br
++http://www.pdos.lcs.mit.edu/click/
++'
+diff -Nurb click-1.6.0/inst/share/man/man1/testie.1 click-1.6.0-27/inst/share/man/man1/testie.1
+--- click-1.6.0/inst/share/man/man1/testie.1   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/man1/testie.1        2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,309 @@
++.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32
++.\"
++.\" Standard preamble:
++.\" ========================================================================
++.de Sh \" Subsection heading
++.br
++.if t .Sp
++.ne 5
++.PP
++\fB\\$1\fR
++.PP
++..
++.de Sp \" Vertical space (when we can't use .PP)
++.if t .sp .5v
++.if n .sp
++..
++.de Vb \" Begin verbatim text
++.ft CW
++.nf
++.ne \\$1
++..
++.de Ve \" End verbatim text
++.ft R
++.fi
++..
++.\" Set up some character translations and predefined strings.  \*(-- will
++.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
++.\" double quote, and \*(R" will give a right double quote.  | will give a
++.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
++.\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
++.\" expand to `' in nroff, nothing in troff, for use with C<>.
++.tr \(*W-|\(bv\*(Tr
++.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
++.ie n \{\
++.    ds -- \(*W-
++.    ds PI pi
++.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
++.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
++.    ds L" ""
++.    ds R" ""
++.    ds C` ""
++.    ds C' ""
++'br\}
++.el\{\
++.    ds -- \|\(em\|
++.    ds PI \(*p
++.    ds L" ``
++.    ds R" ''
++'br\}
++.\"
++.\" If the F register is turned on, we'll generate index entries on stderr for
++.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
++.\" entries marked with X<> in POD.  Of course, you'll have to process the
++.\" output yourself in some meaningful fashion.
++.if \nF \{\
++.    de IX
++.    tm Index:\\$1\t\\n%\t"\\$2"
++..
++.    nr % 0
++.    rr F
++.\}
++.\"
++.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
++.\" way too many mistakes in technical documents.
++.hy 0
++.if n .na
++.\"
++.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
++.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
++.    \" fudge factors for nroff and troff
++.if n \{\
++.    ds #H 0
++.    ds #V .8m
++.    ds #F .3m
++.    ds #[ \f1
++.    ds #] \fP
++.\}
++.if t \{\
++.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
++.    ds #V .6m
++.    ds #F 0
++.    ds #[ \&
++.    ds #] \&
++.\}
++.    \" simple accents for nroff and troff
++.if n \{\
++.    ds ' \&
++.    ds ` \&
++.    ds ^ \&
++.    ds , \&
++.    ds ~ ~
++.    ds /
++.\}
++.if t \{\
++.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
++.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
++.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
++.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
++.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
++.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
++.\}
++.    \" troff and (daisy-wheel) nroff accents
++.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
++.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
++.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
++.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
++.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
++.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
++.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
++.ds ae a\h'-(\w'a'u*4/10)'e
++.ds Ae A\h'-(\w'A'u*4/10)'E
++.    \" corrections for vroff
++.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
++.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
++.    \" for low resolution devices (crt and lpr)
++.if \n(.H>23 .if \n(.V>19 \
++\{\
++.    ds : e
++.    ds 8 ss
++.    ds o a
++.    ds d- d\h'-1'\(ga
++.    ds D- D\h'-1'\(hy
++.    ds th \o'bp'
++.    ds Th \o'LP'
++.    ds ae ae
++.    ds Ae AE
++.\}
++.rm #[ #] #H #V #F C
++.\" ========================================================================
++.\"
++.IX Title "TESTIE 1"
++.TH TESTIE 1 "" "perl v5.8.8" ""
++.SH "NAME"
++testie \- simple test harness
++.SH "SYNOPSIS"
++.IX Header "SYNOPSIS"
++.Vb 1
++\&  testie [OPTIONS] [FILE]...
++.Ve
++.SH "DESCRIPTION"
++.IX Header "DESCRIPTION"
++Testie is a simple test harness. Each testie test file incorporates a shell
++script to be run and, optionally, input and expected output files for that
++script. Testie runs the script; the test fails if any of the script
++commands fail, or if the script generates unexpected output.
++.PP
++To run testie, pass it one or more test filenames. It will print useful
++error messages for failed tests. Alternatively, give it directory names;
++the directories are recursively searched for '\fI*.testie\fR' files.
++.PP
++Return status is 0 if all tests succeed, 1 if any test fails, and 2 if a
++test fails due to an internal error. Tests whose \f(CW%require\fR prerequisites
++fail do not affect the return status, except that if all tests'
++prerequisites fail, the return status is 1 instead of 0.
++.SH "OPTIONS"
++.IX Header "OPTIONS"
++.IP "\fI\s-1VARIABLE\s0\fR=\fI\s-1VALUE\s0\fR" 8
++.IX Item "VARIABLE=VALUE"
++Provide a setting for \fI\s-1VARIABLE\s0\fR. Occurrences in the script of
++\&'\f(CW$VARIABLE\fR' or '\f(CW\*(C`${VARIABLE}\*(C'\fR' will be replaced by \fI\s-1VALUE\s0\fR. Note that
++this is not an environment variable setting. Variable references to unset
++variables are left unchanged.
++.IP "\-V, \-\-verbose" 8
++.IX Item "-V, --verbose"
++Print information to standard error about successful tests as well as
++unsuccessful tests.
++.IP "\-VV, \-\-superverbose" 8
++.IX Item "-VV, --superverbose"
++Like \-\-verbose, but use a slightly different format, and additionally print
++every test's \f(CW%desc\fR section before the test results.
++.IP "\-v, \-\-version" 8
++.IX Item "-v, --version"
++Print version number information and exit.
++.IP "\-\-help" 8
++.IX Item "--help"
++Print help information and exit.
++.IP "\-\-preserve\-temporaries" 8
++.IX Item "--preserve-temporaries"
++Preserve the temporary directory created for the test.
++.IP "\-s, \-\-show \s-1FILE\s0" 8
++.IX Item "-s, --show FILE"
++Echo the contents of \s-1FILE\s0 on completion. \s-1FILE\s0 should be one of the
++filenames specified by \f(CW%file\fR or \f(CW%expect\fR*, or 'stdout' or 'stderr'.
++.IP "\-e, \-\-expand" 8
++.IX Item "-e, --expand"
++Don't run the given test; instead, expand its files into the current
++directory.  The script is stored in a file called '+script+'.
++.SH "FILE FORMAT"
++.IX Header "FILE FORMAT"
++Testie test files consist of several sections, each introduced by a line
++starting with %. There must be, at least, a \f(CW%script\fR section.
++.PP
++The \f(CW%file\fR and \f(CW%expect\fR* sections define input and/or output files by
++name. Testie runs its script in a private directory in \fI/tmp\fR; any files
++mentioned in \f(CW%file\fR or \f(CW%expect\fR* are placed in that directory.
++.IP "%script" 8
++.IX Item "%script"
++The shell script (in sh syntax) that controls the test. Testie will run
++each command in sequence. Every command in the script must succeed, with
++exit status 0, or the test will fail. The script's inputs and outputs are
++defined with the \f(CW%file\fR and \f(CW%expect\fR* sections.
++.IP "%require [\-q]" 8
++.IX Item "%require [-q]"
++A shell script (in sh syntax) defining prerequisites that must be satisfied
++before the test can run. Every command in the script must succeed, with
++exit status 0, for the test to run. \f(CW%require\fR's output is not checked,
++however. The \f(CW\*(C`\-q\*(C'\fR flag tells testie not to print an error message if a
++requirement fails.
++.IP "%desc" 8
++.IX Item "%desc"
++A short description of the test.  In \-\-superverbose mode, its contents are
++printed before the test results.
++.IP "%info" 8
++.IX Item "%info"
++This section is ignored. It is intended for information about the test.
++.IP "%cut" 8
++.IX Item "%cut"
++This section is ignored. It is intended to comment out obsolete parts of
++the test.
++.IP "%file [\-d] [+LENGTH] \s-1FILENAME\s0..." 8
++.IX Item "%file [-d] [+LENGTH] FILENAME..."
++Create an input file for the script. \s-1FILENAME\s0 can be 'stdin', which sets
++the script's standard input. If \s-1LENGTH\s0 is provided, the file data consists
++of the \s-1LENGTH\s0 bytes following this line. Otherwise, it consists of the data
++up to the next section. The \f(CW\*(C`\-d\*(C'\fR flag tells testie to delete the
++first character of each line in the section; this makes it possible to
++include files that have lines that start with %. \s-1FILENAME\s0 cannot contain
++slashes.
++.IP "%expectv [\-a] [\-d] [+LENGTH] \s-1FILENAME\s0..." 8
++.IX Item "%expectv [-a] [-d] [+LENGTH] FILENAME..."
++An expected output file for the script. \s-1FILENAME\s0 can be 'stdout', for
++standard output. If \s-1LENGTH\s0 is provided, the file data consists of the
++\&\s-1LENGTH\s0 bytes following this line; otherwise, it consists of the data up to
++the next section.
++.Sp
++Testie will run the script, then compare the script's output file with the
++provided data. They must match exactly or the test fails.
++.Sp
++The \f(CW\*(C`\-a\*(C'\fR flag marks this expected output as an alternate. Testie will
++compare the script's output file with each provided alternate; the test
++succeeds if any of the alternates match. The \f(CW\*(C`\-d\*(C'\fR flag behaves as in
++\&\f(CW%file\fR.
++.IP "%expect [\-a] [\-d] [\-i] [+LENGTH] \s-1FILENAME\s0..." 8
++.IX Item "%expect [-a] [-d] [-i] [+LENGTH] FILENAME..."
++An expected output file for the script. Arguments are as for \f(CW%expectv\fR.
++.Sp
++Testie will run the script, then compare the file generated by script
++with the provided data. The files are compared line\-by\-line. Testie
++ignores trailing whitespace on each line and in the files at large. It also
++ignores lines in the script output that match \f(CW%ignore\fR patterns (see below).
++Blank lines in the \f(CW%expect\fR data match one or more blank lines in the
++output. \f(CW%expect\fR lines can contain Perl regular expressions, enclosed by two
++sets of braces; so the \f(CW%expect\fR line
++.Sp
++.Vb 1
++\&    foo{{(bar)?}}
++.Ve
++.Sp
++matches either 'foo' or 'foobar'. The \f(CW\*(C`\-i\*(C'\fR flag makes any regular
++expressions case\-insensitive.
++.IP "%expectx [\-a] [\-d] [\-i] [+LENGTH] \s-1FILENAME\s0..." 8
++.IX Item "%expectx [-a] [-d] [-i] [+LENGTH] FILENAME..."
++%expectx is just like \f(CW%expect\fR, except that every line is treated as a
++regular expression (so there is no need for the \*(L"{{ }}\*(R" escapes).
++.IP "%stdin [+LENGTH]" 8
++.IX Item "%stdin [+LENGTH]"
++Same as '%file stdin [\s-1ARGS\s0]'.
++.IP "%stdout [\-a] [\-d] [\-i] [+LENGTH]" 8
++.IX Item "%stdout [-a] [-d] [-i] [+LENGTH]"
++Same as '%expect stdout'.
++.IP "%stderr [\-a] [\-d] [\-i] [+LENGTH]" 8
++.IX Item "%stderr [-a] [-d] [-i] [+LENGTH]"
++Same as '%expect stderr'.
++.IP "%ignorex [\-d] [\-i] [+LENGTH] [\s-1FILENAME\s0]" 8
++.IX Item "%ignorex [-d] [-i] [+LENGTH] [FILENAME]"
++Each line in the \f(CW%ignorex\fR section is a Perl regular expression.  Lines in
++the supplied \s-1FILENAME\s0 that match any of those regular expressions will not
++be considered when comparing files with \f(CW%expect\fR[x] data.  The regular
++expression must match the whole line.  \s-1FILENAME\s0 may be 'all', in which case
++the regular expressions will apply to all \f(CW%expect\fR[x] files.
++.ie n .IP "%ignore, %ignorev" 8
++.el .IP "%ignore, \f(CW%ignorev\fR" 8
++.IX Item "%ignore, %ignorev"
++Like '%ignorex', but '%ignore' parses regular expressions only inside
++double braces (\*(L"{{ }}\*(R"), and '%ignorev' lines must match exactly.
++.IP "%eot" 8
++.IX Item "%eot"
++Marks the end of the current test.  The rest of the file will be parsed for
++additional tests.
++.IP "%eof" 8
++.IX Item "%eof"
++The rest of the file is ignored.
++.SH "EXAMPLE"
++.IX Header "EXAMPLE"
++This simple testie script checks that 'grep \-c' works for a simple output
++file.
++.PP
++.Vb 7
++\&  %script
++\&  grep -c B.
++\&  %stdin
++\&  Bfoo
++\&  B
++\&  %stdout
++\&  1
++.Ve
++.SH "AUTHOR"
++.IX Header "AUTHOR"
++Eddie Kohler, <kohler@cs.ucla.edu>
+diff -Nurb click-1.6.0/inst/share/man/man5/click.5 click-1.6.0-27/inst/share/man/man5/click.5
+--- click-1.6.0/inst/share/man/man5/click.5    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/man5/click.5 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,785 @@
++.\" -*- mode: nroff -*-
++.ds V 1.1
++.ds E " \-\- 
++.if t .ds E \(em
++.de OP
++.BR "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6"
++..
++.de OA
++.IR "\fB\\$1\& \|\fI\\$2" "\\$3" "\\$4" "\\$5" "\\$6"
++..
++.de QO
++.RB ` "\\$1" "'\\$2"
++..
++.de Sp
++.if n .sp
++.if t .sp 0.4
++..
++.de Es
++.Sp
++.RS 5
++.nf
++..
++.de Ee
++.fi
++.RE
++.PP
++..
++.de M
++.BR "\\$1" "(\\$2)\\$3"
++..
++.de Rs
++.RS
++.Sp
++..
++.de Re
++.Sp
++.RE
++..
++.TH CLICK 5 "16/Mar/2004" "Version \*V"
++.SH NAME
++click \- Click configuration language
++'
++.SH DESCRIPTION
++The Click language describes the configuration of a Click router. It has
++two main directives:
++.IR declarations
++declare new elements, and
++.IR connections
++connect those elements together.  Click router configurations are like
++directed graphs of elements; in this interpretation, declarations specify
++the vertices of the graph and connections specify the edges.  Other
++language statements define configuration parameters and create new element
++types.
++'
++.SS "Declarations"
++'
++A declaration looks like this:
++.Rs
++.IR "name" " :: " "class" ( "config" );
++.Re
++(The semicolon, like all semicolons in Click syntax, is optional.)
++This declares an element called
++.IR name
++that has element class
++.IR class
++and configuration arguments
++.IR config .
++If the configuration string is empty, the parentheses can be left off.
++Also, there can be two or more names in a comma-separated list, which has
++the same effect as multiple declarations.
++.Rs
++.IR "name" " :: " "class" ;
++.br
++.IR "name1" ", " "name2" ", ..., " "nameN" " ::"
++.IR "class" ( "config" );
++.Re
++'
++.SS "Connections"
++'
++A connection looks like this:
++.Rs
++.IR "name1" " [" "port1" "] -> [" "port2" "] " "name2" ;
++.Re
++where the two
++.IR name s
++are names of previously declared elements, and the two
++.IR port s
++are nonnegative integers. This says that
++.IR name1 "'s output port " port1
++should be connected to
++.IR name2 "'s input port " port2 .
++Two connections can be strung together into a single statement if the
++output element of one is the same as the input element of the other:
++.Rs
++.IR "n1" " [" "p1" "] -> [" "p2" "] " "x" ;
++.br
++.IR "x" " [" "p3" "] -> [" "p4" "] " "n2" ;
++.Re
++is the same as
++.Rs
++.IR "n1" " [" "p1" "] -> [" "p2" "] " "x"
++.RI "[" "p3" "] -> [" "p4" "] " "n2" ;
++.Re
++This can be extended to three or more connections. Furthermore, if an input
++or output port is 0, it can be omitted along with the brackets. These two
++lines are equivalent:
++.Rs
++.IR "n1" " [0] -> [0] " "n2" ;
++.br
++.IR "n1" " -> " "n2" ;
++.Re
++.PP
++You can also declare elements inside connections:
++.Rs
++.RI "... -> [" "p1" "] " "name" " ::"
++.IR "class" ( "config" ") [" "p2" "] -> ...;"
++.Re
++is equivalent to
++.Rs
++.IR "name" " :: " "class" ( "config" );
++.br
++.RI "... -> [" "p1" "] " "name" " [" "p2" "] -> ...;"
++.Re
++Every such declaration can declare at most one element.
++'
++.SS "Anonymous elements"
++You may declare an element without specifying its name, in which case the
++system will choose an element name for you. For example:
++.Rs
++.IR class "(" config ");"
++.Re
++is equivalent to
++.Rs
++.IR generatedname " :: " class ( config );
++.Re
++As usual, the parentheses can be left off if
++.I config
++is empty. You may also declare an anonymous element inside a connection:
++.Rs
++.RI "... -> [" p1 "] " class ( config )
++.RI "[" p2 "] -> ...;"
++.Re
++is equivalent to
++.Rs
++.IR generatedname " :: " class ( config );
++.br
++.RI "... -> [" p1 "] " generatedname " [" p2 "] -> ...;"
++.Re
++.PP
++The
++.I generatedname
++has the form
++.RI ` class "@" number ',
++where the
++.IR number
++is chosen to make the name unique. These numbers are predictable: when the
++system parses a Click file twice, that file's anonymous elements will get
++the same generated names each time. Nothing prevents a user from declaring
++an element named like an anonymous element. We suggest that users avoid the `@'
++character in their element names.
++.PP
++Not all elements can usefully be anonymous, since an anonymous element can
++be part of at most two connections (once as input, once as output).
++'
++.SH "CONFIGURATION STRINGS"
++'
++Click configuration strings are comma-separated lists of arguments, where
++each argument is a space-separated list of objects. This section describes
++some common object types. See the element documentation for argument types
++expected by a particular element.
++.PP
++Configuration strings may contain comments (`// ... EOL' and `/* ... */'),
++which are replaced with single space characters. Inside single- or
++double-quoted strings, commas, spaces, and comment-starting sequences lose
++their regular meaning and are treated as normal characters.
++.PP
++The most common object types are:
++.TP 3
++\(bu
++.B Strings.
++Any sequence of characters.  Single- or double-quoted strings are allowed
++(and required, if the string contains a space or comma).  Inside
++double-quoted strings, backslash substitutions are performed; see below.
++You can concatenate strings by juxtaposing them.  For example, `a"b"c' is
++equivalent to `abc'.
++.TP
++\(bu
++.B Booleans.
++`0', `false', and `no' mean false; `1', `true', and `yes' mean true.
++.TP
++\(bu
++.B Integers
++preceded by an optional `+' or `\-' sign. Decimal, octal (first digit `0'),
++and hexadecimal (starting with `0x') are allowed. 
++.TP
++\(bu
++.B Real numbers
++in decimal notation.
++.TP
++\(bu
++.B Times and delays
++in decimal real notation, followed by an optional unit: `s'/`sec', `ms',
++`us', `ns', `m'/`min', `h'/`hr'.
++.TP
++\(bu
++.B Bandwidths
++in decimal real notation, followed by an optional unit: `bps' or `Bps' for
++bits or bytes per second, with an optional SI prefix `k', `M', or `G'.  The
++default unit is generally `Bps'.
++.TP
++\(bu
++.B IP addresses
++in the conventional `n.n.n.n' form (for example, `18.26.4.15').
++.TP
++\(bu
++.B IP network prefixes
++in the CIDR form `n.n.n.n/k' (for example, `18.26.4/24').
++.TP
++\(bu
++.B IPv6 addresses
++in any of the conventional forms (for example, `::',
++`1080::8:800:200C:417A', or `::18.26.4.15').
++.TP
++\(bu
++.B Ethernet addresses
++in the conventional `x:x:x:x:x:x' form (for example, `0:a0:c9:9c:fd:9c').
++.TP
++\(bu
++.B Element names.
++.PD
++.PP
++Some elements, like
++.IR Classifier ,
++take arguments that don't fit any of these types. See the element
++documentation for details.
++.PP
++If the last argument in a configuration string is empty (containing only
++whitespace and comments), then it is ignored.  Thus, `Element(1, )',
++`Element(1, /* comment */)', and `Element(1)' behave exactly alike.
++.PP
++Configuration strings may also contain parameter references, such as
++`$interface'. The parameter values are substituted in. Parameters may be
++defined either by compound element arguments, by explicit `define'
++statements, or on the command line.
++'
++.SS "Backslash Substitutions"
++.PP
++The following backslash substitutions are performed inside double quotes.
++Additionally, as a special case, a bare data substitution sequence `\e<
++\&... >' acts as if it were enclosed in double quotes.  (Inside single
++quotes, `\e< ... >' is not special.)
++.TP 4
++1.
++'
++C-like substitutions. Specifically, `\ea', `\eb', `\et', `\en', `\ev',
++`\ef', `\er', `\e\e', and `\e[1, 2, or 3 octal digits]' have their C
++meanings.  `\ex[any number of hex digits]' is replaced with the byte
++defined by the last 2 hex digits.
++.TP 4
++2.
++Data substitutions. An escape sequence `\e< ... hex digits and spaces ...
++>' is replaced with the data represented by the hex digits. For example,
++the sequence `\e< 48 45 4c 4C 4f >' is replaced with `HELLO'.
++.TP
++3.
++Backlash-newline sequences (`\e[LF]', `\e[CR]', or `\e[CR][LF]') are removed.
++.TP
++4.
++Any other `\e[CHAR]' sequence is replaced with `[CHAR]'.
++'
++.SH "COMPOUND ELEMENTS"
++'
++A
++.I compound element
++is a scoped collection of elements that acts like a single element from
++outside. A compound element can be used anywhere an element class is
++expected (that is, in a declaration or connection). Syntactically, a
++compound element is a set of Click statements enclosed in braces `{ }'.
++Inside the braces, the special names `input' and `output' represent
++connections from or to the outside. Before a router is put on line,
++compound elements are systematically expanded until none remain; thus, they
++have no run-time overhead.
++.PP
++Here are some examples. This code, with a compound element,
++.Rs
++a -> { input -> X -> output } -> b;
++.Re
++expands to
++.Rs
++a -> X -> b;
++.Re
++Here is a more complicated example, with multiple ports:
++.Rs
++compound :: {
++.br
++\%  input -> X -> output;
++.br
++\%  input [1] -> Y -> [1] output;
++.br
++};
++.br
++a -> compound -> b;
++.br
++c -> [1] compound [1] -> d;
++.Re
++expands to
++.Rs
++a -> X -> b;
++.br
++c -> Y -> d;
++.Re
++.PP
++The `input' and `output' pseudoelements incur no run-time overhead. (In
++fact, they are connection tunnel endpoints; see below for more.)
++.PP
++The actual expansions will differ from these examples because the elements
++will have different names. A prefix is prepended to the components' names,
++providing locality relative to other names in the configuration. The new
++names have the form
++.RI ` "compoundname" / "componentname" ',
++where
++.I compoundname
++is the name of the compound element being expanded, and
++.I componentname
++is the name of the component element inside that compound. For example,
++.Rs
++compound :: { input -> x :: X -> output };
++.br
++a -> compound -> b;
++.Re
++is really expanded to
++.Rs
++a -> compound/x :: X -> b;
++.Re
++For this purpose, anonymous compound elements are given constructed names
++like
++.RI `@ number '.
++Nothing prevents a user from declaring an element named like a compound
++element component. We suggest that users generally avoid using the `/'
++character in their element names.
++.PP
++It is an error to use the `input' pseudoelement's input ports or the
++`output' pseudoelement's output ports. It is also an error to leave an
++intermediate port unused\*Efor example, to use `input [0]' and `input [2]'
++but not `input [1]'.
++'
++.SS "The `elementclass' statement"
++'
++The `elementclass' statement lets the user name a frequently-occurring
++compound element, and use the name as if it were a primitive element class.
++Syntactically, it looks like this:
++.Rs
++elementclass
++.I identifier
++.I compoundelement
++;
++.Re
++After this statement, every occurrence of the
++.I identifier
++will be replaced with the
++.IR compoundelement .
++For example, this code, with an `elementclass':
++.Rs
++elementclass MyQueue {
++.br
++\%  input -> Queue -> Shaper(1000) -> output;
++.br
++}
++.br
++q :: MyQueue;
++.br
++a -> q -> b;
++.Re
++is equivalent to this code, without it:
++.Rs
++q :: { input -> Queue -> Shaper(1000) -> output };
++.br
++a -> q -> b;
++.Re
++which roughly expands to:
++.Rs
++a -> Queue -> Shaper(1000) -> b;
++.Re
++.PP
++The user can declare element classes that have the names of previously
++existing element classes:
++.Rs
++elementclass Queue {
++.br
++\%  input -> Queue -> Shaper(1000) -> output;
++.br
++}
++.Re
++Element classes are nonrecursive and lexically scoped, so the `Queue'
++inside this definition refers to the original `Queue'. The scope of an
++element class definition extends from immediately after its closing right
++brace to the end of the enclosing scope.
++.PP
++A variant of the elementclass statement makes synonyms for preexisting
++element classes. For example, this statement
++.Rs
++elementclass MyQueue Queue;
++.Re
++makes MyQueue a synonym for Queue.
++'
++.SS "Configuration parameters"
++'
++Compound elements may take configuration parameters, which are expanded
++into the configuration strings of its components. The parameters are named
++at the beginning of the compound element. Each parameter looks like a Perl
++variable\*Ea dollar sign followed by one or more letters, numbers, and
++underscores. For example, this compound element
++.Rs
++{ $a, $b | ... }
++.Re
++takes two configuration parameters, named `$a' and `$b'. Keyword arguments
++are also supported. For example, this compound element
++.Rs
++{ COUNT $count | ... }
++.Re
++takes a COUNT keyword parameter. Mismatched configuration parameters cause
++errors; for example:
++.Rs
++\%{ $a, $b | ... } (1)         // Error: too few arguments
++.br
++\%{ $a, $b | ... } (1, 2, 3)   // Error: too many arguments
++.br
++\%{ COUNT $count | ... } (1)   // Error: missing 'COUNT' parameter
++.Re
++The special keyword `__REST__' matches any additional arguments supplied to
++the compound element. For example:
++.Rs
++\%{ $a, COUNT $count, __REST__ $rest | ... } 
++.br
++\%           (1, 2, COUNT 3, FOO 4)
++.Re
++This compound element will be expanded with `$a' set to `1', `$count' set
++to `3', and `$rest' set to `2, FOO 4'. 
++.PP
++In a compound element definition, all positional parameters must precede
++any keyword parameters, and `__REST__', if present, must appear last of
++all.
++.PP
++As the compound is expanded, its components' configuration strings are
++searched for references to the parameters. Any such references are replaced
++with the supplied arguments. For example, this code:
++.Rs
++\&... -> { $a | input -> 
++.br
++\%           A(1, $a, 3) -> output } (100) -> ...
++.Re
++expands to this:
++.Rs
++\&... -> A(1, 100, 3) -> ...
++.Re
++You can avoid substitution by putting the dollar sign inside single quotes.
++.PP
++Use braces, like `${a}', to avoid including following letters in a variable
++name. Click also supports the shell-like `${VAR-DEFAULT}' syntax, which
++substitutes the value of `$VAR', or `DEFAULT' if that variable was not set.
++See also PARAMETER DEFINITIONS, below.
++'
++.SS "Overloading"
++'
++A single compound element may contain multiple overloaded definitions
++separated from one another by two vertical bars "\f(CW||\fR". Different
++definitions may have different numbers of input ports, different numbers of
++output ports, or different sets of configuration arguments. For example,
++this extended MyQueue compound element takes an optional capacity argument,
++just like Queue itself:
++.Rs
++elementclass MyQueue {
++.br
++\%  input -> Queue -> Shaper(1000) -> output;
++.br
++\%||
++.br
++\%  $cap | input -> Queue($cap)
++.br
++\%               -> Shaper(1000) -> output;
++.br
++}
++.Re
++For each use of an overloaded compound element, Click will choose the first
++definition that matches the provided number of input ports, number of
++output ports, and configuration arguments. It is an error if no definition
++matches these properties exactly.
++.PP
++It is also possible to extend an existing element class with new overloaded
++definitions with "\f(CW...\fR". For example, this definition introduces a
++two-argument version of Queue:
++.Rs
++elementclass Queue {
++.br
++\%  $cap, $rate | input -> Queue($cap)
++.br
++\%                -> Shaper($rate) -> output;
++.br
++\%|| ...
++.br
++}
++.Re
++(The ellipsis in this example must be typed verbatim.) The overloadings
++visible at a given declaration are those that lexically precede that
++declaration. For example, the following example is an error since the
++two-argument version of Test is not visible at the declaration where it is
++required:
++.Rs
++elementclass Test { $a | /* nothing */ }
++.br
++test :: Test(1, 2);
++.br
++elementclass Test { $a, $b | /* nothing */ || ... }
++.Re
++'
++.SH "CONNECTION TUNNELS"
++'
++A
++.I connection tunnel
++is a pair of element names that acts as a tunnel for connections.
++Consider a tunnel
++.RI ` p1 " -> " p2 '.
++Then connections to 
++.I p1
++pass through the tunnel and are transformed, at compile time, into
++connections from
++.IR p2 .
++For example, this code, with a tunnel,
++.Rs
++connectiontunnel p1 -> p2;
++.br
++a -> p1; p2 -> b;
++.Re
++is transformed into this code, without it:
++.Rs
++a -> b;
++.Re
++The connections to p1's 
++.IR i th
++input port have been expanded into connections from p2's
++.IR i th
++output port. Thus, a is connected to b in the result because a was
++connected to p1's input port 0, and p2's output port 0 was connected to b.
++Here is a slightly more complicated example involving several connections
++and different port numbers:
++.Rs
++connectiontunnel p1 -> p2;
++.br
++a -> p1; b -> p1; p2 -> c;
++.br
++a [1] -> [1] p1; p2 [1] -> Discard;
++.Re
++is transformed into
++.Rs
++a -> c; b -> c;
++.br
++a [1] -> Discard;
++.Re
++And one final example:
++.Rs
++connectiontunnel p1 -> p2;
++.br
++a -> p1; p2 -> b; p2 -> c;
++.Re
++becomes
++.Rs
++a -> b; a -> c;
++.Re
++.PP
++Connection tunnels can be connected to each other. The system will
++recursively expand the tunnels until none of them remain. (Circular
++connections are silently ignored.) For example:
++.Rs
++connectiontunnel p1 -> p2, q1 -> q2;
++.br
++a -> p1; p2 -> q1; q2 -> b;
++.Re
++becomes
++.Rs
++a -> b;
++.Re
++.PP
++An identifier that has been used for a connection tunnel cannot be used for
++an element, and vice versa. However, an identifier can be used for two
++tunnels, once as the input end and once as the output end. For example:
++.Rs
++connectiontunnel p -> p/input, p/output -> p;
++.br
++a -> p; // using `p' as input
++.br
++p/input -> Counter -> p/output; 
++.br
++p -> b; // using `p' as output
++.Re
++becomes
++.Rs
++a -> Counter -> b;
++.Re
++Compound elements use this mechanism.
++'
++.SH "REQUIREMENTS"
++'
++A configuration can say that it depends on optional packages by using the
++`require' statement. Its argument is a comma-separated list of package
++names:
++.Rs
++require(fastclassifier, specialcode);
++.Re
++Installation programs can use the package names to find and upload any
++necessary package code. Furthermore, the required package names are checked
++against a list of currently active packages when a configuration is
++installed. If any required packages are unavailable, an error is reported.
++'
++.SH "PARAMETER DEFINITIONS"
++'
++Parameters are defined using the `define' statement. Its argument is a
++comma-separated list of pairs, each pair consisting of a configuration
++variable and a value:
++.Rs
++define($DEVNAME eth0, $COUNT 1);
++.Re
++This sets the `$DEVNAME' parameter to `eth0' and the `$COUNT' parameter to
++`1'. Definitions are lexically scoped, so definitions inside a compound
++element are not visible outside it. However, all definitions in a given
++scope take place simultaneously, regardless of their ordering. The
++following two configurations have the same effect:
++.Rs
++1) define($a 2); Message($a)
++.br
++2) Message($a); define($a 2)
++.Re
++It is an error to define a parameter more than once in any single
++scope. Click programs such as
++.M click 1
++and
++.M click-install 1
++allow parameters to specified on the command line; these override any
++global parameters with the same names.
++'
++.SH "LEXICAL ISSUES"
++'
++Click identifiers are nonempty sequences of letters, numbers, underscores
++`_', at-signs `@', and slashes `/' that do not begin or end with a slash.
++The system uses `@' and `/' for special purposes: `@' in constructed names
++for anonymous elements and prefixes, and `/' in names for components of
++compound elements. Users are discouraged from using these characters in
++their own identifiers. Identifiers are case-sensitive. No component of an
++identifier may consist solely of numbers; for example, `1/x' is an illegal
++identifier.
++.PP
++The keywords `connectiontunnel', `elementclass', `require', and `define'
++may not be used as identifiers. The normal identifiers `input' and `output'
++have special meaning inside compound element definitions.
++.PP
++The following characters and multi-character sequences are single Click
++tokens:
++.RS
++->\~\~::\~\~;\~\~,\~\~(\~\~)\~\~[\~\~]\~\~{\~\~}\~\~|\~\~||\~\~...
++.RE
++.PP
++Whitespace (using the C definition) and comments separate Click tokens.
++Click uses C++-style comments: from `//' to the end of the line, or from
++`/*' to the next `*/'. Either form of comment terminates an identifier, so
++this Click fragment
++.RS
++an/identifier/with/slashes//too/many
++.RE
++has an identifier `an/identifier/with/slashes' and a comment
++`//too/many'. No identifier contains two consecutive slashes.
++.PP
++Parameters, which are used in compound elements, look like Perl variables. A
++parameter consists of a dollar sign `$' followed by one or more letters,
++numbers, and underscores.
++.PP
++A configuration string starts immediately following a left parenthesis `(',
++and continues up to the next unbalanced right parenthesis `)'. However,
++parentheses inside single or double quotes or comments do not affect
++balancing. Here are several examples; in each case, the configuration
++string consists of the text between the `#' marks (including the `#' marks
++themselves).
++.Rs
++C1(#simple string#)
++.br
++C2(#string with (balanced parens)#)
++.br
++C3(#string with ")quoted" paren#)
++.br
++C4(#// end-of-line comment)
++.br
++\%   still going!#)
++.br
++C5(#/* slash-star comment) */ and backslash \e#)
++.Re
++.PP
++A Click program may contain C preprocessor-style line directives. These
++lines start with `#' and have the form `# \fIlinenumber\fP
++"\fIfilename\fP"' or `#line \fIlinenumber\fP "\fIfilename\fP"'; they change
++the filenames and line numbers used for error messages. The filename
++portion is optional. Line directives are not recognized inside
++configuration strings.
++'
++.SH "ARCHIVES"
++Many Click programs also accept
++.M ar 1
++archives as configurations. The archive must contain a member called
++`config', which is treated as a Click-language configuration. The archive
++may also contain package code required by the configuration. The
++.M click-install 1
++and
++.M click 1
++programs will decompose the archive and install any package code before
++installing the configuration itself. The
++.M click.o 8
++kernel module will not accept archives; use
++.M click-install 1 .
++'
++.SH "BNF GRAMMAR"
++'
++.IR stmts " ::= " stmts " " stmt " | " empty
++.br
++.IR stmt " ::= " declaration " | " connection
++.br
++.RI "    | " tunnelstmt " | " elementclassstmt " | " requirestmt
++.br
++.RI "    | " definestmt " | "";"""
++.br
++.IR declaration " ::= " element-names " ""::"" "
++.IR class " " opt-config
++.br
++.IR element-names " ::= " element-name
++.br
++.RI "    | " element-names " "","" " element-name
++.br
++.IR element-name " ::= identifier
++.\" | ""^"" identifier
++.br
++.IR class " ::= identifier | ""{"" " compounds " ""}"""
++.br
++.RI "    | ""{"" " compounds " ""||"" ""..."" ""}"""
++.br
++.IR compounds " ::= " compound " | " compounds " ""||"" " compound
++.br
++.IR compound " ::= " stmts " | " opt-formals " ""|"" " stmts
++.br
++.IR opt-formals " ::= " formals " | " empty
++.br
++.IR formals " ::= " formal " | " formals " "","" " formal
++.br
++.IR formal " ::= parameter | identifier parameter" 
++.br
++.IR connection " ::= " element " " opt-port " ""->"" " opt-port " " conntail
++.br
++.IR conntail " ::= " element " | " connection
++.br
++.IR element " ::= " element-name
++.br
++.RI "    | " element-name " ""::"" " class " " opt-config
++.br
++.RI "    | " class " " opt-config
++.br
++.IR opt-config " ::= ""("" configstring "")"" | " empty
++.br
++.IR opt-port " ::= ""["" portnumber ""]"" | " empty
++.br
++.IR tunnelstmt " ::= ""connectiontunnel"" identifier ""->"" identifier"
++.br
++.IR elementclassstmt " ::= ""elementclass"" identifier " class
++.br
++.IR requirestmt " ::= ""require"" ""("" configstring "")"""
++.br
++.IR definestmt " ::= ""define"" ""("" configstring "")"""
++.br
++.IR empty " ::= "
++'
++.SH "SEE ALSO"
++.M click 1 ,
++.M click-install 1 ,
++.M click.o 8
++'
++.SH AUTHOR
++.na
++Eddie Kohler, kohler@cs.ucla.edu
++.br
++http://www.pdos.lcs.mit.edu/click/
++'
+diff -Nurb click-1.6.0/inst/share/man/man7/elementdoc.7 click-1.6.0-27/inst/share/man/man7/elementdoc.7
+--- click-1.6.0/inst/share/man/man7/elementdoc.7       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/man7/elementdoc.7    2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,526 @@
++.\" -*- mode: nroff -*-
++.ds V 1.1
++.ds D 29/Apr/2000
++.ds E " \-\- 
++.if t .ds E \(em
++.de Sp
++.if n .sp
++.if t .sp 0.4
++..
++.de Es
++.Sp
++.RS 5
++.nf
++..
++.de Ee
++.fi
++.RE
++.PP
++..
++.de Rs
++.RS
++.Sp
++..
++.de Re
++.Sp
++.RE
++..
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.de K
++.BR "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6"
++..
++.de RK
++.RB "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6"
++..
++.TH ELEMENTDOC 7 "\*D" "Version \*V"
++.SH NAME
++elementdoc \- how to write Click element documentation
++'
++.SH DESCRIPTION
++Documentation for a Click element is automatically generated from formatted
++comments in its header files. This manual page describes how to write one
++of these formatted comments.
++.PP
++Click element documentation syntax is based on Perl-style PODs; see
++.M perlpod 1
++for more information. However, not all POD constructs are usable in element
++documentation at the moment; and Click element documentation is
++line-oriented, not paragraph-oriented.
++'
++.SH "COMMAND QUICK REFERENCE"
++These are the sectioning commands and the sections they correspond to,
++listed in the conventional order.
++.RS 5
++.PP
++.PD 0
++.IP "\f(CW=c\fR" 15
++SYNOPSIS
++.IP "\f(CW=s\fR \fIcategory\fR" 15
++NAME (one-line summary)
++.IP "\f(CW=io\fR" 15
++INPUTS AND OUTPUTS
++.IP "\f(CW=processing\fR" 15
++PROCESSING TYPE
++.IP "\f(CW=d\fR" 15
++DESCRIPTION
++.IP "\f(CW=n\fR" 15
++NOTES
++.IP "\f(CW=e\fR" 15
++EXAMPLES
++.IP "\f(CW=h\fR \fIname\fR \fItype\fR" 15
++ELEMENT HANDLERS
++.IP "\f(CW=a\fR" 15
++SEE ALSO
++.IP "\f(CW=head1\fR \fItext\fR" 15
++other heading
++.PD
++.RE
++.PP
++These are the other commands used in element documentation.
++.RS 5
++.PP
++.PD 0
++.IP "\f(CW=head2\fR \fItext\fR" 15
++subheading
++.IP "\f(CW=over\fR \fIamount\fR" 15
++begin item list
++.IP "\f(CW=item\fR \fItext\fR" 15
++add item
++.IP "\f(CW=back\fR" 15
++end item list
++.IP "\f(CW=for\fR \fIformat\fR" 15
++selective formatting
++.IP "\f(CW=begin\fR \fIformat\fR" 15
++selective formatting
++.IP "\f(CW=end\fR \fIformat\fR" 15
++selective formatting
++.IP "\f(CW=deprecated\fR \fInew-element\fR" 15
++element is deprecated
++.PD
++.RE
++.PP
++These are the formatting commands, used inside ordinary text.
++.RS 5
++.PP
++.PD 0
++.IP "\f(CWB<\fItext\fR\f(CW>\fR" 15
++boldface
++.IP "\f(CWI<\fItext\fR\f(CW>\fR" 15
++italics
++.IP "\f(CWU<\fItext\fR\f(CW>\fR" 15
++underlined (if possible)
++.IP "\f(CWP<\fItext\fR\f(CW>\fR" 15
++plain text (i.e., no automatic links)
++.IP "\f(CWC<\fItext\fR\f(CW>\fR" 15
++code (fixed-width)
++.IP "\f(CWF<\fItext\fR\f(CW>\fR" 15
++filename (italics)
++.IP "\f(CWL<\fItext\fR|\fIlink\fR\f(CW>\fR" 15
++hyperlink
++.IP "\f(CWN<>\fR" 15
++line break
++.IP "\f(CWE<\fIname\fR\f(CW>\fR" 15
++entity
++.IP "\f(CWV<\fItext\fR\f(CW>\fR" 15
++hide text
++.PD
++.RE
++.PP
++And these are the category keywords, used in the summary section to
++categorize elements.
++.RS 5
++.PP
++.PD 0
++.IP "\f(CWbasicsources\fR" 22
++Basic Sources and Sinks
++.IP "\f(CWclassification\fR" 22
++Basic Classification and Selection
++.IP "\f(CWbasictransfer\fR" 22
++Basic Packet Transfer
++.IP "\f(CWcounters\fR" 22
++Counters
++.IP "\f(CWtimestamps\fR" 22
++Timestamps
++.IP "\f(CWbasicmod\fR" 22
++Basic Packet Modification
++.IP "\f(CWstorage\fR" 22
++Packet Storage
++.IP "\f(CWaqm\fR" 22
++Active Queue Management
++.IP "\f(CWscheduling\fR" 22
++Packet Scheduling
++.IP "\f(CWshaping\fR" 22
++Traffic Shaping
++.IP "\f(CWinformation\fR" 22
++Information Elements
++.IP "\f(CWnetdevices\fR" 22
++Network Devices
++.IP "\f(CWcomm\fR" 22
++Host and Socket Communication
++.IP "\f(CWethernet\fR" 22
++Ethernet
++.IP "\f(CWarp\fR" 22
++ARP
++.IP "\f(CWip\fR" 22
++IPv4
++.IP "\f(CWiproute\fR" 22
++IPv4 Routing
++.IP "\f(CWicmp\fR" 22
++ICMP
++.IP "\f(CWnat\fR" 22
++Network Address Translation
++.IP "\f(CWtcp\fR" 22
++TCP
++.IP "\f(CWudp\fR" 22
++UDP
++.IP "\f(CWapp\fR" 22
++Applications
++.IP "\f(CWtraces\fR" 22
++Trace Manipulation
++.IP "\f(CWipmeasure\fR" 22
++TCP/IP Measurement
++.IP "\f(CWaggregates\fR" 22
++Aggregates
++.IP "\f(CWip6\fR" 22
++IPv6
++.IP "\f(CWipsec\fR" 22
++IPsec
++.IP "\f(CWcrc\fR" 22
++CRCs
++.IP "\f(CWpaint\fR" 22
++Paint Annotations
++.IP "\f(CWannotations\fR" 22
++Annotations
++.IP "\f(CWdebugging\fR" 22
++Debugging
++.IP "\f(CWcontrol\fR" 22
++Control
++.IP "\f(CWsmpclick\fR" 22
++Multithreaded Click
++.IP "\f(CWtest\fR" 22
++Regression Tests
++.PD
++.RE
++'
++.SH "COMMENT SYNTAX"
++Each piece of documentation is stored in a single block comment
++`\f(CW/*...*/\fR'. Two kinds of block comment are recognized:
++.PP
++.nf
++    /*
++    =c
++    ElementName(...)
++    ... and so on ...
++    */
++
++    /*
++     * =c
++     * ElementName(...)
++     * ... and so on ...
++     */
++.fi
++.PP
++In the first form, commands and normal text MUST begin in the first column
++of each line. In the second form, commands and normal text MUST begin in
++the fourth column of each line, immediately following the initial star and
++spaces `\f(CW\ *\ \fR'. Indented lines are treated as verbatim text, as in
++POD.
++'
++.SH "COMMANDS"
++Commands are lines that begin with `\f(CW=\fR' and a lower-case letter.
++There are two kinds of commands, those that start new sections and those
++that occur within sections. There is also a set of formatting
++commands\*Efor turning text bold, for example\*Ethat occurs inside normal
++text; they are described in the next section.
++'
++.SS "Section Commands"
++.IP "\f(CW=s\fR [\fIcategory\fR]" 5
++Begin the summary section. This should contain a very short,
++one-line summary of the element's function. For example, for a
++.M Queue n
++element:
++.nf
++   =s storage
++   stores packets in a FIFO queue
++.fi
++The summary text should generally be a verb phrase. 
++.RS 5
++.PP
++The optional \fIcategory\fR specifies one or more element categories into
++which this element fits, separated by commas. Specifying meaningful
++categories helps a lot; documentation tools use categories to divide
++elements into manageable groups. Use existing categories, defined by the
++list of category keywords above in the Command Quick Reference, or create
++your own.
++.RE
++.TP 5
++\f(CW=c\fR
++Begin the synopsis section. This section is mandatory.
++.RS 5
++.PP
++The \f(CW=c\fR section gives the element's name and any of its
++configuration arguments. For example:
++.nf
++   =c
++   IPEncap(PROTOCOL, SADDR, DADDR)
++.fi
++.PP
++Configuration arguments should be specified as all-upper-case words. The
++description section will use those upper-case words to talk about the
++arguments. Use brackets to show that an argument is optional:
++.nf
++   =c
++   UDPIPEncap(SADDR, SPORT, DADDR, DPORT [, CHECKSUM?])
++.fi
++.PP
++Do not use anything more complicated than brackets. If an element has
++complex syntax, either use upper-case words and talk about the syntax more
++in the description section, or give multiple lines:
++.nf
++   =c
++   ControlSocket(tcp, PORTNUMBER [, READONLY?])
++   ControlSocket(unix, PORTNUMBER [, READONLY?])
++.fi
++(`tcp' and `unix' are lowercase because they should be typed verbatim.)
++.RE
++'
++.TP 5
++\f(CW=io\fR
++Begin the inputs and outputs section. This section mentions how many inputs
++and outputs the element has. It is usually quite short; for example:
++.nf
++   =io
++   None
++.fi
++This section is optional, and most elements don't bother to have one; they
++mention inputs and outputs in the description section.
++'
++.TP 5
++\f(CW=processing\fR
++Begin the processing type section. This section mentions the processing
++types of the element's input and output ports. It is usually quite short; for
++example:
++.nf
++   =processing
++   Push inputs, pull outputs
++.fi
++This section is optional. Documentation processing tools will generate a
++\f(CW=processing\fR section from the element's \fBprocessing\fP() method,
++if possible.
++'
++.TP 5
++\f(CW=d\fR
++Begin the description section.
++This section tells how the element should be used. It is usually the
++longest section. When mentioning configuration arguments, use the
++upper-case words given in the \f(CW=c\fR section.
++'
++.TP 5
++\f(CW=n\fR
++Begin the notes section.
++'
++.TP 5
++\f(CW=e\fR
++Begin the examples section.
++'
++.TP 5
++\f(CW=h\fR \fIhandlername\fP \fItype\fP
++Begin a handler description. Use this section to describe any special
++handlers that the element installs. \fIHandlername\fP should be the name of
++the handler, and \fItype\fP its type (either `\f(CWread-only\fR',
++`\f(CWwrite-only\fR', or `\f(CWread/write\fR'). The following text should
++describe that handler. For example:
++.nf
++   =h capacity read/write
++   Returns or sets the queue's capacity.
++.fi
++'
++.TP 5
++\f(CW=a\fR [\fItext\fP]
++Begin the "see also" section. Use this section to mention other relevant
++elements and programs, when appropriate. The more references, the better.
++For example:
++.nf
++   =a RED, FrontDropQueue
++.fi
++The optional \fItext\fP is just part of the body of the section.
++.RS 5
++.PP
++The references in this section should be either manual page references,
++like `\f(CWtcpdump(1)\fR', or text references, like `RFC 959: File Transfer
++Protocol'. However, the first paragraph in the section is special; there,
++you can just give element names without `\f(CW(n)\fP' suffixes.
++.PP
++If one of these references occurs in some other section, it will be
++formatted like a link. For example, in
++.nf
++   =d
++   This element is like Queue.
++   =a Queue
++.fi
++the mention of `\f(CWQueue\fR' in the description section will be formatted
++like a link.
++.RE
++'
++.TP 5
++\f(CW=head1\fR \fIsectionname\fR
++Begin a section other than those listed. \fISectionname\fR is the name of
++the section.
++'
++.SS "Other Commands"
++.TP 5
++\f(CW=head2\fR \fItext\fR
++Produce a subheading with \fItext\fR as the text.
++.TP 5
++\f(CW=over\fR \fIamount\fR
++Begin a list of items that is indented by
++\fIamount\fR characters. (Some translators may ignore \fIamount\fR.)
++.TP 5
++\f(CW=item\fR \fItext\fR
++Add an item to the latest list opened by \f(CW=over\fR. It is illegal to
++use \f(CW=item\fR outside of any \f(CW=over\fR list. The text of the item
++is \fItext\fR. If you are creating a bulleted list, use `\f(CW*\fR' as the
++text; if you are creating a numbered list, use `\f(CW1.\fR', `\f(CW2.\fR',
++and so forth.
++.TP 5
++\f(CW=back\fR
++Close the latest list opened by \f(CW=over\fR.
++.TP 5
++\f(CW=for\fR \fIformat\fR
++'
++Output the next paragraph only when generating documentation in
++\fIformat\fR. Valid \fIformat\fRs include `html', `man', and `roff'. The
++paragraph ends at the next command or blank line, and it consists of text
++in the given format, not element documentation. For example, this code
++includes a picture in HTML mode:
++.nf
++   =for html
++   <p>Here is a pretty picture:
++   <img src="pretty.gif"></p>
++
++   Back to B<normal text> here.
++.fi
++.TP 5
++\f(CW=begin\fR \fIformat\fR ... \f(CW=end\fR \fIformat\fR
++'
++This is like \f(CW=for\fR, but can encompass multiple paragraphs. It
++outputs text in between the \f(CW=begin\fR command and the \f(CW=end\fR
++command only when generating documentation in \fIformat\fR.
++.TP 5
++\f(CW=deprecated\fR \fInew-element\fR
++This command notes that the element has been deprecated in favor of
++\fInew-element\fR. It does not result in any output.
++'
++.SH TEXT
++Each line that doesn't begin with `\f(CW=\fR' and a lower-case letter is
++treated as text. (Unless it starts with a space or tab; see verbatim text,
++below.) This text is formatted nicely, and perhaps even justified. You can
++use several formatting commands inside normal text; they consist of an
++uppercase letter, followed by `\f(CW<\fR', some text, and `\f(CW>\fR'. The
++commands are:
++.TP 10
++\f(CWB<\fItext\fR\f(CW>\fR
++Print \fItext\fR in \fBboldface\fR.
++.TP 10
++\f(CWI<\fItext\fR\f(CW>\fR
++Print \fItext\fR in \fIitalic\fR.
++.TP 10
++\f(CWR<\fItext\fR\f(CW>\fR
++Print \fItext\fR in \fRroman\fR. Useful inside \f(CWB<...>\fR and so forth,
++or to prevent words from being highlighted.
++.TP 10
++\f(CWC<\fItext\fR\f(CW>\fR
++Print \fItext\fR like source code, in a constant-width font.
++.TP 10
++\f(CWF<\fItext\fR\f(CW>\fR
++Print \fItext\fR like a filename. By default, filenames appear in italics.
++.TP 10
++\f(CWL<\fItext\fR|\fIlink\fR\f(CW>\fR
++Print \fItext\fR as a hyperlink with destination \fIlink\fR. This usually
++just comes out as \fItext\fR.
++.TP 10
++\f(CWN<>\fR
++Put a line break here.
++.TP 10
++\f(CWE<\fIname\fR\f(CW>\fR
++'
++Print the HTML-style entity named \fIname\fR. There are six entities:
++\f(CWE<lt>\fR is `<', \f(CWE<gt>\fR is `>', \f(CWE<amp>\fR is `&',
++\f(CWE<solid>\fR is `/', \f(CWE<verbar>\fR is `|', \f(CWE<star>\fR is `*',
++and \f(CWE<eq>\fR is `='. This is useful for typing one of these characters
++in a context that would seem like a command or formatting command.
++.TP 10
++\f(CWV<\fItext\fR\f(CW>\fR
++Do not print \fItext\fR.
++'
++.SH VERBATIM TEXT
++Lines that start with a space or tab character are printed out
++verbatim\*Ethat is, without any changes, and with the line breaks and
++indentation you specified. You can't use formatting commands
++in verbatim text. Verbatim text is useful for showing example code; for
++example:
++.PP
++.nf
++  This code
++     q :: Queue;
++     ... -> RED(5, 50, 0.02) -> q -> ...
++  adds RED dropping to q.
++.fi
++'
++.SH EXAMPLES
++.nf
++/* =c
++ * Align(MODULUS, OFFSET)
++ * =s modification
++ * aligns packet data
++ * =d
++ * Aligns packet data. Each input packet is aligned so that
++ * its first byte is OFFSET bytes off from a MODULUS-byte
++ * boundary. This may involve a packet copy.
++ *
++ * MODULUS I<must> be 2, 4, or 8.
++ * =n
++ * The click-align(1) tool will insert this element 
++ * automatically wherever it is required.
++ * =e
++ *   ... -> Align(4, 0) -> ...
++ * =a AlignmentInfo, click-align(1) */
++.fi
++.PP
++.nf
++/* =c
++ * Counter([TYPE])
++ * =s measurement
++ * measures packet count and rate
++ * =d
++ * Passes packets unchanged from its input to its output,
++ * maintaining statistics information about packet count and
++ * rate if TYPE is "packets", or byte count and byte rate if
++ * TYPE is "bytes". The default TYPE is "packets".
++ * =h count read-only
++ * Returns the number of packets/bytes that have passed through.
++ * =h rate read-only
++ * Returns the recent arrival rate (measured by exponential
++ * weighted moving average) in packets/bytes per second.
++ * =h reset write-only
++ * Resets the count and rate to zero.
++ */
++.fi
++'
++.SH "SEE ALSO"
++.M perlpod 1 ,
++.M click 1 ,
++.M click 5
++.SH AUTHOR
++.na
++Eddie Kohler, kohler@cs.ucla.edu
++.br
++Robert Morris, rtm@lcs.mit.edu
++.br
++http://www.pdos.lcs.mit.edu/click/
++'
+diff -Nurb click-1.6.0/inst/share/man/man8/click.o.8 click-1.6.0-27/inst/share/man/man8/click.o.8
+--- click-1.6.0/inst/share/man/man8/click.o.8  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/man8/click.o.8       2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,345 @@
++.\" -*- mode: nroff -*-
++.ds V 1.5
++.ds D 15/Dec/2006
++.ds E " \-\- 
++.if t .ds E \(em
++.de Sp
++.if n .sp
++.if t .sp 0.4
++..
++.de Es
++.Sp
++.RS 5
++.nf
++..
++.de Ee
++.fi
++.RE
++.PP
++..
++.de Rs
++.RS
++.Sp
++..
++.de Re
++.Sp
++.RE
++..
++.de M
++.BR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RB "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH CLICK.O 8 "\*D" "Version \*V"
++.SH NAME
++click.o \- Click kernel module driver for Linux
++'
++.SH DESCRIPTION
++'
++The Click modular router can be compiled as a Linux kernel module, called
++.BR click.o .
++It can steal packets from network devices before Linux gets a chance to
++handle them, send packets directly to devices, and send packets to Linux
++for normal processing.
++.PP
++The right way to load the Click kernel module is with
++.M click-install 1 ". "
++This installs the module if necessary, mounts the Click file system onto
++the /click directory, and installs a configuration, including any required
++packages.  The right way to unload the Click kernel module is with
++.M click-uninstall 1 ". "
++For example:
++.sp
++.nf
++   # click-install config.click
++   # click-uninstall
++.fi
++'
++.SH "HANDLERS"
++The module's API is a filesystem similar to the
++.M proc 5
++filesystem.  Click creates a number of files under /click (or wherever you
++have mounted the filesystem), some read-only and some read/write (writable
++by the superuser). You control the module by writing to these files, which
++are called
++.IR handlers .
++.PP
++.B click-install
++installs a router configuration by writing it to /click/config or
++/click/hotconfig.  The configuration can use most of Click's element classes
++(see
++.M elements n ).
++Several element classes control how the module receives and transmits
++packets:
++.M FromDevice n
++and
++.M PollDevice n
++steal packets from devices before Linux processes them,
++.M ToDevice n
++sends packets directly to devices, and
++.M ToHost n
++sends packets to Linux for normal processing. Removing the module or
++installing a null configuration will restore your machine's default
++networking behavior.
++.PP
++The handlers under /click include:
++.TP 5
++.B /click/config
++Read/write.  Contains a Click-language description (see
++.M click 5 )
++of the most recent router configuration, not including any run-time
++reconfiguration.
++.B click-install
++writes a Click-language router description to this file to
++install a new router configuration.
++'
++.TP
++.B /click/hotconfig
++Write-only. 
++.B 'click-install -h'
++writes a Click-language router description to this file to
++hot-swap install a new router configuration. The new router is installed
++only if it initializes correctly; otherwise, error messages will be
++reported to /click/errors, but the old router will keep working
++without interruption. If the new router initializes successfully, state
++from the old router, such as any packets stored in
++.M Queue n
++elements, will be moved into the new router before it is installed. This
++happens on a per-element basis, and it only works if the new element and
++the old element have the same name. In contrast,
++/click/config always throws away the old router.
++'
++.TP
++.B /click/errors
++Read-only. Errors reported by the Click router since the last
++reconfiguration (that is, the last write to /click/config or
++/click/hotconfig). Errors are also printed to the system log. Only the most
++recent 2-4KB of error messages are saved in this file.
++'
++.TP
++.B /click/messages
++Read-only. All messages printed by the Click router since the last
++reconfiguration (that is, the last write to /click/config or
++/click/hotconfig). This includes messages generated by Print, among
++others. Messages are also printed to the system log. Only the most recent
++2-4KB of messages are saved in this file.
++'
++.TP
++.B /click/classes
++Read-only. The primitive element classes supported by the router, listed
++one per line.
++'
++.TP
++.B /click/list
++Read-only. The names of the elements in the current router configuration,
++listed one per line. The first line is an integer: the number of elements.
++'
++.TP
++.B /click/flatconfig
++Read-only. A Click-language description of the current router
++configuration, including the effects of any run-time reconfiguration. All
++element declarations come first, then all connections. Compound elements
++are expanded into their primitive components.
++'
++.TP
++.B /click/packages
++Read-only. The packages that are currently linked to the Click module,
++listed one per line.
++'
++.TP
++.B /click/requirements
++Read-only. The packages required by the current configuration, listed one
++per line.
++'
++.TP
++.B /click/cycles, /click/meminfo
++Read-only. Cycle count and memory usage statistics.
++'
++.TP
++.B /click/threads
++Read-only. The PIDs of any currently running Click kernel threads, listed
++one per line.
++'
++.TP
++.B /click/priority
++Read/write. The CPU priority for Click kernel threads. Lower values have
++higher priority.
++'
++.TP
++.B /click/version
++Read-only. The kernel module's version number.
++'
++.PP
++When compiled with --enable-adaptive, Click provides three additional
++handlers:
++'
++.TP
++.B /click/min_cpu_share
++Read/write. The minimum fraction of CPU time Click will use, even if it has
++no work to do. Expressed as a real number between 0.001 and 0.999. Default
++is 0.005. Raising this number will help Click in polling mode respond more
++quickly to network events.
++'
++.TP
++.B /click/max_cpu_share
++Read/write. The maximum fraction of CPU time Click will use, no matter how
++much work it has to do. Expressed as a real number between 0.001 and 0.999.
++Default is 0.8. Lowering this number will help user-level programs make
++progress, even under high network load.
++'
++.TP
++.B /click/cpu_share
++Read-only. The fraction of CPU time Click is currently using, expressed as
++a real number between 0 and 1.
++'
++.PP
++When compiled with --enable-kassert, Click provides one additional
++handler:
++'
++.TP
++.B /click/assert_stop
++Read/write. A Boolean value. If true, then Click will attempt to stop the
++running router, if any, if an assertion fails. Default is false.
++'
++.SS "Element directories"
++'
++Every element in the current router configuration has a directory under
++/click. You can access the directory by number or element name. The
++.IR i th
++element in /click/list has directory
++.RI `/click/ i ',
++and if the element is named
++.IR n ,
++that directory can be accessed as
++.RI `/click/ n '.
++This works even if the name contains slashes 
++.RB ( click.o
++creates directories for each name component). However, if an element name
++conflicts with a handler name, the handler is preferred. Thus, if you call
++an element "config", you will be able to access that element's handlers
++only via its number directory.
++.PP
++Handlers in these element directories include:
++'
++.TP 5
++.BI /click/xxx/class
++Read-only. The element's class.
++.TP
++.BI /click/xxx/name
++Read-only. The element's name.
++.TP
++.BI /click/xxx/config
++Read/write if the element supports run-time reconfiguration; otherwise
++read-only. The element's current configuration. Writing to this file (if it
++is writable) causes the element to reconfigure itself on the fly. If the
++reconfiguration fails, the element's old configuration is used instead.
++.TP
++.BI /click/xxx/ports
++Read-only. Describes the element's input and output ports: how many there
++are, their processing type, and (for pull inputs and push outputs) what
++they are connected to.
++.TP
++.BI /click/xxx/handlers
++Read-only. Lists the element's handlers, one per line. Each line has the
++handler name and, after a tab, a permissions word. The permissions word is
++currently "r" (read-only), "w" (write-only), or "rw" (read/write).
++'
++.PP
++Elements that have associated tasks often provide these two additional
++handlers:
++'
++.TP 5
++.BI /click/xxx/scheduled
++Read-only. A Boolean value: "true" if the element is currently on the task
++list, "false" if it is not.
++.TP
++.BI /click/xxx/tickets
++Read/write. Returns or sets the element's tickets, an integer that
++influences task scheduling priority. The more tickets a task has, the more
++often it will be scheduled relative to other tasks.
++'
++.PP
++Particular elements may add additional handlers to their directories. For
++example, RED elements (see
++.M RED n )
++add read/write
++.BR min_thresh ", " max_thresh ", and " max_p
++files representing RED parameters, and Counter elements (see
++.M Counter n )
++provide read-only
++.BR count " and " rate
++files to report packet counts and the recent rate.
++.PP
++The subdirectories and generic files are always created, but
++element-specific files are created only if the router configuration was
++initialized successfully.
++'
++.SH "MANUAL LOADING"
++You almost certainly should load Click using 
++.M click-install 1 ". "
++Nevertheless, the manual loading steps are as follows.
++.TP 3
++1.
++Load the
++.B proclikefs
++module with
++.M insmod 8 :
++"/sbin/insmod proclikefs.ko". This module takes charge of the Click
++filesystem, allowing you to safely unload the Click module even if
++user-level programs have Click control files open. 
++.TP
++2.
++Load the
++.B click
++module with
++.BR insmod :
++"/sbin/insmod click.ko".
++.TP
++3.
++Mount the Click filesystem on a directory using
++.M mount 8 ". "
++The usual choice is /click: "mount -t click none /click".  The Click kernel
++module installs a symbolic link from /proc/click to /click.
++.TP
++4.
++Install a configuration by writing it to /click/config:
++"cat CONFIGFILE > /click/config", for example.
++.LP
++To uninstall Click without
++.M click-uninstall 1 ,
++kill the current router by installing an empty configuration ("echo >
++/click/config"), unload any element packages, and finally
++.M rmmod 8
++the "click" module.
++'
++.SH "BUGS"
++If you get an unaligned access error, try running your configuration
++through
++.M click-align 1
++before installing it.
++'
++.SH "SEE ALSO"
++.M click 1 ,
++.M click-align 1 ,
++.M click-install 1 ,
++.M click-uninstall 1 ,
++.M insmod 1 ,
++.M rmmod 1 ,
++.M click 5 ,
++.M elements n ,
++.M FromDevice n ,
++.M PollDevice n ,
++.M ToDevice n ,
++.M FromHost n ,
++.M ToHost n ,
++.M Queue n
++'
++.SH AUTHOR
++.na
++Eddie Kohler, kohler@cs.ucla.edu
++.br
++Robert Morris, rtm@lcs.mit.edu
++.br
++http://www.pdos.lcs.mit.edu/click/
++'
+diff -Nurb click-1.6.0/inst/share/man/mann/ARPFaker.n click-1.6.0-27/inst/share/man/mann/ARPFaker.n
+--- click-1.6.0/inst/share/man/mann/ARPFaker.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ARPFaker.n      2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,50 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ethernet/arpfaker.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ARPFAKER" n "11/Feb/2009" "Click"
++.SH "NAME"
++ARPFaker \- Click element;
++periodically generates an ARP reply
++.SH "SYNOPSIS"
++\fBARPFaker\fR(DSTIP, DSTETH, SRCIP, SRCETH)
++
++\fBPorts\fR: no inputs, 1 output
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: ethernet (core)
++.br
++.SH "DESCRIPTION"
++Every 10 seconds,
++sends an ARP "reply" packet to DSTIP/DSTETH claiming that SRCIP has ethernet
++address SRCETH. Generates the ethernet header as well as the
++ARP header.
++.PP
++
++.SH "EXAMPLES"
++Sends ARP packets to 18.26.4.1 (with ether addr 0:e0:2b:b:1a:0)
++claiming that 18.26.4.99's ethernet address is 00:a0:c9:9c:fd:9c.
++.PP
++.nf
++\&  ARPFaker(18.26.4.1, 0:e0:2b:b:1a:0, 18.26.4.99, 00:a0:c9:9c:fd:9c)
++\&     -> ToDevice(eth0);
++.fi
++.PP
++
++
++
++.SH "NOTES"
++You probably want to use 
++.M ARPResponder "n" 
++rather than \fBARPFaker\fR.
++.PP
++
++.SH "SEE ALSO"
++.M ARPQuerier n ,
++.M ARPResponder "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ARPPrint.n click-1.6.0-27/inst/share/man/mann/ARPPrint.n
+--- click-1.6.0/inst/share/man/mann/ARPPrint.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ARPPrint.n      2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,45 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ethernet/arpprint.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ARPPRINT" n "11/Feb/2009" "Click"
++.SH "NAME"
++ARPPrint \- Click element;
++pretty-prints ARP packets a la tcpdump
++.SH "SYNOPSIS"
++\fBARPPrint\fR([TAG, \fIKEYWORDS\fR])
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: ethernet (core)
++.br
++.SH "DESCRIPTION"
++Expects ARP packets as input.  
++.PP
++Prints out ARP packets in a human-readable tcpdump-like format, preceded by
++the TAG text.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "TIMESTAMP" 2
++Boolean. Determines whether to print each packet's timestamp in seconds since
++1970. Default is true.
++.IP "" 2
++.IP "OUTFILE" 2
++String. Only available at user level. Print information to the file specified
++by OUTFILE instead of standard error.
++.IP "" 2
++.PP
++
++.SH "SEE ALSO"
++.M Print n ,
++.M CheckARPHeader "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ARPQuerier.n click-1.6.0-27/inst/share/man/mann/ARPQuerier.n
+--- click-1.6.0/inst/share/man/mann/ARPQuerier.n       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ARPQuerier.n    2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,119 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ethernet/arpquerier.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ARPQUERIER" n "11/Feb/2009" "Click"
++.SH "NAME"
++ARPQuerier \- Click element;
++encapsulates IP packets in Ethernet headers found via ARP
++.SH "SYNOPSIS"
++\fBARPQuerier\fR(IP, ETH, \fIkeywords\fR)
++.br
++\fBARPQuerier\fR(NAME, \fIkeywords\fR)
++
++\fBPorts\fR: 2 inputs, 1-2 outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: ethernet (core)
++.br
++.SH "DESCRIPTION"
++Handles most of the ARP protocol. Argument IP should be
++this host's IP address, and ETH should be this host's
++Ethernet address. (In
++the one-argument form, NAME should be shorthand for
++both an IP and an Ethernet address; see 
++.M AddressInfo n .)
++.PP
++Packets arriving on input 0 should be IP packets, and must have their
++destination address annotations set.
++If an Ethernet address is already known
++for the destination, the IP packet is wrapped in an Ethernet
++header and sent to output 0. Otherwise the IP packet is saved and
++an ARP query is sent instead. If an ARP response arrives
++on input 1 for an IP address that we need, the mapping is
++recorded and any saved IP packets are sent.
++.PP
++The ARP reply packets on input 1 should include the Ethernet header.
++.PP
++\fBARPQuerier\fR may have one or two outputs. If it has two, then ARP queries
++are sent to the second output.
++.PP
++\fBARPQuerier\fR will not send queries for packets addressed to 0.0.0.0,
++255.255.255.255, or, if specified, any BROADCAST address.  Packets addressed
++to 0.0.0.0 are dropped; packets for broadcast addresses are forwarded with
++destination Ethernet address FF:FF:FF:FF:FF:FF.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "CAPACITY" 8
++Unsigned integer.  The maximum number of saved IP packets the element will
++hold at a time.  Default is 2048.  Note that, unlike the number of packets,
++the total number of ARP entries the element will hold is currently unlimited.
++.IP "" 8
++.IP "BROADCAST" 8
++IP address.  Local broadcast IP address.  Packets sent to this address will be
++forwarded to Ethernet address FF:FF:FF:FF:FF:FF.  Defaults to the local
++broadcast address that can be extracted from the IP address's corresponding
++prefix, if any.
++.IP "" 8
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\&   c :: Classifier(12/0806 20/0002, 12/0800, ...);
++\&   a :: ARPQuerier(18.26.4.24, 00:00:C0:AE:67:EF);
++\&   c[0] -> a[1];
++\&   c[1] -> ... -> a[0];
++\&   a[0] -> ... -> ToDevice(eth0);
++.fi
++.PP
++
++
++
++.SH "NOTES"
++If a host has multiple interfaces, it will need multiple
++instances of \fBARPQuerier\fR.
++.PP
++\fBARPQuerier\fR uses packets' destination IP address annotations, and can destroy
++their next packet annotations.
++.PP
++\fBARPQuerier\fR will send at most 10 queries a second for any IP address.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBipaddr\fR (read/write)" 5
++Returns or sets the \fBARPQuerier\fR's source IP address.
++.IP "" 5
++.IP "\fBtable\fR (read-only)" 5
++Returns a textual representation of the ARP table.
++.IP "" 5
++.IP "\fBstats\fR (read-only)" 5
++Returns textual statistics (queries and drops).
++.IP "" 5
++.IP "\fBqueries\fR (read-only)" 5
++Returns the number of queries sent.
++.IP "" 5
++.IP "\fBresponses\fR (read-only)" 5
++Returns the number of responses received.
++.IP "" 5
++.IP "\fBdrops\fR (read-only)" 5
++Returns the number of packets dropped.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M ARPResponder n ,
++.M ARPFaker n ,
++.M AddressInfo "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ARPResponder.n click-1.6.0-27/inst/share/man/mann/ARPResponder.n
+--- click-1.6.0/inst/share/man/mann/ARPResponder.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ARPResponder.n  2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,66 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ethernet/arpresponder.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ARPRESPONDER" n "11/Feb/2009" "Click"
++.SH "NAME"
++ARPResponder \- Click element;
++generates responses to ARP queries
++.SH "SYNOPSIS"
++\fBARPResponder\fR(IP/MASK1 [IP/MASK...] ETH1, IP/MASK2 ETH2, ...)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: ethernet (core)
++.br
++.SH "DESCRIPTION"
++Input should be ARP request packets, including the Ethernet header.
++Forwards an ARP reply if we know the answer -- that is, if one of the
++IPPREFIX arguments matches the requested IP address, then it outputs an ARP
++reply giving the corresponding ETH address. Could be used for proxy ARP as
++well as producing replies for a host's own address.
++.PP
++The IP/MASK arguments are IP network addresses (IP address/netmask pairs).
++The netmask can be specified in CIDR form (`\f(CW18.26.7.0/24\fR') or dotted
++decimal form (`\f(CW18.26.7.0/255.255.255.0\fR').
++.PP
++\fBARPResponder\fR sets the device annotations on generated ARP responses to the
++device annotations from the corresponding queries.
++.PP
++
++.SH "NOTES"
++.M AddressInfo "n" 
++elements can simplify the arguments to \fBARPResponder\fR. In
++particular, if \f(CWNAME\fR is shorthand for both an IP network address (or IP
++address) \f(CWIP\fR and an Ethernet address \f(CWETH\fR, then \f(CWARPResponder(NAME)\fR is
++equivalent to \f(CWARPResponder(IP ETH)\fR. If \f(CWNAME\fR is short for both an IP
++address and an IP network address, then \fBARPResponder\fR will prefer the IP
++address. (You can say \f(CWNAME:ipnet\fR to use the IP network address.)
++.PP
++
++.SH "EXAMPLES"
++Produce ARP replies for the local machine (18.26.4.24)
++as well as proxy ARP for all machines on net 18.26.7
++directing their packets to the local machine:
++.PP
++.nf
++\&  c :: Classifier(12/0806 20/0001, ...);
++\&  ar :: ARPResponder(18.26.4.24 18.26.7.0/24 00:00:C0:AE:67:EF);
++\&  c[0] -> ar;
++\&  ar -> ToDevice(eth0);
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M ARPQuerier n ,
++.M ARPFaker n ,
++.M AddressInfo "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/AdaptiveRED.n click-1.6.0-27/inst/share/man/mann/AdaptiveRED.n
+--- click-1.6.0/inst/share/man/mann/AdaptiveRED.n      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/AdaptiveRED.n   2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,40 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/aqm/adaptivered.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ADAPTIVERED" n "11/Feb/2009" "Click"
++.SH "NAME"
++AdaptiveRED \- Click element;
++drops packets according to Adaptive RED
++.SH "SYNOPSIS"
++\fBAdaptiveRED\fR(TARGET, MAX_P [, \fIKEYWORDS\fR])
++
++\fBPorts\fR: 1 input, 1-2 outputs
++.br
++\fBProcessing\fR: agnostic, but output 1 is push
++.br
++\fBPackage\fR: aqm (core)
++.br
++.SH "DESCRIPTION"
++Implements the Adaptive Random Early Detection packet dropping algorithm. This
++algorithm implements Random Early Detection, as by the 
++.M RED "n" 
++element, plus
++automatic parameter setting.
++.PP
++The TARGET argument is the target queue length. 
++.M RED "n" 's
++MIN_THRESH parameter
++is set to TARGET/2, and MAX_THRESH to 3*TARGET/2. The MAX_P parameter, and
++QUEUES and STABILITY keywords, are as in the 
++.M RED "n" 
++element.
++.PP
++
++.SH "SEE ALSO"
++.M RED "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/AddressInfo.n click-1.6.0-27/inst/share/man/mann/AddressInfo.n
+--- click-1.6.0/inst/share/man/mann/AddressInfo.n      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/AddressInfo.n   2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,85 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../include/click/standard/addressinfo.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ADDRESSINFO" n "11/Feb/2009" "Click"
++.SH "NAME"
++AddressInfo \- Click element;
++specifies address information
++.SH "SYNOPSIS"
++\fBAddressInfo\fR(NAME ADDRESS [ADDRESS...], ...)
++
++\fBPorts\fR: None
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Lets you use mnemonic names for IPv4 and IPv6 addresses, IPv4 and IPv6
++address prefixes, and Ethernet addresses. Each argument has the form `NAME
++ADDRESS [ADDRESS...]', which associates the given ADDRESSes with NAME. For
++example, if a configuration contains this \fBAddressInfo\fR element,
++.PP
++.nf
++\&   AddressInfo(mauer 10.0.0.1, mazu 10.0.0.10);
++.fi
++.PP
++then other configuration strings can use \f(CWmauer\fR and \f(CWmazu\fR as mnemonics
++for the IP addresses 10.0.0.1 and 10.0.0.10, respectively.
++.PP
++The mnemonic names introduced by \fBAddressInfo\fR elements are local with
++respect to compound elements. That is, names created inside a compound
++element apply only within that compound element and its subelements. For
++example:
++.PP
++.nf
++\&   AddressInfo(mauer 10.0.0.1);
++\&   compound :: {
++\&     AddressInfo(mazu 10.0.0.10);
++\&     ... -> IPEncap(6, mauer, mazu) -> ...  // OK
++\&   };
++\&   ... -> IPEncap(6, mauer, mazu) -> ...    // error: `mazu' undefined
++.fi
++.PP
++Any name can be simultaneously associated with an IP address, an IP network
++address, and an Ethernet address. The kind of address that is returned is
++generally determined from context. For example:
++.PP
++.nf
++\&   AddressInfo(mauer 10.0.0.1/8 00:50:BA:85:84:A9);
++\&   ... -> IPEncap(6, mauer, ...)                  // as IP address
++\&       -> EtherEncap(0x0800, mauer, ...) -> ...   // as Ethernet address
++\&   ... -> ARPResponder(mauer) -> ...              // as IP prefix AND Ethernet address!
++.fi
++.PP
++An optional suffix makes the context unambiguous. \f(CWNAME\fR is an ambiguous
++reference to some address, but \f(CWNAME:ip\fR is always an IPv4 address,
++\f(CWNAME:ipnet\fR is always an IPv4 network address (IPv4 address prefix),
++\f(CWNAME:ip6\fR is always an IPv6 address, \f(CWNAME:ip6net\fR is always an IPv6
++network address, and \f(CWNAME:eth\fR is always an Ethernet address.
++.PP
++
++
++.SH "DEFAULT ADDRESSES"
++If you do not define an address for a given name, \fBAddressInfo\fR will use the
++default, if any.  Defaults are as follows:
++.PP
++
++
++.IP "*" 2
++If DEVNAME is the name of an Ethernet device, then \f(CWDEVNAME:eth\fR defaults to
++DEVNAME's Ethernet address.  (At userlevel, this works only on BSD and Linux.)
++.IP "" 2
++.IP "*" 2
++\f(CWDEVNAME:ip\fR defaults to the first primary IPv4 address associated with the
++device DEVNAME.
++.IP "" 2
++.PP
++These defaults are not available on all platforms.
++.PP
++.SH "SEE ALSO"
++.M PortInfo "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Align.n click-1.6.0-27/inst/share/man/mann/Align.n
+--- click-1.6.0/inst/share/man/mann/Align.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Align.n 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,48 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/align.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ALIGN" n "11/Feb/2009" "Click"
++.SH "NAME"
++Align \- Click element;
++aligns packet data
++.SH "SYNOPSIS"
++\fBAlign\fR(MODULUS, OFFSET)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Aligns packet data. Each input packet is aligned so that its first byte is
++OFFSET bytes off from a MODULUS-byte boundary. This may involve a packet
++copy.
++.PP
++MODULUS must be 2, 4, or 8.
++
++.SH "NOTES"
++The 
++.M click-align 1 
++tool will insert this element automatically wherever it
++is required.
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\&  ... -> Align(4, 0) -> ...
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M AlignmentInfo n ,
++click-align(1)
++
+diff -Nurb click-1.6.0/inst/share/man/mann/AlignmentInfo.n click-1.6.0-27/inst/share/man/mann/AlignmentInfo.n
+--- click-1.6.0/inst/share/man/mann/AlignmentInfo.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/AlignmentInfo.n 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,36 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../include/click/standard/alignmentinfo.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ALIGNMENTINFO" n "11/Feb/2009" "Click"
++.SH "NAME"
++AlignmentInfo \- Click element;
++specifies alignment information
++.SH "SYNOPSIS"
++\fBAlignmentInfo\fR(ELEMENT [MODULUS OFFSET ...], ...)
++
++\fBPorts\fR: None
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Provides information about the packet alignment specified elements can
++expect. Each configuration argument has the form
++`ELEMENT [MODULUS0 OFFSET0 MODULUS1 OFFSET1 ...]',
++where there are zero or more MODULUS-OFFSET pairs.
++All packets arriving at ELEMENT's
++\fIn\fRth input will start `OFFSET\fIn\fR' bytes
++off from a `MODULUS\fIn\fR'-byte boundary.
++
++.SH "NOTES"
++This element is inserted automatically by 
++.M click-align 1 .
++
++.SH "SEE ALSO"
++.M Align n ,
++click-align(1)
++
+diff -Nurb click-1.6.0/inst/share/man/mann/AverageCounter.n click-1.6.0-27/inst/share/man/mann/AverageCounter.n
+--- click-1.6.0/inst/share/man/mann/AverageCounter.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/AverageCounter.n        2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,54 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/averagecounter.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "AVERAGECOUNTER" n "11/Feb/2009" "Click"
++.SH "NAME"
++AverageCounter \- Click element;
++measures historical packet count and rate
++.SH "SYNOPSIS"
++\fBAverageCounter\fR([IGNORE])
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Passes packets unchanged from its input to its
++output, maintaining statistics information about
++packet count and packet rate using a strict average.
++.PP
++The rate covers only the time between the first and
++most recent packets. 
++.PP
++IGNORE, by default, is 0. If it is greater than 0,
++the first IGNORE number of seconds are ignored in
++the count.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBcount\fR (read-only)" 5
++Returns the number of packets that have passed through since the last reset.
++.IP "" 5
++.IP "\fBbyte_count\fR (read-only)" 5
++Returns the number of packets that have passed through since the last reset.
++.IP "" 5
++.IP "\fBrate\fR (read-only)" 5
++Returns packet arrival rate.
++.IP "" 5
++.IP "\fBbyte_rate\fR (read-only)" 5
++Returns packet arrival rate in bytes per second.  (Beware overflow!)
++.IP "" 5
++.IP "\fBreset\fR (write-only)" 5
++Resets the count and rate to zero.
++.PP
++
+diff -Nurb click-1.6.0/inst/share/man/mann/BandwidthMeter.n click-1.6.0-27/inst/share/man/mann/BandwidthMeter.n
+--- click-1.6.0/inst/share/man/mann/BandwidthMeter.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/BandwidthMeter.n        2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,59 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/bandwidthmeter.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "BANDWIDTHMETER" n "11/Feb/2009" "Click"
++.SH "NAME"
++BandwidthMeter \- Click element;
++classifies packet stream by arrival rate
++.SH "SYNOPSIS"
++\fBBandwidthMeter\fR(RATE1, RATE2, ..., RATE\fIn\fR)
++
++\fBPorts\fR: 1 input, 2 or more outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Classifies packet stream based on the rate of packet arrival.  The rate
++is measured in bytes per second using an exponential weighted moving
++average.  (The related 
++.M Meter "n" 
++element measures rates in packets per
++second.)
++.PP
++The configuration string consists of one or more RATE arguments.  Each
++RATE is a bandwidth, such as "384 kbps".  Earlier
++rates in the list must be less than later rates. A 
++.M Meter "n" 
++with \fIn\fR rate
++arguments will have \fIn\fR+1 outputs. It sends packets out the output
++corresponding to the current rate. If the rate is less than RATE1
++packets are sent to output 0; if it is >= RATE1 but < RATE2, packets are
++sent to output 1; and so on. If it is >= RATE\fIn\fR, packets are sent to
++output \fIn\fR.
++.PP
++
++.SH "EXAMPLES"
++This configuration fragment drops the input stream when it is generating
++more than 20,000 bytes per second.
++.PP
++.nf
++\&  ... -> m :: BandwidthMeter(20kBps) -> ...;
++\&  m[1] -> Discard;
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M Meter n ,
++.M BandwidthShaper n ,
++.M Shaper n ,
++.M RatedSplitter "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/BandwidthRatedSplitter.n click-1.6.0-27/inst/share/man/mann/BandwidthRatedSplitter.n
+--- click-1.6.0/inst/share/man/mann/BandwidthRatedSplitter.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/BandwidthRatedSplitter.n        2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,46 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/bwratedsplitter.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "BANDWIDTHRATEDSPLITTER" n "11/Feb/2009" "Click"
++.SH "NAME"
++BandwidthRatedSplitter \- Click element;
++splits flow of packets at specified bandwidth rate
++.SH "SYNOPSIS"
++\fBBandwidthRatedSplitter\fR(RATE)
++
++\fBPorts\fR: 1 input, 2 outputs
++.br
++\fBProcessing\fR: Push
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++\fBBandwidthRatedSplitter\fR has two output ports.  All incoming packets up to a
++maximum of RATE are emitted on output port 0.  Any remaining packets are
++emitted on output port 1.  RATE is a bandwidth, such as "384 kbps".
++Unlike 
++.M BandwidthMeter "n" ,
++the base RATE is emitted on output port
++0 even when the input rate is greater than RATE.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBrate\fR (read/write)" 5
++rate of splitting
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M RatedSplitter n ,
++.M BandwidthMeter n ,
++.M BandwidthShaper n ,
++.M BandwidthRatedUnqueue "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/BandwidthRatedUnqueue.n click-1.6.0-27/inst/share/man/mann/BandwidthRatedUnqueue.n
+--- click-1.6.0/inst/share/man/mann/BandwidthRatedUnqueue.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/BandwidthRatedUnqueue.n 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,32 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/bwratedunqueue.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "BANDWIDTHRATEDUNQUEUE" n "11/Feb/2009" "Click"
++.SH "NAME"
++BandwidthRatedUnqueue \- Click element;
++pull-to-push converter
++.SH "SYNOPSIS"
++\fBBandwidthRatedUnqueue\fR(RATE)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: Pull inputs, push outputs
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Pulls packets at the given bandwidth RATE, and pushes them out its single
++output.  RATE is a bandwidth, such as "384 kbps".
++.PP
++
++.SH "SEE ALSO"
++.M RatedUnqueue n ,
++.M Unqueue n ,
++.M BandwidthShaper n ,
++.M BandwidthRatedSplitter "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/BandwidthShaper.n click-1.6.0-27/inst/share/man/mann/BandwidthShaper.n
+--- click-1.6.0/inst/share/man/mann/BandwidthShaper.n  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/BandwidthShaper.n       2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,43 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/bandwidthshaper.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "BANDWIDTHSHAPER" n "11/Feb/2009" "Click"
++.SH "NAME"
++BandwidthShaper \- Click element;
++shapes traffic to maximum rate (bytes/s) 
++.SH "SYNOPSIS"
++\fBBandwidthShaper\fR(RATE)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: Pull
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++\fBBandwidthShaper\fR is a pull element that allows a maximum bandwidth of
++RATE to pass through.  That is, output traffic is shaped to RATE.
++If a \fBBandwidthShaper\fR receives a large number of
++evenly-spaced pull requests, then it will emit packets at the specified
++RATE with low burstiness.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBrate\fR (read/write)" 5
++Returns or sets the RATE parameter.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M Shaper n ,
++.M BandwidthRatedSplitter n ,
++.M BandwidthRatedUnqueue "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Burster.n click-1.6.0-27/inst/share/man/mann/Burster.n
+--- click-1.6.0/inst/share/man/mann/Burster.n  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Burster.n       2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,35 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/burster.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "BURSTER" n "11/Feb/2009" "Click"
++.SH "NAME"
++Burster \- Click element;
++pull-to-push converter
++.SH "SYNOPSIS"
++\fBBurster\fR(INTERVAL, BURST)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: pull inputs, push outputs
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Pulls BURST packets each INTERVAL (seconds) from its input.
++Pushes them out its single output. The interval can be
++a floating point number.  Default BURST is 8.
++.PP
++There are usually Queues both upstream and downstream
++of \fBBurster\fR elements.
++.PP
++
++.SH "NOTES"
++The UNIX and Linux timers have granularity of about 10
++milliseconds, so this \fBBurster\fR can only produce high packet
++rates by being bursty.
++
+diff -Nurb click-1.6.0/inst/share/man/mann/CPUQueue.n click-1.6.0-27/inst/share/man/mann/CPUQueue.n
+--- click-1.6.0/inst/share/man/mann/CPUQueue.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/CPUQueue.n      2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,35 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/linuxmodule/cpuqueue.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "CPUQUEUE" n "11/Feb/2009" "Click"
++.SH "NAME"
++CPUQueue \- Click element;
++stores packets in FIFO queues.
++.SH "SYNOPSIS"
++CPUQueue
++.br
++\fBCPUQueue\fR(CAPACITY)
++
++\fBPorts\fR: 1 input, 1 or more outputs
++.br
++\fBProcessing\fR: push inputs, pull outputs
++.br
++\fBDrivers\fR: linuxmodule
++.br
++\fBPackage\fR: linuxmodule (core)
++.br
++.SH "DESCRIPTION"
++Stores incoming packets in a first-in-first-out queue. Each CPU has its own
++queue. The incoming packet is always enqueued onto the queue of the CPU
++calling the push method. Drops incoming packets if the queue already holds
++CAPACITY packets. The default for CAPACITY is 128.
++.PP
++
++.SH "SEE ALSO"
++.M Queue "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/CPUSwitch.n click-1.6.0-27/inst/share/man/mann/CPUSwitch.n
+--- click-1.6.0/inst/share/man/mann/CPUSwitch.n        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/CPUSwitch.n     2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,32 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/linuxmodule/cpuswitch.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "CPUSWITCH" n "11/Feb/2009" "Click"
++.SH "NAME"
++CPUSwitch \- Click element;
++classifies packets by cpu
++.SH "SYNOPSIS"
++\fBCPUSwitch\fR()
++
++\fBPorts\fR: 1 input, 1 or more outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBDrivers\fR: linuxmodule
++.br
++\fBPackage\fR: linuxmodule (core)
++.br
++.SH "DESCRIPTION"
++Can have any number of outputs.
++Chooses the output on which to emit each packet based on the thread's cpu.
++
++.SH "SEE ALSO"
++.M RoundRobinSwitch n ,
++.M StrideSwitch n ,
++.M HashSwitch "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ChangeUID.n click-1.6.0-27/inst/share/man/mann/ChangeUID.n
+--- click-1.6.0/inst/share/man/mann/ChangeUID.n        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ChangeUID.n     2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,42 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/userlevel/changeuid.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "CHANGEUID" n "11/Feb/2009" "Click"
++.SH "NAME"
++ChangeUID \- Click element;
++relinquish root privilege
++.SH "SYNOPSIS"
++\fBChangeUID\fR()
++
++\fBPorts\fR: none
++.br
++\fBDrivers\fR: userlevel
++.br
++\fBPackage\fR: userlevel (core)
++.br
++.SH "DESCRIPTION"
++Sets the current process's effective user and group IDs to its real user and
++group IDs, respectively.  This relinquishes any set-uid-root privilege.
++.PP
++
++.SH "NOTES"
++\fBChangeUID\fR's configure phase is set so that it runs immediately after the
++"privileged" elements FromDevice.u and ToDevice.u, but before most other
++elements.  Thus, this configuration:
++.PP
++.nf
++\&   f1 :: FromDevice(eth0) -> ...
++\&   f2 :: FromDump(/tmp/x) -> ...
++\&   ChangeUID()
++.fi
++.PP
++should fail to initialize if the user cannot read file \fI/tmp/x\fR.  However,
++your mileage may vary.  Set-uid-root programs are a bad idea, and Click is no
++exception.
++
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ChatterSocket.n click-1.6.0-27/inst/share/man/mann/ChatterSocket.n
+--- click-1.6.0/inst/share/man/mann/ChatterSocket.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ChatterSocket.n 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,101 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/userlevel/chattersocket.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "CHATTERSOCKET" n "11/Feb/2009" "Click"
++.SH "NAME"
++ChatterSocket \- Click element;
++reports chatter messages to connected sockets
++.SH "SYNOPSIS"
++\fBChatterSocket\fR("TCP", PORTNUMBER [, \fIKEYWORDS\fR])
++.br
++\fBChatterSocket\fR("UNIX", FILENAME [, \fIKEYWORDS\fR])
++
++\fBPorts\fR: none
++.br
++\fBDrivers\fR: userlevel
++.br
++\fBPackage\fR: userlevel (core)
++.br
++.SH "DESCRIPTION"
++Opens a chatter socket that allows other user-level programs to receive copies
++of router chatter traffic. Depending on its configuration string,
++\fBChatterSocket\fR will listen on TCP port PORTNUMBER, or on a UNIX-domain socket
++named FILENAME.
++.PP
++The "server" (that is, the \fBChatterSocket\fR element) simply echoes any messages
++generated by the router configuration to any existing "clients". The server
++does not read any data from its clients.
++.PP
++When a connection is opened, \fBChatterSocket\fR responds by stating its protocol
++version number with a line like "Click::ChatterSocket/1.0\\r\\n". The current
++version number is 1.0.
++.PP
++\fBChatterSocket\fR broadcasts copies of messages generated by the default
++ErrorHandler or the \f(CWclick_chatter\fR function. Most elements report messages
++or run-time errors using one of these mechanisms.
++.PP
++If a client falls more than 500,000 bytes behind, \fBChatterSocket\fR automatically
++closes its connection.
++.PP
++\fBChatterSocket\fR supports hot-swapping, meaning you can change configurations
++without interrupting existing clients. The hot-swap will succeed only if the
++old \fBChatterSocket\fR and the new \fBChatterSocket\fR have the same element name, and
++the same socket type, port/filename, and chatter channel parameters.
++Additionally, the new \fBChatterSocket\fR must have RETRIES set to 1 or more, since
++the old \fBChatterSocket\fR has already bound the relevant socket.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "CHANNEL" 8
++Text word. The socket outputs messages sent to this chatter channel. Default
++is the default channel, which corresponds to \f(CWclick_chatter()\fR.
++.IP "" 8
++Channels help you organize extensive debugging output. For example, you could
++send extremely verbose messages to a `\f(CWverbose\fR' channel, then only connect
++to that channel when you want verbosity.
++.IP "" 8
++To send messages to a particular channel, you should fetch the ErrorHandler
++object corresponding to that channel, using the Router member function
++\f(CWRouter::chatter_channel(const String &channel_name)\fR.
++.IP "" 8
++.IP "QUIET_CHANNEL" 8
++Boolean. Messages sent to a non-default channel are not normally printed on
++standard error. If QUIET_CHANNEL is false, however, the channel's messages do
++go to standard error, along with chatter messages. Default is true.
++.IP "" 8
++.IP "GREETING" 8
++Boolean. Determines whether the \f(CWClick::ChatterSocket/1.0\fR greeting is sent.
++Default is true.
++.IP "" 8
++.IP "RETRIES" 8
++Integer. If greater than 0, \fBChatterSocket\fR won't immediately fail when it can't
++open its socket. Instead, it will attempt to open the socket once a second
++until it succeeds, or until RETRIES unsuccessful attempts (after which it will
++stop the router). Default is 0.
++.IP "" 8
++.IP "RETRY_WARNINGS" 8
++Boolean. If true, \fBChatterSocket\fR will print warning messages every time it
++fails to open a socket. If false, it will print messages only on the final
++failure. Default is true.
++.IP "" 8
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\&  ChatterSocket(unix, /tmp/clicksocket);
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M ControlSocket "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/CheckARPHeader.n click-1.6.0-27/inst/share/man/mann/CheckARPHeader.n
+--- click-1.6.0/inst/share/man/mann/CheckARPHeader.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/CheckARPHeader.n        2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,71 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ethernet/checkarpheader.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "CHECKARPHEADER" n "11/Feb/2009" "Click"
++.SH "NAME"
++CheckARPHeader \- Click element;
++checks ARP header
++.SH "SYNOPSIS"
++\fBCheckARPHeader\fR([OFFSET, \fIkeywords\fR OFFSET, VERBOSE, DETAILS])
++
++\fBPorts\fR: 1 input, 1-2 outputs
++.br
++\fBProcessing\fR: agnostic, but output 1 is push
++.br
++\fBPackage\fR: ethernet (core)
++.br
++.SH "DESCRIPTION"
++Input packets should have ARP headers starting OFFSET bytes in. Default OFFSET
++is zero. Checks that the packet's length is reasonable.
++.PP
++\fBCheckARPHeader\fR emits valid packets on output 0. Invalid packets are pushed out
++on output 1, unless output 1 was unused; if so, drops invalid packets.
++.PP
++\fBCheckARPHeader\fR prints a message to the console the first time it encounters an
++incorrect ARP packet (but see VERBOSE below).
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "OFFSET" 5
++Unsigned integer. Byte position at which the ARP header begins. Default is 0.
++.IP "" 5
++.IP "VERBOSE" 5
++Boolean. If it is true, then a message will be printed for every erroneous
++packet, rather than just the first. False by default.
++.IP "" 5
++.IP "DETAILS" 5
++Boolean. If it is true, then \fBCheckARPHeader\fR will maintain detailed counts of
++how many packets were dropped for each possible reason, accessible through the
++\f(CWdrop_details\fR handler. False by default.
++.IP "" 5
++.PP
++
++.SH "NOTES"
++
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBdrops\fR (read-only)" 5
++Returns the number of incorrect packets \fBCheckARPHeader\fR has seen.
++.IP "" 5
++.IP "\fBdrop_details\fR (read-only)" 5
++Returns a text file showing how many erroneous packets \fBCheckARPHeader\fR has seen,
++subdivided by error. Only available if the DETAILS keyword argument was true.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M ARPPrint n ,
++.M ARPQuerier n ,
++.M ARPResponder n ,
++.M ARPFaker "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/CheckCRC32.n click-1.6.0-27/inst/share/man/mann/CheckCRC32.n
+--- click-1.6.0/inst/share/man/mann/CheckCRC32.n       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/CheckCRC32.n    2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,31 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/checkcrc32.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "CHECKCRC32" n "11/Feb/2009" "Click"
++.SH "NAME"
++CheckCRC32 \- Click element;
++checks packet CRC32s
++.SH "SYNOPSIS"
++\fBCheckCRC32\fR()
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Check that the CRC32 appended by 
++.M SetCRC32 "n" 
++is OK.
++If so, delete the CRC from the packet.
++Otherwise, drop the packet.
++
++.SH "SEE ALSO"
++.M SetCRC32 "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/CheckICMPHeader.n click-1.6.0-27/inst/share/man/mann/CheckICMPHeader.n
+--- click-1.6.0/inst/share/man/mann/CheckICMPHeader.n  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/CheckICMPHeader.n       2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,63 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/icmp/checkicmpheader.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "CHECKICMPHEADER" n "11/Feb/2009" "Click"
++.SH "NAME"
++CheckICMPHeader \- Click element;
++checks ICMP header on ICMP packets
++.SH "SYNOPSIS"
++\fBCheckICMPHeader\fR([\fIKEYWORDS\fR])
++
++\fBPorts\fR: 1 input, 1-2 outputs
++.br
++\fBProcessing\fR: agnostic, but output 1 is push
++.br
++\fBPackage\fR: icmp (core)
++.br
++.SH "DESCRIPTION"
++Expects ICMP packets as input. Checks that the packet's length is sensible
++and that its checksum field is valid. Pushes invalid packets out on output
++1, unless output 1 was unused; if so, drops invalid packets.
++.PP
++Prints a message to the console the first time it encounters an incorrect IP
++packet (but see VERBOSE below).
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "VERBOSE" 5
++Boolean. If it is true, then a message will be printed for every erroneous
++packet, rather than just the first. False by default.
++.IP "" 5
++.IP "DETAILS" 5
++Boolean. If it is true, then \fBCheckICMPHeader\fR will maintain detailed counts of
++how many packets were dropped for each possible reason, accessible through the
++\f(CWdrop_details\fR handler. False by default.
++.IP "" 5
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBdrops\fR (read-only)" 5
++Returns the number of incorrect packets \fBCheckICMPHeader\fR has seen.
++.IP "" 5
++.IP "\fBdrop_details\fR (read-only)" 5
++Returns a text file showing how many erroneous packets \fBCheckICMPHeader\fR has seen,
++subdivided by error. Only available if the DETAILS keyword argument was true.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M CheckIPHeader n ,
++.M CheckTCPHeader n ,
++.M CheckUDPHeader n ,
++.M MarkIPHeader "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/CheckIPHeader.n click-1.6.0-27/inst/share/man/mann/CheckIPHeader.n
+--- click-1.6.0/inst/share/man/mann/CheckIPHeader.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/CheckIPHeader.n 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,119 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/checkipheader.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "CHECKIPHEADER" n "11/Feb/2009" "Click"
++.SH "NAME"
++CheckIPHeader \- Click element;
++checks IP header
++.SH "SYNOPSIS"
++\fBCheckIPHeader\fR([OFFSET, \fIkeywords\fR OFFSET, INTERFACES, BADSRC,
++.br
++.nf
++\&                       GOODDST, CHECKSUM, VERBOSE, DETAILS])
++.fi
++.PP
++
++
++
++\fBPorts\fR: 1 input, 1-2 outputs
++.br
++\fBProcessing\fR: agnostic, but output 1 is push
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Input packets should have IP headers starting OFFSET bytes in. Default OFFSET
++is zero. Checks that the packet's length is reasonable, and that the IP
++version, header length, length, and checksum fields are valid. Checks that the
++IP source address is a legal unicast address, or that the packet is destined
++for one of this machine's addresses (see below). Shortens packets to the IP
++length, if the IP length is shorter than the nominal packet length (due to
++Ethernet padding, for example). Also sets the destination IP address
++annotation to the actual destination IP address.
++.PP
++\fBCheckIPHeader\fR emits valid packets on output 0. Invalid packets are pushed out
++on output 1, unless output 1 was unused; if so, drops invalid packets.
++.PP
++\fBCheckIPHeader\fR checks packets' source addresses for validity if one or more of
++the INTERFACES, BADSRC, and GOODDST keyword arguments are supplied (RFC1812
++5.3.7).
++.PP
++\fBCheckIPHeader\fR prints a message to the console the first time it encounters an
++incorrect IP packet (but see VERBOSE below).
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "CHECKSUM" 5
++Boolean. If true, then check each packet's checksum for validity; if false, do
++not check the checksum. Default is true.
++.IP "" 5
++.IP "OFFSET" 5
++Unsigned integer. Byte position at which the IP header begins. Default is 0.
++.IP "" 5
++.IP "BADSRC" 5
++Space-separated list of IP addresses. \fBCheckIPHeader\fR will drop packets whose
++source address is on this list (but see GOODDST below). Default is empty.
++.IP "" 5
++.IP "GOODDST" 5
++Space-separated list of IP addresses. \fBCheckIPHeader\fR exempts packets whose
++destination address is on this list from BADSRC processing. Default is empty.
++.IP "" 5
++.IP "INTERFACES" 5
++Space-separated list of IP addresses with network prefixes, meant to represent
++this router's interface addresses. This argument specifies both BADSRC and
++GOODDST. Specifically, the argument "INTERFACES 18.26.4.9/24 18.32.9.44/28"
++acts like a BADSRC of "18.26.4.255 18.32.9.47 0.0.0.0 255.255.255.255" -- the
++set of broadcast addresses for this router -- and a GOODDST of "18.26.4.9
++18.32.9.44". Default is not given.
++.IP "" 5
++.IP "VERBOSE" 5
++Boolean. If it is true, then a message will be printed for every erroneous
++packet, rather than just the first. False by default.
++.IP "" 5
++.IP "DETAILS" 5
++Boolean. If it is true, then \fBCheckIPHeader\fR will maintain detailed counts of
++how many packets were dropped for each possible reason, accessible through the
++\f(CWdrop_details\fR handler. False by default.
++.IP "" 5
++.PP
++
++.SH "NOTES"
++\fBCheckIPHeader\fR supports an old configuration syntax:
++.PP
++\fBCheckIPHeader\fR([BADSRC2, OFFSET, \fIkeywords\fR])
++.PP
++The BADSRC2 argument behaves like the BADSRC keyword, except that if you use
++this syntax, 0.0.0.0 and 255.255.255.255 considered bad addresses in addition
++to those explicitly in the list. This syntax is deprecated and should not be
++used in new configurations.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBdrops\fR (read-only)" 5
++Returns the number of incorrect packets \fBCheckIPHeader\fR has seen.
++.IP "" 5
++.IP "\fBdrop_details\fR (read-only)" 5
++Returns a text file showing how many erroneous packets \fBCheckIPHeader\fR has seen,
++subdivided by error. Only available if the DETAILS keyword argument was true.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M CheckIPHeader2 n ,
++.M MarkIPHeader n ,
++.M SetIPChecksum n ,
++.M StripIPHeader n ,
++.M CheckTCPHeader n ,
++.M CheckUDPHeader n ,
++.M CheckICMPHeader "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/CheckIPHeader2.n click-1.6.0-27/inst/share/man/mann/CheckIPHeader2.n
+--- click-1.6.0/inst/share/man/mann/CheckIPHeader2.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/CheckIPHeader2.n        2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,33 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/checkipheader2.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "CHECKIPHEADER2" n "11/Feb/2009" "Click"
++.SH "NAME"
++CheckIPHeader2 \- Click element;
++checks IP header, no checksum
++.SH "SYNOPSIS"
++\fBCheckIPHeader2\fR([OFFSET, \fIkeywords\fR])
++
++\fBPorts\fR: 1 input, 1-2 outputs
++.br
++\fBProcessing\fR: agnostic, but output 1 is push
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++This element behaves exactly like 
++.M CheckIPHeader "n" ,
++except that it does not by
++default check packets' IP checksums.
++.PP
++
++.SH "SEE ALSO"
++.M CheckIPHeader n ,
++.M StripIPHeader n ,
++.M MarkIPHeader "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/CheckLength.n click-1.6.0-27/inst/share/man/mann/CheckLength.n
+--- click-1.6.0/inst/share/man/mann/CheckLength.n      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/CheckLength.n   2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,26 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/checklength.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "CHECKLENGTH" n "11/Feb/2009" "Click"
++.SH "NAME"
++CheckLength \- Click element;
++drops large packets
++.SH "SYNOPSIS"
++\fBCheckLength\fR(LENGTH)
++
++\fBPorts\fR: 1 input, 1-2 outputs
++.br
++\fBProcessing\fR: agnostic, but output 1 is push
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++\fBCheckLength\fR checks every packet's length against LENGTH. If the packet is
++no larger than LENGTH, it is sent to output 0; otherwise, it is sent to
++output 1 (or dropped if there is no output 1).
++
+diff -Nurb click-1.6.0/inst/share/man/mann/CheckPaint.n click-1.6.0-27/inst/share/man/mann/CheckPaint.n
+--- click-1.6.0/inst/share/man/mann/CheckPaint.n       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/CheckPaint.n    2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,31 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/checkpaint.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "CHECKPAINT" n "11/Feb/2009" "Click"
++.SH "NAME"
++CheckPaint \- Click element;
++checks packets' paint annotation
++.SH "SYNOPSIS"
++\fBCheckPaint\fR(COLOR)
++
++\fBPorts\fR: 1 input, 1-2 outputs
++.br
++\fBProcessing\fR: agnostic, but output 1 is push
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Checks that incoming packets have paint annotation equal to COLOR. If their
++paints are not equal to COLOR, then they are dropped or emitted on output 1,
++depending on how many outputs were used.
++.PP
++
++.SH "SEE ALSO"
++.M Paint n ,
++.M PaintTee "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/CheckTCPHeader.n click-1.6.0-27/inst/share/man/mann/CheckTCPHeader.n
+--- click-1.6.0/inst/share/man/mann/CheckTCPHeader.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/CheckTCPHeader.n        2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,64 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/tcpudp/checktcpheader.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "CHECKTCPHEADER" n "11/Feb/2009" "Click"
++.SH "NAME"
++CheckTCPHeader \- Click element;
++checks TCP header on TCP/IP packets
++.SH "SYNOPSIS"
++\fBCheckTCPHeader\fR([\fIKEYWORDS\fR])
++
++\fBPorts\fR: 1 input, 1-2 outputs
++.br
++\fBProcessing\fR: agnostic, but output 1 is push
++.br
++\fBPackage\fR: tcpudp (core)
++.br
++.SH "DESCRIPTION"
++Expects TCP/IP packets as input. Checks that the TCP header length and
++checksum fields are valid. Pushes invalid packets out on output 1, unless
++output 1 was unused; if so, drops invalid packets.
++.PP
++Prints a message to the console the first time it encounters an incorrect
++packet (but see VERBOSE below).
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "VERBOSE" 5
++Boolean. If it is true, then a message will be printed for every erroneous
++packet, rather than just the first. False by default.
++.IP "" 5
++.IP "DETAILS" 5
++Boolean. If it is true, then \fBCheckTCPHeader\fR will maintain detailed counts of
++how many packets were dropped for each possible reason, accessible through the
++\f(CWdrop_details\fR handler. False by default.
++.IP "" 5
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBdrops\fR (read-only)" 5
++Returns the number of incorrect packets \fBCheckTCPHeader\fR has seen.
++.IP "" 5
++.IP "\fBdrop_details\fR (read-only)" 5
++Returns a text file showing how many erroneous packets \fBCheckTCPHeader\fR has
++seen, subdivided by error. Only available if the DETAILS keyword argument was
++true.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M CheckIPHeader n ,
++.M CheckUDPHeader n ,
++.M CheckICMPHeader n ,
++.M MarkIPHeader "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/CheckUDPHeader.n click-1.6.0-27/inst/share/man/mann/CheckUDPHeader.n
+--- click-1.6.0/inst/share/man/mann/CheckUDPHeader.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/CheckUDPHeader.n        2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,64 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/tcpudp/checkudpheader.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "CHECKUDPHEADER" n "11/Feb/2009" "Click"
++.SH "NAME"
++CheckUDPHeader \- Click element;
++checks UDP header on UDP/IP packets
++.SH "SYNOPSIS"
++\fBCheckUDPHeader\fR([\fIKEYWORDS\fR])
++
++\fBPorts\fR: 1 input, 1-2 outputs
++.br
++\fBProcessing\fR: agnostic, but output 1 is push
++.br
++\fBPackage\fR: tcpudp (core)
++.br
++.SH "DESCRIPTION"
++Expects UDP/IP packets as input. Checks that the UDP header length and
++checksum fields are valid. Pushes invalid packets out on output 1, unless
++output 1 was unused; if so, drops invalid packets.
++.PP
++Prints a message to the console the first time it encounters an incorrect
++packet (but see VERBOSE below).
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "VERBOSE" 5
++Boolean. If it is true, then a message will be printed for every erroneous
++packet, rather than just the first. False by default.
++.IP "" 5
++.IP "DETAILS" 5
++Boolean. If it is true, then \fBCheckUDPHeader\fR will maintain detailed counts of
++how many packets were dropped for each possible reason, accessible through the
++\f(CWdrop_details\fR handler. False by default.
++.IP "" 5
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBdrops\fR (read-only)" 5
++Returns the number of incorrect packets \fBCheckUDPHeader\fR has seen.
++.IP "" 5
++.IP "\fBdrop_details\fR (read-only)" 5
++Returns a text file showing how many erroneous packets \fBCheckUDPHeader\fR has
++seen, subdivided by error. Only available if the DETAILS keyword argument was
++true.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M CheckIPHeader n ,
++.M CheckTCPHeader n ,
++.M CheckICMPHeader n ,
++.M MarkIPHeader "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Classifier.n click-1.6.0-27/inst/share/man/mann/Classifier.n
+--- click-1.6.0/inst/share/man/mann/Classifier.n       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Classifier.n    2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,105 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/classifier.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "CLASSIFIER" n "11/Feb/2009" "Click"
++.SH "NAME"
++Classifier \- Click element;
++classifies packets by contents
++.SH "SYNOPSIS"
++\fBClassifier\fR(pattern1, ..., patternN)
++
++\fBPorts\fR: 1 input, any number of outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Classifies packets. The \fBClassifier\fR has N outputs, each associated with the
++corresponding pattern from the configuration string.
++A pattern is a set of clauses, where each clause is either "offset/value"
++or "offset/value%mask". A pattern matches if the packet has the indicated
++value at each offset.
++.PP
++The clauses in each pattern are separated
++by spaces. A clause consists of the offset, "/", the value, and (optionally)
++"%" and a mask. The offset is in decimal. The value and mask are in hex.
++The length of the value is implied by the number of hex digits, which must
++be even. "?" is also allowed as a "hex digit"; it means "don't care about
++the value of this nibble".
++.PP
++If present, the mask must have the same number of hex digits as the value.
++The matcher will only check bits that are 1 in the mask.
++.PP
++A clause may be preceded by "!", in which case the clause must NOT match
++the packet.
++.PP
++As a special case, a pattern consisting of "-" matches every packet.
++.PP
++The patterns are scanned in order, and the packet is sent to the output
++corresponding to the first matching pattern. Thus more specific patterns
++should come before less specific ones. You will get a warning if no packet
++could ever match a pattern. Usually, this is because an earlier pattern is
++more general, or because your pattern is contradictory (`12/0806 12/0800').
++.PP
++
++.SH "NOTES"
++The 
++.M IPClassifier "n" 
++and 
++.M IPFilter "n" 
++elements have a friendlier syntax if you are
++classifying IP packets.
++.PP
++
++.SH "EXAMPLES"
++For example,
++.PP
++.nf
++\&  Classifier(12/0806 20/0001,
++\&             12/0806 20/0002,
++\&             12/0800,
++\&             -);
++.fi
++.PP
++creates an element with four outputs intended to process
++Ethernet packets.
++ARP requests are sent to output 0, ARP replies are sent to
++output 1, IP packets to output 2, and all others to output 3.
++.PP
++
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBprogram\fR (read-only)" 5
++Returns a human-readable definition of the program the \fBClassifier\fR element
++is using to classify packets. At each step in the program, four bytes
++of packet data are ANDed with a mask and compared against four bytes of
++classifier pattern.
++.IP "" 5
++The \fBClassifier\fR patterns above compile into the following program:
++.IP "" 5
++.nf
++\&  0  12/08060000%ffff0000  yes->step 1  no->step 3
++\&  1  20/00010000%ffff0000  yes->[0]  no->step 2
++\&  2  20/00020000%ffff0000  yes->[1]  no->[3]
++\&  3  12/08000000%ffff0000  yes->[2]  no->[3]
++\&  safe length 22
++\&  alignment offset 0
++.fi
++.IP "" 5
++
++
++.PP
++
++.SH "SEE ALSO"
++.M IPClassifier n ,
++.M IPFilter "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/CompareBlock.n click-1.6.0-27/inst/share/man/mann/CompareBlock.n
+--- click-1.6.0/inst/share/man/mann/CompareBlock.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/CompareBlock.n  2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,62 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/compblock.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "COMPAREBLOCK" n "11/Feb/2009" "Click"
++.SH "NAME"
++CompareBlock \- Click element;
++drops packets out of rate range
++.SH "SYNOPSIS"
++\fBCompareBlock\fR(FWD_WEIGHT, REV_WEIGHT, THRESH)
++
++\fBPorts\fR: 1 input, 2 outputs
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++FWD_WEIGHT, REV_WEIGHT, and THRESH are integers
++.PP
++Splits packets based on the fwd_rate_anno and rev_rate_anno rate annotations
++set by 
++.M IPRateMonitor "n" .
++If either annotation is greater than THRESH,
++and FWD_WEIGHT*fwd_rate_anno > REV_WEIGHT*rev_rate_anno, 
++the packet is pushed on output 1, otherwise on output 0.
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\&  b :: CompareBlock(5, 2, 100);
++.fi
++.PP
++if (5*fwd_rate > 2*rev_rate) AND (fwd_rate > 100 or rev_rate > 100), send
++packet out on output 1, otherwise on output 0.
++.PP
++
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBfwd_weight\fR (read/write)" 5
++value of FWD_WEIGHT
++.IP "" 5
++.IP "\fBrev_weight\fR (read/write)" 5
++value of REV_WEIGHT
++.IP "" 5
++.IP "\fBthresh\fR (read/write)" 5
++value of THRESH
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M Block n ,
++.M IPRateMonitor "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ControlSocket.n click-1.6.0-27/inst/share/man/mann/ControlSocket.n
+--- click-1.6.0/inst/share/man/mann/ControlSocket.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ControlSocket.n 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,181 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/userlevel/controlsocket.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "CONTROLSOCKET" n "11/Feb/2009" "Click"
++.SH "NAME"
++ControlSocket \- Click element;
++opens control sockets for other programs
++.SH "SYNOPSIS"
++\fBControlSocket\fR("TCP", PORTNUMBER [, \fIKEYWORDS\fR])
++.br
++\fBControlSocket\fR("UNIX", FILENAME [, \fIKEYWORDS\fR])
++
++\fBPorts\fR: none
++.br
++\fBDrivers\fR: userlevel
++.br
++\fBPackage\fR: userlevel (core)
++.br
++.SH "DESCRIPTION"
++Opens a control socket that allows other user-level programs to call read or
++write handlers on the router. Depending on its configuration string,
++\fBControlSocket\fR will listen on TCP port PORTNUMBER, or on a UNIX-domain socket
++named FILENAME. With the PROXY keyword argument, you can make \fBControlSocket\fR speak to
++a kernel driver; see below.
++.PP
++The "server" (that is, the \fBControlSocket\fR element) speaks a relatively
++simple line-based protocol. Commands sent to the server are single lines of
++text; they consist of words separated by spaces. The server responds to
++every command with at least one message line followed optionally by some
++data. Message lines start with a three-digit response code, as in FTP. When
++multiple message lines are sent in response to a single command, all but
++the last begin with the response code and a hyphen (as in "200-Hello!");
++the last line begins with the response code and a space (as in "200
++Hello!").
++.PP
++The server will accept lines terminated by CR, LF, or CRLF. Its response
++lines are always terminated by CRLF.
++.PP
++When a connection is opened, the server responds by stating its protocol
++version number with a line like "Click::ControlSocket/1.1". The current
++version number is 1.1. Changes in minor version number will only add commands
++and functionality to this specification, not change existing functionality.
++.PP
++\fBControlSocket\fR supports hot-swapping, meaning you can change configurations
++without interrupting existing clients. The hot-swap will succeed only if the
++old \fBControlSocket\fR and the new \fBControlSocket\fR have the same element name, and
++the same socket type and port/filename parameters. Additionally, the new
++\fBControlSocket\fR must have RETRIES set to 1 or more, since the old \fBControlSocket\fR
++has already bound the relevant socket.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "READONLY" 8
++Boolean.  Disallows write handlers if true (it is false by
++default). 
++.IP "" 8
++.IP "PROXY" 8
++String. Specifies an element proxy. When a user requests the value of handler
++E.H, \fBControlSocket\fR will actually return the value of `PROXY.E.H'. This is
++useful with elements like 
++.M KernelHandlerProxy "n" .
++Default is empty (no proxy).
++.IP "" 8
++.IP "VERBOSE" 8
++Boolean. When true, \fBControlSocket\fR will print messages whenever it accepts a
++new connection or drops an old one. Default is false.
++.IP "" 8
++.IP "RETRIES" 8
++Integer. If greater than 0, \fBControlSocket\fR won't immediately fail when it can't
++open its socket. Instead, it will attempt to open the socket once a second
++until it succeeds, or until RETRIES unsuccessful attempts (after which it will
++stop the router). Default is 0.
++.IP "" 8
++.IP "RETRY_WARNINGS" 8
++Boolean. If true, \fBControlSocket\fR will print warning messages every time it
++fails to open a socket. If false, it will print messages only on the final
++failure. Default is true.
++.IP "" 8
++.PP
++
++.SH "SERVER COMMANDS"
++The server currently supports the following six commands. Many of the commands
++take a \fIhandler\fR argument. These arguments name handlers, and take one of
++three forms: \f(CW\fIelementname\fR.\fIhandlername\fR\fR names a particular element's
++handler; \f(CW\fIelementnumber\fR.\fIhandlername\fR\fR also names an element handler, but
++the element is identified by index, starting from 1; and \f(CW\fIhandlername\fR\fR
++names a global handler. (There are seven global read handlers, named
++\f(CWversion\fR, \f(CWlist\fR, \f(CWclasses\fR, \f(CWconfig\fR, \f(CWflatconfig\fR, \f(CWpackages\fR, and
++\f(CWrequirements\fR. See click.o(8) for more information.)
++.PP
++
++
++.IP "READ \fIhandler\fR [\fIparams...\fR]" 5
++Call a read \fIhandler\fR, passing the \fIparams\fR, if any,
++as arguments, and return the results.
++On success, responds with a "success" message (response
++code 2xy) followed by a line like "DATA \fIn\fR". Here, \fIn\fR is a
++decimal integer indicating the length of the read handler data. The \fIn\fR
++bytes immediately following (the CRLF that terminates) the DATA line are
++the handler's results.
++.IP "" 5
++.IP "WRITE \fIhandler\fR \fIparams...\fR" 5
++Call a write \fIhandler\fR, passing the \fIparams\fR, if any, as arguments.
++.IP "" 5
++.IP "WRITEDATA \fIhandler\fR \fIn\fR" 5
++Call a write \fIhandler\fR. The arguments to pass are the \fIn\fR bytes immediately
++following (the CRLF that terminates) the WRITEDATA line.
++.IP "" 5
++.IP "CHECKREAD \fIhandler\fR" 5
++Checks whether a \fIhandler\fR exists and is readable. The return status is 200
++for readable handlers, and an appropriate error status for non-readable
++handlers or nonexistent handlers.
++.IP "" 5
++.IP "CHECKWRITE \fIhandler\fR" 5
++Checks whether a \fIhandler\fR exists and is writable.
++.IP "" 5
++.IP "LLRPC \fIllrpc\fR [\fIn\fR]" 5
++Call an LLRPC \fIllrpc\fR and return the results. \fILlrpc\fR should have the form
++\f(CW\fIelement\fR#\fIhexnumber\fR\fR. The \f(CW\fIhexnumber\fR\fR is the LLRPC number, from
++\f(CW<click/llrpc.h>\fR, in hexadecimal network format. Translate \f(CWCLICK_LLRPC\fR
++constants to network format by calling
++\f(CWCLICK_LLRPC_HTON(CLICK_LLRPC_...)\fR. If \fIn\fR is given, then the \fIn\fR bytes
++immediately following (the CRLF that terminates) the LLRPC line are passed in
++as an argument. The results are returned after a "DATA \fInn\fR" line, as in
++READ.
++.IP "" 5
++\fBControlSocket\fR will not call an LLRPC unless it can determine (from the command
++number) how much data the LLRPC expects and returns. (Only "flat" LLRPCs may
++be called; they are declared using the _CLICK_IOC_[RWS]F macros.)
++.IP "" 5
++.IP "QUIT" 5
++Close the connection.
++.IP "" 5
++.PP
++The server's response codes follow this pattern.
++.PP
++
++.IP "2xy" 5
++The command succeeded.
++.IP "" 5
++.IP "5xy" 5
++The command failed.
++.IP "" 5
++.PP
++Here are some of the particular error messages:
++.PP
++.nf
++\&  200 OK.
++\&  220 OK, but the handler reported some warnings.
++\&  500 Syntax error.
++\&  501 Unimplemented command.
++\&  510 No such element.
++\&  511 No such handler.
++\&  520 Handler error.
++\&  530 Permission denied.
++\&  540 No router installed.
++.fi
++.PP
++\fBControlSocket\fR is only available in user-level processes.
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\&  ControlSocket(unix, /tmp/clicksocket);
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M ChatterSocket n ,
++.M KernelHandlerProxy "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Counter.n click-1.6.0-27/inst/share/man/mann/Counter.n
+--- click-1.6.0/inst/share/man/mann/Counter.n  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Counter.n       2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,81 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/counter.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "COUNTER" n "11/Feb/2009" "Click"
++.SH "NAME"
++Counter \- Click element;
++measures packet count and rate
++.SH "SYNOPSIS"
++\fBCounter\fR([\fIkeywords COUNT_CALL, BYTE_COUNT_CALL\fR])
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Passes packets unchanged from its input to its output, maintaining statistics
++information about packet count and packet rate.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "COUNT_CALL" 8
++Argument is `\fIN\fR \fIHANDLER\fR [\fIVALUE\fR]'. When the packet count reaches \fIN\fR,
++call the write handler \fIHANDLER\fR with value \fIVALUE\fR.
++.IP "" 8
++.IP "BYTE_COUNT_CALL" 8
++Argument is `\fIN\fR \fIHANDLER\fR [\fIVALUE\fR]'. When the byte count reaches or
++exceeds \fIN\fR, call the write handler \fIHANDLER\fR with value \fIVALUE\fR.
++.IP "" 8
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBcount\fR (read-only)" 5
++Returns the number of packets that have passed through since the last reset.
++.IP "" 5
++.IP "\fBbyte_count\fR (read-only)" 5
++Returns the number of bytes that have passed through since the last reset.
++.IP "" 5
++.IP "\fBrate\fR (read-only)" 5
++Returns the recent arrival rate, measured by exponential
++weighted moving average, in packets per second.
++.IP "" 5
++.IP "\fBreset_counts\fR (write-only)" 5
++Resets the counts and rates to zero.
++.IP "" 5
++.IP "\fBreset\fR (write-only)" 5
++Same as 'reset_counts'.
++.IP "" 5
++.IP "\fBcount_call\fR (write-only)" 5
++Writes a new COUNT_CALL argument. The handler can be omitted.
++.IP "" 5
++.IP "\fBbyte_count_call\fR (write-only)" 5
++Writes a new BYTE_COUNT_CALL argument. The handler can be omitted.
++.IP "" 5
++.IP "\fBCLICK_LLRPC_GET_RATE\fR (llrpc)" 5
++Argument is a pointer to an integer that must be 0.  Returns the recent
++arrival rate (measured by exponential weighted moving average) in
++packets per second. 
++.IP "" 5
++.IP "\fBCLICK_LLRPC_GET_COUNT\fR (llrpc)" 5
++Argument is a pointer to an integer that must be 0 (packet count) or 1 (byte
++count). Returns the current packet or byte count.
++.IP "" 5
++.IP "\fBCLICK_LLRPC_GET_COUNTS\fR (llrpc)" 5
++Argument is a pointer to a click_llrpc_counts_st structure (see
++<click/llrpc.h>). The \f(CWkeys\fR components must be 0 (packet count) or 1 (byte
++count). Stores the corresponding counts in the corresponding \f(CWvalues\fR
++components.
++.PP
++
+diff -Nurb click-1.6.0/inst/share/man/mann/CycleCountAccum.n click-1.6.0-27/inst/share/man/mann/CycleCountAccum.n
+--- click-1.6.0/inst/share/man/mann/CycleCountAccum.n  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/CycleCountAccum.n       2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,60 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/linuxmodule/cyclecountaccum.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "CYCLECOUNTACCUM" n "11/Feb/2009" "Click"
++.SH "NAME"
++CycleCountAccum \- Click element;
++collects differences in cycle counters
++.SH "SYNOPSIS"
++\fBCycleCountAccum\fR()
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBDrivers\fR: linuxmodule
++.br
++\fBPackage\fR: linuxmodule (core)
++.br
++.SH "DESCRIPTION"
++Incoming packets should have their cycle counter annotation set.  Measures the
++current value of the cycle counter, and keeps track of the total accumulated
++difference.  Packets whose cycle counter annotations are zero are not added to
++the count or difference.
++.PP
++
++.SH "NOTES"
++A packet has room for either exactly one cycle count or exactly one
++performance metric.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBcount\fR (read-only)" 5
++Returns the number of packets that have passed.
++.IP "" 5
++.IP "\fBcycles\fR (read-only)" 5
++Returns the accumulated cycles for all passing packets.
++.IP "" 5
++.IP "\fBzero_count\fR (read-only)" 5
++Returns the number of packets with zero-valued cycle counter annotations that
++have passed.  These aren't included in the \f(CWcount\fR.
++.IP "" 5
++.IP "\fBreset_counts\fR (write-only)" 5
++Resets \f(CWcount\fR, \f(CWcycles\fR, and \f(CWzero_count\fR counters to zero when written.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M SetCycleCount n ,
++.M RoundTripCycleCount n ,
++.M SetPerfCount n ,
++.M PerfCountAccum "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/DRRSched.n click-1.6.0-27/inst/share/man/mann/DRRSched.n
+--- click-1.6.0/inst/share/man/mann/DRRSched.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/DRRSched.n      2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,40 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/drr.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "DRRSCHED" n "11/Feb/2009" "Click"
++.SH "NAME"
++DRRSched \- Click element;
++pulls from inputs with deficit round robin scheduling
++.SH "SYNOPSIS"
++DRRSched
++
++\fBPorts\fR: one output, zero or more inputs
++.br
++\fBProcessing\fR: pull
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Schedules packets with deficit round robin scheduling, from
++Shreedhar and Varghese's SIGCOMM 1995 paper "Efficient Fair
++Queuing using Deficit Round Robin."
++.PP
++The inputs usually come from Queues or other pull schedulers.
++\fBDRRSched\fR uses notification to avoid pulling from empty inputs.
++.PP
++
++.SH "NOTES"
++\fBDRRSched\fR is a notifier signal, active iff any of the upstream notifiers
++are active.
++.PP
++
++.SH "SEE ALSO"
++.M PrioSched n ,
++.M StrideSched n ,
++.M RoundRobinSched "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/DecIPTTL.n click-1.6.0-27/inst/share/man/mann/DecIPTTL.n
+--- click-1.6.0/inst/share/man/mann/DecIPTTL.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/DecIPTTL.n      2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,47 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/decipttl.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "DECIPTTL" n "11/Feb/2009" "Click"
++.SH "NAME"
++DecIPTTL \- Click element;
++decrements IP time-to-live, drops dead packets
++.SH "SYNOPSIS"
++DecIPTTL
++
++\fBPorts\fR: 1 input, 1-2 outputs
++.br
++\fBProcessing\fR: agnostic, but output 1 is push
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Expects IP packet as input.
++If the ttl is <= 1 (i.e. has expired),
++\fBDecIPTTL\fR sends the packet to output 1 (or discards it if there is no
++output 1).
++Otherwise it decrements the ttl, re-calculates the checksum,
++and sends the packet to output 0.
++.PP
++Ordinarily output 1 is connected to an ICMP error packet generator.
++.PP
++
++.SH "EXAMPLES"
++This is a typical IP input processing sequence:
++.PP
++.nf
++\&  ... -> CheckIPHeader -> dt::DecIPTTL -> ...
++\&  dt[1] -> ICMPError(18.26.4.24, 11, 0) -> ...
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M ICMPError n ,
++.M CheckIPHeader "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/DelayShaper.n click-1.6.0-27/inst/share/man/mann/DelayShaper.n
+--- click-1.6.0/inst/share/man/mann/DelayShaper.n      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/DelayShaper.n   2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,54 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/delayshaper.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "DELAYSHAPER" n "11/Feb/2009" "Click"
++.SH "NAME"
++DelayShaper \- Click element;
++shapes traffic to meet delay requirements
++.SH "SYNOPSIS"
++\fBDelayShaper\fR(DELAY)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: pull
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Pulls packets from the single input port. Delays them for at least DELAY
++seconds, with microsecond precision. A packet with timestamp T will be emitted
++no earlier than time (T + DELAY). On output, the packet's timestamp is set to
++the current time.
++.PP
++Differs from 
++.M DelayUnqueue "n" 
++in that both its input and output are pull. Packets
++being delayed are enqueued until the necessary time has passed. At most one
++packet is enqueued at a time. 
++.M DelayUnqueue "n" 
++returns null for every pull request
++until the enqueued packet is ready.
++.PP
++.M SetTimestamp "n" 
++element can be used to stamp the packet.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBdelay\fR (read/write)" 5
++Returns or sets the DELAY parameter.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M BandwidthShaper n ,
++.M DelayUnqueue n ,
++.M SetTimestamp "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/DelayUnqueue.n click-1.6.0-27/inst/share/man/mann/DelayUnqueue.n
+--- click-1.6.0/inst/share/man/mann/DelayUnqueue.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/DelayUnqueue.n  2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,40 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/delayunqueue.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "DELAYUNQUEUE" n "11/Feb/2009" "Click"
++.SH "NAME"
++DelayUnqueue \- Click element;
++delay inducing pull-to-push converter
++.SH "SYNOPSIS"
++\fBDelayUnqueue\fR(DELAY)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: pull inputs, push outputs
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Pulls packets from the single input port. Delays them for at least DELAY
++seconds, with microsecond precision. A packet with timestamp T will be emitted
++no earlier than time (T + DELAY). On output, the packet's timestamp is set to
++the current time.
++.PP
++\fBDelayUnqueue\fR listens for upstream notification, such as that available from
++.M Queue "n" .
++.PP
++
++.SH "SEE ALSO"
++.M Queue n ,
++.M Unqueue n ,
++.M RatedUnqueue n ,
++.M BandwidthRatedUnqueue n ,
++.M LinkUnqueue n ,
++.M DelayShaper n ,
++.M SetTimestamp "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/DirectIPLookup.n click-1.6.0-27/inst/share/man/mann/DirectIPLookup.n
+--- click-1.6.0/inst/share/man/mann/DirectIPLookup.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/DirectIPLookup.n        2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,98 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/directiplookup.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "DIRECTIPLOOKUP" n "11/Feb/2009" "Click"
++.SH "NAME"
++DirectIPLookup \- Click element;
++IP routing lookup using direct-indexed tables
++.SH "SYNOPSIS"
++\fBDirectIPLookup\fR(ADDR1/MASK1 [GW1] OUT1, ADDR2/MASK2 [GW2] OUT2, ...)
++
++\fBPorts\fR: 1 input, any number of outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBDrivers\fR: userlevel, bsdmodule
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Expects a destination IP address annotation with each packet. Looks up that
++address in its routing table, using longest-prefix-match, sets the destination
++annotation to the corresponding GW (if specified), and emits the packet on the
++indicated OUTput port.
++.PP
++Each argument is a route, specifying a destination and mask, an optional
++gateway IP address, and an output port.  No destination-mask pair should occur
++more than once.
++.PP
++\fBDirectIPLookup\fR is optimized for lookup speed at the expense of extensive RAM
++usage. Each longest-prefix lookup is accomplished in one to maximum two DRAM
++accesses, regardless on the number of routing table entries. Individual
++entries can be dynamically added to or removed from the routing table with
++relatively low CPU overhead, allowing for high update rates.
++.PP
++\fBDirectIPLookup\fR implements the \fIDIR-24-8-BASIC\fR lookup scheme described by
++Gupta, Lin, and McKeown in the paper cited below.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBtable\fR (read-only)" 5
++Outputs a human-readable version of the current routing table.
++.IP "" 5
++.IP "\fBlookup\fR (read-only)" 5
++Reports the OUTput port and GW corresponding to an address.
++.IP "" 5
++.IP "\fBadd\fR (write-only)" 5
++Adds a route to the table. Format should be `\f(CWADDR/MASK [GW] OUT\fR'.
++Fails if a route for \f(CWADDR/MASK\fR already exists.
++.IP "" 5
++.IP "\fBset\fR (write-only)" 5
++Sets a route, whether or not a route for the same prefix already exists.
++.IP "" 5
++.IP "\fBremove\fR (write-only)" 5
++Removes a route from the table. Format should be `\f(CWADDR/MASK\fR'.
++.IP "" 5
++.IP "\fBctrl\fR (write-only)" 5
++Adds or removes a group of routes. Write `\f(CWadd\fR/\f(CWset ADDR/MASK [GW] OUT\fR' to
++add a route, and `\f(CWremove ADDR/MASK\fR' to remove a route. You can supply
++multiple commands, one per line; all commands are executed as one atomic
++operation.
++.IP "" 5
++.IP "\fBflush\fR (write-only)" 5
++Clears the entire routing table in a single atomic operation.
++.IP "" 5
++.PP
++
++.SH "NOTES"
++See 
++.M IPRouteTable "n" 
++for a performance comparison of the various IP routing
++elements.
++.PP
++\fBDirectIPLookup\fR's memory allocation does not work in the Linux kernel, because
++Linux uses a special function vmalloc() to allocate huge objects.  A useful
++project would be to make \fBDirectIPLookup\fR suitable for the Linux kernel module,
++by changing its memory allocation to use vmalloc().
++.PP
++
++.SH "SEE ALSO"
++.M IPRouteTable n ,
++.M RangeIPLookup n ,
++.M RadixIPLookup n ,
++.M StaticIPLookup n ,
++.M LinearIPLookup n ,
++.M SortedIPLookup n ,
++.M LinuxIPLookup n 
++.PP
++Pankaj Gupta, Steven Lin, and Nick McKeown.  "Routing Lookups in Hardware at
++Memory Access Speeds".  In Proc. IEEE Infocom 1998, Vol. 3, pp. 1240-1247.
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Discard.n click-1.6.0-27/inst/share/man/mann/Discard.n
+--- click-1.6.0/inst/share/man/mann/Discard.n  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Discard.n       2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,43 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/discard.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "DISCARD" n "11/Feb/2009" "Click"
++.SH "NAME"
++Discard \- Click element;
++drops all packets
++.SH "SYNOPSIS"
++\fBDiscard\fR
++
++\fBPorts\fR: 1 input, no outputs
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Discards all packets received on its single input. If used in a pull context,
++it initiates pulls whenever packets are available, and listens for activity
++notification, such as that available from 
++.M Queue "n" .
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBcount\fR (read-only)" 5
++Returns the number of packets discarded.
++.IP "" 5
++.IP "\fBreset_counts\fR (write-only)" 5
++Resets "count" to 0.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M Queue "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/DiscardNoFree.n click-1.6.0-27/inst/share/man/mann/DiscardNoFree.n
+--- click-1.6.0/inst/share/man/mann/DiscardNoFree.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/DiscardNoFree.n 2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,25 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/discardnofree.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "DISCARDNOFREE" n "11/Feb/2009" "Click"
++.SH "NAME"
++DiscardNoFree \- Click element;
++drops all packets, but does not free any of them.
++.SH "SYNOPSIS"
++DiscardNoFree
++
++\fBPorts\fR: 1 input, no outputs
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Discards all packets received on its single input, but does not free any of
++them. Only useful for benchmarking.
++
+diff -Nurb click-1.6.0/inst/share/man/mann/DriverManager.n click-1.6.0-27/inst/share/man/mann/DriverManager.n
+--- click-1.6.0/inst/share/man/mann/DriverManager.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/DriverManager.n 2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,55 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/drivermanager.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "DRIVERMANAGER" n "11/Feb/2009" "Click"
++.SH "NAME"
++DriverManager \- Click element;
++a 
++.M Script "n" 
++that manages driver stop events
++.SH "SYNOPSIS"
++\fBDriverManager\fR(INSTRUCTIONS...)
++
++\fBPorts\fR: none
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++\fBDriverManager\fR is simply a 
++.M Script "n" 
++element whose default TYPE is "\f(CWDRIVER\fR".
++.PP
++Click \fIdriver stop events\fR suggest that the driver should stop processing.
++Any element can register a driver stop event; for instance, trace processing
++elements can stop the driver when they finish a trace file.  You generally
++request this functionality by supplying a 'STOP true' keyword argument.
++.PP
++Driver stop events normally stop the driver: the user-level driver calls
++\f(CWexit(0)\fR, or the kernel driver kills the relevant kernel threads.  The
++\fBDriverManager\fR element changes this behavior.  When a driver stop event occurs,
++the router steps through the \fBDriverManager\fR's script by calling its \f(CWstep\fR
++handler.  The driver exits only when the script ends or a \f(CWstop\fR instruction
++is executed.
++.PP
++For example, the following \fBDriverManager\fR element ensures that an element,
++\f(CWk\fR, has time to clean itself up before the driver is stopped. It waits for
++the first driver stop event, then calls \f(CWk\fR's \f(CWcleanup\fR handler, waits for a
++tenth of a second, and stops the driver.
++.PP
++.nf
++\&  DriverManager(pause, write k.cleanup, wait 0.1s, stop);
++.fi
++.PP
++Use this idiom when one of your elements must emit a last packet or two before
++the router configuration is destroyed.
++.PP
++
++
++.SH "SEE ALSO"
++.M Script "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/DropBroadcasts.n click-1.6.0-27/inst/share/man/mann/DropBroadcasts.n
+--- click-1.6.0/inst/share/man/mann/DropBroadcasts.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/DropBroadcasts.n        2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,32 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/dropbroadcasts.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "DROPBROADCASTS" n "11/Feb/2009" "Click"
++.SH "NAME"
++DropBroadcasts \- Click element;
++drops link-level broadcast and multicast packets
++.SH "SYNOPSIS"
++DropBroadcasts
++
++\fBPorts\fR: 1 input, 1-2 outputs
++.br
++\fBProcessing\fR: agnostic, but output 1 is push
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Drop packets that arrived as link-level broadcast or multicast.
++Used to implement the requirement that IP routers not forward
++link-level broadcasts.
++Looks at the packet_type_anno annotation, which 
++.M FromDevice "n" 
++sets.
++
++.SH "SEE ALSO"
++.M FromDevice "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/DynamicUDPIPEncap.n click-1.6.0-27/inst/share/man/mann/DynamicUDPIPEncap.n
+--- click-1.6.0/inst/share/man/mann/DynamicUDPIPEncap.n        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/DynamicUDPIPEncap.n     2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,56 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/tcpudp/dynudpipencap.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "DYNAMICUDPIPENCAP" n "11/Feb/2009" "Click"
++.SH "NAME"
++DynamicUDPIPEncap \- Click element;
++encapsulates packets in dynamic UDP/IP headers
++.SH "SYNOPSIS"
++\fBDynamicUDPIPEncap\fR(SRC, SPORT, DST, DPORT [, CHECKSUM, INTERVAL])
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: tcpudp (core)
++.br
++.SH "DESCRIPTION"
++Encapsulates each incoming packet in a UDP/IP packet
++with source address SRC, source port SPORT,
++destination address DADDR, and destination port
++DPORT. The UDP checksum is calculated if CHECKSUM? is
++true; it is true by default. SPORT and DPORT are
++incremented by 1 every INTERVAL number of packets. By
++default, INTERVAL is 0, which means do not increment.
++This is the same element as 
++.M UDPIPEncap "n" ,
++except for
++the INTERVAL functionality.
++.PP
++The \fBDynamicUDPIPEncap\fR element adds both a UDP header
++and an IP header.
++.PP
++The 
++.M Strip "n" 
++element can be used by the receiver to get
++rid of the encapsulation header.
++
++.SH "EXAMPLES"
++
++.nf
++\&  DynamicUDPIPEncap(1.0.0.1, 1234, 2.0.0.2, 1234, 1, 10)
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M Strip n ,
++.M IPEncap n ,
++.M UDPIPEncap "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/EnsureEther.n click-1.6.0-27/inst/share/man/mann/EnsureEther.n
+--- click-1.6.0/inst/share/man/mann/EnsureEther.n      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/EnsureEther.n   2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,49 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ethernet/ensureether.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ENSUREETHER" n "11/Feb/2009" "Click"
++.SH "NAME"
++EnsureEther \- Click element;
++ensures that IP packets are Ethernet encapsulated
++.SH "SYNOPSIS"
++\fBEnsureEther\fR([ETHERTYPE, SRC, DST])
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: ethernet (core)
++.br
++.SH "DESCRIPTION"
++Ensures that IP packets are encapsulated in an Ethernet header. Non-IP
++packets, and IP packets that look Ethernet-encapsulated, are emitted on the
++first output unchanged. Other IP packets are encapsulated in an Ethernet
++header before being emitted. If the IP packet looks like it had an Ethernet
++header that was stripped off, then that header is used. Otherwise, the header
++specified by the arguments is prepended to the packet.
++.PP
++
++.SH "EXAMPLES"
++Encapsulate packets in an Ethernet header with type
++ETHERTYPE_IP (0x0800), source address 1:1:1:1:1:1, and
++destination address 2:2:2:2:2:2:
++.PP
++.nf
++\&  EtherEncap(0x0800, 1:1:1:1:1:1, 2:2:2:2:2:2)
++.fi
++.PP
++
++
++
++.SH "NOTES"
++For IP packets you probably want to use ARPQuerier instead.
++.PP
++
++.SH "SEE ALSO"
++.M EtherEncap "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Error.n click-1.6.0-27/inst/share/man/mann/Error.n
+--- click-1.6.0/inst/share/man/mann/Error.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Error.n 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,30 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../include/click/standard/errorelement.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ERROR" n "11/Feb/2009" "Click"
++.SH "NAME"
++Error \- Click element;
++always fails
++.SH "SYNOPSIS"
++\fBError\fR(...)
++
++\fBPorts\fR: any number of inputs, any number of outputs
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++The \fBError\fR element always fails to initialize. It has any number of inputs
++and outputs, and accepts any configuration string without complaint. It is
++useful to prevent a router from initializing while avoiding
++spurious error messages about bad configuration strings or connections.
++
++.SH "SEE ALSO"
++.M Message "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/EtherEncap.n click-1.6.0-27/inst/share/man/mann/EtherEncap.n
+--- click-1.6.0/inst/share/man/mann/EtherEncap.n       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/EtherEncap.n    2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,60 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ethernet/etherencap.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ETHERENCAP" n "11/Feb/2009" "Click"
++.SH "NAME"
++EtherEncap \- Click element;
++encapsulates packets in Ethernet header
++.SH "SYNOPSIS"
++\fBEtherEncap\fR(ETHERTYPE, SRC, DST)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: ethernet (core)
++.br
++.SH "DESCRIPTION"
++Encapsulates each packet in the Ethernet header specified by its arguments.
++ETHERTYPE should be in host order.
++.PP
++
++.SH "EXAMPLES"
++Encapsulate packets in an Ethernet header with type
++ETHERTYPE_IP (0x0800), source address 1:1:1:1:1:1, and
++destination address 2:2:2:2:2:2:
++.PP
++.nf
++\&  EtherEncap(0x0800, 1:1:1:1:1:1, 2:2:2:2:2:2)
++.fi
++.PP
++
++
++
++.SH "NOTES"
++For IP packets you probably want to use 
++.M ARPQuerier "n" 
++instead.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBsrc\fR (read/write)" 5
++Returns or sets the SRC parameter.
++.IP "" 5
++.IP "\fBdst\fR (read/write)" 5
++Returns or sets the DST parameter.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M ARPQuerier n ,
++.M EnsureEther "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/EtherMirror.n click-1.6.0-27/inst/share/man/mann/EtherMirror.n
+--- click-1.6.0/inst/share/man/mann/EtherMirror.n      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/EtherMirror.n   2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,25 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ethernet/ethermirror.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ETHERMIRROR" n "11/Feb/2009" "Click"
++.SH "NAME"
++EtherMirror \- Click element;
++swaps Ethernet source and destination
++.SH "SYNOPSIS"
++\fBEtherMirror\fR()
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: ethernet (core)
++.br
++.SH "DESCRIPTION"
++Incoming packets are Ethernet. Their source and destination Ethernet
++addresses are swapped before they are output.
++
+diff -Nurb click-1.6.0/inst/share/man/mann/FTPPortMapper.n click-1.6.0-27/inst/share/man/mann/FTPPortMapper.n
+--- click-1.6.0/inst/share/man/mann/FTPPortMapper.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/FTPPortMapper.n 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,111 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/app/ftpportmapper.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "FTPPORTMAPPER" n "11/Feb/2009" "Click"
++.SH "NAME"
++FTPPortMapper \- Click element;
++manipulates 
++.M IPRewriter "n" 
++for FTP
++.SH "SYNOPSIS"
++\fBFTPPortMapper\fR(CONTROL_REWRITER, DATA_REWRITER, PATTERN FOUTPUT ROUTPUT)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: app (core)
++.br
++.SH "DESCRIPTION"
++Expects FTP control packets. Watches packets for PORT commands and installs
++corresponding mappings into the specified 
++.M IPRewriter "n" .
++This makes FTP
++possible through a NAT-like 
++.M IPRewriter "n" 
++setup.
++.PP
++CONTROL_REWRITER and DATA_REWRITER are the names of 
++.M IPRewriter "n" -like
++elements. CONTROL_REWRITER must be a 
++.M TCPRewriter "n" 
++element, through which the
++FTP control packets are passed. Packets from \fBFTPPortMapper\fR must pass
++downstream through CONTROL_REWRITER. DATA_REWRITER can be any
++.M IPRewriter "n" -like
++element; packets from the FTP data port must pass through
++DATA_REWRITER. CONTROL_REWRITER and DATA_REWRITER might be the same
++element.
++.PP
++PATTERN is a pattern specification -- either a pattern name (see
++.M IPRewriterPatterns "n" )
++or a `SADDR SPORT DADDR DPORT' quadruple. See
++.M IPRewriter "n" 
++for more information. The address and port specified in the
++PORT command correspond to `SADDR' and `SPORT' in the pattern. If a new
++SADDR and SPORT are chosen, then the PORT command is rewritten to reflect
++the new SADDR and SPORT.
++.PP
++In summary: Assume that an FTP packet with source address and port
++1.0.0.2:6587 and destination address and port 2.0.0.2:21 contains a command
++`PORT 1,0,0,2,3,9' (that is, 1.0.0.2:777). Furthermore assume that the
++PATTERN is `1.0.0.1 9000-14000 - -'. Then \fBFTPPortMapper\fR performs the
++following actions:
++.PP
++
++
++.IP "*" 3
++Creates a new mapping using the PATTERN. Say it returns 9000 as the new
++source port.
++.IP "" 3
++.IP "*" 3
++Installs the following mappings into the rewriter:
++.IP "" 3
++.RS 3
++
++.IP "1." 3
++(1.0.0.2, 777, 2.0.0.2, 20) => (1.0.0.1, 9000, 2.0.0.2, 20) with output
++port FOUTPUT.
++.IP "" 3
++.IP "2." 3
++(2.0.0.2, 20, 1.0.0.1, 9000) => (2.0.0.2, 20, 1.0.0.2, 777) with output
++port ROUTPUT.
++.IP "" 3
++.RE
++.IP "" 3
++
++.IP "*" 3
++Rewrites the PORT command to `PORT 1,0,0,1,35,40' (that is,
++1.0.0.1:9000).
++.IP "" 3
++.IP "*" 3
++Updates the packet's IP and TCP checksums.
++.IP "" 3
++.IP "*" 3
++Updates the downstream CONTROL_REWRITER to reflect the change in
++sequence numbers introduced by the new PORT command. (The modified packet
++containing the new PORT command will likely have a different length than
++the original packet, so some sequence number patching is required.)
++.IP "" 3
++.IP "*" 3
++Does \fInot\fR change the control packet header's addresses or port numbers.
++.IP "" 3
++.PP
++For a PORT command to be recognized, it must be completely contained within
++one packet, and it must be the first command in the packet. This is usually
++the case. Also, the destination FTP data port is always assumed to be one
++less than the destination FTP control port, which is read as the packet's
++destination port number. This is also usually the case.
++.PP
++.SH "SEE ALSO"
++.M IPRewriter n ,
++.M TCPRewriter n ,
++.M IPRewriterPatterns n 
++.PP
++RFC 959, File Transfer Protocol (FTP)
++
+diff -Nurb click-1.6.0/inst/share/man/mann/FastTCPFlows.n click-1.6.0-27/inst/share/man/mann/FastTCPFlows.n
+--- click-1.6.0/inst/share/man/mann/FastTCPFlows.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/FastTCPFlows.n  2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,86 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/linuxmodule/fasttcpflows.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "FASTTCPFLOWS" n "11/Feb/2009" "Click"
++.SH "NAME"
++FastTCPFlows \- Click element;
++creates packets flows with static TCP/IP/Ethernet headers
++.SH "SYNOPSIS"
++\fBFastTCPFlows\fR(RATE, LIMIT, LEN,
++.br
++.nf
++\&             SETHADDR, SIPADDR,N<>
++\&             DETHADDR, DIPADDR,N<>
++\&             FLOWS, FLOWSIZE [, ACTIVE])
++.fi
++.PP
++
++
++\fBPorts\fR: no inputs, 1 output
++.br
++\fBProcessing\fR: pull
++.br
++\fBDrivers\fR: linuxmodule
++.br
++\fBPackage\fR: linuxmodule (core)
++.br
++.SH "DESCRIPTION"
++\fBFastTCPFlows\fR is a benchmark tool. At initialization time, \fBFastTCPFlows\fR
++creates FLOWS number of fake TCP/IP packets of length LEN (min 60), with
++source ethernet address SETHADDR, source IP address SIPADDR, destination
++ethernet address DETHADDR, and destination IP address DIPADDR. Source and
++destination ports are randomly generated. The TCP checksum is calculated.
++Each time the \fBFastTCPFlows\fR element is called, it selects a flow, increments
++the reference count on the skbuff created and returns the skbuff object w/o
++copying or cloning. Therefore, the packet returned by \fBFastTCPFlows\fR should
++not be modified.
++.PP
++\fBFastTCPFlows\fR sents packets at RATE packets per second. It will send LIMIT
++number of packets in total. Each flow is limited to FLOWSIZE number of
++packets. After FLOWSIZE number of packets are sent, the sort and dst port
++will be modified. FLOWSIZE must be greater than or equal to 3. For each
++flow, a SYN packet, a DATA packet, and a FIN packet are sent. These packets
++have the invalid sequence numbers, in order to avoid recomputing checksum.
++.PP
++After \fBFastTCPFlows\fR has sent LIMIT packets, it will calculate the average
++send rate (packets per second) between the first and last packets sent and
++make that available in the rate handler.
++.PP
++By default \fBFastTCPFlows\fR is ACTIVE.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBcount\fR (read-only)" 5
++Returns the total number of packets that have been generated.
++.IP "" 5
++.IP "\fBrate\fR (read/write)" 5
++Returns or sets the RATE parameter.
++.IP "" 5
++.IP "\fBreset\fR (write)" 5
++Reset and restart.
++.IP "" 5
++.IP "\fBactive\fR (write)" 5
++Change ACTIVE
++.IP "" 5
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\& FastTCPFlows(100000, 500000, 60, 
++\&              0:0:0:0:0:0, 1.0.0.1, 1234, 
++\&              1:1:1:1:1:1, 2.0.0.2, 1234,
++\&              100, 10) 
++\&   -> ToDevice;
++.fi
++.PP
++
++
+diff -Nurb click-1.6.0/inst/share/man/mann/FastUDPFlows.n click-1.6.0-27/inst/share/man/mann/FastUDPFlows.n
+--- click-1.6.0/inst/share/man/mann/FastUDPFlows.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/FastUDPFlows.n  2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,84 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/linuxmodule/fastudpflows.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "FASTUDPFLOWS" n "11/Feb/2009" "Click"
++.SH "NAME"
++FastUDPFlows \- Click element;
++creates packets flows with static UDP/IP/Ethernet headers
++.SH "SYNOPSIS"
++\fBFastUDPFlows\fR(RATE, LIMIT, LEN,
++.br
++.nf
++\&             SETHADDR, SIPADDR,N<>
++\&             DETHADDR, DIPADDR,N<>
++\&             FLOWS, FLOWSIZE [, CHECKSUM?, ACTIVE])
++.fi
++.PP
++
++
++\fBPorts\fR: no inputs, 1 output
++.br
++\fBProcessing\fR: pull
++.br
++\fBDrivers\fR: linuxmodule
++.br
++\fBPackage\fR: linuxmodule (core)
++.br
++.SH "DESCRIPTION"
++\fBFastUDPFlows\fR is a benchmark tool. At initialization time, \fBFastUDPFlows\fR
++creates FLOWS number of UDP/IP packets of length LEN (min 60), with source
++ethernet address SETHADDR, source IP address SIPADDR, destination ethernet
++address DETHADDR, and destination IP address DIPADDR. Source and
++destination ports are randomly generated. The UDP checksum is calculated if
++CHECKSUM? is true; it is true by default. Each time the \fBFastUDPFlows\fR
++element is called, it selects a flow, increments the reference count on the
++skbuff created and returns the skbuff object w/o copying or cloning.
++Therefore, the packet returned by \fBFastUDPFlows\fR should not be modified.
++.PP
++\fBFastUDPFlows\fR sents packets at RATE packets per second. It will send LIMIT
++number of packets in total. Each flow is limited to FLOWSIZE number of
++packets. After FLOWSIZE number of packets are sent, the sort and dst port
++will be modified.
++.PP
++After \fBFastUDPFlows\fR has sent LIMIT packets, it will calculate the average
++send rate (packets per second) between the first and last packets sent and
++make that available in the rate handler.
++.PP
++By default \fBFastUDPFlows\fR is ACTIVE.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBcount\fR (read-only)" 5
++Returns the total number of packets that have been generated.
++.IP "" 5
++.IP "\fBrate\fR (read/write)" 5
++Returns or sets the RATE parameter.
++.IP "" 5
++.IP "\fBreset\fR (write)" 5
++Reset and restart.
++.IP "" 5
++.IP "\fBactive\fR (write)" 5
++Change ACTIVE
++.IP "" 5
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\& FastUDPFlows(100000, 500000, 60, 
++\&              0:0:0:0:0:0, 1.0.0.1, 1234, 
++\&              1:1:1:1:1:1, 2.0.0.2, 1234,
++\&              100, 10) 
++\&   -> ToDevice;
++.fi
++.PP
++
++
+diff -Nurb click-1.6.0/inst/share/man/mann/FastUDPSource.n click-1.6.0-27/inst/share/man/mann/FastUDPSource.n
+--- click-1.6.0/inst/share/man/mann/FastUDPSource.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/FastUDPSource.n 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,81 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/linuxmodule/fastudpsrc.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "FASTUDPSOURCE" n "11/Feb/2009" "Click"
++.SH "NAME"
++FastUDPSource \- Click element;
++creates packets with static UDP/IP/Ethernet headers
++.SH "SYNOPSIS"
++\fBFastUDPSource\fR(RATE, LIMIT, LEN, SETHADDR, SIPADDR, SPORT, DETHADDR, DIPADDR, DPORT [, CHECKSUM?, INTERVAL, ACTIVE])
++
++\fBPorts\fR: no inputs, 1 output
++.br
++\fBProcessing\fR: pull
++.br
++\fBDrivers\fR: linuxmodule
++.br
++\fBPackage\fR: linuxmodule (core)
++.br
++.SH "DESCRIPTION"
++\fBFastUDPSource\fR is a benchmark tool. At initialization
++time, \fBFastUDPSource\fR creates a UDP/IP packet of length
++LEN (min 60), with source ethernet address SETHADDR,
++source IP address SIPADDR, source port SPORT,
++destination ethernet address DETHADDR, destination IP
++address DIPADDR, and destination port DPORT. The UDP
++checksum is calculated if CHECKSUM? is true; it is
++true by default. Each time the \fBFastUDPSource\fR element
++is called, it increments the reference count on the
++skbuff created and returns the skbuff object w/o
++copying or cloning. Therefore, the packet returned by
++\fBFastUDPSource\fR should not be modified.
++.PP
++\fBFastUDPSource\fR sents packets at RATE packets per
++second. It will send LIMIT number of packets in
++total.
++.PP
++After \fBFastUDPSource\fR has sent LIMIT packets, it will
++calculate the average send rate (packets per second)
++between the first and last packets sent and make that
++available in the rate handler.
++.PP
++By default \fBFastUDPSource\fR is ACTIVE.
++.PP
++PACKET is zero by default. If it is not 0, after
++PACKET number of packets, both sport and dport will
++be incremented by 1. Checksum will be recomputed.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBcount\fR (read-only)" 5
++Returns the total number of packets that have been generated.
++.IP "" 5
++.IP "\fBrate\fR (read/write)" 5
++Returns or sets the RATE parameter.
++.IP "" 5
++.IP "\fBreset\fR (write)" 5
++Reset and restart.
++.IP "" 5
++.IP "\fBactive\fR (write)" 5
++Change ACTIVE
++.IP "" 5
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\& FastUDPSource(100000, 500000, 60, 0:0:0:0:0:0, 1.0.0.1, 1234, 
++\&                                   1:1:1:1:1:1, 2.0.0.2, 1234) 
++\&   -> ToDevice;
++.fi
++.PP
++
++
+diff -Nurb click-1.6.0/inst/share/man/mann/FixIPSrc.n click-1.6.0-27/inst/share/man/mann/FixIPSrc.n
+--- click-1.6.0/inst/share/man/mann/FixIPSrc.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/FixIPSrc.n      2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,41 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/fixipsrc.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "FIXIPSRC" n "11/Feb/2009" "Click"
++.SH "NAME"
++FixIPSrc \- Click element;
++sets IP source field if requested by annotation
++.SH "SYNOPSIS"
++\fBFixIPSrc\fR(IPADDR)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Expects an IP packet as input. If its Fix IP Source annotation is set, then
++changes its IP source address field to IPADDR and recomputes the checksum.
++Used by elements such as 
++.M ICMPError "n" 
++that are required by standards to use
++the IP address on the outgoing interface as the source. Such elements must
++set ip_src to something reasonable in case the outgoing interface has no IP
++address.
++.PP
++Also clears the Fix IP Source annotation.
++.PP
++
++.SH "NOTES"
++The Fix IP Source annotation is stored as user annotation 3.
++.PP
++
++.SH "SEE ALSO"
++.M ICMPError "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/FromDevice.n click-1.6.0-27/inst/share/man/mann/FromDevice.n
+--- click-1.6.0/inst/share/man/mann/FromDevice.n       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/FromDevice.n    2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,89 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/linuxmodule/fromdevice.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "FROMDEVICE" n "11/Feb/2009" "Click"
++.SH "NAME"
++FromDevice \- Click element;
++reads packets from network device (Linux kernel)
++.SH "SYNOPSIS"
++\fBFromDevice\fR(DEVNAME [, \fIkeywords\fR PROMISC, BURST, TIMESTAMP...])
++
++\fBPorts\fR: no inputs, 1 output
++.br
++\fBProcessing\fR: push
++.br
++\fBDrivers\fR: linuxmodule
++.br
++\fBPackage\fR: linuxmodule (core)
++.br
++.SH "DESCRIPTION"
++This manual page describes the Linux kernel module version of the \fBFromDevice\fR
++element. For the user-level element, read the 
++.M FromDevice.u "n" 
++manual page.
++.PP
++Intercepts all packets received by the Linux network interface named DEVNAME
++and pushes them out output 0. The packets include the link-level header.
++DEVNAME may also be an Ethernet address, in which case \fBFromDevice\fR searches for
++a device with that address.
++.PP
++\fBFromDevice\fR receives packets at interrupt time. As this happens, \fBFromDevice\fR
++simply stores the packets in an internal queue. Later, in the Click kernel
++thread -- that is, not at interrupt time -- \fBFromDevice\fR emits packets from that
++queue as it is scheduled by the driver. It emits at most BURST packets per
++scheduling; BURST is 8 by default.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "PROMISC" 8
++Boolean.  If true, the device is put into promiscuous mode while \fBFromDevice\fR is
++active.  Default is false.
++.IP "" 8
++.IP "BURST" 8
++Unsigned integer.  Sets the BURST parameter.
++.IP "" 8
++.IP "TIMESTAMP" 8
++Boolean.  If true, then ensure that received packets have correctly-set
++timestamp annotations.  Default is true.
++.IP "" 8
++.IP "QUIET" 8
++Boolean.  If true, then suppress device up/down messages.  Default is false.
++.IP "" 8
++.IP "ALLOW_NONEXISTENT" 8
++Allow nonexistent devices. If true, and no device named DEVNAME exists when
++the router is initialized, then \fBFromDevice\fR will report a warning (rather than
++an error). Later, while the router is running, if a device named DEVNAME
++appears, \fBFromDevice\fR will seamlessly begin outputing its packets. Default is
++false.
++.IP "" 8
++.PP
++
++.SH "NOTES"
++Linux won't see any packets from the device. If you want Linux to process
++packets, you should hand them to 
++.M ToHost "n" .
++.PP
++\fBFromDevice\fR accesses packets the same way Linux does: through interrupts.
++This is bad for performance. If you care about performance and have a
++polling-capable device, use 
++.M PollDevice "n" 
++instead.
++.PP
++Linux device drivers, and thus \fBFromDevice\fR, should set packets' timestamp,
++packet-type, and device annotations.
++.PP
++
++.SH "SEE ALSO"
++.M PollDevice n ,
++.M ToDevice n ,
++.M FromHost n ,
++.M ToHost n ,
++.M FromDevice.u "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/FromDevice.u.n click-1.6.0-27/inst/share/man/mann/FromDevice.u.n
+--- click-1.6.0/inst/share/man/mann/FromDevice.u.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/FromDevice.u.n  2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,133 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/userlevel/fromdevice.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "FROMDEVICE.U" n "11/Feb/2009" "Click"
++.SH "NAME"
++FromDevice.u \- Click element;
++reads packets from network device (user-level)
++.SH "SYNOPSIS"
++\fBFromDevice\fR(DEVNAME [, \fIkeywords\fR SNIFFER, PROMISC, SNAPLEN, FORCE_IP, CAPTURE, BPF_FILTER, OUTBOUND])
++
++\fBPorts\fR: no inputs, 1 output
++.br
++\fBProcessing\fR: push
++.br
++\fBDrivers\fR: userlevel
++.br
++\fBPackage\fR: userlevel (core)
++.br
++.SH "DESCRIPTION"
++This manual page describes the user-level version of the \fBFromDevice\fR
++element. For the Linux kernel module element, read the 
++.M FromDevice n 
++manual
++page.
++.PP
++Reads packets from the kernel that were received on the network controller
++named DEVNAME.
++.PP
++User-level \fBFromDevice\fR behaves like a packet sniffer by default.  Packets
++emitted by \fBFromDevice\fR are also received and processed by the kernel.  Thus, it
++doesn't usually make sense to run a router with user-level Click, since each
++packet will get processed twice (once by Click, once by the kernel).  Install
++firewalling rules in your kernel if you want to prevent this, for instance
++using the 
++.M KernelFilter "n" 
++element or \fBFromDevice\fR's SNIFFER false argument.
++.PP
++Under Linux, a \fBFromDevice\fR element will not receive packets sent by a
++ToDevice element for the same device. Under other operating systems, your
++mileage may vary.
++.PP
++Sets the packet type annotation appropriately. Also sets the timestamp
++annotation to the time the kernel reports that the packet was received.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "SNIFFER" 8
++Boolean.  Specifies whether \fBFromDevice\fR should run in sniffer mode.  In
++non-sniffer mode, \fBFromDevice\fR installs 
++.M KernelFilter "n" 
++filtering rules to block
++the kernel from handling any packets arriving on device DEVNAME.  Default is
++true (sniffer mode).
++.IP "" 8
++.IP "PROMISC" 8
++Boolean.  \fBFromDevice\fR puts the device in promiscuous mode if PROMISC is true.
++The default is false.
++.IP "" 8
++.IP "SNAPLEN" 8
++Unsigned.  On some systems, packets larger than SNAPLEN will be truncated.
++Defaults to 2046.
++.IP "" 8
++.IP "FORCE_IP" 8
++Boolean. If true, then output only IP packets. (Any link-level header remains,
++but the IP header annotation has been set appropriately.) Default is false.
++.IP "" 8
++.IP "CAPTURE" 8
++Word.  Defines the capture method \fBFromDevice\fR will use to read packets from the
++kernel.  Linux targets generally support PCAP and LINUX; other targets support
++only PCAP.  Defaults to LINUX on Linux targets (unless you give a BPF_FILTER),
++and PCAP elsewhere.
++.IP "" 8
++.IP "BPF_FILTER" 8
++String.  A BPF filter expression used to select the interesting packets.
++Default is the empty string, which means all packets.  If CAPTURE is not PCAP,
++then any filter expression is ignored with a warning.
++.IP "" 8
++.IP "OUTBOUND" 8
++Boolean. If true, then emit packets that the kernel sends to the given
++interface, as well as packets that the kernel receives from it. Default is
++false.
++.IP "" 8
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\&  FromDevice(eth0) -> ...
++.fi
++.PP
++
++
++
++.SH "NOTES"
++\fBFromDevice\fR sets packets' extra length annotations as appropriate.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBcount\fR (read-only)" 5
++Returns the number of packets read by the device.
++.IP "" 5
++.IP "\fBreset_counts\fR (write-only)" 5
++Resets "count" to zero.
++.IP "" 5
++.IP "\fBkernel_drops\fR (read-only)" 5
++Returns the number of packets dropped by the kernel, probably due to memory
++constraints, before \fBFromDevice\fR could get them. This may be an integer; the
++notation \f(CW"<\fId\fR"\fR, meaning at most \f(CW\fId\fR\fR drops; or \f(CW"??"\fR, meaning the
++number of drops is not known.
++.IP "" 5
++.IP "\fBencap\fR (read-only)" 5
++Returns a string indicating the encapsulation type on this link. Can be
++`\f(CWIP\fR', `\f(CWETHER\fR', or `\f(CWFDDI\fR', for example.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M ToDevice.u n ,
++.M FromDump n ,
++.M ToDump n ,
++.M KernelFilter n ,
++\fBFromDevice\fR(n)
++
+diff -Nurb click-1.6.0/inst/share/man/mann/FromDump.n click-1.6.0-27/inst/share/man/mann/FromDump.n
+--- click-1.6.0/inst/share/man/mann/FromDump.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/FromDump.n      2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,176 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/userlevel/fromdump.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "FROMDUMP" n "11/Feb/2009" "Click"
++.SH "NAME"
++FromDump \- Click element;
++reads packets from a tcpdump file
++.SH "SYNOPSIS"
++\fBFromDump\fR(FILENAME [, \fIkeywords\fR TIMING, STOP, SAMPLE, FORCE_IP, START, START_AFTER, END, END_AFTER, INTERVAL, END_CALL, FILEPOS])
++
++\fBPorts\fR: no inputs, 1-2 outputs
++.br
++\fBProcessing\fR: agnostic, but output 1 is push
++.br
++\fBDrivers\fR: userlevel, ns
++.br
++\fBPackage\fR: userlevel (core)
++.br
++.SH "DESCRIPTION"
++Reads packets from a file produced by `tcpdump -w FILENAME' or 
++.M ToDump "n" .
++Pushes
++them out the output, and optionally stops the driver when there are no more
++packets. If TIMING is true, then \fBFromDump\fR tries to maintain the timing of the
++original packet stream. TIMING is false by default.
++.PP
++\fBFromDump\fR also transparently reads gzip- and bzip2-compressed tcpdump files, if
++you have zcat(1) and bzcat(1) installed.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "SAMPLE" 8
++Unsigned real number between 0 and 1. \fBFromDump\fR will output each packet with
++probability SAMPLE. Default is 1. \fBFromDump\fR uses fixed-point arithmetic, so the
++actual sampling probability may differ substantially from the requested
++sampling probability. Use the \f(CWsampling_prob\fR handler to find out the actual
++probability.
++.IP "" 8
++.IP "FORCE_IP" 8
++Boolean. If true, then \fBFromDump\fR will emit only IP packets with their IP header
++annotations correctly set. (If \fBFromDump\fR has two outputs, non-IP packets are
++pushed out on output 1; otherwise, they are dropped.) Default is false.
++.IP "" 8
++.IP "STOP" 8
++Boolean.  If true, then \fBFromDump\fR will ask the router to stop when it is done
++reading its tcpdump file (or the END time is reached).  Default is false.
++.IP "" 8
++.IP "START" 8
++Absolute time in seconds since the epoch. \fBFromDump\fR will output packets with
++timestamps after that time.
++.IP "" 8
++.IP "START_AFTER" 8
++Argument is relative time in seconds (or supply a suffix like `min', `h').
++\fBFromDump\fR will skip the first \fIT\fR seconds in the log.
++.IP "" 8
++.IP "END" 8
++Absolute time in seconds since the epoch. \fBFromDump\fR will stop when encountering
++a packet with timestamp at or after that time.
++.IP "" 8
++.IP "END_AFTER" 8
++Argument is relative time in seconds (or supply a suffix like `min', `h').
++\fBFromDump\fR will stop at the first packet whose timestamp is at least \fIT\fR
++seconds after the first timestamp in the log.
++.IP "" 8
++.IP "INTERVAL" 8
++Argument is relative time in seconds (or supply a suffix like `min', `h').
++\fBFromDump\fR will stop at the first packet whose timestamp is at least \fIT\fR
++seconds after the first packet output.
++.IP "" 8
++.IP "END_CALL" 8
++Specify a handler to call once the end time is reached, or the dump runs out
++of packets.  This defaults to '\fIFromDump\fR.active false'.  END_CALL and STOP
++are mutually exclusive.
++.IP "" 8
++.IP "TIMING" 8
++Boolean. Same as the TIMING argument.
++.IP "" 8
++.IP "ACTIVE" 8
++Boolean. If false, then \fBFromDump\fR will not emit packets (until the `\f(CWactive\fR'
++handler is written). Default is true.
++.IP "" 8
++.IP "MMAP" 8
++Boolean. If true, then \fBFromDump\fR will use 
++.M mmap 2 
++to access the tcpdump file.
++This can result in slightly better performance on some machines. \fBFromDump\fR's
++regular file discipline is pretty optimized, so the difference is often small
++in practice. Default is true on most operating systems, but false on Linux.
++.IP "" 8
++.IP "FILEPOS" 8
++File offset. If supplied, then \fBFromDump\fR will start emitting packets from
++this (uncompressed) file position. This is dangerous; there's no cheap way
++to check whether you got the offset wrong, and if you did get it wrong,
++\fBFromDump\fR will emit garbage.
++.IP "" 8
++.PP
++You can supply at most one of START and START_AFTER, and at most one of END,
++END_AFTER, and INTERVAL.
++.PP
++Only available in user-level processes.
++.PP
++.SH "NOTES"
++By default, `tcpdump -w FILENAME' dumps only the first 68 bytes of
++each packet. You probably want to run `tcpdump -w FILENAME -s 2000' or some
++such.
++.PP
++\fBFromDump\fR sets packets' extra length annotations to any additional length
++recorded in the dump.
++.PP
++\fBFromDump\fR is a notifier signal, active when the element is active and the dump
++contains more packets.
++.PP
++If \fBFromDump\fR uses mmap, then a corrupt file might cause Click to crash with a
++segmentation violation.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBcount\fR (read-only)" 5
++Returns the number of packets output so far.
++.IP "" 5
++.IP "\fBreset_counts\fR (write-only)" 5
++Resets "count" to 0.
++.IP "" 5
++.IP "\fBsampling_prob\fR (read-only)" 5
++Returns the sampling probability (see the SAMPLE keyword argument).
++.IP "" 5
++.IP "\fBactive\fR (read/write)" 5
++Value is a Boolean.
++.IP "" 5
++.IP "\fBencap\fR (read-only)" 5
++Returns the file's encapsulation type.
++.IP "" 5
++.IP "\fBfilename\fR (read-only)" 5
++Returns the filename supplied to \fBFromDump\fR.
++.IP "" 5
++.IP "\fBfilesize\fR (read-only)" 5
++Returns the length of the \fBFromDump\fR file, in bytes, or "-" if that length
++cannot be determined (because the file was compressed, for example).
++.IP "" 5
++.IP "\fBfilepos\fR (read/write)" 5
++Returns or sets \fBFromDump\fR's position in the (uncompressed) file, in bytes.
++.IP "" 5
++.IP "\fBpacket_filepos\fR (read-only)" 5
++Returns the (uncompressed) file position of the last packet emitted, in bytes.
++This handler is useful for elements like 
++.M AggregateIPFlows "n" 
++that can record
++statistics about portions of a trace; with packet_filepos, they can note
++exactly where the relevant portion begins.
++.IP "" 5
++.IP "\fBextend_interval\fR (write-only)" 5
++Text is a time interval. If END_TIME or one of its cousins was specified, then
++writing to this handler extends END_TIME by that many seconds. Also, ACTIVE is
++set to true.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M ToDump n ,
++.M FromDevice.u n ,
++.M ToDevice.u n ,
++.M tcpdump 1 ,
++.M mmap 2 ,
++.M AggregateIPFlows n ,
++.M FromTcpdump "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/FromHost.n click-1.6.0-27/inst/share/man/mann/FromHost.n
+--- click-1.6.0/inst/share/man/mann/FromHost.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/FromHost.n      2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,83 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/linuxmodule/fromhost.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "FROMHOST" n "11/Feb/2009" "Click"
++.SH "NAME"
++FromHost \- Click element;
++reads packets from Linux
++.SH "SYNOPSIS"
++\fBFromHost\fR(DEVNAME, ADDR/MASK [, \fIKEYWORDS\fR])
++
++\fBPorts\fR: no inputs, 1 output
++.br
++\fBProcessing\fR: push
++.br
++\fBDrivers\fR: linuxmodule
++.br
++\fBPackage\fR: linuxmodule (core)
++.br
++.SH "DESCRIPTION"
++Captures packets orginating from the Linux kernel and pushes them on output
++0. Output packets have Ethernet headers; only the protocol field is
++interesting.
++.PP
++Installs a fake interface called DEVNAME, and changes the routing table so
++that every packet destined for ADDR/MASK is sent through that interface.
++The packet then leaves on output 0. The device's native address is ADDR.
++.PP
++After the fake device is created, the effect of bringing up the interface
++and changing the routing table is analogous to:
++.PP
++.nf
++\&  % /sbin/ifconfig DEVNAME up
++\&  % /sbin/route add -net ADDR netmask MASK DEVNAME
++.fi
++.PP
++This element is only available in the Linux kernel module.
++.PP
++Keyword arguments are:
++.PP
++
++
++
++.IP "ETHER" 8
++Ethernet address. Specifies the fake device's Ethernet address. Default is
++00:01:02:03:04:05.
++.IP "" 8
++.PP
++
++.SH "NOTES"
++Linux will send ARP queries to the fake device. You must respond to these
++queries in order to receive any IP packets, but you can obviously respond
++with any Ethernet address you'd like. Here is one common idiom:
++.PP
++.nf
++\&  FromHost(fake0, 192.0.0.1/8)
++\&    -> fromhost_cl :: Classifier(12/0806, 12/0800);
++\&  fromhost_cl[0] -> ARPResponder(0.0.0.0/0 1:1:1:1:1:1) -> ToHost;
++\&  fromhost_cl[1] -> ... // IP packets
++.fi
++.PP
++
++
++
++.SH "EXAMPLES"
++
++.nf
++\&  FromHost(fake0, 192.0.0.1/8) -> ...;
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M ToHost n ,
++.M FromDevice n ,
++.M PollDevice n ,
++.M ToDevice "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/FromHost.u.n click-1.6.0-27/inst/share/man/mann/FromHost.u.n
+--- click-1.6.0/inst/share/man/mann/FromHost.u.n       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/FromHost.u.n    2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,95 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/userlevel/fromhost.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "FROMHOST.U" n "11/Feb/2009" "Click"
++.SH "NAME"
++FromHost.u \- Click element;
++interface to /dev/net/tun or ethertap (user-level)
++.SH "SYNOPSIS"
++\fBFromHost\fR(DEVNAME [, DST, GATEWAY, HEADROOM] [, \fIKEYWORDS\fR])
++
++\fBPorts\fR: no inputs, 1 output
++.br
++\fBProcessing\fR: push
++.br
++\fBDrivers\fR: userlevel
++.br
++\fBPackage\fR: userlevel (core)
++.br
++.SH "DESCRIPTION"
++Reads packets from and writes packets through the universal TUN/TAP
++module in Linux (the /dev/net/tun device).  This allows a
++user-level Click to hand packets to the virtual ethernet
++device. \fBFromHost\fR will also transfer packets from the virtual
++ethernet device.
++.PP
++To use this element your kernel config must support CONFIG_TUN and
++CONFIG_ETHERTAP.  Either modules (tun.o) or compiled in should work.
++.PP
++\fBFromHost\fR allocates a /dev/net/tun device (this might fail) and runs
++.M ifconfig 8 
++to set the interface's local (i.e., kernel) address and netmask
++to DST, which must be an IP prefix such as 18.26.4.9/24.  If DST is not
++specified, then \fBFromHost\fR
++assumes the tunnel has already been configured to the correct address.  If
++a nonzero GATEWAY IP address (which must be on the same network as the tun)
++is specified, then \fBFromHost\fR tries to set up a default route through that
++host.  HEADROOM is the number of bytes left empty before the packet data
++(to leave room for additional encapsulation headers). Default HEADROOM is
++0.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "ETHER" 8
++Ethernet address. Specifies the fake device's Ethernet address. Default is
++not specified, in which case the fake device's address is whatever the
++kernel chooses.
++.IP "" 8
++.PP
++
++.SH "NOTES"
++Linux will send ARP queries to the fake device. You must respond to these
++queries in order to receive any IP packets, but you can obviously respond
++with any Ethernet address you'd like. Here is one common idiom:
++.PP
++.nf
++\& tap0 :: FromHost(fake, 192.0.0.1/8)
++\&     -> fromhost_cl :: Classifier(12/0806, 12/0800);
++\& fromhost_cl[0] -> ARPResponder(0.0.0.0/0 1:1:1:1:1:1) -> tap0;
++\& fromhost_cl[1] -> ... // IP packets
++.fi
++.PP
++
++
++
++.SH "EXAMPLES"
++
++.nf
++\& FromHost(fake, 192.0.0.1/8) -> ...;
++.fi
++.PP
++An error like "open /dev/net/tun: No such file or directory" usually means
++that you have not enabled tunnel support in your kernel.
++.PP
++
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBdev_name\fR (read-only)" 5
++Returns the name of the device that this element is using.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M ToHost.u n ,
++.M ifconfig 8 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/FromRawSocket.n click-1.6.0-27/inst/share/man/mann/FromRawSocket.n
+--- click-1.6.0/inst/share/man/mann/FromRawSocket.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/FromRawSocket.n 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,60 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/userlevel/fromrawsocket.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "FROMRAWSOCKET" n "11/Feb/2009" "Click"
++.SH "NAME"
++FromRawSocket \- Click element;
++reads raw IP packets from safe raw socket (user-level)
++.SH "SYNOPSIS"
++\fBFromRawSocket\fR("TCP", <TCP source port number> [, \fIKEYWORDS\fR])
++.br
++\fBFromRawSocket\fR("UDP", <UDP source port number> [, \fIKEYWORDS\fR])
++.br
++\fBFromRawSocket\fR("GRE", <GRE key or PPTP call ID> [, \fIKEYWORDS\fR])
++.br
++\fBFromRawSocket\fR("ICMP", <ICMP identifier> [, \fIKEYWORDS\fR])
++
++\fBPorts\fR: at most 1 input, at most 1 output
++.br
++\fBProcessing\fR: push
++.br
++\fBDrivers\fR: userlevel
++.br
++\fBPackage\fR: userlevel (core)
++.br
++.SH "DESCRIPTION"
++Reads data from a raw IPv4 socket. The raw IPv4 socket may optionally
++be bound to a source port number in the case of TCP/UDP, a GRE key or
++PPTP call ID in the case of GRE, or an identifier in the case of
++ICMP. Binding a port to a raw IPv4 socket to reserve it and suppress
++TCP RST and ICMP Unreachable errors, is specific to PlanetLab Linux.
++.PP
++This element exists only for backward compatibility. See the more
++general 
++.M RawSocket "n" 
++implementation for details, and for supported
++keyword arguments. A \fBFromRawSocket\fR is equivalent to a 
++.M RawSocket "n" 
++with
++no inputs.
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\&  FromRawSocket(UDP, 53) -> ...
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M ToRawSocket n ,
++.M RawSocket n ,
++.M Socket "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/FromSocket.n click-1.6.0-27/inst/share/man/mann/FromSocket.n
+--- click-1.6.0/inst/share/man/mann/FromSocket.n       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/FromSocket.n    2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,58 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/userlevel/fromsocket.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "FROMSOCKET" n "11/Feb/2009" "Click"
++.SH "NAME"
++FromSocket \- Click element;
++reads data from socket (user-level)
++.SH "SYNOPSIS"
++\fBFromSocket\fR("TCP", IP, PORTNUMBER [, \fIKEYWORDS\fR])
++.br
++\fBFromSocket\fR("UDP", IP, PORTNUMBER [, \fIKEYWORDS\fR])
++.br
++\fBFromSocket\fR("UNIX", FILENAME [, \fIKEYWORDS\fR])
++.br
++\fBFromSocket\fR("UNIX_DGRAM", FILENAME [, \fIKEYWORDS\fR])
++
++\fBPorts\fR: at most 1 input, at most 1 output
++.br
++\fBProcessing\fR: push
++.br
++\fBDrivers\fR: userlevel
++.br
++\fBPackage\fR: userlevel (core)
++.br
++.SH "DESCRIPTION"
++Reads data from the specified socket. Packets received from the remote
++host or process are emitted on the output.
++.PP
++This element exists only for backward compatibility. See the more
++general 
++.M Socket "n" 
++implementation for details, and for supported keyword
++arguments. A \fBFromSocket\fR is equivalent to a 
++.M Socket "n" 
++with the CLIENT
++keyword set to FALSE or a 
++.M Socket "n" 
++with no inputs.
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\&  FromSocket(TCP, 0.0.0.0, 80) -> ...
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M ToSocket n ,
++.M Socket "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/FrontDropQueue.n click-1.6.0-27/inst/share/man/mann/FrontDropQueue.n
+--- click-1.6.0/inst/share/man/mann/FrontDropQueue.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/FrontDropQueue.n        2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,62 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/frontdropqueue.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "FRONTDROPQUEUE" n "11/Feb/2009" "Click"
++.SH "NAME"
++FrontDropQueue \- Click element;
++stores packets in drop-from-front FIFO queue
++.SH "SYNOPSIS"
++FrontDropQueue
++.br
++\fBFrontDropQueue\fR(CAPACITY)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: push inputs, pull outputs
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Stores incoming packets in a first-in-first-out queue. Drops the head packet
++before inserting the incoming packet if the queue already holds CAPACITY
++packets. The default for CAPACITY is 1000.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBlength\fR (read-only)" 5
++Returns the current number of packets in the queue.
++.IP "" 5
++.IP "\fBhighwater_length\fR (read-only)" 5
++Returns the maximum number of packets that have ever been in the queue at once.
++.IP "" 5
++.IP "\fBcapacity\fR (read/write)" 5
++Returns or sets the queue's capacity.
++.IP "" 5
++.IP "\fBdrops\fR (read-only)" 5
++Returns the number of packets dropped by the 
++.M Queue "n" 
++so far.
++.IP "" 5
++.IP "\fBreset_counts\fR (write-only)" 5
++When written, resets the \f(CWdrops\fR and \f(CWhighwater_length\fR counters.
++.IP "" 5
++.IP "\fBreset\fR (write-only)" 5
++When written, drops all packets in the 
++.M Queue "n" .
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M Queue n ,
++.M SimpleQueue n ,
++.M MixedQueue n ,
++.M RED "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/GetIPAddress.n click-1.6.0-27/inst/share/man/mann/GetIPAddress.n
+--- click-1.6.0/inst/share/man/mann/GetIPAddress.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/GetIPAddress.n  2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,41 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/getipaddress.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "GETIPADDRESS" n "11/Feb/2009" "Click"
++.SH "NAME"
++GetIPAddress \- Click element;
++sets destination IP address annotation from packet data
++.SH "SYNOPSIS"
++\fBGetIPAddress\fR(OFFSET)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Copies 4 bytes from the packet, starting at OFFSET, to the destination IP
++address annotation. OFFSET is usually 16, to fetch the destination address
++from an IP packet.
++.PP
++
++.SH "NOTES"
++The destination address annotation is used by elements
++that need to know where the packet is going.
++Such elements include 
++.M ARPQuerier "n" 
++and LookupIPRoute.
++.PP
++
++.SH "SEE ALSO"
++.M ARPQuerier n ,
++.M StaticIPLookup n ,
++.M SetIPAddress n ,
++.M StoreIPAddress "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/HashSwitch.n click-1.6.0-27/inst/share/man/mann/HashSwitch.n
+--- click-1.6.0/inst/share/man/mann/HashSwitch.n       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/HashSwitch.n    2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,44 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/hashswitch.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "HASHSWITCH" n "11/Feb/2009" "Click"
++.SH "NAME"
++HashSwitch \- Click element;
++classifies packets by hash of contents
++.SH "SYNOPSIS"
++\fBHashSwitch\fR(OFFSET, LENGTH)
++
++\fBPorts\fR: 1 input, 1 or more outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Can have any number of outputs.
++Chooses the output on which to emit each packet based on
++a hash of the LENGTH bytes starting at OFFSET.
++Could be used for stochastic fair queuing.
++
++.SH "EXAMPLES"
++This element expects IP packets and chooses the output
++based on a hash of the IP destination address:
++.PP
++.nf
++\&  HashSwitch(16, 4)
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M Switch n ,
++.M RoundRobinSwitch n ,
++.M StrideSwitch n ,
++.M RandomSwitch "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/HostEtherFilter.n click-1.6.0-27/inst/share/man/mann/HostEtherFilter.n
+--- click-1.6.0/inst/share/man/mann/HostEtherFilter.n  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/HostEtherFilter.n       2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,49 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ethernet/hostetherfilter.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "HOSTETHERFILTER" n "11/Feb/2009" "Click"
++.SH "NAME"
++HostEtherFilter \- Click element;
++drops Ethernet packets sent to other machines
++.SH "SYNOPSIS"
++\fBHostEtherFilter\fR(ETHER [, DROP_OWN, DROP_OTHER, \fIKEYWORDS\fR])
++
++\fBPorts\fR: 1 input, 1-2 outputs
++.br
++\fBProcessing\fR: agnostic, but output 1 is push
++.br
++\fBPackage\fR: ethernet (core)
++.br
++.SH "DESCRIPTION"
++Expects Ethernet packets as input. Acts basically like Ethernet input hardware
++for a device with address ETHER.
++.PP
++In particular, \fBHostEtherFilter\fR sets each packet's packet type annotation to
++HOST, BROADCAST, MULTICAST, or OTHERHOST based on its Ethernet destination
++address. Emits most packets on the first output. If DROP_OWN is true, drops
++packets whose source address is ETHER; defaults to false. If DROP_OTHER is
++true, drops packets sent to hosts other than ETHER (that is, packets with
++unicast destination addresses not equal to ETHER); defaults to true. If the
++element has two outputs, filtered packets are emitted on the second output
++rather than dropped.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "DROP_OWN" 8
++Same as the DROP_OWN parameter.
++.IP "" 8
++.IP "DROP_OTHER" 8
++Same as the DROP_OTHER parameter.
++.IP "" 8
++.IP "OFFSET" 8
++The ethernet header starts OFFSET bytes into the packet. Default OFFSET is 0.
++.IP "" 8
++.PP
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ICMPError.n click-1.6.0-27/inst/share/man/mann/ICMPError.n
+--- click-1.6.0/inst/share/man/mann/ICMPError.n        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ICMPError.n     2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,102 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/icmp/icmperror.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ICMPERROR" n "11/Feb/2009" "Click"
++.SH "NAME"
++ICMPError \- Click element;
++generates ICMP error packets
++.SH "SYNOPSIS"
++\fBICMPError\fR(SRC, TYPE [, CODE, \fIkeywords\fR BADADDRS, MTU])
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: icmp (core)
++.br
++.SH "DESCRIPTION"
++Generate an ICMP error packet, with specified TYPE and CODE,
++in response to an incoming IP packet. The output is an IP/ICMP packet.
++The ICMP packet's IP source address is set to SRC.
++The error packet will include (as payload)
++the original packet's IP header and an initial segment of its
++IP payload. \fBICMPError\fR sets the packet destination IP and
++fix_ip_src annotations.
++.PP
++TYPE and CODE may be integers between 0 and 255 or mnemonic names; CODE
++defaults to 0. Valid named TYPEs are `unreachable' [3], `sourcequench' [4],
++`redirect' [5], `timeexceeded' [11], and `parameterproblem' [12]. Valid
++named CODEs are `net' [0], `host' [1], `protocol' [2], `port' [3], and
++`needfrag' [4] for `unreachable'; `net' [0] and `host' [1] for `redirect';
++`transit' [0] and `reassembly' [1] for `timeexceeded'; and `erroratptr'
++[0], `missingopt' [1], and `length' [2] for `parameterproblem'.
++.PP
++The intent is that elements that give rise to errors, like 
++.M DecIPTTL "n" ,
++should have two outputs, one of which is connected to an \fBICMPError\fR.
++Perhaps the \fBICMPError\fR should be followed by a rate limiting
++element.
++.PP
++\fBICMPError\fR never generates a packet in response to an ICMP error packet, a
++fragment, or a link broadcast. The BADADDRS keyword argument supplies an
++optional list of bad IP addresses; if it is present, then \fBICMPError\fR doesn't
++generate packets in response to packets with one of those addresses as
++either source or destination.
++.PP
++The output of \fBICMPError\fR should be connected to the routing lookup
++machinery, much as if the ICMP errors came from a hardware interface.
++.PP
++If TYPE is 12 (`parameterproblem') and CODE is 0 (`erroratptr'), \fBICMPError\fR
++takes the error pointer from the packet's ICMP parameter problem
++annotation. The 
++.M IPGWOptions "n" 
++element sets the annotation.
++.PP
++If TYPE is 5 (`redirect'), produces an ICMP redirect message. The gateway
++address is taken from the destination annotation. Usually a Paint-PaintTee
++element pair hands the packet to a redirect \fBICMPError\fR. RFC1812 says only
++code 1 (`host') should be used.
++.PP
++If TYPE is 3 ('unreachable') and CODE is 4 ('needfrag'), produces
++an ICMP unreachable message containing the MTU of the next-hop
++interface, specified by the PMTU keyword. This error should be
++returned to the sender of an IP packet with the DF bit set, that is
++longer than the next-hop MTU, to support Path MTU Discovery.
++.PP
++If the input packet has a source route option, the output packet will also
++have a source route option, containing the routers from the input source
++route, reversed.
++.PP
++Will not generate a packet larger than MTU, which defaults to 576.
++.PP
++
++.SH "EXAMPLES"
++This configuration fragment produces ICMP Time Exceeded error
++messages in response to TTL expirations, but limits the
++rate at which such messages can be sent to 10 per second:
++.PP
++.nf
++\&  dt : DecIPTTL;
++\&  dt[1] -> ICMPError(18.26.4.24, timeexceeded) -> m :: RatedSplitter(10) -> ...
++\&  m[1] -> Discard;
++.fi
++.PP
++
++
++
++.SH "NOTES"
++\fBICMPError\fR can't decide if the packet's source or destination address is an
++IP directed broadcast address; it is supposed to ignore packets with such
++addresses.
++.PP
++
++.SH "SEE ALSO"
++.M DecIPTTL n ,
++.M FixIPSrc n ,
++.M IPGWOptions "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ICMPPingEncap.n click-1.6.0-27/inst/share/man/mann/ICMPPingEncap.n
+--- click-1.6.0/inst/share/man/mann/ICMPPingEncap.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ICMPPingEncap.n 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,54 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/icmp/icmppingencap.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ICMPPINGENCAP" n "11/Feb/2009" "Click"
++.SH "NAME"
++ICMPPingEncap \- Click element;
++encapsulates packets in ICMP ping headers
++.SH "SYNOPSIS"
++\fBICMPPingEncap\fR(SRC, DST [, \fIkeyword\fR IDENTIFIER])
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: icmp (core)
++.br
++.SH "DESCRIPTION"
++Encapsulates input packets in an ICMP ping header with source IP address SRC
++and destination IP address DST.  Advances the "sequence" field by one for
++each packet.  (The sequence field is stored in network byte order in the
++packet.)
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "IDENTIFIER" 8
++Integer. Determines the ICMP identifier field in emitted pings. Default is
++0.
++.IP "" 8
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBsrc\fR (read/write)" 5
++Returns or sets the SRC argument.
++.IP "" 5
++.IP "\fBdst\fR (read/write)" 5
++Returns or sets the DST argument.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M ICMPPingSource n ,
++.M ICMPPingResponder n ,
++.M ICMPPingRewriter "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ICMPPingResponder.n click-1.6.0-27/inst/share/man/mann/ICMPPingResponder.n
+--- click-1.6.0/inst/share/man/mann/ICMPPingResponder.n        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ICMPPingResponder.n     2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,39 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/icmp/icmppingresponder.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ICMPPINGRESPONDER" n "11/Feb/2009" "Click"
++.SH "NAME"
++ICMPPingResponder \- Click element;
++responds to ICMP echo requests
++.SH "SYNOPSIS"
++\fBICMPPingResponder\fR()
++
++\fBPorts\fR: 1 input, 1-2 outputs
++.br
++\fBProcessing\fR: agnostic, but output 1 is push
++.br
++\fBPackage\fR: icmp (core)
++.br
++.SH "DESCRIPTION"
++Respond to ICMP echo requests. Incoming packets must have their IP header
++annotations set. The corresponding reply is generated for any ICMP echo
++request and emitted on output 0. The reply's destination IP address annotation
++is set appropriately, its paint annotation is cleared, and its timestamp is
++set to the current time. Other annotations are copied from the input packet.
++IP packets other than ICMP echo requests are emitted on the second output, if
++there are two outputs; otherwise, they are dropped.
++.PP
++
++.SH "BUGS"
++\fBICMPPingResponder\fR does not pay attention to source route options; it should.
++.PP
++
++.SH "SEE ALSO"
++.M ICMPSendPings n ,
++.M ICMPError "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ICMPPingRewriter.n click-1.6.0-27/inst/share/man/mann/ICMPPingRewriter.n
+--- click-1.6.0/inst/share/man/mann/ICMPPingRewriter.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ICMPPingRewriter.n      2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,66 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/icmp/icmppingrewriter.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ICMPPINGREWRITER" n "11/Feb/2009" "Click"
++.SH "NAME"
++ICMPPingRewriter \- Click element;
++rewrites ICMP echo requests and replies
++.SH "SYNOPSIS"
++\fBICMPPingRewriter\fR(SRC, DST, \fIkeywords\fR DST_ANNO)
++
++\fBPorts\fR: 1-2 inputs, 1-2 outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: icmp (core)
++.br
++.SH "DESCRIPTION"
++Rewrites ICMP echo requests and replies by changing their source and/or
++destination addresses. This lets pings pass through a NAT gateway.
++.PP
++Expects ICMP echo requests and echo replies. Each ICMP echo request is
++rewritten to have source IP address SRC and destination IP address DST.
++However, if either address is a single dash `\f(CW-\fR', the corresponding field in
++the IP header won't be changed. The ICMP `identifier' field is also rewritten
++to a unique number. Replies to the rewritten request are themselves rewritten;
++the rewritten replies look like they were responding to the original request.
++\fBICMPPingRewriter\fR optionally changes destination IP address annotations; see
++the DST_ANNO keyword argument below.
++.PP
++\fBICMPPingRewriter\fR actually keeps a table of mappings. Each mapping changes
++a given (source address, destination address, identifier) triple into another
++triple. Say that \fBICMPPingRewriter\fR receives a request packet with triple
++(\fIsrc\fR, \fIdst\fR, \fIident\fR), and chooses for it a new triple, (\fIsrc2\fR,
++\fIdst2\fR, \fIident2\fR). The rewriter will then store two mappings in the table.
++The first mapping changes requests (\fIsrc\fR, \fIdst\fR, \fIident\fR) into requests
++(\fIsrc2\fR, \fIdst2\fR, \fIident2\fR). The second mapping changes \fIreplies\fR (\fIdst2\fR, \fIsrc2\fR, \fIident2\fR) into replies (\fIdst\fR, \fIsrc\fR, \fIident\fR). Mappings are removed if they go unused for 5 minutes.
++.PP
++\fBICMPPingRewriter\fR may have one or two outputs. If it has two outputs,
++then requests are emitted on output 0, replies on output 1. Otherwise,
++all packets are emitted on output 0.
++.PP
++It may also have one or two inputs. They differ in how unexpected packets
++are handled. On the first input, echo requests with no corresponding
++mapping cause new mappings to be created, while echo replies with no
++corresponding mapping are passed along unchanged. On the second input,
++echo requests or replies with no corresponding mapping are simply dropped.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "DST_ANNO" 8
++Boolean. If true, then set the destination IP address annotation on passing
++packets to the rewritten destination address. Default is true.
++.IP "" 8
++.PP
++
++.SH "SEE ALSO"
++.M IPRewriter n ,
++.M ICMPPingResponder "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ICMPPingSource.n click-1.6.0-27/inst/share/man/mann/ICMPPingSource.n
+--- click-1.6.0/inst/share/man/mann/ICMPPingSource.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ICMPPingSource.n        2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,106 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/icmp/icmpsendpings.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ICMPPINGSOURCE" n "11/Feb/2009" "Click"
++.SH "NAME"
++ICMPPingSource \- Click element;
++periodically sends ICMP echo requests
++.SH "SYNOPSIS"
++\fBICMPPingSource\fR(SADDR, DADDR [, \fIkeywords\fR INTERVAL, IDENTIFIER, LIMIT, DATA, ACTIVE])
++
++\fBPorts\fR: at most 1 input, 1 output
++.br
++\fBPackage\fR: icmp (core)
++.br
++.SH "DESCRIPTION"
++Periodically emits ping packets with source IP address SRC and destination
++address DST.  Advances the "sequence" field by one each time.  (The sequence
++field is stored in network byte order in the packet.)  When its output is
++pull, generates a ping packet on every pull.
++.PP
++\fBICMPPingSource\fR's optional input accepts replies to the pings it sends.  If you
++send replies to this input, \fBICMPPingSource\fR will print reply reports and keep
++loss and RTT statistics like the ping(1) program.  You can access those
++stistics with the "\f(CWsummary\fR" handler.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "INTERVAL" 8
++Amount of time between pings, in seconds. Default is 1.
++.IP "" 8
++.IP "IDENTIFIER" 8
++Integer. Determines the ICMP identifier field in emitted pings. Default is
++0.
++.IP "" 8
++.IP "LIMIT" 8
++Integer. The number of pings to send; but if LIMIT is negative, sends pings
++forever. Default is -1.
++.IP "" 8
++.IP "DATA" 8
++String. Extra data in emitted pings. Default is the empty string (nothing).
++.IP "" 8
++.IP "ACTIVE" 8
++Boolean.  Whether \fBICMPPingSource\fR is active.  Default is true.
++.IP "" 8
++.IP "VERBOSE" 8
++Boolean.  Whether \fBICMPPingSource\fR should print reports when echo replies
++arrive.  Default is true.
++.IP "" 8
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBactive\fR (read/write)" 5
++Returns or sets the ACTIVE argument.
++.IP "" 5
++.IP "\fBcount\fR (read-only)" 5
++Reports the number of packets sent so far.
++.IP "" 5
++.IP "\fBlimit\fR (write-only)" 5
++Sets the LIMIT argument.
++.IP "" 5
++.IP "\fBinterval\fR (write-only)" 5
++Sets the INTERVAL argument.
++.IP "" 5
++.IP "\fBreset_counts\fR (write-only)" 5
++Resets all counters to zero.
++.IP "" 5
++.IP "\fBsrc\fR (read/write)" 5
++Returns or sets the SRC argument.
++.IP "" 5
++.IP "\fBdst\fR (read/write)" 5
++Returns or sets the DST argument.
++.IP "" 5
++.IP "\fBsummary\fR (read-only)" 5
++Returns ping(1)-style summary information: number of packets sent and
++received, loss rate, and RTT statistics.  Only available if \fBICMPPingSource\fR had
++an input.
++.IP "" 5
++.IP "\fBrtt_min\fR (read-only)" 5
++Returns the minimum RTT observed, or 0 if no RTTs have been observed.  Only
++available if \fBICMPPingSource\fR had an input.
++.IP "" 5
++.IP "\fBrtt_max\fR (read-only)" 5
++Returns the maximum RTT observed, or 0 if no RTTs have been observed.  Only
++available if \fBICMPPingSource\fR had an input.
++.IP "" 5
++.IP "\fBrtt_avg\fR (read-only)" 5
++Returns the average RTT observed, or 0 if no RTTs have been observed.  Only
++available if \fBICMPPingSource\fR had an input.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M ICMPPingEncap n ,
++.M ICMPPingResponder n ,
++.M ICMPPingRewriter "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ICMPRewriter.n click-1.6.0-27/inst/share/man/mann/ICMPRewriter.n
+--- click-1.6.0/inst/share/man/mann/ICMPRewriter.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ICMPRewriter.n  2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,73 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/icmp/icmprewriter.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ICMPREWRITER" n "11/Feb/2009" "Click"
++.SH "NAME"
++ICMPRewriter \- Click element;
++rewrites ICMP packets based on IP rewriter mappings
++.SH "SYNOPSIS"
++\fBICMPRewriter\fR(MAPS, \fIkeywords\fR DST_ANNO)
++
++\fBPorts\fR: 1 input, 1-2 outputs
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: icmp (core)
++.br
++.SH "DESCRIPTION"
++Rewrites ICMP error packets by changing their source and/or destination
++addresses and some of their payloads. It checks MAPS, a space-separated list
++of 
++.M IPRewriter "n" -like
++elements, to see how to rewrite. This lets source quenches,
++redirects, TTL-expired messages, and so forth pass through a NAT gateway.
++.PP
++ICMP error packets are sent in response to normal IP packets, and include a
++small portion of the relevant IP packet data. If the IP packet had been sent
++through 
++.M IPRewriter "n" ,
++.M ICMPPingRewriter "n" ,
++or a similar element, then the ICMP
++packet will be in response to the rewritten address. \fBICMPRewriter\fR takes such
++ICMP error packets and checks a list of IPRewriters for a relevant mapping. If
++a mapping is found, \fBICMPRewriter\fR will rewrite the ICMP packet so it appears
++like a response to the original packet and emit the result on output 0.
++.PP
++\fBICMPRewriter\fR may have one or two outputs. If it has one, then any
++non-rewritten ICMP error packets, and any ICMP packets that are not errors,
++are dropped. If it has two, then these kinds of packets are emitted on output
++1.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "DST_ANNO" 8
++Boolean. If true, then set the destination IP address annotation on passing
++packets to the rewritten destination address. Default is true.
++.IP "" 8
++.PP
++
++.SH "NOTES"
++\fBICMPRewriter\fR supports the following ICMP types: destination unreachable, time
++exceeded, parameter problem, source quench, and redirect.
++.PP
++MAPS elements may have element class 
++.M IPAddrRewriter "n" ,
++.M IPRewriter "n" ,
++.M TCPRewriter "n" ,
++.M ICMPPingRewriter "n" ,
++or other related classes.
++.PP
++
++.SH "SEE ALSO"
++.M IPAddrRewriter n ,
++.M IPRewriter n ,
++.M ICMPPingRewriter n ,
++.M TCPRewriter "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/IPAddrPairRewriter.n click-1.6.0-27/inst/share/man/mann/IPAddrPairRewriter.n
+--- click-1.6.0/inst/share/man/mann/IPAddrPairRewriter.n       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/IPAddrPairRewriter.n    2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,121 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/ipaddrpairrewriter.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "IPADDRPAIRREWRITER" n "11/Feb/2009" "Click"
++.SH "NAME"
++IPAddrPairRewriter \- Click element;
++rewrites IP packets' addresses by address pair
++.SH "SYNOPSIS"
++\fBIPAddrPairRewriter\fR(INPUTSPEC1, ..., INPUTSPECn)
++
++\fBPorts\fR: 1 or more inputs, 1-256 outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Rewrites the source and/or destination addresses on IP packets, along with
++their checksums.  \fBIPAddrPairRewriter\fR implements per-address-pair network
++address translation, a midpoint between Basic NAT (see 
++.M IPAddrRewriter "n" )
++and
++NAPT (see 
++.M IPRewriter "n" 
++and 
++.M TCPRewriter "n" ).
++.PP
++\fBIPAddrPairRewriter\fR maintains a \fImapping table\fR that records how addresses are
++rewritten.  On receiving a packet, \fBIPAddrPairRewriter\fR first looks up that
++packet in the mapping table by source/destination address pair.  If the table
++contains a mapping, then the packet is rewritten according to the mapping and
++emitted on the specified output port.  If there was no mapping, the packet is
++handled by the INPUTSPEC corresponding to the input port on which the packet
++arrived.  (There are as many input ports as INPUTSPECs.)  Most INPUTSPECs
++install new mappings, so that future packets from the same address are handled
++by the mapping table rather than some INPUTSPEC.  The six forms of INPUTSPEC
++handle input packets as follows:
++.PP
++
++
++.IP "\&'drop', 'pass OUTPUT', 'keep FOUTPUT ROUTPUT', 'ELEMENTNAME'" 5
++These INPUTSPECs behave like those in 
++.M IPRewriter "n" .
++.IP "" 5
++.IP "\&'pattern SADDR[-SADDR2] DADDR FOUTPUT ROUTPUT'" 5
++Creates a mapping according to the given pattern, 'SADDR DADDR'.  Either
++pattern field may be a dash '-', in which case the corresponding field is left
++unchanged.  For instance, the pattern '1.0.0.1 -' will rewrite input packets'
++source address, but leave its destination address unchanged.  SADDR may be a
++range 'L-H' or prefix 'ADDR/PFX'; 
++.M IPRewriter "n" 
++will choose an unallocated
++address in that range, or drop the packet if no address is available.
++Normally addresses are chosen randomly within the range.  To allocate
++addresses sequentially (which can make testing easier), append a pound sign to
++the range, as in '1.0.0.1-1.255.255.254#'.
++.IP "" 5
++Say a packet with address pair (SA, DA) is received, and the corresponding new
++addresses are (SA', DA').  Then two mappings are installed:
++.IP "" 5
++.nf
++\&    (SA, DA) => (SA', DA') [FOUTPUT]
++\&    (DA', SA') => (DA, SA) [ROUTPUT]
++.fi
++.IP "" 5
++Thus, the input packet is rewritten and sent to FOUTPUT, and packets from the
++reply flow are rewritten to look like part of the original flow and sent to
++ROUTPUT.
++.IP "" 5
++
++.IP "\&'pattern PATNAME FOUTPUT ROUTPUT'" 5
++Behaves like the version in 
++.M IPRewriter "n" ,
++except that PATNAME must name an
++.M IPAddrRewriter "n" -like
++pattern.
++.IP "" 5
++.PP
++Input packets must have their IP header annotations set.  
++.M IPAddrRewriter "n" 
++changes IP packet data and destination IP address annotations.
++.PP
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBmappings\fR (read-only)" 5
++Returns a human-readable description of the 
++.M IPAddrRewriter "n" 's
++current set of
++mappings.
++.IP "" 5
++.IP "\fBnmappings\fR (read-only)" 5
++Returns the number of currently installed mappings.
++.IP "" 5
++.IP "\fBpatterns\fR (read-only)" 5
++Returns a human-readable description of the patterns associated with this
++.M IPAddrRewriter "n" .
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M IPRewriter n ,
++.M IPAddrRewriter n ,
++.M TCPRewriter n ,
++.M IPRewriterPatterns n ,
++.M RoundRobinIPMapper n ,
++.M FTPPortMapper n ,
++.M ICMPRewriter n ,
++.M ICMPPingRewriter n ,
++.M StoreIPAddress n 
++(
++.M for n 
++.M simple n 
++uses)
++
+diff -Nurb click-1.6.0/inst/share/man/mann/IPAddrRewriter.n click-1.6.0-27/inst/share/man/mann/IPAddrRewriter.n
+--- click-1.6.0/inst/share/man/mann/IPAddrRewriter.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/IPAddrRewriter.n        2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,113 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/ipaddrrewriter.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "IPADDRREWRITER" n "11/Feb/2009" "Click"
++.SH "NAME"
++IPAddrRewriter \- Click element;
++rewrites IP packets' addresses
++.SH "SYNOPSIS"
++\fBIPAddrRewriter\fR(INPUTSPEC1, ..., INPUTSPECn)
++
++\fBPorts\fR: 1 or more inputs, 1-256 outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Rewrites the source and/or destination addresses on IP packets, along with
++their checksums.  \fBIPAddrRewriter\fR implements the functionality of a network
++address translator (Basic NAT), where internal hosts are assigned
++temporary IP addresses as they access the Internet.  Basic NAT works for any
++IP protocol, but the number of internal hosts that can access the Internet
++simultaneously is limited by the number of external IP addresses available.
++See also 
++.M IPRewriter "n" 
++and 
++.M TCPRewriter "n" ,
++which implement network address/port
++translation (NAPT).
++.PP
++\fBIPAddrRewriter\fR maintains a \fImapping table\fR that records how addresses are
++rewritten.  On receiving a packet, \fBIPAddrRewriter\fR first looks up that packet
++in the mapping table by source or destination address.  If the table contains
++a mapping for either address, then the packet is rewritten according to the
++mapping and emitted on the specified output port.  If there was no mapping,
++the packet is handled by the INPUTSPEC corresponding to the input port on
++which the packet arrived.  (There are as many input ports as INPUTSPECs.)
++Most INPUTSPECs install new mappings, so that future packets from the same
++address are handled by the mapping table rather than some INPUTSPEC.  The six
++forms of INPUTSPEC handle input packets as follows:
++.PP
++
++
++.IP "\&'drop', 'pass OUTPUT', 'keep FOUTPUT ROUTPUT', 'ELEMENTNAME'" 5
++These INPUTSPECs behave like those in 
++.M IPRewriter "n" .
++.IP "" 5
++.IP "\&'pattern SADDR[-SADDR2] - FOUTPUT ROUTPUT'" 5
++Creates a mapping according to the given pattern.  The destination
++address must be a dash '-', since \fBIPAddrRewriter\fR only changes outgoing
++packets' source addresses.  (If you want to rewrite destination addresses,
++use 
++.M IPAddrPairRewriter "n" 
++instead.)
++SADDR may be a range 'L-H' or prefix 'ADDR/PFX';
++.M IPRewriter "n" 
++will choose an unallocated address in that range, or drop the
++packet if no address is available.  Normally addresses are chosen randomly
++within the range.  To allocate addresses sequentially (which can make testing
++easier), append a pound sign to the range, as in '1.0.0.1-1.255.255.254#'.
++SADDR may also be a dash, in which case the source address is left unchanged.
++.IP "" 5
++Packets sent from the old source address are rewritten and sent to FOUTPUT,
++and packets sent to the new source address are rewritten back and sent to
++ROUTPUT.
++.IP "" 5
++.IP "\&'pattern PATNAME FOUTPUT ROUTPUT'" 5
++Behaves like the version in 
++.M IPRewriter "n" ,
++except that PATNAME must name an
++\fBIPAddrRewriter\fR-like pattern.
++.IP "" 5
++.PP
++Input packets must have their IP header annotations set.  \fBIPAddrRewriter\fR
++changes IP packet data and destination IP address annotations.
++.PP
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBmappings\fR (read-only)" 5
++Returns a human-readable description of the \fBIPAddrRewriter\fR's current set of
++mappings.
++.IP "" 5
++.IP "\fBnmappings\fR (read-only)" 5
++Returns the number of currently installed mappings.
++.IP "" 5
++.IP "\fBpatterns\fR (read-only)" 5
++Returns a human-readable description of the patterns associated with this
++\fBIPAddrRewriter\fR.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M IPRewriter n ,
++.M IPAddrPairRewriter n ,
++.M TCPRewriter n ,
++.M IPRewriterPatterns n ,
++.M RoundRobinIPMapper n ,
++.M FTPPortMapper n ,
++.M ICMPRewriter n ,
++.M ICMPPingRewriter n ,
++.M StoreIPAddress n 
++(
++.M for n 
++.M simple n 
++uses)
++
+diff -Nurb click-1.6.0/inst/share/man/mann/IPClassifier.n click-1.6.0-27/inst/share/man/mann/IPClassifier.n
+--- click-1.6.0/inst/share/man/mann/IPClassifier.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/IPClassifier.n  2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,239 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/ipclassifier.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "IPCLASSIFIER" n "11/Feb/2009" "Click"
++.SH "NAME"
++IPClassifier \- Click element;
++classifies IP packets by contents
++.SH "SYNOPSIS"
++\fBIPClassifier\fR(PATTERN_1, ..., PATTERN_N)
++
++\fBPorts\fR: 1 input, any number of outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Classifies IP packets according to 
++.M tcpdump 1 -like
++patterns. The
++\fBIPClassifier\fR has N outputs, each associated with the corresponding pattern
++from the configuration string. The input packets must have their IP header
++annotation set; 
++.M CheckIPHeader "n" 
++and 
++.M MarkIPHeader "n" 
++do this.
++.PP
++Patterns are built from \fIpattern primitives\fR. The primitives
++\fBIPClassifier\fR understands are:
++.PP
++
++
++.IP "\fBip proto PROTO\fR" 8
++PROTO is an IP protocol name (see below) or a valid IP protocol number.
++Matches packets of the given protocol.
++.IP "" 8
++.IP "\fB[SRCORDST] host IPADDR\fR" 8
++IPADDR is an IP address and SRCORDST is 'src', 'dst', 'src or dst', or 'src
++and dst'. (If SRCORDST is missing, 'src or dst' is assumed.) Matches
++packets sent to and/or from the given address.
++.IP "" 8
++.IP "\fB[SRCORDST] net NETADDR\fR" 8
++NETADDR is an IP network address (either CIDR-style 'IPADDR/BITS' or
++\&'IPADDR mask MASK') and SRCORDST is as above. Matches packets sent to
++and/or from the given network.
++.IP "" 8
++.IP "\fB[SRCORDST] [tcp | udp] port PORT\fR" 8
++PORT is a TCP or UDP port name (see below) or number and SRCORDST is as
++above. Matches packets sent to and/or from the given TCP or UDP port. If
++you leave out 'tcp' or 'udp', then either TCP or UDP is accepted.
++.IP "" 8
++.IP "\fBip vers VERSION\fR" 8
++VERSION is a value between 0 and 15. Matches IP packets with the given
++version.
++.IP "" 8
++.IP "\fBip hl HL\fR" 8
++HL is a value between 0 and 15. Matches IP packets with the given header
++length.
++.IP "" 8
++.IP "\fBip id ID\fR" 8
++ID is a value between 0 and 65535. Matches IP packets with the given IP ID.
++.IP "" 8
++.IP "\fBip tos TOS\fR" 8
++TOS is a value between 0 and 255. Matches IP packets with the given TOS
++value.
++.IP "" 8
++.IP "\fBip dscp DSCP\fR" 8
++DSCP is a value between 0 and 63. Matches IP packets with the given DSCP
++value (the upper 6 bits of TOS).
++.IP "" 8
++.IP "\fBip ect\fR" 8
++Matches IP packets with ECN Capable Transport turned on.
++.IP "" 8
++.IP "\fBip ce\fR" 8
++Matches IP packets with ECN Congestion Experienced set.
++.IP "" 8
++.IP "\fBip ttl TTL\fR" 8
++TTL is a value between 0 and 255. Matches IP packets with the given TTL value.
++.IP "" 8
++.IP "\fBip frag\fR" 8
++Matches fragmented IP packets (that is, packets with the more-fragments bit
++set and/or a nonzero fragment offset).
++.IP "" 8
++.IP "\fBip unfrag\fR" 8
++Equivalent to 'not ip frag'.
++.IP "" 8
++.IP "\fBtcp opt TCPOPT\fR" 8
++TCPOPT is a TCP option name (see below). Matches TCP packets with the given
++option.
++.IP "" 8
++.IP "\fBtcp win TCPWIN\fR" 8
++TCPWIN is a TCP receive window length. Matches TCP packets with the given
++window length. Note that window scaling is not applied.
++.IP "" 8
++.IP "\fBicmp type TYPE\fR" 8
++TYPE is a value between 0 and 255 or an ICMP type name (see below). Matches
++ICMP packets with the given ICMP type.
++.IP "" 8
++.IP "\fBip[POS:LEN] VALUE\fR" 8
++Matches packets whose IP header field starting at byte position POS, and going
++on for LEN bytes, equals VALUE.  You can say \fBip[POS]\fR instead of
++\fBip[POS:1]\fR.
++.IP "" 8
++.IP "\fBtransp[POS:LEN] VALUE\fR" 8
++Like \fBip[POS:LEN]\fR, but for transport header fields.  You can also give
++particular transport protocols, such as \fBtcp[POS:LEN]\fR.
++.IP "" 8
++.IP "\fBtrue\fR" 8
++Matches every packet.
++.IP "" 8
++.IP "\fBfalse\fR" 8
++Matches no packets.
++.IP "" 8
++.PP
++These primitives can be combined with the connectives 'and', 'or', and 'not'
++(synonyms '&&', '||', and '!'), with the ternary operator '?:' (the colon
++must be surrounded by spaces!), and with parentheses. For example, '(dst port
++www or dst port ssh) and tcp opt syn'.
++.PP
++All primitives except \fBtcp opt\fR accept an optional OPERATION, '==' or '!=',
++which can occur before the actual option.  If no OPERATION is specified, '=='
++is assumed.  'src host == 10.0.0.10' matches packets whose source host is
++10.0.0.10; 'src host != 10.0.0.10' matches packets whose source host \fIis not\fR
++10.0.0.10.  Directives with integer values also support the '<', '>', '<=',
++and '>=' operations.
++.PP
++For \fBport\fR and \fBicmp type\fR directives, 'DIRECTIVE != VALUE' is not the
++same as 'not (DIRECTIVE == VALUE)'. For example, 'src tcp port != 5'
++matches TCP packets whose source port is not 5, while '!(src tcp port ==
++5)' matches non-TCP packets as well. (The 'src tcp port != 5' option is
++effectively equivalent to 'tcp and not src tcp port 5'.) Similarly, 'icmp
++type != 4' will not match non-ICMP packets. The same goes for the '<', '>',
++\&'<=', and '>=' relations.
++.PP
++Most primitives also accept bitmasks: 'DIRECTIVE & MASK [[OP] VALUE]'.  For
++instance, 'src tcp port & 10 == 8'.
++.PP
++The \fBport\fR, \fBicmp type\fR, and \fBtcp opt\fR directives will only match first
++fragments.
++.PP
++You can omit a lot of this syntax. For example, instead of 'ip proto tcp',
++you can just say 'tcp'; and similarly for 'port www' (just say 'www'), 'tcp
++opt syn' (just say 'syn'), 'net 10.0.0.0/24' (just say '10.0.0.0/24'), and
++\&'ip unfrag' (just say 'unfrag'). You can often eliminate repetitive
++qualifiers, too: 'src port 80 or 81' is the same as 'src port 80 or src
++port 81'.
++.PP
++A pattern consisting entirely of "-", "any", or "all" matches every packet.
++.PP
++The patterns are scanned in order, and the packet is sent to the output
++corresponding to the first matching pattern. Thus more specific patterns
++should come before less specific ones. You will get a warning if no packet
++will ever match a pattern. Usually, this is because an earlier pattern is
++more general, or because your pattern is contradictory ('src port www and
++src port ftp').
++.PP
++.SH "NOTES"
++Valid IP port names: 'echo', 'discard', 'daytime', 'chargen', 'ftp-data',
++\&'ftp', 'ssh', 'telnet', 'smtp', 'domain', 'dns', 'bootps', 'bootpc',
++\&'tftp', 'finger', 'www', 'pop3', 'sunrpc', 'auth', 'nntp', 'ntp',
++\&'netbios-ns', 'netbios-dgm', 'netbios-ssn', 'snmp', 'snmp-trap', 'irc',
++\&'imap3', 'https', 'rip', 'route', 'imaps', 'pop3s'
++.PP
++Valid IP protocol names: 'icmp', 'igmp', 'ipip', 'tcp', 'udp'
++.PP
++Valid TCP options: 'syn', 'fin', 'ack', 'rst', 'psh', 'urg'
++.PP
++Valid ICMP type names: 'echo-reply', 'unreachable', 'sourcequench',
++\&'redirect', 'echo', 'routeradvert', 'routersolicit', 'timeexceeded',
++\&'parameterproblem', 'timestamp', 'timestamp-reply', 'inforeq',
++\&'inforeq-reply', 'maskreq', 'maskreq-reply'
++.PP
++This element correctly handles IP packets with options.
++.PP
++\fB[tcp | udp] port\fR, \fBicmp type\fR, \fBtcp opt\fR, and \fBtcp win\fR directives can
++only be true on the first fragment of a fragmented packet.
++.PP
++Every \fBIPClassifier\fR element has an equivalent corresponding 
++.M IPFilter "n" 
++element
++and vice versa. Use the element whose syntax is more convenient for your
++needs.
++.PP
++
++.SH "EXAMPLES"
++For example,
++.PP
++.nf
++\&  IPClassifier(10.0.0.0/24 and syn,
++\&               10.0.0.0/24 and fin ack,
++\&               10.0.0.0/24 and tcp,
++\&               -);
++.fi
++.PP
++creates an element with four outputs. The first three outputs are for TCP
++packets from net 10.0.0.x. SYN packets are sent to output 0, FIN packets
++with the ACK bit set to output 1, and all other TCP packets to output 2.
++The last output is for all other IP packets, and non-TCP packets from net
++10.0.0.x.
++.PP
++.nf
++\&  IPClassifier(dst tcp port 8000 or 8080,
++\&               dst tcp port > 1023,
++\&               tcp);
++.fi
++.PP
++creates an element with three outputs. The first output is for TCP packets
++destined for port 8000 or 8080; the second output is for TCP packets
++destined for any other user port (that is, port > 1023); and the third
++output is for all other TCP packets. Non-TCP packets are dropped.
++.PP
++
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBprogram\fR (read-only)" 5
++Returns a human-readable definition of the program the \fBIPClassifier\fR element
++is using to classify packets. At each step in the program, four bytes
++of packet data are ANDed with a mask and compared against four bytes of
++classifier pattern.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M Classifier n ,
++.M IPFilter n ,
++.M CheckIPHeader n ,
++.M MarkIPHeader n ,
++.M CheckIPHeader2 n ,
++tcpdump(1)
++
+diff -Nurb click-1.6.0/inst/share/man/mann/IPEncap.n click-1.6.0-27/inst/share/man/mann/IPEncap.n
+--- click-1.6.0/inst/share/man/mann/IPEncap.n  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/IPEncap.n       2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,91 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/ipencap.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "IPENCAP" n "11/Feb/2009" "Click"
++.SH "NAME"
++IPEncap \- Click element;
++encapsulates packets in static IP header
++.SH "SYNOPSIS"
++\fBIPEncap\fR(PROTO, SRC, DST, \fIKEYWORDS\fR)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Encapsulates each incoming packet in an IP packet with protocol
++PROTO, source address SRC, and destination address DST.
++This is most useful for IP-in-IP encapsulation.
++Its destination address annotation is also set to DST.
++.PP
++As a special case, if DST is "DST_ANNO", then the destination address
++is set to the incoming packet's destination address annotation.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "TTL" 8
++Byte. The IP header's time-to-live field. Default is 250.
++.IP "" 8
++.IP "DSCP" 8
++Number between 0 and 63. The IP header's DSCP value. Default is 0.
++.IP "" 8
++.IP "ECT" 8
++Boolean or "2". If true, sets the IP header's ECN bits to ECN Capable
++Transport. If "true", "1" or "yes", sets the ECN bits to 1; but if "2", sets
++them to 2. Default is false.
++.IP "" 8
++.IP "CE" 8
++Boolean. If true, sets the IP header's ECN bits to 3 (Congestion Experienced).
++Default is false.
++.IP "" 8
++.IP "TOS" 8
++Byte. The IP header's TOS value. Default is 0. If you specify TOS, you may not
++specify DSCP, ECT, or CE.
++.IP "" 8
++.IP "DF" 8
++Boolean. If true, sets the IP header's Don't Fragment bit to 1. Default is
++false.
++.IP "" 8
++.PP
++The 
++.M StripIPHeader "n" 
++element can be used by the receiver to get rid
++of the encapsulation header.
++.PP
++.SH "EXAMPLES"
++Wraps packets in an IP header specifying IP protocol 4
++(IP-in-IP), with source 18.26.4.24 and destination 140.247.60.147:
++.PP
++.nf
++\&  IPEncap(4, 18.26.4.24, 140.247.60.147)
++.fi
++.PP
++You could also say "\f(CWIPEncap(ipip, ...)\fR".
++.PP
++
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBsrc\fR (read/write)" 5
++Returns or sets the SRC parameter.
++.IP "" 5
++.IP "\fBdst\fR (read/write)" 5
++Returns or sets the DST parameter.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M UDPIPEncap n ,
++.M StripIPHeader "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/IPFilter.n click-1.6.0-27/inst/share/man/mann/IPFilter.n
+--- click-1.6.0/inst/share/man/mann/IPFilter.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/IPFilter.n      2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,145 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/ipfilter.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "IPFILTER" n "11/Feb/2009" "Click"
++.SH "NAME"
++IPFilter \- Click element;
++filters IP packets by contents
++.SH "SYNOPSIS"
++\fBIPFilter\fR(ACTION_1 PATTERN_1, ..., ACTION_N PATTERN_N)
++
++\fBPorts\fR: 1 input, any number of outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Filters IP packets. \fBIPFilter\fR can have an arbitrary number of filters, which
++are ACTION-PATTERN pairs. The ACTIONs describe what to do with packets,
++while the PATTERNs are 
++.M tcpdump 1 -like
++patterns; see 
++.M IPClassifier n 
++for a
++description of their syntax. Packets are tested against the filters in
++order, and are processed according to the ACTION in the first filter that
++matched.
++.PP
++Each ACTION is either a port number, which specifies that the packet should be
++sent out on that port; '\f(CWallow\fR', which is equivalent to '\f(CW0\fR'; or '\f(CWdrop\fR'
++, which means drop the packet. You can also say '\f(CWdeny\fR' instead of
++\&'\f(CWdrop\fR', but see the compatibility note below.
++.PP
++The \fBIPFilter\fR element has an arbitrary number of outputs. Input packets must
++have their IP header annotation set; 
++.M CheckIPHeader "n" 
++and 
++.M MarkIPHeader "n" 
++do
++this.
++.PP
++
++.SH "NOTES"
++Every \fBIPFilter\fR element has an equivalent corresponding 
++.M IPClassifier "n" 
++element
++and vice versa. Use the element whose syntax is more convenient for your
++needs.
++.PP
++\fBCompatibility note\fR: '\f(CWdeny\fR' formerly meant '\f(CW1\fR' if the element had at
++least two outputs and '\f(CWdrop\fR' if it did not. We decided this was
++error-prone; now it just means '\f(CWdrop\fR'. For now, however, '\f(CWdeny\fR' will
++print a warning if used on an element with more than one output.
++.PP
++
++.SH "EXAMPLES"
++This large \fBIPFilter\fR implements the incoming packet filtering rules for the
++"Interior router" described on pp691-692 of \fIBuilding Internet Firewalls,
++Second Edition\fR (Elizabeth D. Zwicky, Simon Cooper, and D. Brent Chapman,
++O'Reilly and Associates, 2000). The captialized words (\f(CWINTERNALNET\fR,
++\f(CWBASTION\fR, etc.) are addresses that have been registered with
++.M AddressInfo n .
++The rule FTP-7 has a port range that cannot be implemented
++with \fBIPFilter\fR.
++.PP
++.nf
++\&  IPFilter(// Spoof-1:
++\&           deny src INTERNALNET,
++\&           // HTTP-2:
++\&           allow src BASTION && dst INTERNALNET
++\&              && tcp && src port www && dst port > 1023 && ack,
++\&           // Telnet-2:
++\&           allow dst INTERNALNET
++\&              && tcp && src port 23 && dst port > 1023 && ack,
++\&           // SSH-2:
++\&           allow dst INTERNALNET && tcp && src port 22 && ack,
++\&           // SSH-3:
++\&           allow dst INTERNALNET && tcp && dst port 22,
++\&           // FTP-2:
++\&           allow dst INTERNALNET
++\&              && tcp && src port 21 && dst port > 1023 && ack,
++\&           // FTP-4:
++\&           allow dst INTERNALNET
++\&              && tcp && src port > 1023 && dst port > 1023 && ack,
++\&           // FTP-6:
++\&           allow src BASTION && dst INTERNALNET
++\&              && tcp && src port 21 && dst port > 1023 && ack,
++\&           // FTP-7 omitted
++\&           // FTP-8:
++\&           allow src BASTION && dst INTERNALNET
++\&              && tcp && src port > 1023 && dst port > 1023,
++\&           // SMTP-2:
++\&           allow src BASTION && dst INTERNAL_SMTP
++\&              && tcp && src port 25 && dst port > 1023 && ack,
++\&           // SMTP-3:
++\&           allow src BASTION && dst INTERNAL_SMTP
++\&              && tcp && src port > 1023 && dst port 25,
++\&           // NNTP-2:
++\&           allow src NNTP_FEED && dst INTERNAL_NNTP
++\&              && tcp && src port 119 && dst port > 1023 && ack,
++\&           // NNTP-3:
++\&           allow src NNTP_FEED && dst INTERNAL_NNTP
++\&              && tcp && src port > 1023 && dst port 119,
++\&           // DNS-2:
++\&           allow src BASTION && dst INTERNAL_DNS
++\&              && udp && src port 53 && dst port 53,
++\&           // DNS-4:
++\&           allow src BASTION && dst INTERNAL_DNS
++\&              && tcp && src port 53 && dst port > 1023 && ack,
++\&           // DNS-5:
++\&           allow src BASTION && dst INTERNAL_DNS
++\&              && tcp && src port > 1023 && dst port 53,
++\&           // Default-2:
++\&           deny all);
++.fi
++.PP
++
++
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBprogram\fR (read-only)" 5
++Returns a human-readable definition of the program the \fBIPFilter\fR element
++is using to classify packets. At each step in the program, four bytes
++of packet data are ANDed with a mask and compared against four bytes of
++classifier pattern.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M IPClassifier n ,
++.M Classifier n ,
++.M CheckIPHeader n ,
++.M MarkIPHeader n ,
++.M CheckIPHeader2 n ,
++.M AddressInfo n ,
++tcpdump(1)
++
+diff -Nurb click-1.6.0/inst/share/man/mann/IPFragmenter.n click-1.6.0-27/inst/share/man/mann/IPFragmenter.n
+--- click-1.6.0/inst/share/man/mann/IPFragmenter.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/IPFragmenter.n  2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,69 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/ipfragmenter.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "IPFRAGMENTER" n "11/Feb/2009" "Click"
++.SH "NAME"
++IPFragmenter \- Click element;
++fragments large IP packets
++.SH "SYNOPSIS"
++\fBIPFragmenter\fR(MTU, [\fIkeywords\fR HONOR_DF, VERBOSE])
++
++\fBPorts\fR: 1 input, 1-2 outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Expects IP packets as input. If the IP packet size is <= MTU, just emits
++the packet on output 0. If the size is greater than MTU and the
++don't-fragment bit (DF) isn't set, \fBIPFragmenter\fR splits the packet into
++fragments emitted on output 0. If DF is set and the packet size is greater
++than MTU, sends the packet to output 1 (but see HONOR_DF below). Ordinarily
++output 1 is connected to an 
++.M ICMPError "n" 
++element with type 3 (UNREACH) and
++code 4 (NEEDFRAG).
++.PP
++Only the mac_broadcast annotation is copied into the fragments.
++.PP
++Sends the fragments in order, starting with the first.
++.PP
++It is best to Strip() the MAC header from a packet before sending it to
++\fBIPFragmenter\fR, since any MAC header is not copied to second and subsequent
++fragments.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "HONOR_DF" 8
++Boolean. If HONOR_DF is false, \fBIPFragmenter\fR will ignore the don't-fragment
++(DF) bit and fragment every packet larger than MTU. Default is true.
++.IP "" 8
++.IP "VERBOSE" 8
++Boolean.  If true, \fBIPFragmenter\fR will print a message every time it sees a
++packet with DF; otherwise, it will print a message only the first 5 times.
++Default is false.
++.IP "" 8
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\&  ... -> fr::IPFragmenter(1024) -> Queue(20) -> ...
++\&  fr[1] -> ICMPError(18.26.4.24, 3, 4) -> ...
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M ICMPError n ,
++.M CheckLength "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/IPGWOptions.n click-1.6.0-27/inst/share/man/mann/IPGWOptions.n
+--- click-1.6.0/inst/share/man/mann/IPGWOptions.n      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/IPGWOptions.n   2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,50 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/ipgwoptions.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "IPGWOPTIONS" n "11/Feb/2009" "Click"
++.SH "NAME"
++IPGWOptions \- Click element;
++processes router IP options
++.SH "SYNOPSIS"
++\fBIPGWOptions\fR(MYADDR [, OTHERADDRS])
++
++\fBPorts\fR: 1 input, 1-2 outputs
++.br
++\fBProcessing\fR: agnostic, but output 1 is push
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Process the IP options that should be processed by every router,
++not just when ip_dst refers to the current router. At the moment
++that amounts to Record Route and Timestamp (in particular,
++not the source route options). MYADDR is the router's
++IP address on the interface downstream from the element.
++.PP
++Probably needs to be placed on the output path, since MYADDR
++must be the outgoing interface's IP address (rfc1812 4.2.2.2).
++.PP
++Recomputes the IP header checksum if it modifies the packet.
++.PP
++The optional OTHERADDRS argument should be a space-separated list of IP
++addresses containing the router's other interface addresses. It is used to
++implement the Timestamp option.
++.PP
++The second output may be connected to an 
++.M ICMPError "n" 
++to produce
++a parameter problem (type=12,code=0) message. \fBIPGWOptions\fR sets
++the param_off packet annotation so that 
++.M ICMPError "n" 
++can set
++the Parameter Problem pointer to point to the erroneous byte.
++.PP
++
++.SH "SEE ALSO"
++.M ICMPError "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/IPInputCombo.n click-1.6.0-27/inst/share/man/mann/IPInputCombo.n
+--- click-1.6.0/inst/share/man/mann/IPInputCombo.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/IPInputCombo.n  2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,48 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/ipinputcombo.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "IPINPUTCOMBO" n "11/Feb/2009" "Click"
++.SH "NAME"
++IPInputCombo \- Click element;
++input combo for IP routing
++.SH "SYNOPSIS"
++\fBIPInputCombo\fR(COLOR [, BADSRC, \fIkeywords\fR INTERFACES, BADSRC, GOODDST])
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++A single element encapsulating common tasks on an IP router's input path.
++Effectively equivalent to
++.PP
++.nf
++\&  elementclass IPInputCombo { $COLOR, $BADADDRS |
++\&    input[0] -> Paint($COLOR)
++\&          -> Strip(14)
++\&          -> CheckIPHeader($BADADDRS)
++\&          -> GetIPAddress(16)
++\&          -> [0]output;
++\&  }
++.fi
++.PP
++The INTERFACES, BADSRC, and GOODDST keyword arguments correspond to
++.M CheckIPHeader "n" 's
++versions.
++.PP
++
++
++.SH "SEE ALSO"
++.M Paint n ,
++.M CheckIPHeader n ,
++.M Strip n ,
++.M GetIPAddress n ,
++.M IPOutputCombo "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/IPMirror.n click-1.6.0-27/inst/share/man/mann/IPMirror.n
+--- click-1.6.0/inst/share/man/mann/IPMirror.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/IPMirror.n      2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,31 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/ipmirror.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "IPMIRROR" n "11/Feb/2009" "Click"
++.SH "NAME"
++IPMirror \- Click element;
++swaps IP source and destination
++.SH "SYNOPSIS"
++\fBIPMirror\fR
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Incoming packets must have their IP header annotations set. Swaps packets'
++source and destination IP addresses. Packets containing TCP or UDP
++headers---that is, first fragments of packets with protocol 6 or 17---also
++have their source and destination ports swapped. TCP packets also have their
++seq and ack numbers swapped.
++.PP
++The IP and TCP or UDP checksums are not changed. They don't need to be; these
++swap operations do not affect checksums.
++
+diff -Nurb click-1.6.0/inst/share/man/mann/IPNameInfo.n click-1.6.0-27/inst/share/man/mann/IPNameInfo.n
+--- click-1.6.0/inst/share/man/mann/IPNameInfo.n       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/IPNameInfo.n    2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,23 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/ipnameinfo.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "IPNAMEINFO" n "11/Feb/2009" "Click"
++.SH "NAME"
++IPNameInfo \- Click element;
++stores name information about IP packets
++.SH "SYNOPSIS"
++\fBIPNameInfo\fR()
++
++\fBPorts\fR: none
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Contains IP-related name mappings, such as the names for common IP protocols.
++This element should not be used in configurations.
++
+diff -Nurb click-1.6.0/inst/share/man/mann/IPOutputCombo.n click-1.6.0-27/inst/share/man/mann/IPOutputCombo.n
+--- click-1.6.0/inst/share/man/mann/IPOutputCombo.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/IPOutputCombo.n 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,69 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/ipoutputcombo.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "IPOUTPUTCOMBO" n "11/Feb/2009" "Click"
++.SH "NAME"
++IPOutputCombo \- Click element;
++output combo for IP routing
++.SH "SYNOPSIS"
++\fBIPOutputCombo\fR(COLOR, IPADDR, MTU)
++
++\fBPorts\fR: 1 input, 5 outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++A single element encapsulating common tasks on an IP router's output path.
++Effectively equivalent to
++.PP
++.nf
++\&  elementclass IPOutputCombo { $COLOR, $IPADDR, $MTU |
++\&    input[0] -> DropBroadcasts
++\&          -> p::PaintTee($COLOR)
++\&          -> g::IPGWOptions($IPADDR)
++\&          -> FixIPSrc($IPADDR)
++\&          -> d::DecIPTTL
++\&          -> l::CheckLength($MTU)
++\&          -> [0]output;
++\&    p[1] -> [1]output;
++\&    g[1] -> [2]output;
++\&    d[1] -> [3]output;
++\&    l[1] -> [4]output;
++\&  }
++.fi
++.PP
++Output 0 is the path for normal packets; outputs 1 through 3 are error
++outputs for 
++.M PaintTee "n" ,
++.M IPGWOptions "n" ,
++and 
++.M DecIPTTL "n" ,
++respectively; and
++output 4 is for packets longer than MTU.
++.PP
++
++
++.SH "NOTES"
++\fBIPOutputCombo\fR does no fragmentation. You'll still need an 
++.M IPFragmenter "n" 
++for
++that.
++.PP
++
++.SH "SEE ALSO"
++.M DropBroadcasts n ,
++.M PaintTee n ,
++.M CheckLength n ,
++.M IPGWOptions n ,
++.M FixIPSrc n ,
++.M DecIPTTL n ,
++.M IPFragmenter n ,
++.M IPInputCombo "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/IPPrint.n click-1.6.0-27/inst/share/man/mann/IPPrint.n
+--- click-1.6.0/inst/share/man/mann/IPPrint.n  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/IPPrint.n       2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,91 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/ipprint.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "IPPRINT" n "11/Feb/2009" "Click"
++.SH "NAME"
++IPPrint \- Click element;
++pretty-prints IP packets
++.SH "SYNOPSIS"
++\fBIPPrint\fR([LABEL, \fIKEYWORDS\fR])
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Expects IP packets as input.  Should be placed downstream of a 
++.M CheckIPHeader "n" 
++or equivalent element.
++.PP
++Prints out IP packets in a human-readable tcpdump-like format, preceded by
++the LABEL text.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "CONTENTS" 8
++Determines whether the packet data is printed. It may be `NONE' (do not print
++packet data), `HEX' (print packet data in hexadecimal), or `ASCII' (print
++packet data in plaintext). Default is `NONE'.
++.IP "" 8
++.IP "PAYLOAD" 8
++Like CONTENTS, but prints only the packet payload, rather than the entire
++packet. Specify at most one of CONTENTS and PAYLOAD.
++.IP "" 8
++.IP "NBYTES" 8
++If CONTENTS is `hex' or `ascii', then NBYTES determines the number of bytes to
++dump. Default is 1500.
++.IP "" 8
++.IP "ID" 8
++Boolean. Determines whether to print each packet's IP ID field. Default is
++false.
++.IP "" 8
++.IP "TTL" 8
++Boolean. Determines whether to print each packet's IP TOS field. Default is
++false.
++.IP "" 8
++.IP "TOS" 8
++Boolean. Determines whether to print each packet's IP TOS field. Default is
++false.
++.IP "" 8
++.IP "LENGTH" 8
++Boolean. Determines whether to print each packet's IP length field. Default is
++false.
++.IP "" 8
++.IP "TIMESTAMP" 8
++Boolean. Determines whether to print each packet's timestamp in seconds since
++1970. Default is true.
++.IP "" 8
++.IP "AGGREGATE" 8
++Boolean. Determines whether to print each packet's aggregate annotation.
++Default is false.
++.IP "" 8
++.IP "PAINT" 8
++Boolean. Determines whether to print each packet's paint annotation. Default is false.
++.IP "" 8
++.IP "SWAP" 8
++Boolean.  Determines whether to swap bytes before printing the values
++of ICMP sequence and ID numbers.  Default is false.  The RFC does not
++require these two-byte values to be sent in any particular byte order.
++For example, OpenBSD/i386 writes ping (ICMP echo) sequence numbers in
++network byte order, while Linux/i386 writes them in host byte order
++(often little-endian).
++.IP "" 8
++.IP "OUTFILE" 8
++String. Only available at user level. Print information to the file specified
++by OUTFILE instead of standard error.
++.IP "" 8
++.PP
++
++.SH "SEE ALSO"
++.M Print n ,
++.M CheckIPHeader "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/IPRateMonitor.n click-1.6.0-27/inst/share/man/mann/IPRateMonitor.n
+--- click-1.6.0/inst/share/man/mann/IPRateMonitor.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/IPRateMonitor.n 2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,88 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/ipratemon.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "IPRATEMONITOR" n "11/Feb/2009" "Click"
++.SH "NAME"
++IPRateMonitor \- Click element;
++measures coming and going IP traffic rates
++.SH "SYNOPSIS"
++\fBIPRateMonitor\fR(TYPE, RATIO, THRESH [, MEMORY, ANNO])
++
++\fBPorts\fR: 1-2 inputs, 1-2 outputs
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBDrivers\fR: userlevel
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Monitors network traffic rates. Can monitor either packet or byte rate (per
++second) to and from an address. When forward or reverse rate for a
++particular address exceeds THRESH, rates will then be kept for host or
++subnet addresses within that address. May update each packet's
++dst_rate_anno and src_rate_anno with the rates for dst or src IP address.
++.PP
++Packets coming in one input 0 are inspected on src address. Packets coming
++in on input 1 are insepected on dst address. This enables \fBIPRateMonitor\fR to
++annotate packets with both the forward rate and reverse rate.
++.PP
++TYPE: PACKETS or BYTES. Count number of packets or bytes.
++.PP
++RATIO: chance that EWMA gets updated before packet is annotated with EWMA
++value.
++.PP
++THRESH: \fBIPRateMonitor\fR further splits a subnet if rate is over THRESH number
++packets or bytes per second. Always specify value as if RATIO were 1.
++.PP
++MEMORY: How much memory can \fBIPRateMonitor\fR use in kilobytes? Minimum of 100
++is enforced. 0 is unlimited memory.
++.PP
++ANNO: if on (by default, it is), annotate packets with rates.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBlook\fR ((read))" 5
++Returns the rate of counted to and from a cluster of IP addresses. The first
++printed line is the number of 'jiffies' that have past since the last reset.
++There are 100 jiffies in one second.
++.IP "" 5
++.IP "\fBthresh\fR ((read))" 5
++Returns THRESH.
++.IP "" 5
++.IP "\fBreset\fR ((write))" 5
++When written, resets all rates.
++.IP "" 5
++.IP "\fBanno_level\fR ((write))" 5
++Expects "IPAddress level when". When written, makes \fBIPRateMonitor\fR stop
++expanding at "level" (0-3) for the IPAddress, until "when" (seconds).  For
++example, if "18.26.4.0 2 100" is specified, \fBIPRateMonitor\fR will stop
++expanding when 18.26.4 is reached for the next 100 seconds. After 100
++seconds, any level below 18.26.4 may be reached again.
++.IP "" 5
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\&  IPRateMonitor(PACKETS, 0.5, 256, 600);
++.fi
++.PP
++Monitors packet rates. The memory usage is limited to 600K. When rate for a
++network address (e.g. 18.26.*.*) exceeds 256 packets per second, start
++monitor subnet or host addresses (e.g. 18.26.4.*).
++.PP
++
++
++.SH "SEE ALSO"
++.M IPFlexMonitor n ,
++.M CompareBlock "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/IPReassembler.n click-1.6.0-27/inst/share/man/mann/IPReassembler.n
+--- click-1.6.0/inst/share/man/mann/IPReassembler.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/IPReassembler.n 2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,55 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/ipreassembler.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "IPREASSEMBLER" n "11/Feb/2009" "Click"
++.SH "NAME"
++IPReassembler \- Click element;
++Reassembles fragmented IP packets
++.SH "SYNOPSIS"
++\fBIPReassembler\fR([\fIKEYWORDS\fR])
++
++\fBPorts\fR: 1 input, 1-2 outputs
++.br
++\fBProcessing\fR: agnostic, but output 1 is push
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Expects IP packets as input to port 0. If input packets are fragments,
++\fBIPReassembler\fR holds them until it has enough fragments to recreate a complete
++packet. When a complete packet is constructed, it is emitted onto output 0. If
++a set of fragments making a single packet is incomplete and dormant for 30
++seconds, the fragments are generally dropped. If \fBIPReassembler\fR has two
++outputs, however, a single packet containing all the received fragments at
++their proper offsets is pushed onto output 1.
++.PP
++\fBIPReassembler\fR's memory usage is bounded. When memory consumption rises above
++HIMEM bytes, \fBIPReassembler\fR throws away old fragments until memory consumption
++drops below 3/4*HIMEM bytes. Default HIMEM is 256K.
++.PP
++Output packets have no MAC headers, and input MAC headers are ignored.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "HIMEM" 8
++The upper bound for memory consumption, in bytes. Default is 256K.
++.IP "" 8
++.PP
++
++.SH "NOTES"
++You may want to attach an \f(CWICMPError(ADDR, timeexceeded, reassembly)\fR to the
++second output.
++.PP
++\fBIPReassembler\fR destroys its input packets' "next packet" annotations.
++.PP
++
++.SH "SEE ALSO"
++.M IPFragmenter "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/IPRewriter.n click-1.6.0-27/inst/share/man/mann/IPRewriter.n
+--- click-1.6.0/inst/share/man/mann/IPRewriter.n       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/IPRewriter.n    2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,183 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/tcpudp/iprewriter.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "IPREWRITER" n "11/Feb/2009" "Click"
++.SH "NAME"
++IPRewriter \- Click element;
++rewrites TCP/UDP packets' addresses and ports
++.SH "SYNOPSIS"
++\fBIPRewriter\fR(INPUTSPEC1, ..., INPUTSPECn [, \fIkeywords\fR])
++
++\fBPorts\fR: 1 or more inputs, 1-256 outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: tcpudp (core)
++.br
++.SH "DESCRIPTION"
++Rewrites the source address, source port, destination address, and/or
++destination port on TCP and UDP packets, along with their checksums.
++\fBIPRewriter\fR implements the functionality of a network address/port translator
++(NAPT).  See also 
++.M IPAddrRewriter "n" 
++and 
++.M IPAddrPairRewriter "n" ,
++which
++implement Basic NAT, and 
++.M TCPRewriter "n" ,
++which implements NAPT plus sequence
++number changes for TCP packets.
++.PP
++\fBIPRewriter\fR maintains a \fImapping table\fR that records how packets are
++rewritten.  The mapping table is indexed by \fIflow identifier\fR, the quintuple
++of source address, source port, destination address, destination port, and IP
++protocol (TCP or UDP).  Each mapping contains a new flow identifier and an
++output port.  Input packets with the indexed flow identifier are rewritten to
++use the new flow identifier, then emitted on the output port.  A mapping is
++written as follows:
++.PP
++.nf
++\&    (SA, SP, DA, DP, PROTO) => (SA', SP', DA', DP') [OUTPUT]
++.fi
++.PP
++When \fBIPRewriter\fR receives a packet, it first looks up that packet in the
++mapping table by flow identifier.  If the table contains a mapping for the
++input packet, then the packet is rewritten according to the mapping and
++emitted on the specified output port.  If there was no mapping, the packet is
++handled by the INPUTSPEC corresponding to the input port on which the packet
++arrived.  (There are as many input ports as INPUTSPECs.)  Most INPUTSPECs
++install new mappings, so that future packets from the same TCP or UDP flow are
++handled by the mapping table rather than some INPUTSPEC.  The six forms of
++INPUTSPEC handle input packets as follows:
++.PP
++
++
++
++.IP "\&'drop' or 'discard'" 5
++Discards input packets.
++.IP "" 5
++.IP "\&'pass OUTPUT'" 5
++Sends input packets to output port OUTPUT.  No mappings are installed.
++.IP "" 5
++.IP "\&'keep FOUTPUT ROUTPUT'" 5
++Installs mappings that preserve the input packet's flow ID.  Specifically,
++given an input packet with flow ID (SA, SP, DA, DP, PROTO), two mappings are
++installed:
++.IP "" 5
++.nf
++\&    (SA, SP, DA, DP, PROTO) => (SA, SP, DA, DP) [FOUTPUT]
++\&    (DA, DP, SA, SP, PROTO) => (DA, DP, SA, SP) [ROUTPUT]
++.fi
++.IP "" 5
++Thus, the input packet is emitted on output port FOUTPUT unchanged, and
++packets from the reply flow are emitted on output port ROUTPUT unchanged.
++.IP "" 5
++
++.IP "\&'pattern SADDR SPORT DADDR DPORT FOUTPUT ROUTPUT'" 5
++Creates a mapping according to the given pattern, 'SADDR SPORT DADDR DPORT'.
++Any pattern field may be a dash '-', in which case the packet's corresponding
++field is left unchanged.  For instance, the pattern '1.0.0.1 20 - -' will
++rewrite input packets' source address and port, but leave its destination
++address and port unchanged.  SPORT may be a port range 'L-H'; \fBIPRewriter\fR will
++choose a source port in that range so that the resulting mappings don't
++conflict with any existing mappings.  If no source port is available, the
++packet is dropped.  Normally source ports are chosen randomly within the
++range.  To allocate source ports sequentially (which can make testing easier),
++append a pound sign to the range, as in '1024-65535#'.
++.IP "" 5
++Say a packet with flow ID (SA, SP, DA, DP, PROTO) is received, and the
++corresponding new flow ID is (SA', SP', DA', DP').  Then two mappings are
++installed:
++.IP "" 5
++.nf
++\&    (SA, SP, DA, DP, PROTO) => (SA', SP', DA', DP') [FOUTPUT]
++\&    (DA', DP', SA', SP', PROTO) => (DA, DP, SA, SP) [ROUTPUT]
++.fi
++.IP "" 5
++Thus, the input packet is rewritten and sent to FOUTPUT, and packets from the
++reply flow are rewritten to look like part of the original flow and sent to
++ROUTPUT.
++.IP "" 5
++
++.IP "\&'pattern PATNAME FOUTPUT ROUTPUT'" 5
++Like 'pattern' above, but refers to named patterns defined by an
++.M IPRewriterPatterns "n" 
++element.
++.IP "" 5
++.IP "\&'ELEMENTNAME'" 5
++Creates mappings according to instructions from the element ELEMENTNAME.  This
++element must implement the IPMapper interface.  One example mapper is
++.M RoundRobinIPMapper "n" .
++.IP "" 5
++.PP
++\fBIPRewriter\fR has no mappings when first initialized.
++.PP
++Input packets must have their IP header annotations set.  Non-TCP and UDP
++packets, and second and subsequent fragments, are dropped unless they arrive
++on a 'pass' input port.  \fBIPRewriter\fR changes IP packet data and, optionally,
++destination IP address annotations; see the DST_ANNO keyword argument below.
++.PP
++Keyword arguments determine how often stale mappings should be removed.
++.PP
++
++.IP "TCP_TIMEOUT \fItime\fR" 5
++Time out TCP connections every \fItime\fR seconds. Default is 24 hours.
++.IP "" 5
++.IP "TCP_DONE_TIMEOUT \fItime\fR" 5
++Time out completed TCP connections every \fItime\fR seconds. Default is 30
++seconds. FIN and RST flags mark TCP connections as complete.
++.IP "" 5
++.IP "UDP_TIMEOUT \fItime\fR" 5
++Time out UDP connections every \fItime\fR seconds. Default is 1 minute.
++.IP "" 5
++.IP "REAP_TCP \fItime\fR" 5
++Reap timed-out TCP connections every \fItime\fR seconds. If no packets
++corresponding to a given mapping have been seen for TCP_TIMEOUT, remove the
++mapping as stale. Default is 1 hour.
++.IP "" 5
++.IP "REAP_TCP_DONE \fItime\fR" 5
++Reap timed-out completed TCP connections every \fItime\fR seconds. Default is 10
++seconds.
++.IP "" 5
++.IP "REAP_UDP \fItime\fR" 5
++Reap timed-out UDP connections every \fItime\fR seconds. Default is 10 seconds.
++.IP "" 5
++.IP "DST_ANNO" 5
++Boolean. If true, then set the destination IP address annotation on passing
++packets to the rewritten destination address. Default is true.
++.IP "" 5
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBtcp_mappings\fR (read-only)" 5
++Returns a human-readable description of the \fBIPRewriter\fR's current set of
++TCP mappings.
++.IP "" 5
++.IP "\fBudp_mappings\fR (read-only)" 5
++Returns a human-readable description of the \fBIPRewriter\fR's current set of
++UDP mappings.
++.IP "" 5
++.IP "\fBtcp_done_mappings\fR (read-only)" 5
++Returns a human-readable description of the \fBIPRewriter\fR's current set of
++mappings for completed TCP sessions.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M TCPRewriter n ,
++.M IPAddrRewriter n ,
++.M IPAddrPairRewriter n ,
++.M IPRewriterPatterns n ,
++.M RoundRobinIPMapper n ,
++.M FTPPortMapper n ,
++.M ICMPRewriter n ,
++.M ICMPPingRewriter "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/IPRewriterPatterns.n click-1.6.0-27/inst/share/man/mann/IPRewriterPatterns.n
+--- click-1.6.0/inst/share/man/mann/IPRewriterPatterns.n       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/IPRewriterPatterns.n    2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,33 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/iprwpatterns.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "IPREWRITERPATTERNS" n "11/Feb/2009" "Click"
++.SH "NAME"
++IPRewriterPatterns \- Click element;
++specifies shared 
++.M IPRewriter n 
++patterns
++.SH "SYNOPSIS"
++\fBIPRewriterPatterns\fR(NAME PATTERN, ...)
++
++\fBPorts\fR: none
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++This element stores information about shared patterns that 
++.M IPRewriter "n" 
++and
++related elements can use.  Each configuration argument is a name and a
++pattern, 'NAME SADDR SPORT DADDR DPORT'.  The NAMEs for every argument in
++every \fBIPRewriterPatterns\fR element in the configuration must be distinct.
++.PP
++
++.SH "SEE ALSO"
++.M IPRewriter "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/IPRouteTable.n click-1.6.0-27/inst/share/man/mann/IPRouteTable.n
+--- click-1.6.0/inst/share/man/mann/IPRouteTable.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/IPRouteTable.n  2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,177 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/iproutetable.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "IPROUTETABLE" n "11/Feb/2009" "Click"
++.SH "NAME"
++IPRouteTable \- Click element;
++IP routing table superclass
++.SH "SYNOPSIS"
++\fBIPRouteTable\fR
++
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++\fBIPRouteTable\fR defines an interface useful for implementing IPv4 route lookup
++elements. It parses configuration strings -- see 
++.M LinearIPLookup "n" 
++for an example
++-- and calls virtual functions to add the resulting routes. A default \f(CWpush\fR
++function uses those virtual functions to look up routes and output packets
++accordingly. There are also some functions useful for implementing handlers.
++.PP
++
++.SH "PERFORMANCE"
++Click provides several elements that implement all or part of the \fBIPRouteTable\fR
++interface.  Marko Zec has compared their performance, in terms of lookup speed
++and memory size, for full BGP feeds; here are the results.
++.PP
++Methodology: 2.8GHz Pentium P4 CPU, 521K L2 cache, FreeBSD 4.10, userspace
++Click.  
++.M RangeIPLookup "n" 
++has two lookup tables, the larger of which is used only
++at update time.  The "warm cache" numbers perform the same lookup several
++times in a loop to populate the cache; only the last lookup's performance is
++reported.
++.PP
++.nf
++\&              ICSI BGP dump, 150700 routes, 2 next-hops
++\& 
++\&         Element      | cycles  | lookups | setup | lookup 
++\&                      | /lookup | /sec    | time  | tbl. size
++\&     -----------------+---------+---------+-------+----------------
++\&     RadixIPLookup    |   1025  |  2.73M  | 0.59s |  5.8 MB   
++\&     DirectIPLookup   |    432  |  6.48M  | 0.74s | 33   MB   
++\&     RangeIPLookup    |    279  | 10.0 M  | 0.83s |  0.21MB (+33MB)
++\&       " (warm cache) |     44  | 63.6 M  |   "   |    "       "
++\& 
++\&           routeviews.org dump, 167000 routes, 52 nexthops
++\& 
++\&         Element      | cycles  | lookups | setup | lookup 
++\&                      | /lookup | /sec    | time  | tbl. size
++\&     -----------------+---------+---------+-------+----------------
++\&     RadixIPLookup    |   1095  |  2.55M  | 0.67s |  6.6 MB   
++\&     DirectIPLookup   |    434  |  6.45M  | 0.77s | 33   MB
++\&     RangeIPLookup    |    508  |  5.51M  | 0.88s |  0.51MB (+33MB)
++\&       " (warm cache) |     61  | 45.9 M  |   "   |    "       "
++.fi
++.PP
++The 
++.M RadixIPLookup "n" ,
++.M DirectIPLookup "n" ,
++and 
++.M RangeIPLookup "n" 
++elements are well suited
++for implementing large tables.  We also provide the 
++.M LinearIPLookup "n" ,
++.M StaticIPLookup "n" ,
++and 
++.M SortedIPLookup "n" 
++elements; they are simple, but their O(N)
++lookup speed is orders of magnitude slower.  
++.M RadixIPLookup "n" 
++or 
++.M DirectIPLookup "n" 
++should be preferred for almost all purposes.
++.nf
++\& 
++\&           1500-entry fraction of the ICSI BGP dump
++\&   
++\&         Method     | cycles  | lookups | setup | lookup 
++\&                    | /lookup | /sec    | time  | tbl. size
++\&     ---------------+---------+---------+-------+----------
++\&     LinearIPLookup |  12000  |  233K   |  10s  |   29 KB
++\&     StaticIPLookup |  12000  |  233K   |  10s  |   29 KB
++\&     SortedIPLookup |  12500  |  224K   |  38s  |   29 KB
++.fi
++.PP
++A Click script containing the 167000-route dump is available at
++http://www.read.cs.ucla.edu/click/routetabletest-167k.click.gz
++.PP
++
++
++.SH "INTERFACE"
++These four \fBIPRouteTable\fR virtual functions should generally be overridden by
++particular routing table elements.
++.PP
++
++
++.IP "\f(CWint \fBadd_route\fR(const IPRoute& r, bool set, IPRoute* old_route, ErrorHandler *errh)\fR" 4
++Add a route sending packets with destination addresses matching
++\f(CWr.addr/r.mask\fR to gateway \f(CWr.gw\fR, via output port \f(CWr.port\fR.  If a route
++for this exact prefix already exists, then the behavior depends on \f(CWset\fR.  If
++\f(CWset\fR is true, then any existing route is silently overwritten (after
++possibly being stored in \f(CW*old_route\fR); if \f(CWset\fR is false, the function
++should return \f(CW-EEXIST\fR.  Report errors to \f(CWerrh\fR.  Should return 0 on
++success and negative on failure.  The default implementation reports an error
++"cannot add routes to this routing table".
++.IP "" 4
++.IP "\f(CWint \fBremove_route\fR(const IPRoute& r, IPRoute* old_route, ErrorHandler *errh)\fR" 4
++Removes the route sending packets with destination addresses matching
++\f(CWr.addr/r.mask\fR to gateway \f(CWr.gw\fR, via the element's output port \f(CWr.port\fR.
++All four fields must match, unless \f(CWr.port\fR is less than 0, in which case
++only \f(CWr.addr/r.mask\fR must match.  If no route for that prefix exists, the
++function should return \f(CW-ENOENT\fR; otherwise, the old route should be stored
++in \f(CW*old_route\fR (assuming it's not null).  Any errors are reported to
++\f(CWerrh\fR.  Should return 0 on success and negative on failure.  The default
++implementation reports an error "cannot delete routes from this routing
++table".
++.IP "" 4
++.IP "\f(CWint \fBlookup_route\fR(IPAddress dst, IPAddress &gw_return) const\fR" 4
++Looks up the route associated with address \f(CWdst\fR. Should set \f(CWgw_return\fR to
++the resulting gateway and return the relevant output port (or negative if
++there is no route). The default implementation returns -1.
++.IP "" 4
++.IP "\f(CWString \fBdump_routes\fR()\fR" 4
++Returns a textual description of the current routing table. The default
++implementation returns an empty string.
++.IP "" 4
++.PP
++The following functions, overridden by \fBIPRouteTable\fR, are available for use by
++subclasses.
++.PP
++
++.IP "\f(CWint \fBconfigure\fR(Vector<String> &conf, ErrorHandler *)\fR" 4
++The default implementation of \fBconfigure\fR parses \f(CWconf\fR as a list of routes,
++where each route is the space-separated list `\f(CWaddress/mask [gateway]
++output\fR'. The routes are successively added to the element with \fBadd_route\fR.
++.IP "" 4
++.IP "\f(CWvoid \fBpush\fR(int port, Packet *p)\fR" 4
++The default implementation of \fBpush\fR uses \fBlookup_route\fR to perform IP
++routing lookup. Normally, subclasses implement their own \fBpush\fR methods,
++avoiding virtual function call overhead.
++.IP "" 4
++.IP "\f(CWstatic int \fBadd_route_handler\fR(const String &, Element *, void *, ErrorHandler *)\fR" 4
++This write handler callback parses its input as an add-route request
++and calls \fBadd_route\fR with the results. Normally hooked up to the `\f(CWadd\fR'
++handler.
++.IP "" 4
++.IP "\f(CWstatic int \fBremove_route_handler\fR(const String &, Element *, void *, ErrorHandler *)\fR" 4
++This write handler callback parses its input as a remove-route request and
++calls \fBremove_route\fR with the results. Normally hooked up to the `\f(CWremove\fR'
++handler.
++.IP "" 4
++.IP "\f(CWstatic int \fBctrl_handler\fR(const String &, Element *, void *, ErrorHandler *)\fR" 4
++This write handler callback function parses its input as a route control
++request and calls \fBadd_route\fR or \fBremove_route\fR as directed. Normally hooked
++up to the `\f(CWctrl\fR' handler.
++.IP "" 4
++.IP "\f(CWstatic String \fBtable_handler\fR(Element *, void *)\fR" 4
++This read handler callback function returns the element's routing table via
++the \fBdump_routes\fR function. Normally hooked up to the `\f(CWtable\fR' handler.
++.IP "" 4
++.PP
++
++.SH "SEE ALSO"
++.M RadixIPLookup n ,
++.M DirectIPLookup n ,
++.M RangeIPLookup n ,
++.M StaticIPLookup n ,
++.M LinearIPLookup n ,
++.M SortedIPLookup n ,
++.M LinuxIPLookup "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Idle.n click-1.6.0-27/inst/share/man/mann/Idle.n
+--- click-1.6.0/inst/share/man/mann/Idle.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Idle.n  2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,27 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/idle.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "IDLE" n "11/Feb/2009" "Click"
++.SH "NAME"
++Idle \- Click element;
++discards packets
++.SH "SYNOPSIS"
++Idle
++
++\fBPorts\fR: any number of inputs, any number of outputs
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Has zero or more agnostic outputs and zero or more agnostic inputs. It
++never pushes a packet to any output or pulls a packet from any input. Any
++packet it does receive is discarded. Used to avoid "input not connected"
++error messages.
++
+diff -Nurb click-1.6.0/inst/share/man/mann/InfiniteSource.n click-1.6.0-27/inst/share/man/mann/InfiniteSource.n
+--- click-1.6.0/inst/share/man/mann/InfiniteSource.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/InfiniteSource.n        2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,106 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/infinitesource.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "INFINITESOURCE" n "11/Feb/2009" "Click"
++.SH "NAME"
++InfiniteSource \- Click element;
++generates packets whenever scheduled
++.SH "SYNOPSIS"
++\fBInfiniteSource\fR([DATA, LIMIT, BURST, ACTIVE, \fIKEYWORDS\fR])
++
++\fBPorts\fR: no inputs, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Creates packets consisting of DATA. Pushes BURST such packets out its single
++output every time it is scheduled (which will be often). Stops sending after
++LIMIT packets are generated; but if LIMIT is negative, sends packets forever.
++Will send packets only if ACTIVE is true. (ACTIVE is true by default.) Default
++DATA is at least 64 bytes long. Default LIMIT is -1 (send packets forever).
++Default BURST is 1.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "DATA" 8
++String. Same as the DATA argument.
++.IP "" 8
++.IP "DATASIZE" 8
++Integer. If set, ensures the outgoing packet contains at least this many bytes.
++.IP "" 8
++.IP "LIMIT" 8
++Integer. Same as the LIMIT argument.
++.IP "" 8
++.IP "BURST" 8
++Integer. Same as the BURST argument.
++.IP "" 8
++.IP "ACTIVE" 8
++Boolean. Same as the ACTIVE argument.
++.IP "" 8
++.IP "STOP" 8
++Boolean. If true, then stop the driver once LIMIT packets are sent. Default is
++false.
++.IP "" 8
++.PP
++To generate a particular traffic pattern, use this element and 
++.M RatedSource "n" 
++in conjunction with 
++.M PokeHandlers "n" .
++.PP
++.SH "EXAMPLES"
++
++.nf
++\&  InfiniteSource(\e<0800>) -> Queue -> ...
++.fi
++.PP
++
++
++
++.SH "NOTES"
++Useful for profiling and experiments.  Packets' timestamp annotations are set
++to the current time.
++.PP
++\fBInfiniteSource\fR listens for downstream full notification.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBcount\fR (read-only)" 5
++Returns the total number of packets that have been generated.
++.IP "" 5
++.IP "\fBreset\fR (write-only)" 5
++Resets the number of generated packets to 0. The \fBInfiniteSource\fR will then
++generate another LIMIT packets (if it is active).
++.IP "" 5
++.IP "\fBdata\fR (read/write)" 5
++Returns or sets the DATA parameter.
++.IP "" 5
++.IP "\fBdatasize\fR (read/write)" 5
++Returns or sets the DATASIZE parameter.
++.IP "" 5
++.IP "\fBlimit\fR (read/write)" 5
++Returns or sets the LIMIT parameter.
++.IP "" 5
++.IP "\fBburstsize\fR (read/write)" 5
++Returns or sets the BURSTSIZE parameter.
++.IP "" 5
++.IP "\fBactive\fR (read/write)" 5
++Makes the element active or inactive.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M RatedSource n ,
++.M PokeHandlers "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/KernelFilter.n click-1.6.0-27/inst/share/man/mann/KernelFilter.n
+--- click-1.6.0/inst/share/man/mann/KernelFilter.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/KernelFilter.n  2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,53 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/userlevel/kernelfilter.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "KERNELFILTER" n "11/Feb/2009" "Click"
++.SH "NAME"
++KernelFilter \- Click element;
++block kernel from handling packets
++.SH "SYNOPSIS"
++\fBKernelFilter\fR(FILTERSPEC, ...)
++
++\fBPorts\fR: none
++.br
++\fBDrivers\fR: userlevel
++.br
++\fBPackage\fR: userlevel (core)
++.br
++.SH "DESCRIPTION"
++The \fBKernelFilter\fR element installs filter rules in the kernel to stop the
++kernel from handling certain types of packets.  Use this in combination with
++.M FromDevice.u "n" 
++to handle packets in user-level Click configurations.
++.PP
++\fBKernelFilter\fR uses iptables(1) to install filters; if your system does not
++support iptables(1), \fBKernelFilter\fR will fail.
++.PP
++\fBKernelFilter\fR uninstalls its firewall rules when Click shuts down.  If Click
++shuts down uncleanly, for instance because of a segmentation fault or 'kill
++-9', then the rules will remain in place, and you'll have to remove them
++yourself.
++.PP
++Currently only one form of FILTERSPEC is understood.
++.PP
++
++
++.IP "\&'\f(CWdrop dev DEVNAME\fR'" 8
++The kernel is blocked from handling any packets arriving on device DEVNAME.
++However, these packets will still be visible to tcpdump(1), and to Click
++elements like 
++.M FromDevice.u "n" .
++.IP "" 8
++.PP
++
++.SH "SEE ALSO"
++.M FromDevice.u n ,
++.M ToDevice.u n ,
++.M KernelTap n ,
++ifconfig(8)
++
+diff -Nurb click-1.6.0/inst/share/man/mann/KernelHandlerProxy.n click-1.6.0-27/inst/share/man/mann/KernelHandlerProxy.n
+--- click-1.6.0/inst/share/man/mann/KernelHandlerProxy.n       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/KernelHandlerProxy.n    2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,48 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/userlevel/khandlerproxy.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "KERNELHANDLERPROXY" n "11/Feb/2009" "Click"
++.SH "NAME"
++KernelHandlerProxy \- Click element;
++proxies kernel module handlers at user level
++.SH "SYNOPSIS"
++\fBKernelHandlerProxy\fR([\fIKEYWORDS\fR])
++
++\fBDrivers\fR: userlevel
++.br
++\fBPackage\fR: userlevel (core)
++.br
++.SH "DESCRIPTION"
++Provides one proxy handler for each handler in a Linux kernel module Click
++configuration. The proxy handler for an element \f(CWe\fR's handler \f(CWh\fR is named
++`\f(CWe.h\fR'. Reading \fBKernelHandlerProxy\fR's \f(CWe.h\fR handler will return the result
++of reading kernel element \f(CWe\fR's \f(CWh\fR handler. Similarly, writing a string to
++\fBKernelHandlerProxy\fR's \f(CWe.h\fR handler will cause the proxy to write that string
++to kernel element \f(CWe\fR's \f(CWh\fR handler.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "VERBOSE" 8
++Boolean. If true, print chatter messages when read handlers fail. (Errors with
++write handlers are reported to the supplied ErrorHandler, but read handlers
++don't take an ErrorHandler argument.) Default is false.
++.IP "" 8
++.PP
++
++.SH "NOTES"
++\fBKernelHandlerProxy\fR does not decide ahead of time whether a given handler is
++active. Thus, for example, \fBKernelHandlerProxy\fR can report that a handler exists
++even when no corresponding element exists in the kernel configuration. Any
++error will be reported when the handler is actually called.
++.PP
++
++.SH "SEE ALSO"
++.M SocketHandlerProxy "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/KernelTap.n click-1.6.0-27/inst/share/man/mann/KernelTap.n
+--- click-1.6.0/inst/share/man/mann/KernelTap.n        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/KernelTap.n     2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,88 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/userlevel/kerneltap.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "KERNELTAP" n "11/Feb/2009" "Click"
++.SH "NAME"
++KernelTap \- Click element;
++interface to /dev/tap or ethertap (user-level)
++.SH "SYNOPSIS"
++\fBKernelTap\fR(ADDR/MASK [, GATEWAY, \fIkeywords\fR ETHER, MTU, HEADROOM, IGNORE_QUEUE_OVERFLOWS])
++
++\fBPorts\fR: at most 1 input, 1-2 outputs
++.br
++\fBDrivers\fR: userlevel
++.br
++\fBPackage\fR: userlevel (core)
++.br
++.SH "DESCRIPTION"
++Reads Ethernet packets from and writes Ethernet packets to a /dev/tun* or
++/dev/tap* device.  This allows a user-level Click to hand packets to the
++virtual Ethernet device.  \fBKernelTap\fR will also transfer packets from the
++virtual Ethernet device.
++.PP
++\fBKernelTap\fR allocates a /dev/tun* or tap* device (this might fail) and runs
++.M ifconfig 8 
++to set the interface's local (i.e., kernel) address to ADDR and
++the netmask to MASK.  If a nonzero GATEWAY IP address (which must be on the
++same network as the tun) is specified, then \fBKernelTap\fR tries to set up a
++default route through that host.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "ETHER" 8
++Ethernet address. Specifies the fake device's Ethernet address. Default is
++00:01:02:03:04:05. On Linux, you must supply an ETHER argument, and use that
++address as the destination Ethernet address for all packets sent to the tap
++element; otherwise, Linux will ignore your packets. On FreeBSD, there is no
++way to set the Ethernet address, and any ETHER argument is silently ignored,
++but it is safe to use any destination Ethernet address for packets sent to the
++tap.
++.IP "" 8
++.IP "MTU" 8
++Integer.  The interface's maximum transmission unit.  Default is 1500; some
++operating systems do not alllow it to be set.
++.IP "" 8
++.IP "HEADROOM" 8
++Integer.  The number of bytes left empty before the packet data (to leave room
++for additional encapsulation headers).  Default is 0.
++.IP "" 8
++.IP "IGNORE_QUEUE_OVERFLOWS" 8
++Boolean.  If true, don't print more than one error message when there are
++queue overflow errors (ENOBUFS) when sending or receiving packets via the tun
++device.  Default is false.
++.IP "" 8
++.PP
++\fBKernelTap\fR accepts the same arguments as 
++.M KernelTun "n" .
++.PP
++.SH "NOTES"
++Linux will send ARP queries to the fake device. You must respond to these
++queries in order to receive any IP packets, but you can obviously respond
++with any Ethernet address you'd like. Here is one common idiom:
++.nf
++\& 
++\&  tap0 :: KernelTap(192.0.0.1/8)
++\&       -> fromhost_cl :: Classifier(12/0806, 12/0800);
++\&  fromhost_cl[0] -> ARPResponder(0.0.0.0/0 1:1:1:1:1:1) -> tap0;
++\&  fromhost_cl[1] -> ... // IP packets
++\& 
++.fi
++.PP
++An error like "could not allocate a /dev/tap* device : No such file or
++directory" usually means that you have not enabled /dev/tap* in your
++kernel. 
++.PP
++
++
++.SH "SEE ALSO"
++.M ToHost n ,
++.M KernelTun n ,
++ifconfig(8)
++
+diff -Nurb click-1.6.0/inst/share/man/mann/KernelTun.n click-1.6.0-27/inst/share/man/mann/KernelTun.n
+--- click-1.6.0/inst/share/man/mann/KernelTun.n        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/KernelTun.n     2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,106 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/userlevel/kerneltun.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "KERNELTUN" n "11/Feb/2009" "Click"
++.SH "NAME"
++KernelTun \- Click element;
++interface to /dev/tun or ethertap (user-level)
++.SH "SYNOPSIS"
++\fBKernelTun\fR(ADDR/MASK [, GATEWAY, \fIkeywords\fR HEADROOM, ETHER, MTU, IGNORE_QUEUE_OVERFLOWS])
++
++\fBPorts\fR: at most 1 input, 1-2 outputs
++.br
++\fBDrivers\fR: userlevel
++.br
++\fBPackage\fR: userlevel (core)
++.br
++.SH "DESCRIPTION"
++Reads IP packets from and writes IP packets to a /dev/net/tun, /dev/tun*,
++or /dev/tap* device.  This allows a user-level Click to hand packets to the
++ordinary kernel IP processing code.  \fBKernelTun\fR will also install a routing
++table entry so that the kernel can pass packets to the \fBKernelTun\fR device.
++.PP
++\fBKernelTun\fR produces and expects IP packets.  If, for some reason, the kernel
++passes up a non-IP packet (or an invalid IP packet), \fBKernelTun\fR will emit
++that packet on its second output, or drop it if there is no second output.
++.PP
++\fBKernelTun\fR allocates a /dev/net/tun, /dev/tun*, or /dev/tap* device (this
++might fail) and runs 
++.M ifconfig 8 
++to set the interface's local (i.e.,
++kernel) address to ADDR and the netmask to MASK.  If a nonzero GATEWAY IP
++address (which must be on the same network as the tun) is specified, then
++\fBKernelTun\fR tries to set up a default route through that host.
++.PP
++When cleaning up, \fBKernelTun\fR attempts to bring down the device via
++.M ifconfig 8 .
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "HEADROOM" 8
++Integer. The number of bytes left empty before the packet data to leave
++room for additional encapsulation headers. Default is 28.
++.IP "" 8
++.IP "MTU" 8
++Integer. The interface's MTU. \fBKernelTun\fR will refuse to send packets larger
++than the MTU. Default is 1500; not all operating systems allow MTU to be set.
++.IP "" 8
++.IP "ETHER" 8
++Ethernet address. Specifies the tunnel device's Ethernet address. Default is
++00:01:02:03:04:05. On FreeBSD, any ETHER argument is silently ignored.
++.IP "" 8
++.IP "IGNORE_QUEUE_OVERFLOWS" 8
++Boolean.  If true, don't print more than one error message when
++there are queue overflows error when sending/receiving packets
++to/from the tun device (e.g. there was an ENOBUFS error).  Default
++is false.
++.IP "" 8
++.IP "DEVNAME" 8
++String. If specified, try to alloc a tun device with name DEVNAME.
++Otherwise, we'll just take the first virtual device we find. This option
++only works with the Linux Universal TUN/TAP driver.
++.IP "" 8
++.PP
++
++.SH "NOTES"
++Make sure that your kernel has tun support enabled before running
++\fBKernelTun\fR.  Initialization errors like "no such device" or "no such file or
++directory" may indicate that your kernel isn't set up, or that some
++required kernel module hasn't been loaded (on Linux, the relevant module is
++"tun").
++.PP
++Packets sent to ADDR will be processed by the host kernel stack; packets sent
++to any other address in ADDR/MASK will be sent to \fBKernelTun\fR.  Say you run this
++configuration:
++.PP
++.nf
++\&    tun :: KernelTun(1.0.0.1/8);
++\&    tun -> IPClassifier(icmp type echo) -> ICMPPingResponder
++\&        -> IPPrint -> tun;
++.fi
++.PP
++If you then "\f(CWping 1.0.0.1\fR", \fIyour own kernel\fR will respond.  Click will
++never see the packets, so it won't print anything.  But if you "\f(CWping
++1.0.0.2\fR", the pings are sent to Click.  You should see printouts from Click,
++and \f(CWping\fR should print Click's responses.
++.PP
++This element differs from 
++.M KernelTap "n" 
++in that it produces and expects IP
++packets, not IP-in-Ethernet packets.
++.PP
++
++
++.SH "SEE ALSO"
++.M FromDevice.u n ,
++.M ToDevice.u n ,
++.M KernelTap n ,
++ifconfig(8)
++
+diff -Nurb click-1.6.0/inst/share/man/mann/LinearIPLookup.n click-1.6.0-27/inst/share/man/mann/LinearIPLookup.n
+--- click-1.6.0/inst/share/man/mann/LinearIPLookup.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/LinearIPLookup.n        2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,100 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/lineariplookup.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "LINEARIPLOOKUP" n "11/Feb/2009" "Click"
++.SH "NAME"
++LinearIPLookup \- Click element;
++simple IP routing table
++.SH "SYNOPSIS"
++\fBLinearIPLookup\fR(ADDR1/MASK1 [GW1] OUT1, ADDR2/MASK2 [GW2] OUT2, ...)
++
++\fBPorts\fR: 1 input, any number of outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++\fBNote:\fR Lookups and table updates with \fBLinearIPLookup\fR are extremely slow; the
++.M RadixIPLookup "n" 
++and 
++.M DirectIPLookup "n" 
++elements should be preferred in almost all
++cases.  See 
++.M IPRouteTable "n" 
++for a performance comparison.  We provide
++\fBLinearIPLookup\fR nevertheless for its simplicity.
++.PP
++Expects a destination IP address annotation with each packet. Looks up that
++address in its routing table, using longest-prefix-match, sets the destination
++annotation to the corresponding GW (if specified), and emits the packet on the
++indicated OUTput port.
++.PP
++Each argument is a route, specifying a destination and mask, an optional
++gateway IP address, and an output port.
++.PP
++\fBLinearIPLookup\fR uses a linear search algorithm that may look at every route on
++each packet. It is therefore most suitable for small routing tables.
++.PP
++
++.SH "EXAMPLES"
++This example delivers broadcasts and packets addressed to the local
++host (18.26.4.24) to itself, packets to net 18.26.4 to the
++local interface, and all others via gateway 18.26.4.1:
++.PP
++.nf
++\&  ... -> GetIPAddress(16) -> rt;
++\&  rt :: LinearIPLookup(18.26.4.24/32 0,
++\&                       18.26.4.255/32 0,
++\&                       18.26.4.0/32 0,
++\&                       18.26.4/24 1,
++\&                       0/0 18.26.4.1 1);
++\&  rt[0] -> ToHost;
++\&  rt[1] -> ... -> ToDevice(eth0);
++.fi
++.PP
++
++
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBtable\fR (read-only)" 5
++Outputs a human-readable version of the current routing table.
++.IP "" 5
++.IP "\fBlookup\fR (read-only)" 5
++Reports the OUTput port and GW corresponding to an address.
++.IP "" 5
++.IP "\fBadd\fR (write-only)" 5
++Adds a route to the table. Format should be `\f(CWADDR/MASK [GW] OUT\fR'.
++Fails if a route for \f(CWADDR/MASK\fR already exists.
++.IP "" 5
++.IP "\fBset\fR (write-only)" 5
++Sets a route, whether or not a route for the same prefix already exists.
++.IP "" 5
++.IP "\fBremove\fR (write-only)" 5
++Removes a route from the table. Format should be `\f(CWADDR/MASK\fR'.
++.IP "" 5
++.IP "\fBctrl\fR (write-only)" 5
++Adds or removes a group of routes. Write `\f(CWadd\fR/\f(CWset ADDR/MASK [GW] OUT\fR' to
++add a route, and `\f(CWremove ADDR/MASK\fR' to remove a route. You can supply
++multiple commands, one per line; all commands are executed as one atomic
++operation.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M RadixIPLookup n ,
++.M DirectIPLookup n ,
++.M RangeIPLookup n ,
++.M StaticIPLookup n ,
++.M SortedIPLookup n ,
++.M LinuxIPLookup n ,
++.M IPRouteTable "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/LinkUnqueue.n click-1.6.0-27/inst/share/man/mann/LinkUnqueue.n
+--- click-1.6.0/inst/share/man/mann/LinkUnqueue.n      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/LinkUnqueue.n   2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,70 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/linkunqueue.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "LINKUNQUEUE" n "11/Feb/2009" "Click"
++.SH "NAME"
++LinkUnqueue \- Click element;
++link emulator
++.SH "SYNOPSIS"
++\fBLinkUnqueue\fR(LATENCY, BANDWIDTH)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: pull inputs, push outputs
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Pulls packets from the single input port, then delays them so as to emulate a
++serial link with latency LATENCY (microsecond precision) and bandwidth
++BANDWIDTH (such as "384kbps"). Thus, every packet is delayed at least
++by LATENCY, and additionally delayed by its packet size and BANDWIDTH, and
++by any packets ahead of it in the virtual link. Packets are pushed out the
++single output port when their time comes.
++.PP
++\fBLinkUnqueue\fR listens for upstream notification, such as that available from
++.M Queue "n" .
++.PP
++\fBLinkUnqueue\fR stores packets that are in transit over the virtual link. It
++doesn't store any other packets, however; it doesn't pull from its input
++unless there is room on the link. To emulate a link fed by a packet queue, use
++a "
++.M Queue "n" 
++-> \fBLinkUnqueue\fR" combination.
++.PP
++\fBLinkUnqueue\fR uses its input packets' "extra length" annotations, destroys their
++"next packet" annotations, and updates their timestamp annotations.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBlatency\fR (read-only)" 5
++The LATENCY argument.
++.IP "" 5
++.IP "\fBbandwidth\fR (read-only)" 5
++The BANDWIDTH argument.
++.IP "" 5
++.IP "\fBsize\fR (read-only)" 5
++The number of packets currently in, or partially in, the emulated link.
++.IP "" 5
++.IP "\fBreset\fR (write-only)" 5
++When written, drops all packets in, or partially in, the emulated link.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M DelayUnqueue n ,
++.M Queue n ,
++.M Unqueue n ,
++.M RatedUnqueue n ,
++.M BandwidthRatedUnqueue n ,
++.M DelayShaper n ,
++.M SetTimestamp "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/LinuxIPLookup.n click-1.6.0-27/inst/share/man/mann/LinuxIPLookup.n
+--- click-1.6.0/inst/share/man/mann/LinuxIPLookup.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/LinuxIPLookup.n 2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,62 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/lookupiproutelinux.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "LINUXIPLOOKUP" n "11/Feb/2009" "Click"
++.SH "NAME"
++LinuxIPLookup \- Click element;
++interface to Linux's routing table
++.SH "SYNOPSIS"
++\fBLinuxIPLookup\fR(if0, if1, ..., ifN)
++
++\fBPorts\fR: 1 input, 1 or more outputs
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBDrivers\fR: userlevel
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Looks up each packet's destination annotation address in the
++Linux routing table. Replaces the annotation with the
++routing table entry's gateway field (if non-zero).
++Emits the packet on an output that depends on the Linux
++interface device mentioned in the routing table entry:
++if the device name is the Ith configuration argument,
++the element sends the packet on output I (zero origin).
++.PP
++If the packet can't be routed, the element emits it on
++the output with number equal to the number of configuration arguments.
++A packet can't be routed if there is no matching routing
++table entry, or if the device mentioned in the Linux
++routing table isn't mentioned in the configuration.
++.PP
++If run outside the kernel, the element reads the routing table
++just once (at startup) from /proc/net/route.
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\&  r : LinuxIPLookup(eth0, eth1)
++\&  r[0] -> ... -> ToDevice(eth0)
++\&  r[1] -> ... -> ToDevice(eth1)
++\&  r[2] -> ICMPError(18.26.4.24, 3, 0) -> ...
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M RadixIPLookup n ,
++.M DirectIPLookup n ,
++.M RangeIPLookup n ,
++.M StaticIPLookup n ,
++.M LinearIPLookup n ,
++.M SortedIPLookup "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/LookupIPRouteMP.n click-1.6.0-27/inst/share/man/mann/LookupIPRouteMP.n
+--- click-1.6.0/inst/share/man/mann/LookupIPRouteMP.n  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/LookupIPRouteMP.n       2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,34 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/lookupiproutemp.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "LOOKUPIPROUTEMP" n "11/Feb/2009" "Click"
++.SH "NAME"
++LookupIPRouteMP \- Click element;
++simple static IP routing table
++.SH "SYNOPSIS"
++\fBLookupIPRouteMP\fR(DST1/MASK1 [GW1] OUT1, DST2/MASK2 [GW2] OUT2, ...)
++
++\fBPorts\fR: 1 input, any number of outputs
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBDrivers\fR: linuxmodule
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Interfaces are exactly the same as 
++.M LookupIPRoute "n" .
++The only difference is
++when operating in SMP mode, each processor has a processor local cache,
++hence the element is MT SAFE.
++.PP
++
++.SH "SEE ALSO"
++.M LookupIPRoute "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/MSQueue.n click-1.6.0-27/inst/share/man/mann/MSQueue.n
+--- click-1.6.0/inst/share/man/mann/MSQueue.n  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/MSQueue.n       2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,48 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/msqueue.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "MSQUEUE" n "11/Feb/2009" "Click"
++.SH "NAME"
++MSQueue \- Click element;
++stores packets in a FIFO queue
++.SH "SYNOPSIS"
++MSQueue
++.br
++\fBMSQueue\fR(CAPACITY)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: push inputs, pull outputs
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Stores incoming packets in a multiple producer single consumer
++first-in-first-out queue. Enqueue operations are synchronized, dequeue
++operations are not. Drops incoming packets if the queue already holds
++CAPACITY packets. The default for CAPACITY is 1000.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBlength\fR (read-only)" 5
++Returns the current number of packets in the queue.
++.IP "" 5
++.IP "\fBdropd\fR (read-only)" 5
++Returns the number of packets dropped by the queue so far.
++.IP "" 5
++.IP "\fBcapacity\fR (read/write)" 5
++Returns or sets the queue's capacity.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M Queue "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/MarkIPCE.n click-1.6.0-27/inst/share/man/mann/MarkIPCE.n
+--- click-1.6.0/inst/share/man/mann/MarkIPCE.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/MarkIPCE.n      2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,27 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/markipce.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "MARKIPCE" n "11/Feb/2009" "Click"
++.SH "NAME"
++MarkIPCE \- Click element;
++sets IP packets' ECN field to Congestion Experienced
++.SH "SYNOPSIS"
++\fBMarkIPCE\fR()
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Expects IP packets as input. Sets each incoming packet's ECN field to
++Congestion Experienced (value 3), incrementally recalculates the IP checksum,
++and passes the packet to output 0. Non-IP packets, and IP packets whose ECN
++field is zero (not ECN-capable), are dropped.
++
+diff -Nurb click-1.6.0/inst/share/man/mann/MarkIPHeader.n click-1.6.0-27/inst/share/man/mann/MarkIPHeader.n
+--- click-1.6.0/inst/share/man/mann/MarkIPHeader.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/MarkIPHeader.n  2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,38 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/markipheader.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "MARKIPHEADER" n "11/Feb/2009" "Click"
++.SH "NAME"
++MarkIPHeader \- Click element;
++sets IP header annotation
++.SH "SYNOPSIS"
++\fBMarkIPHeader\fR([OFFSET])
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Marks packets as IP packets by setting the IP Header annotation. The IP
++header starts OFFSET bytes into the packet. Default OFFSET is 0.
++.PP
++Does not check length fields for sanity, shorten packets to the IP length,
++or set the destination IP address annotation. Use 
++.M CheckIPHeader "n" 
++or
++.M CheckIPHeader2 "n" 
++for that.
++.PP
++
++.SH "SEE ALSO"
++.M CheckIPHeader n ,
++.M CheckIPHeader2 n ,
++.M StripIPHeader "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Message.n click-1.6.0-27/inst/share/man/mann/Message.n
+--- click-1.6.0/inst/share/man/mann/Message.n  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Message.n       2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,42 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/messageelement.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "MESSAGE" n "11/Feb/2009" "Click"
++.SH "NAME"
++Message \- Click element;
++prints a message on configuration
++.SH "SYNOPSIS"
++\fBMessage\fR(MESSAGE [, TYPE])
++
++\fBPorts\fR: none
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++The \fBMessage\fR element prints a message, warning, or error when configured.  It
++can be used to provide configuration-level documentation.  The MESSAGE
++argument is the message (a string); TYPE should be MESSAGE, WARNING, or
++ERROR.  The default is MESSAGE.
++.PP
++If TYPE is ERROR the router will fail to initialize.
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\&   Message("This configuration is deprecated; use test-tun.click instead.", WARNING)
++\&   tun :: KernelTap(1.0.0.1/8);
++\&   ...
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M Error "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Meter.n click-1.6.0-27/inst/share/man/mann/Meter.n
+--- click-1.6.0/inst/share/man/mann/Meter.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Meter.n 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,65 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/meter.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "METER" n "11/Feb/2009" "Click"
++.SH "NAME"
++Meter \- Click element;
++classifies packet stream by rate (pkt/s)
++.SH "SYNOPSIS"
++\fBMeter\fR(RATE1, RATE2, ..., RATE\fIn\fR)
++
++\fBPorts\fR: 1 input, 2 or more outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Classifies packets based on the rate of packet arrival. The rate is
++measured in packets per second using an exponential weighted moving
++average. (The related 
++.M BandwidthMeter "n" 
++element measures rates in bytes per
++second.)
++.PP
++The configuration string consists of one or more rate arguments. Earlier
++rates in the list must be less than later rates. A \fBMeter\fR with \fIn\fR rate
++arguments will have \fIn\fR+1 outputs. It sends packets out the output
++corresponding to the current rate. If the rate is less than RATE1 packets
++are sent to output 0; if it is >= RATE1 but < RATE2, packets are sent to
++output 1; and so on. If it is >= RATE\fIn\fR, packets are sent to output \fIn\fR.
++.PP
++
++.SH "NOTES"
++The entire packet stream is sent to the output corresponding to the current
++rate. If you would like the packet stream to be split, with at most RATE1
++packets per second being sent out the first output and the remainder being
++sent to the second output, check out 
++.M RatedSplitter "n" .
++.PP
++
++.SH "EXAMPLES"
++This configuration fragment drops the input stream when it is generating
++more than 10,000 packets per second.
++.PP
++.nf
++\&  ... -> m :: Meter(10000) -> ...;
++\&  m[1] -> Discard;
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M BandwidthMeter n ,
++.M RatedSplitter n ,
++.M Shaper n ,
++.M BandwidthShaper n ,
++.M RatedUnqueue n ,
++.M BandwidthRatedUnqueue "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/MixedQueue.n click-1.6.0-27/inst/share/man/mann/MixedQueue.n
+--- click-1.6.0/inst/share/man/mann/MixedQueue.n       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/MixedQueue.n    2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,90 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/mixedqueue.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "MIXEDQUEUE" n "11/Feb/2009" "Click"
++.SH "NAME"
++MixedQueue \- Click element;
++stores packets in a FIFO/LIFO queue
++.SH "SYNOPSIS"
++MixedQueue
++.br
++\fBMixedQueue\fR(CAPACITY)
++
++\fBPorts\fR: 2 inputs, 1 output
++.br
++\fBProcessing\fR: push inputs, pull outputs
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Stores incoming packets in a mixed first-in-first-out/last-in-first-out queue.
++In particular, \fBMixedQueue\fR's first input is FIFO, but its second input is LIFO.
++The queue is full when it holds CAPACITY packets. When full, \fBMixedQueue\fR drops
++incoming FIFO packets, but drops the oldest packet to make room for incoming
++LIFO packets. The default for CAPACITY is 1000.
++.PP
++\fBMixedQueue\fR notifies interested parties when it becomes empty and when a
++formerly-empty queue receives a packet. The empty notification takes place
++some time after the queue goes empty, to prevent thrashing for queues that
++hover around 1 or 2 packets long.
++.PP
++
++.SH "EXAMPLES"
++This diagram shows the state of a \fBMixedQueue\fR after 5 pushes, of packets A
++through E. The queue's head is on the left.
++.PP
++.nf
++\&     initial state        empty
++\&     push(0, A)           [A]
++\&     push(0, B)           [A B]
++\&     push(1, C)           [C A B]
++\&     push(0, D)           [C A B D]
++\&     push(1, E)           [E C A B D]
++.fi
++.PP
++
++
++
++.SH "SYNCHRONIZATION"
++Note for multithreaded Click: Unlike 
++.M Queue "n" ,
++whose input and output ports need
++not be synchronized, \fBMixedQueue\fR requires synchronization between its LIFO
++input and its output. You will need to prevent a thread from pushing to the
++LIFO input at the same time that a different thread pulls from the output.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBlength\fR (read-only)" 5
++Returns the current number of packets in the queue.
++.IP "" 5
++.IP "\fBhighwater_length\fR (read-only)" 5
++Returns the maximum number of packets that have ever been in the queue at once.
++.IP "" 5
++.IP "\fBcapacity\fR (read/write)" 5
++Returns or sets the queue's capacity.
++.IP "" 5
++.IP "\fBdrops\fR (read-only)" 5
++Returns the number of packets dropped by the queue so far.
++.IP "" 5
++.IP "\fBreset_counts\fR (write-only)" 5
++When written, resets the \f(CWdrops\fR and \f(CWhighwater_length\fR counters.
++.IP "" 5
++.IP "\fBreset\fR (write-only)" 5
++When written, drops all packets in the queue.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M Queue n ,
++.M SimpleQueue n ,
++.M FrontDropQueue "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/NotifierQueue.n click-1.6.0-27/inst/share/man/mann/NotifierQueue.n
+--- click-1.6.0/inst/share/man/mann/NotifierQueue.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/NotifierQueue.n 2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,83 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/notifierqueue.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "NOTIFIERQUEUE" n "11/Feb/2009" "Click"
++.SH "NAME"
++NotifierQueue \- Click element;
++stores packets in a FIFO queue
++.SH "SYNOPSIS"
++NotifierQueue
++.br
++\fBNotifierQueue\fR(CAPACITY)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: push inputs, pull outputs
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Stores incoming packets in a first-in-first-out queue.
++Drops incoming packets if the queue already holds CAPACITY packets.
++The default for CAPACITY is 1000.
++.PP
++\fBNotifierQueue\fR notifies interested parties when it becomes empty and when a
++formerly-empty queue receives a packet. The empty notification takes place
++some time after the queue goes empty, to prevent thrashing for queues that
++hover around 1 or 2 packets long. In all other respects, \fBNotifierQueue\fR behaves
++like 
++.M SimpleQueue "n" .
++.PP
++\fBMultithreaded Click note:\fR \fBNotifierQueue\fR is designed to be used in an
++environment with at most one concurrent pusher and at most one concurrent
++puller.  Thus, at most one thread pushes to the \fBNotifierQueue\fR at a time and at
++most one thread pulls from the \fBNotifierQueue\fR at a time.  Different threads can
++push to and pull from the \fBNotifierQueue\fR concurrently, however.  See 
++.M MSQueue "n" 
++for
++a queue that can support multiple concurrent pushers.
++.PP
++
++.SH "NOTES"
++The 
++.M Queue "n" 
++element acts like \fBNotifierQueue\fR, but additionally notifies
++interested parties when it changes state from nonfull to full or vice versa.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBlength\fR (read-only)" 5
++Returns the current number of packets in the queue.
++.IP "" 5
++.IP "\fBhighwater_length\fR (read-only)" 5
++Returns the maximum number of packets that have ever been in the queue at once.
++.IP "" 5
++.IP "\fBcapacity\fR (read/write)" 5
++Returns or sets the queue's capacity.
++.IP "" 5
++.IP "\fBdrops\fR (read-only)" 5
++Returns the number of packets dropped by the queue so far.
++.IP "" 5
++.IP "\fBreset_counts\fR (write-only)" 5
++When written, resets the \f(CWdrops\fR and \f(CWhighwater_length\fR counters.
++.IP "" 5
++.IP "\fBreset\fR (write-only)" 5
++When written, drops all packets in the queue.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M Queue n ,
++.M SimpleQueue n ,
++.M MixedQueue n ,
++.M FrontDropQueue n ,
++.M MSQueue "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Null.n click-1.6.0-27/inst/share/man/mann/Null.n
+--- click-1.6.0/inst/share/man/mann/Null.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Null.n  2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,29 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/nullelement.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "NULL" n "11/Feb/2009" "Click"
++.SH "NAME"
++Null \- Click element;
++passes packets unchanged
++.SH "SYNOPSIS"
++\fBNull\fR
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Just passes packets along without doing anything else.
++.PP
++
++.SH "SEE ALSO"
++.M PushNull n ,
++.M PullNull "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Null1.n click-1.6.0-27/inst/share/man/mann/Null1.n
+--- click-1.6.0/inst/share/man/mann/Null1.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Null1.n 2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,35 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/nulls.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "NULL1" n "11/Feb/2009" "Click"
++.SH "NAME"
++Null1 \- Click element;
++copy of 
++.M Null "n" 
++.SH "SYNOPSIS"
++\fBNull1\fR() ... Null8()
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++The elements \fBNull1\fR through Null8 are reimplementations of 
++.M Null "n" .
++However, each
++has independent code, so the i-cache cost of using all eight elements (\fBNull1\fR
++through Null8) is eight times the cost of eight 
++.M Null "n" 
++elements.
++.PP
++
++.SH "SEE ALSO"
++.M Null "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Paint.n click-1.6.0-27/inst/share/man/mann/Paint.n
+--- click-1.6.0/inst/share/man/mann/Paint.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Paint.n 2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,42 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/paint.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "PAINT" n "11/Feb/2009" "Click"
++.SH "NAME"
++Paint \- Click element;
++sets packet paint annotations
++.SH "SYNOPSIS"
++\fBPaint\fR(COLOR)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Sets each packet's paint annotation to COLOR, an integer 0..255. Note that a
++packet may only be painted with one color.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBcolor\fR (read/write)" 5
++get/set the color to paint
++.IP "" 5
++.PP
++
++.SH "NOTES"
++The paint annotation is stored in user annotation 0.
++.PP
++
++.SH "SEE ALSO"
++.M PaintTee "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/PaintSwitch.n click-1.6.0-27/inst/share/man/mann/PaintSwitch.n
+--- click-1.6.0/inst/share/man/mann/PaintSwitch.n      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/PaintSwitch.n   2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,43 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/paintswitch.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "PAINTSWITCH" n "11/Feb/2009" "Click"
++.SH "NAME"
++PaintSwitch \- Click element;
++sends packet stream to output chosen per-packet
++.SH "SYNOPSIS"
++\fBPaintSwitch\fR
++
++\fBPorts\fR: 1 input, any number of outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++\fBPaintSwitch\fR sends every incoming packet to one of its output ports --
++specifically, output port number K, where K is the value of the
++incoming packet's 
++.M Paint "n" 
++annotation.  If the paint annotation is set to
++255, the packet is duplicated and sent to all outputs.  Since there
++are only 256 different paint annotations, including the special value
++of 255, \fBPaintSwitch\fR can have up to 255 outputs.  If there is no output
++port K, the packet is dropped.
++.PP
++
++.SH "SEE ALSO"
++.M StaticSwitch n ,
++.M PullSwitch n ,
++.M RoundRobinSwitch n ,
++.M StrideSwitch n ,
++.M HashSwitch n ,
++.M RandomSwitch n ,
++.M Paint n ,
++.M PaintTee "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/PaintTee.n click-1.6.0-27/inst/share/man/mann/PaintTee.n
+--- click-1.6.0/inst/share/man/mann/PaintTee.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/PaintTee.n      2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,47 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/painttee.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "PAINTTEE" n "11/Feb/2009" "Click"
++.SH "NAME"
++PaintTee \- Click element;
++duplicates packets with given paint annotation
++.SH "SYNOPSIS"
++\fBPaintTee\fR(COLOR)
++
++\fBPorts\fR: 1 input, 2 outputs
++.br
++\fBProcessing\fR: agnostic, but output 1 is push
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++\fBPaintTee\fR sends every packet through output 0. If the packet's
++color annotation is equal to COLOR (an integer), it also
++sends a copy through output 1.
++.PP
++
++.SH "EXAMPLES"
++Intended to produce redirects in conjunction with 
++.M Paint "n" 
++and
++.M ICMPError "n" 
++as follows:
++.PP
++.nf
++\&  FromDevice(eth7) -> Paint(7) -> ...
++\&  routingtable[7] -> pt :: PaintTee(7) -> ... -> ToDevice(eth7)
++\&  pt[1] -> ICMPError(18.26.4.24, 5, 1) -> [0]routingtable;
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M Paint n ,
++.M ICMPError "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/PerfCountAccum.n click-1.6.0-27/inst/share/man/mann/PerfCountAccum.n
+--- click-1.6.0/inst/share/man/mann/PerfCountAccum.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/PerfCountAccum.n        2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,59 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/linuxmodule/perfcountaccum.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "PERFCOUNTACCUM" n "11/Feb/2009" "Click"
++.SH "NAME"
++PerfCountAccum \- Click element;
++collects differences in Pentium Pro performance metrics
++.SH "SYNOPSIS"
++\fBPerfCountAccum\fR(TYPE)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBDrivers\fR: linuxmodule
++.br
++\fBPackage\fR: linuxmodule (core)
++.br
++.SH "DESCRIPTION"
++Expects incoming packets to have their performance metric annotation set
++according to the Pentium Pro performance metric TYPE. Calculates the
++current value of the performance metric TYPE, and keeps track of the total
++accumulated difference.
++.PP
++
++.SH "NOTES"
++A packet has room for either exactly one cycle count or exactly one
++performance metric.
++.PP
++See 
++.M SetPerfCount "n" 
++for valid performance metric names.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBcount\fR (read-only)" 5
++Returns the number of packets that have passed.
++.IP "" 5
++.IP "\fBaccum\fR (read-only)" 5
++Returns the accumulated changes in the metric TYPE for all passing packets.
++.IP "" 5
++.IP "\fBreset_counts\fR (write-only)" 5
++Resets \f(CWcount\fR and \f(CWaccum\fR counters to zero when written.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M SetPerfCount n ,
++.M SetCycleCount n ,
++.M CycleCountAccum "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/PerfCountInfo.n click-1.6.0-27/inst/share/man/mann/PerfCountInfo.n
+--- click-1.6.0/inst/share/man/mann/PerfCountInfo.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/PerfCountInfo.n 2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,47 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/linuxmodule/perfcountinfo.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "PERFCOUNTINFO" n "11/Feb/2009" "Click"
++.SH "NAME"
++PerfCountInfo \- Click element;
++turn on Pentium Pro performance metrics
++.SH "SYNOPSIS"
++\fBPerfCountInfo\fR([TYPE0, TYPE1])
++
++\fBDrivers\fR: linuxmodule
++.br
++\fBPackage\fR: linuxmodule (core)
++.br
++.SH "DESCRIPTION"
++The Pentium Pro CPU can maintain up to two performance counters.
++\fBPerfCountInfo\fR turns on those counters. TYPE0 is the type of performance
++counter 0, TYPE1 is the type of performance counter 1. Either type may be
++empty, in which case that counter will not be used.
++.PP
++The 
++.M SetPerfCount "n" 
++and 
++.M PerfCountAccum "n" 
++elements automatically turn on the
++relevant counters, so \fBPerfCountInfo\fR is not normally needed. It is useful if
++you are instrumenting individual elements.
++.PP
++
++.SH "NOTES"
++Valid performance metric names are \f(CWBUS_TRAN_INVAL\fR, \f(CWBUS_TRAN_MEM\fR,
++\f(CWDCU_MISS_OUTSTANDING\fR, \f(CWIFU_FETCH\fR, \f(CWIFU_FETCH_MISS\fR, \f(CWIFU_MEM_STALL\fR,
++\f(CWINST_RETIRED\fR, \f(CWL2_IFETCH\fR, \f(CWL2_LD\fR, \f(CWL2_LINES_IN\fR, \f(CWL2_LINES_OUT\fR,
++\f(CWL2_LINES_OUTM\fR, and \f(CWL2_RQSTS\fR.
++.PP
++
++.SH "SEE ALSO"
++.M SetPerfCount n ,
++.M PerfCountAccum n ,
++.M SetCycleCount n ,
++.M CycleCountAccum "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/PokeHandlers.n click-1.6.0-27/inst/share/man/mann/PokeHandlers.n
+--- click-1.6.0/inst/share/man/mann/PokeHandlers.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/PokeHandlers.n  2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,82 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/pokehandlers.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "POKEHANDLERS" n "11/Feb/2009" "Click"
++.SH "NAME"
++PokeHandlers \- Click element;
++calls write handlers at specified times
++.SH "SYNOPSIS"
++\fBPokeHandlers\fR(DIRECTIVE, ...)
++
++\fBPorts\fR: none
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++\fBThis element is deprecated.  Use the Script element instead.\fR
++.PP
++Runs read and write handlers at specified times. Each configuration argument
++is a directive, taken from this list:
++.PP
++
++
++.IP "`read HANDLER'" 8
++Call a read handler and report its result. At user level, the result is
++printed on standard error; in a Linux kernel, it is printed to
++/var/log/messages. HANDLER should be either a global read handler name, or
++`ELEMENT.HNAME', where ELEMENT is an element name and HNAME the name of one of
++its read handlers.
++.IP "" 8
++.IP "`write HANDLER [VALUE]'" 8
++Call a write handler with a given value. At user level, errors reported by
++write handlers are printed to standard error. In the Linux kernel module, they
++are printed to /var/log/messages (accessible through 
++.M dmesg 1 )
++and to
++/proc/click/errors.
++.IP "" 8
++.IP "`stop'" 8
++Stop the driver.
++.IP "" 8
++.IP "`wait DELAY'" 8
++Wait for DELAY seconds before continuing to the next directive.
++.IP "" 8
++.IP "`pause'" 8
++Wait until the `unpause' write handler is called, then continue to the next directive.
++.IP "" 8
++.IP "`loop'" 8
++Start over from the first directive.
++.IP "" 8
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\&  PokeHandlers(write red.max_p 0.8,
++\&               wait 1.5, // delay for 1.5 seconds
++\&               write red.max_p 0.5);
++.fi
++.PP
++
++
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBunpause\fR (write-only)" 5
++If paused, continue to next directive.  Otherwise, there is no effect.
++.IP "" 5
++.IP "\fBpaused\fR (read-only)" 5
++Returns `true' if paused, else `false'.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++dmesg(1)
++
+diff -Nurb click-1.6.0/inst/share/man/mann/PollDevice.n click-1.6.0-27/inst/share/man/mann/PollDevice.n
+--- click-1.6.0/inst/share/man/mann/PollDevice.n       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/PollDevice.n    2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,103 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/linuxmodule/polldevice.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "POLLDEVICE" n "11/Feb/2009" "Click"
++.SH "NAME"
++PollDevice \- Click element;
++polls packets from network device (kernel)
++.SH "SYNOPSIS"
++\fBPollDevice\fR(DEVNAME [, \fIkeywords\fR PROMISC, BURST, TIMESTAMP...])
++
++\fBPorts\fR: no inputs, 1 output
++.br
++\fBProcessing\fR: push
++.br
++\fBDrivers\fR: linuxmodule
++.br
++\fBPackage\fR: linuxmodule (core)
++.br
++.SH "DESCRIPTION"
++Poll packets received by the Linux network interface named DEVNAME. Packets
++will be pushed to output 0. The packets include the link-level header. DEVNAME
++may also be an Ethernet address, in which case \fBPollDevice\fR searches for a
++device with that address.
++.PP
++Each time \fBPollDevice\fR is scheduled, it emits at most BURST packets. By default,
++BURST is 8.
++.PP
++This element is only available in the Linux kernel module.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "PROMISC" 8
++Boolean.  If true, the device is put into promiscuous mode while 
++.M FromDevice "n" 
++is
++active.  Default is false.
++.IP "" 8
++.IP "BURST" 8
++Unsigned integer.  Sets the BURST parameter.
++.IP "" 8
++.IP "TIMESTAMP" 8
++Boolean.  If true, then ensure that received packets have correctly-set
++timestamp annotations.  Default is true.
++.IP "" 8
++.IP "QUIET" 8
++Boolean.  If true, then suppress device up/down messages.  Default is false.
++.IP "" 8
++.IP "HEADROOM" 8
++Unsigned.  Amount of extra headroom to request on each packet.  Default is 64.
++.IP "" 8
++.IP "ALLOW_NONEXISTENT" 8
++Allow nonexistent devices. If true, and no device named DEVNAME exists when
++the router is initialized, then \fBPollDevice\fR will report a warning (rather than
++an error). Later, while the router is running, if a device named DEVNAME
++appears, \fBPollDevice\fR will seamlessly begin emitting its packets. Default is
++false.
++.IP "" 8
++.PP
++
++.SH "NOTES"
++Linux won't see any packets from the device. If you want Linux to process
++packets, you should hand them to 
++.M ToHost "n" .
++Also, if you would like to send
++packets while using \fBPollDevice\fR, you should also define a 
++.M ToDevice "n" 
++on the same
++device.
++.PP
++This element can only be used with devices that support the Click polling
++extension. We have written polling patches for the Tulip Ethernet driver.
++.PP
++Linux device drivers, and thus 
++.M FromDevice "n" ,
++should set packets' timestamp,
++packet-type, and device annotations.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBcount\fR (read-only)" 5
++Returns the number of packets \fBPollDevice\fR has received from the input card.
++.IP "" 5
++.IP "\fBreset_counts\fR (write-only)" 5
++Resets \f(CWcount\fR counter to zero when written.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M FromDevice n ,
++.M ToDevice n ,
++.M FromHost n ,
++.M ToHost "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/PortInfo.n click-1.6.0-27/inst/share/man/mann/PortInfo.n
+--- click-1.6.0/inst/share/man/mann/PortInfo.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/PortInfo.n      2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,65 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../include/click/standard/portinfo.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "PORTINFO" n "11/Feb/2009" "Click"
++.SH "NAME"
++PortInfo \- Click element;
++stores named TCP/UDP port information
++.SH "SYNOPSIS"
++\fBPortInfo\fR(NAME PORT[/PROTOCOL], ...)
++
++\fBPorts\fR: None
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Lets you use mnemonic names for TCP and UDP ports.  Each argument has the form
++`NAME PORT[/PROTOCOL]', which associates the given PORT/PROTOCOL pair with the
++NAME.  If PROTOCOL is left off, the NAME applies to both TCP and UDP.  For
++example, in a configuration containing
++.PP
++.nf
++\&   PortInfo(ssh 22, http 80),
++.fi
++.PP
++configuration strings can use \f(CWssh\fR and \f(CWhttp\fR as mnemonics for the port
++numbers 22 and 80, respectively.
++.PP
++\fBPortInfo\fR names are local with respect to compound elements.  That is, names
++created inside a compound element apply only within that compound element and
++its subelements.  For example:
++.PP
++.nf
++\&   PortInfo(src 10);
++\&   compound :: {
++\&     PortInfo(dst 100);
++\&     ... -> UDPIPEncap(1.0.0.1, src, 2.0.0.1, dst) -> ...  // OK
++\&   };
++\&   ... -> UDPIPEncap(1.0.0.1, src, 2.0.0.1, dst) -> ...
++\&                                         // error: `dst' undefined
++.fi
++.PP
++
++
++
++.SH "NOTES"
++If you do not define a port for a given name, \fBPortInfo\fR will use the default,
++if any.  At user level, \fBPortInfo\fR uses the 
++.M getservbyname 3 
++function to look
++up ports by name.  In the kernel, there are no default ports.
++.PP
++\fBPortInfo\fR will parse arguments containing more than one name, as `\f(CWNAME
++PORT/PROTOCOL NAME...\fR', and comments starting with `\f(CW#\fR' are ignored.  Thus,
++lines from \fI/etc/services\fR can be used verbatim as \fBPortInfo\fR configuration
++arguments.
++.PP
++
++.SH "SEE ALSO"
++.M AddressInfo "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Print.n click-1.6.0-27/inst/share/man/mann/Print.n
+--- click-1.6.0/inst/share/man/mann/Print.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Print.n 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,53 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/print.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "PRINT" n "11/Feb/2009" "Click"
++.SH "NAME"
++Print \- Click element;
++prints packet contents
++.SH "SYNOPSIS"
++\fBPrint\fR([LABEL, LENGTH, \fIkeywords\fR])
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Prints up to LENGTH bytes of data from each packet, in hex, preceded by the
++LABEL text. Default LENGTH is 24.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "LENGTH" 8
++Number of bytes to print. Default is 24.
++.IP "" 8
++.IP "CONTENTS" 8
++Determines whether the packet data is printed. It may be `NONE' (do not print
++packet data), `HEX' (print packet data in hexadecimal), or `ASCII' (print
++packet data in plaintext). Default is `HEX'.
++.IP "" 8
++.IP "TIMESTAMP" 8
++Boolean. Determines whether to print each packet's timestamp in seconds since
++1970. Default is false.
++.IP "" 8
++.IP "PRINTANNO" 8
++Boolean. Determines whether to print each packet's user annotation bytes.  Default is false.
++.IP "" 8
++.IP "CPU" 8
++Boolean; available only in the Linux kernel module. Determines whether to
++print the current CPU ID for every packet. Default is false.
++.IP "" 8
++.PP
++
++.SH "SEE ALSO"
++.M IPPrint "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/PrioSched.n click-1.6.0-27/inst/share/man/mann/PrioSched.n
+--- click-1.6.0/inst/share/man/mann/PrioSched.n        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/PrioSched.n     2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,38 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/priosched.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "PRIOSCHED" n "11/Feb/2009" "Click"
++.SH "NAME"
++PrioSched \- Click element;
++pulls from priority-scheduled inputs
++.SH "SYNOPSIS"
++PrioSched
++
++\fBPorts\fR: any number of inputs, 1 output
++.br
++\fBProcessing\fR: pull
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Each time a pull comes in the output, \fBPrioSched\fR pulls from
++each of the inputs starting from input 0.
++The packet from the first successful pull is returned.
++This amounts to a strict priority scheduler.
++.PP
++The inputs usually come from Queues or other pull schedulers.
++\fBPrioSched\fR uses notification to avoid pulling from empty inputs.
++.PP
++
++.SH "SEE ALSO"
++.M Queue n ,
++.M RoundRobinSched n ,
++.M StrideSched n ,
++.M DRRSched n ,
++.M SimplePrioSched "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ProgressBar.n click-1.6.0-27/inst/share/man/mann/ProgressBar.n
+--- click-1.6.0/inst/share/man/mann/ProgressBar.n      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ProgressBar.n   2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,137 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/userlevel/progressbar.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "PROGRESSBAR" n "11/Feb/2009" "Click"
++.SH "NAME"
++ProgressBar \- Click element;
++prints a progress bar to standard error
++.SH "SYNOPSIS"
++\fBProgressBar\fR(POSHANDLER [, SIZEHANDLER, \fIKEYWORDS\fR])
++
++\fBPorts\fR: none
++.br
++\fBDrivers\fR: userlevel
++.br
++\fBPackage\fR: userlevel (core)
++.br
++.SH "DESCRIPTION"
++Reads progress information from handlers, and displays an ASCII-art progress
++bar on standard error, indicating how much progress has been made and how much
++remains to go.
++.PP
++POSHANDLER and SIZEHANDLER are read handlers. Each of them should return a
++nonnegative real number. POSHANDLER is checked each time the progress bar
++displays; SIZEHANDLER is checked just once, the first time the progress bar
++comes up. Intuitively, POSHANDLER represents the "position"; the process is
++complete when its value equals the "size" returned by SIZEHANDLER. You may
++give multiple position and/or size handlers, as a space-separated list; their
++values are added together.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "FIXED_SIZE" 8
++Nonnegative real number. Used as the size when SIZEHANDLER is not supplied.
++Default is no fixed size.
++.IP "" 8
++.IP "BANNER" 8
++String. Print this string before the progress bar. For example, this might be
++a section of some filename. Default is empty.
++.IP "" 8
++.IP "UPDATE" 8
++Time in seconds (millisecond precision). The progress bar updates itself with
++this frequency. Default is 1/4 second.
++.IP "" 8
++.IP "ACTIVE" 8
++Boolean. The progress bar will not initially display itself if this is false.
++Default is true.
++.IP "" 8
++.IP "DELAY" 8
++Time in seconds (millisecond precision). Don't print a progress bar until at
++least DELAY seconds have passed. Use this to avoid trivial progress bars (that
++is, progress bars that immediately go to 100%). Default is no delay.
++.IP "" 8
++.IP "CHECK_STDOUT" 8
++Boolean. If true, and the standard output is connected to a terminal, then do
++not print a progress bar. Default is false.
++.IP "" 8
++.PP
++Only available in user-level processes.
++.PP
++.SH "EXAMPLES"
++This \fBProgressBar\fR shows how far into the file 
++.M FromDump "n" 
++has gotten:
++.PP
++.nf
++\&  fd :: FromDump(~/largedump.gz) -> ...
++\&  ProgressBar(fd.filepos, fd.filesize);
++.fi
++.PP
++Here are some example progress bars. The first form occurs when the file size
++is known; the second, when it is not known.
++.PP
++.nf
++\&   74% |**************     | 23315KB    00:01 ETA
++\&  
++\&  |           ***          |  5184KB    --:-- ETA
++.fi
++.PP
++
++
++
++.SH "NOTES"
++Code based on the progress bar in the OpenSSH project's \fBscp\fR program, whose
++authors are listed as Timo Rinne, Tatu Ylonen, Theo de Raadt, and Aaron
++Campbell.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBmark_stopped\fR (write-only)" 5
++When written, the progress bar changes to indicate that the transfer has
++stopped, possibly prematurely.
++.IP "" 5
++.IP "\fBmark_done\fR (write-only)" 5
++When written, the progress bar changes to indicate that the transfer has
++successfully completed.
++.IP "" 5
++.IP "\fBpos\fR (read-only)" 5
++Returns the progress bar's current position.
++.IP "" 5
++.IP "\fBsize\fR (read/write)" 5
++Returns or sets the progress bar's size value, which is used to compute how
++close the process is to completion.
++.IP "" 5
++.IP "\fBactive\fR (read/write)" 5
++Returns or sets the ACTIVE setting, a Boolean value. An inactive progress bar
++will not redraw itself.
++.IP "" 5
++.IP "\fBbanner\fR (read/write)" 5
++Returns or sets the BANNER string.
++.IP "" 5
++.IP "\fBposhandler\fR (read/write)" 5
++Returns or sets the read handlers used to read the position, as a
++space-separated list.
++.IP "" 5
++.IP "\fBsizehandler\fR (read/write)" 5
++Returns or sets the read handlers used to read the size, as a space-separated
++list.
++.IP "" 5
++.IP "\fBreset\fR (write-only)" 5
++When written, resets the progress bar to its initial state: the size is read
++again, for example. Also sets ACTIVE to true.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M FromDump "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/PullNull.n click-1.6.0-27/inst/share/man/mann/PullNull.n
+--- click-1.6.0/inst/share/man/mann/PullNull.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/PullNull.n      2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,30 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/nullelement.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "PULLNULL" n "11/Feb/2009" "Click"
++.SH "NAME"
++PullNull \- Click element;
++passes packets unchanged
++.SH "SYNOPSIS"
++\fBPullNull\fR
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: pull
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Responds to each pull request by pulling a packet from its input and returning
++that packet unchanged.
++.PP
++
++.SH "SEE ALSO"
++.M Null n ,
++.M PushNull "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/PullSwitch.n click-1.6.0-27/inst/share/man/mann/PullSwitch.n
+--- click-1.6.0/inst/share/man/mann/PullSwitch.n       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/PullSwitch.n    2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,53 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/pullswitch.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "PULLSWITCH" n "11/Feb/2009" "Click"
++.SH "NAME"
++PullSwitch \- Click element;
++forwards pull requests to settable input
++.SH "SYNOPSIS"
++\fBPullSwitch\fR([INPUT])
++
++\fBPorts\fR: any number of inputs, 1 output
++.br
++\fBProcessing\fR: pull
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++On every pull, \fBPullSwitch\fR returns the packet pulled from one of its input
++ports -- specifically, INPUT. The default INPUT is zero; negative INPUTs
++mean always return a null packet. You can change INPUT with a write handler.
++\fBPullSwitch\fR has an unlimited number of inputs.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBswitch\fR (read/write)" 5
++Return or set the K parameter.
++.IP "" 5
++.IP "\fBCLICK_LLRPC_GET_SWITCH\fR (llrpc)" 5
++Argument is a pointer to an integer, in which the 
++.M Switch "n" 's
++K parameter is
++stored.
++.IP "" 5
++.IP "\fBCLICK_LLRPC_SET_SWITCH\fR (llrpc)" 5
++Argument is a pointer to an integer. Sets the K parameter to that integer.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M StaticPullSwitch n ,
++.M PrioSched n ,
++.M RoundRobinSched n ,
++.M StrideSched n ,
++.M Switch "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/PullTee.n click-1.6.0-27/inst/share/man/mann/PullTee.n
+--- click-1.6.0/inst/share/man/mann/PullTee.n  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/PullTee.n       2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,34 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/tee.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "TEE, PULLTEE" n "11/Feb/2009" "Click"
++.SH "NAME"
++Tee, PullTee \- Click elements;
++duplicates packets
++.SH "SYNOPSIS"
++\fBTee\fR([N])
++.br
++\fBPullTee\fR([N])
++
++\fBPorts\fR: 1 input, 1 or more outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++\fBTee\fR sends a copy of each incoming packet out each output.
++.PP
++\fBPullTee\fR's input and its first output are pull; its other outputs are push.
++Each time the pull output pulls a packet, it
++sends a copy out the push outputs.
++.PP
++\fBTee\fR and \fBPullTee\fR have however many outputs are used in the configuration,
++but you can say how many outputs you expect with the optional argument
++N.
++
+diff -Nurb click-1.6.0/inst/share/man/mann/PushNull.n click-1.6.0-27/inst/share/man/mann/PushNull.n
+--- click-1.6.0/inst/share/man/mann/PushNull.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/PushNull.n      2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,29 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/nullelement.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "PUSHNULL" n "11/Feb/2009" "Click"
++.SH "NAME"
++PushNull \- Click element;
++passes packets unchanged
++.SH "SYNOPSIS"
++\fBPushNull\fR
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Responds to each pushed packet by pushing it unchanged out its first output.
++.PP
++
++.SH "SEE ALSO"
++.M Null n ,
++.M PullNull "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Queue.n click-1.6.0-27/inst/share/man/mann/Queue.n
+--- click-1.6.0/inst/share/man/mann/Queue.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Queue.n 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,81 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/fullnotequeue.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "QUEUE" n "11/Feb/2009" "Click"
++.SH "NAME"
++Queue \- Click element;
++stores packets in a FIFO queue
++.SH "SYNOPSIS"
++Queue
++.br
++\fBQueue\fR(CAPACITY)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: push inputs, pull outputs
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Stores incoming packets in a first-in-first-out queue.
++Drops incoming packets if the queue already holds CAPACITY packets.
++The default for CAPACITY is 1000.
++.PP
++\fBQueue\fR notifies interested parties when it becomes empty and when a
++formerly-empty queue receives a packet.  The empty notification takes place
++some time after the queue goes empty, to prevent thrashing for queues that
++hover around 1 or 2 packets long.  This behavior is the same as that of
++.M NotifierQueue "n" .
++\fBQueue\fR additionally notifies interested parties that it is
++non-full, and when a formerly-full queue gains some free space.  In all
++respects but notification, \fBQueue\fR behaves exactly like 
++.M SimpleQueue "n" .
++.PP
++You may also use the old element name "FullNoteQueue".
++.PP
++\fBMultithreaded Click note:\fR \fBQueue\fR is designed to be used in an
++environment with at most one concurrent pusher and at most one concurrent
++puller.  Thus, at most one thread pushes to the \fBQueue\fR at a time and at
++most one thread pulls from the \fBQueue\fR at a time.  Different threads can
++push to and pull from the \fBQueue\fR concurrently, however.  See 
++.M MSQueue "n" 
++for
++a queue that can support multiple concurrent pushers.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBlength\fR (read-only)" 5
++Returns the current number of packets in the queue.
++.IP "" 5
++.IP "\fBhighwater_length\fR (read-only)" 5
++Returns the maximum number of packets that have ever been in the queue at once.
++.IP "" 5
++.IP "\fBcapacity\fR (read/write)" 5
++Returns or sets the queue's capacity.
++.IP "" 5
++.IP "\fBdrops\fR (read-only)" 5
++Returns the number of packets dropped by the queue so far.
++.IP "" 5
++.IP "\fBreset_counts\fR (write-only)" 5
++When written, resets the \f(CWdrops\fR and \f(CWhighwater_length\fR counters.
++.IP "" 5
++.IP "\fBreset\fR (write-only)" 5
++When written, drops all packets in the queue.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M SimpleQueue n ,
++.M NotifierQueue n ,
++.M MixedQueue n ,
++.M FrontDropQueue n ,
++.M MSQueue "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/QuitWatcher.n click-1.6.0-27/inst/share/man/mann/QuitWatcher.n
+--- click-1.6.0/inst/share/man/mann/QuitWatcher.n      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/QuitWatcher.n   2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,23 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/quitwatcher.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "QUITWATCHER" n "11/Feb/2009" "Click"
++.SH "NAME"
++QuitWatcher \- Click element;
++stops router processing
++.SH "SYNOPSIS"
++\fBQuitWatcher\fR(ELEMENT, ...)
++
++\fBPorts\fR: none
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Stops router processing when at least one of the ELEMENTs is no longer
++scheduled.
++
+diff -Nurb click-1.6.0/inst/share/man/mann/RED.n click-1.6.0-27/inst/share/man/mann/RED.n
+--- click-1.6.0/inst/share/man/mann/RED.n      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/RED.n   2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,113 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/aqm/red.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "RED" n "11/Feb/2009" "Click"
++.SH "NAME"
++RED \- Click element;
++drops packets according to RED
++.SH "SYNOPSIS"
++\fBRED\fR(MIN_THRESH, MAX_THRESH, MAX_P [, \fIKEYWORDS\fR])
++
++\fBPorts\fR: 1 input, 1-2 outputs
++.br
++\fBProcessing\fR: agnostic, but output 1 is push
++.br
++\fBPackage\fR: aqm (core)
++.br
++.SH "DESCRIPTION"
++Implements the Random Early Detection packet dropping
++algorithm.
++.PP
++A \fBRED\fR element is associated with one or more Storage elements (usually
++Queues). It maintains a running average of the sum of the queue lengths, and
++marks packets with a probability proportional to that sum. By default, the
++Queues are found with flow-based router context. If the \fBRED\fR is a push element,
++it uses the nearest downstream Queues; if it is a pull element, it uses the
++nearest upstream Queues.
++.PP
++Marked packets are dropped, or emitted on output 1 if \fBRED\fR has two output
++ports.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "QUEUES" 8
++This argument is a space-separated list of Storage element names. \fBRED\fR will use
++those elements' queue lengths, rather than any elements found via flow-based
++router context.
++.IP "" 8
++.IP "STABILITY" 8
++Unsigned. This number determines how stable the average queue size is -- that
++is, how quickly it changes due to fluctuations in the instantaneous queue
++size. Higher numbers mean more stability. The corresponding conventional \fBRED\fR
++parameter is w_q; STABILITY equals -log_2(w_q).
++.IP "" 8
++STABILITY should equal
++.IP "" 8
++.nf
++\&   -log_2 (1 - e^(-1/K)),
++.fi
++.IP "" 8
++where K is the link bandwidth in packets per second. Default STABILITY is 4.
++This is very low (unstable) for most purposes; it corresponds to a link
++bandwidth of roughly 15 packets per second, or a w_q of 0.25. The NS default
++setting for w_q is 0.002, corresponding to a STABILITY of roughly 9.
++.IP "" 8
++
++.PP
++The \fBRED\fR element implements the Gentle RED variant first proposed by Sally
++Floyd in October 1997.
++.PP
++.SH "EXAMPLES"
++
++.nf
++\&  ... -> RED(5, 50, 0.02) -> Queue(200) -> ...
++.fi
++.PP
++
++
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBmin_thresh\fR (read/write)" 5
++Returns or sets the MIN_THRESH configuration parameter.
++.IP "" 5
++.IP "\fBmax_thresh\fR (read/write)" 5
++Returns or sets the MAX_THRESH configuration parameter.
++.IP "" 5
++.IP "\fBmax_p\fR (read/write)" 5
++Returns or sets the MAX_P configuration parameter.
++.IP "" 5
++.IP "\fBdrops\fR (read-only)" 5
++Returns the number of packets dropped so far.
++.IP "" 5
++.IP "\fBqueues\fR (read-only)" 5
++Returns the Queues associated with this \fBRED\fR element, listed one per line.
++.IP "" 5
++.IP "\fBavg_queue_size\fR (read-only)" 5
++Returns the current average queue size.
++.IP "" 5
++.IP "\fBstats\fR (read-only)" 5
++Returns some human-readable statistics.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M AdaptiveRED n ,
++.M Queue n 
++.PP
++Sally Floyd and Van Jacobson. \fIRandom Early Detection Gateways for
++Congestion Avoidance\fR. ACM Transactions on Networking, \fB1\fR(4), August
++1993, pp 397-413.
++.PP
++Sally Floyd. "Optimum functions for computing the drop
++probability", October 1997. \fBhttp://www.icir.org/floyd/REDfunc.txt\fR.
++
+diff -Nurb click-1.6.0/inst/share/man/mann/RFC2507Comp.n click-1.6.0-27/inst/share/man/mann/RFC2507Comp.n
+--- click-1.6.0/inst/share/man/mann/RFC2507Comp.n      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/RFC2507Comp.n   2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,34 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/rfc2507c.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "RFC2507COMP" n "11/Feb/2009" "Click"
++.SH "NAME"
++RFC2507Comp \- Click element;
++RFC2507 IPv4/TCP header compressor.
++.SH "SYNOPSIS"
++\fBRFC2507Comp\fR
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Input packets need to be IPv4 (no ether header &c).
++It's OK if they're not TCP.
++.PP
++How to specify various kinds of output? There is not really
++a useful general standard. Perhaps emit each different format
++of output on a different output() and let further modules
++sort it out. Then we wouldn't be AGNOSTIC...
++.PP
++
++.SH "SEE ALSO"
++.M RFC2507Decomp "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/RFC2507Decomp.n click-1.6.0-27/inst/share/man/mann/RFC2507Decomp.n
+--- click-1.6.0/inst/share/man/mann/RFC2507Decomp.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/RFC2507Decomp.n 2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,29 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/rfc2507d.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "RFC2507DECOMP" n "11/Feb/2009" "Click"
++.SH "NAME"
++RFC2507Decomp \- Click element;
++RFC2507 IPv4/TCP header decompressor.
++.SH "SYNOPSIS"
++\fBRFC2507Decomp\fR
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Input packets should be as produced by RFC2507c.
++Spits out IP packets.
++.PP
++
++.SH "SEE ALSO"
++.M RFC2507Comp "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/RIPSend.n click-1.6.0-27/inst/share/man/mann/RIPSend.n
+--- click-1.6.0/inst/share/man/mann/RIPSend.n  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/RIPSend.n       2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,42 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/ripsend.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "RIPSEND" n "11/Feb/2009" "Click"
++.SH "NAME"
++RIPSend \- Click element;
++periodically generates specified RIP II packet
++.SH "SYNOPSIS"
++\fBRIPSend\fR(SRC, DST, PREFIX, METRIC)
++
++\fBPorts\fR: no inputs, 1 output
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Sends periodic RIP II packets with specified contents,
++including UDP and IP headers.
++
++.SH "EXAMPLES"
++Send out advertisements to net 18.26.4, indicating that
++route 18.26.4.24 knows how to get to net 10 with hop
++count 10:
++.PP
++.nf
++\&  RIPSend(18.26.4.24, 18.26.4.255, 10.0.0.0/8, 10) ->
++\&  EtherEncap(0x0008, 00:00:c0:ae:67:ef, ff:ff:ff:ff:ff:ff) ->
++\&  ToDevice(eth0);
++.fi
++.PP
++
++
++
++.SH "NOTES"
++Note that this is just a tiny piece of a full RIP implementation.
++
+diff -Nurb click-1.6.0/inst/share/man/mann/RadixIPLookup.n click-1.6.0-27/inst/share/man/mann/RadixIPLookup.n
+--- click-1.6.0/inst/share/man/mann/RadixIPLookup.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/RadixIPLookup.n 2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,85 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/radixiplookup.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "RADIXIPLOOKUP" n "11/Feb/2009" "Click"
++.SH "NAME"
++RadixIPLookup \- Click element;
++IP lookup using a radix trie
++.SH "SYNOPSIS"
++\fBRadixIPLookup\fR(ADDR1/MASK1 [GW1] OUT1, ADDR2/MASK2 [GW2] OUT2, ...)
++
++\fBPorts\fR: 1 input, any number of outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Performs IP lookup using a radix trie.  The first level of the trie has 256
++buckets; each succeeding level has 16.  The maximum number of levels that will
++be traversed is thus 7.
++.PP
++Expects a destination IP address annotation with each packet. Looks up that
++address in its routing table, using longest-prefix-match, sets the destination
++annotation to the corresponding GW (if specified), and emits the packet on the
++indicated OUTput port.
++.PP
++Each argument is a route, specifying a destination and mask, an optional
++gateway IP address, and an output port.
++.PP
++Uses the 
++.M IPRouteTable "n" 
++interface; see 
++.M IPRouteTable "n" 
++for description.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBtable\fR (read-only)" 5
++Outputs a human-readable version of the current routing table.
++.IP "" 5
++.IP "\fBlookup\fR (read-only)" 5
++Reports the OUTput port and GW corresponding to an address.
++.IP "" 5
++.IP "\fBadd\fR (write-only)" 5
++Adds a route to the table. Format should be `\f(CWADDR/MASK [GW] OUT\fR'. Should
++fail if a route for \f(CWADDR/MASK\fR already exists, but currently does not.
++.IP "" 5
++.IP "\fBset\fR (write-only)" 5
++Sets a route, whether or not a route for the same prefix already exists.
++.IP "" 5
++.IP "\fBremove\fR (write-only)" 5
++Removes a route from the table. Format should be `\f(CWADDR/MASK\fR'.
++.IP "" 5
++.IP "\fBctrl\fR (write-only)" 5
++Adds or removes a group of routes. Write `\f(CWadd\fR/\f(CWset ADDR/MASK [GW] OUT\fR' to
++add a route, and `\f(CWremove ADDR/MASK\fR' to remove a route. You can supply
++multiple commands, one per line; all commands are executed as one atomic
++operation.
++.IP "" 5
++.PP
++
++.SH "NOTES"
++See 
++.M IPRouteTable "n" 
++for a performance comparison of the various IP routing
++elements.
++.PP
++
++.SH "SEE ALSO"
++.M IPRouteTable n ,
++.M DirectIPLookup n ,
++.M RangeIPLookup n ,
++.M StaticIPLookup n ,
++.M LinearIPLookup n ,
++.M SortedIPLookup n ,
++.M LinuxIPLookup "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/RandomBitErrors.n click-1.6.0-27/inst/share/man/mann/RandomBitErrors.n
+--- click-1.6.0/inst/share/man/mann/RandomBitErrors.n  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/RandomBitErrors.n       2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,49 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/randomerror.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "RANDOMBITERRORS" n "11/Feb/2009" "Click"
++.SH "NAME"
++RandomBitErrors \- Click element;
++changes packet data with some probability
++.SH "SYNOPSIS"
++\fBRandomBitErrors\fR(P [, KIND, ACTIVE])
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Change each bit in each packet with probability P. The KIND parameter
++determines the kind of change. `flip' (the default) flips bits, `set' sets
++bits to one, and `clear' sets bits to zero.
++.PP
++\fBRandomBitErrors\fR can be active or inactive. It only changes bits when
++active. It starts out active by default, but if you pass `false' for the
++ACTIVE parameter, it will start out inactive.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBp_bit_error\fR (read/write)" 5
++Returns or sets the P probability parameter.
++.IP "" 5
++.IP "\fBerror_kind\fR (read/write)" 5
++Returns or sets the KIND parameter.
++.IP "" 5
++.IP "\fBactive\fR (read/write)" 5
++Makes the element active or inactive.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M RandomSample "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/RandomSample.n click-1.6.0-27/inst/share/man/mann/RandomSample.n
+--- click-1.6.0/inst/share/man/mann/RandomSample.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/RandomSample.n  2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,68 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/randomsample.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "RANDOMSAMPLE" n "11/Feb/2009" "Click"
++.SH "NAME"
++RandomSample \- Click element;
++samples packets with some probability
++.SH "SYNOPSIS"
++\fBRandomSample\fR([P, \fIKEYWORDS\fR])
++
++\fBPorts\fR: 1 input, 1-2 outputs
++.br
++\fBProcessing\fR: agnostic, but output 1 is push
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Samples packets with probability P. One out of 1/P packets are sent to the
++first output. The remaining packets are dropped, unless the element has two
++outputs, in which case they are emitted on output 1.
++.PP
++If you don't specify P, you must supply one of the SAMPLE and DROP keyword
++arguments.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "SAMPLE \fIP\fR" 8
++Sets the sampling probability to \fIP\fR.
++.IP "" 8
++.IP "DROP \fIQ\fR" 8
++The element will drop packets with probability \fIQ\fR. Same as suppling (1 -
++\fIQ\fR) as the sampling probability.
++.IP "" 8
++.IP "ACTIVE" 8
++Boolean. \fBRandomSample\fR is active or inactive; when inactive, it sends all
++packets to output 0. Default is true (active).
++.IP "" 8
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBsampling_prob\fR (read/write)" 5
++Returns or sets the sampling probability.
++.IP "" 5
++.IP "\fBdrop_prob\fR (read/write)" 5
++Returns or sets the drop probability, which is 1 minus the sampling
++probability.
++.IP "" 5
++.IP "\fBactive\fR (read/write)" 5
++Makes the element active or inactive.
++.IP "" 5
++.IP "\fBdrops\fR (read-only)" 5
++Returns the number of packets dropped.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M RandomBitErrors "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/RandomSource.n click-1.6.0-27/inst/share/man/mann/RandomSource.n
+--- click-1.6.0/inst/share/man/mann/RandomSource.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/RandomSource.n  2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,29 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/randomsource.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "RANDOMSOURCE" n "11/Feb/2009" "Click"
++.SH "NAME"
++RandomSource \- Click element;
++generates random packets whenever scheduled
++.SH "SYNOPSIS"
++\fBRandomSource\fR(LENGTH)
++
++\fBPorts\fR: no inputs, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Creates packets, of the indicated length, filled with random bytes.
++Packets' timestamp annotations are set to the current time.
++.PP
++
++.SH "SEE ALSO"
++.M InfiniteSource "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/RandomSwitch.n click-1.6.0-27/inst/share/man/mann/RandomSwitch.n
+--- click-1.6.0/inst/share/man/mann/RandomSwitch.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/RandomSwitch.n  2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,31 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/randomswitch.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "RANDOMSWITCH" n "11/Feb/2009" "Click"
++.SH "NAME"
++RandomSwitch \- Click element;
++sends packets to random outputs
++.SH "SYNOPSIS"
++RandomSwitch
++
++\fBPorts\fR: one input, one or more outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Pushes each arriving packet to one of the N outputs, choosing outputs randomly.
++.PP
++
++.SH "SEE ALSO"
++.M Switch n ,
++.M StrideSwitch n ,
++.M RoundRobinSwitch n ,
++.M HashSwitch "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/RangeIPLookup.n click-1.6.0-27/inst/share/man/mann/RangeIPLookup.n
+--- click-1.6.0/inst/share/man/mann/RangeIPLookup.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/RangeIPLookup.n 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,96 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/rangeiplookup.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "RANGEIPLOOKUP" n "11/Feb/2009" "Click"
++.SH "NAME"
++RangeIPLookup \- Click element;
++IP routing lookup through binary search in a very compact table
++.SH "SYNOPSIS"
++\fBRangeIPLookup\fR(ADDR1/MASK1 [GW1] OUT1, ADDR2/MASK2 [GW2] OUT2, ...)
++
++\fBPorts\fR: 1 input, any number of outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBDrivers\fR: userlevel, bsdmodule
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Expects a destination IP address annotation with each packet. Looks up that
++address in its routing table, using longest-prefix-match, sets the destination
++annotation to the corresponding GW (if specified), and emits the packet on the
++indicated OUTput port.
++.PP
++Each argument is a route, specifying a destination and mask, an optional
++gateway IP address, and an output port.  No destination-mask pair should occur
++more than once.
++.PP
++\fBRangeIPLookup\fR aims at achieving high lookup speeds through exploiting the CPU
++cache locality.  The routing table is expanded into a very small lookup
++structure, typically occupying less then 4 bytes per IP prefix.  As an example,
++a lookup structure corresponding to a routing table with 167000 entries (a
++realistic snapshot taken from a core Internet router) occupies only around
++512 KBytes of RAM.  Depending on how sucessfully the CPU cache
++affinity can be maintained, worst-case lookup rates exceeding 20 million
++lookups per second can be achieved using modern commodity CPUs.
++.PP
++\fBRangeIPLookup\fR maintains a large 
++.M DirectIPLookup "n" 
++table as well as its own
++tables.  Although this subsidiary table is only accessed during route updates,
++it significantly adds to \fBRangeIPLookup\fR's total memory footprint.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBtable\fR (read-only)" 5
++Outputs a human-readable version of the current routing table.
++.IP "" 5
++.IP "\fBlookup\fR (read-only)" 5
++Reports the OUTput port and GW corresponding to an address.
++.IP "" 5
++.IP "\fBadd\fR (write-only)" 5
++Adds a route to the table. Format should be `\f(CWADDR/MASK [GW] OUT\fR'.
++Fails if a route for \f(CWADDR/MASK\fR already exists.
++.IP "" 5
++.IP "\fBset\fR (write-only)" 5
++Sets a route, whether or not a route for the same prefix already exists.
++.IP "" 5
++.IP "\fBremove\fR (write-only)" 5
++Removes a route from the table. Format should be `\f(CWADDR/MASK\fR'.
++.IP "" 5
++.IP "\fBctrl\fR (write-only)" 5
++Adds or removes a group of routes. Write `\f(CWadd\fR/\f(CWset ADDR/MASK [GW] OUT\fR' to
++add a route, and `\f(CWremove ADDR/MASK\fR' to remove a route. You can supply
++multiple commands, one per line; all commands are executed as one atomic
++operation.
++.IP "" 5
++.IP "\fBflush\fR (write-only)" 5
++Clears the entire routing table in a single atomic operation.
++.IP "" 5
++.PP
++
++.SH "NOTES"
++See 
++.M IPRouteTable "n" 
++for a performance comparison of the various IP routing
++elements.
++.PP
++
++.SH "SEE ALSO"
++.M IPRouteTable n ,
++.M RadixIPLookup n ,
++.M DirectIPLookup n ,
++.M LinearIPLookup n ,
++.M SortedIPLookup n ,
++.M StaticIPLookup n ,
++.M LinuxIPLookup "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/RatedSource.n click-1.6.0-27/inst/share/man/mann/RatedSource.n
+--- click-1.6.0/inst/share/man/mann/RatedSource.n      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/RatedSource.n   2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,99 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/ratedsource.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "RATEDSOURCE" n "11/Feb/2009" "Click"
++.SH "NAME"
++RatedSource \- Click element;
++generates packets at specified rate
++.SH "SYNOPSIS"
++\fBRatedSource\fR([DATA, RATE, LIMIT, ACTIVE, \fIKEYWORDS\fR])
++
++\fBPorts\fR: no inputs, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Creates packets consisting of DATA, emitting at most LIMIT such packets out
++its single output at a rate of RATE packets per second. When used as a push
++element, \fBRatedSource\fR will send a maximum of one packet per scheduling, so very
++high RATEs may not be achievable. If LIMIT is negative, sends packets forever.
++Will send packets only if ACTIVE is true. Default DATA is at least 64 bytes
++long. Default RATE is 10. Default LIMIT is -1 (send packets forever). Default
++ACTIVE is true.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "DATA" 8
++String. Same as the DATA argument.
++.IP "" 8
++.IP "DATASIZE" 8
++Integer. If set, ensures the outgoing packet contains at least this many bytes.
++.IP "" 8
++.IP "RATE" 8
++Integer. Same as the RATE argument.
++.IP "" 8
++.IP "LIMIT" 8
++Integer. Same as the LIMIT argument.
++.IP "" 8
++.IP "ACTIVE" 8
++Boolean. Same as the ACTIVE? argument.
++.IP "" 8
++.IP "STOP" 8
++Boolean. If true, then stop the driver once LIMIT packets are sent. Default is
++false.
++.IP "" 8
++.PP
++To generate a particular repeatable traffic pattern, use this element's
++\fBrate\fR and \fBactive\fR handlers in conjunction with 
++.M PokeHandlers "n" .
++.PP
++.SH "EXAMPLES"
++
++.nf
++\&  RatedSource(\e<0800>, 10, 1000) -> Queue -> ...
++.fi
++.PP
++
++
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBcount\fR (read-only)" 5
++Returns the total number of packets that have been generated.
++.IP "" 5
++.IP "\fBreset\fR (write-only)" 5
++Resets the number of generated packets to 0. The \fBRatedSource\fR will then
++generate another LIMIT packets (if it is active).
++.IP "" 5
++.IP "\fBdata\fR (read/write)" 5
++Returns or sets the DATA parameter.
++.IP "" 5
++.IP "\fBdatasize\fR (read/write)" 5
++Returns or sets the DATASIZE parameter.
++.IP "" 5
++.IP "\fBrate\fR (read/write)" 5
++Returns or sets the RATE parameter.
++.IP "" 5
++.IP "\fBlimit\fR (read/write)" 5
++Returns or sets the LIMIT parameter. Negative numbers mean no limit.
++.IP "" 5
++.IP "\fBactive\fR (read/write)" 5
++Makes the element active or inactive.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M InfiniteSource n ,
++.M PokeHandlers "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/RatedSplitter.n click-1.6.0-27/inst/share/man/mann/RatedSplitter.n
+--- click-1.6.0/inst/share/man/mann/RatedSplitter.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/RatedSplitter.n 2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,71 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/ratedsplitter.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "RATEDSPLITTER" n "11/Feb/2009" "Click"
++.SH "NAME"
++RatedSplitter \- Click element;
++splits flow of packets at specified rate
++.SH "SYNOPSIS"
++\fBRatedSplitter\fR(RATE)
++
++\fBPorts\fR: 1 input, 2 outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++\fBRatedSplitter\fR has two output ports. All incoming packets up to a maximum of
++RATE packets per second are emitted on output port 0. Any remaining packets
++are emitted on output port 1. Unlike 
++.M Meter "n" ,
++RATE packets per second are
++emitted on output port 0 even when the input rate is greater than RATE.
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\&  rs :: RatedSplitter(2000);
++.fi
++.PP
++Split packets on port 0 at 2000 packets per second.
++.PP
++.nf
++\&  elementclass RatedSampler {
++\&    input -> rs :: RatedSplitter(2000);
++\&    rs [0] -> t :: Tee;
++\&    t [0] -> [0] output;
++\&    t [1] -> [1] output;
++\&    rs [1] -> [0] output;
++\&  };
++.fi
++.PP
++In the above example, RatedSampler is a compound element that samples input
++packets at 2000 packets per second. All traffic is emitted on output 0; a
++maximum of 2000 packets per second are emitted on output 1 as well.
++.PP
++
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBrate\fR (read/write)" 5
++rate of splitting
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M BandwidthRatedSplitter n ,
++.M ProbSplitter n ,
++.M Meter n ,
++.M Shaper n ,
++.M RatedUnqueue n ,
++.M Tee "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/RatedUnqueue.n click-1.6.0-27/inst/share/man/mann/RatedUnqueue.n
+--- click-1.6.0/inst/share/man/mann/RatedUnqueue.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/RatedUnqueue.n  2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,40 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/ratedunqueue.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "RATEDUNQUEUE" n "11/Feb/2009" "Click"
++.SH "NAME"
++RatedUnqueue \- Click element;
++pull-to-push converter
++.SH "SYNOPSIS"
++\fBRatedUnqueue\fR(RATE)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: pull inputs, push outputs
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Pulls packets at the given RATE in packets per second, and pushes them out
++its single output.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBrate\fR (read/write)" 5
++
++.PP
++
++.SH "SEE ALSO"
++.M BandwidthRatedUnqueue n ,
++.M Unqueue n ,
++.M Shaper n ,
++.M RatedSplitter "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/RawSocket.n click-1.6.0-27/inst/share/man/mann/RawSocket.n
+--- click-1.6.0/inst/share/man/mann/RawSocket.n        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/RawSocket.n     2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,72 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/userlevel/rawsocket.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "RAWSOCKET" n "11/Feb/2009" "Click"
++.SH "NAME"
++RawSocket \- Click element;
++transports raw IP packets via safe raw sockets (user-level)
++.SH "SYNOPSIS"
++\fBRawSocket\fR("TCP", <TCP source port number> [, \fIKEYWORDS\fR])
++.br
++\fBRawSocket\fR("UDP", <UDP source port number> [, \fIKEYWORDS\fR])
++.br
++\fBRawSocket\fR("GRE", <GRE key or PPTP call ID> [, \fIKEYWORDS\fR])
++.br
++\fBRawSocket\fR("ICMP", <ICMP identifier> [, \fIKEYWORDS\fR])
++
++\fBPorts\fR: at most 1 input, at most 1 output
++.br
++\fBProcessing\fR: pull inputs, push outputs
++.br
++\fBDrivers\fR: userlevel
++.br
++\fBPackage\fR: userlevel (core)
++.br
++.SH "DESCRIPTION"
++Reads data from and writes data to a raw IPv4 socket. The raw IPv4
++socket may optionally be bound to a source port number in the case of
++TCP/UDP, a GRE key or PPTP call ID in the case of GRE, or an
++identifier in the case of ICMP. Binding a port to a raw IPv4 socket to
++reserve it and suppress TCP RST and ICMP Unreachable errors, is
++specific to PlanetLab Linux.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "SNAPLEN" 8
++Unsigned integer. Maximum packet length. This value
++represents the MRU of the \fBRawSocket\fR if it is used as a
++packet source. If the MRU is violated by the peer, i.e. if a packet
++longer than SNAPLEN is sent, the connection may be terminated.
++.IP "" 8
++.IP "PROPER" 8
++Boolean. PlanetLab specific. If true and Click has been configured
++--with-proper, use Proper to bind a reserved port.
++.IP "" 8
++.IP "HEADROOM" 8
++Unsigned Integer. Amount of headroom to reserve in packets created
++by this element. This could be useful for encapsulation protocols 
++which add headers to the packet, and can avoid expensive push 
++operations later in the packet's life.
++.IP "" 8
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\&  RawSocket(UDP, 53) -> ...
++\& 
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M Socket "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/RoundRobinIPMapper.n click-1.6.0-27/inst/share/man/mann/RoundRobinIPMapper.n
+--- click-1.6.0/inst/share/man/mann/RoundRobinIPMapper.n       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/RoundRobinIPMapper.n    2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,38 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/rripmapper.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ROUNDROBINIPMAPPER" n "11/Feb/2009" "Click"
++.SH "NAME"
++RoundRobinIPMapper \- Click element;
++round-robin mapper for 
++.M IPRewriter n 
++.SH "SYNOPSIS"
++\fBRoundRobinIPMapper\fR(PATTERN1, ..., PATTERNn)
++
++\fBPorts\fR: none
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Works in tandem with 
++.M IPRewriter "n" 
++to provide round-robin rewriting. This is
++useful, for example, in load-balancing applications. Implements the
++IPMapper interface.
++.PP
++Responds to mapping requests from an 
++.M IPRewriter "n" 
++by trying the PATTERNs in
++round-robin order and returning the first successfully created mapping.
++.PP
++
++.SH "SEE ALSO"
++.M IPRewriter n ,
++.M TCPRewriter n ,
++.M IPRewriterPatterns "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/RoundRobinSched.n click-1.6.0-27/inst/share/man/mann/RoundRobinSched.n
+--- click-1.6.0/inst/share/man/mann/RoundRobinSched.n  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/RoundRobinSched.n       2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,39 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/rrsched.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ROUNDROBINSCHED" n "11/Feb/2009" "Click"
++.SH "NAME"
++RoundRobinSched \- Click element;
++pulls from round-robin inputs
++.SH "SYNOPSIS"
++RoundRobinSched
++
++\fBPorts\fR: one output, zero or more inputs
++.br
++\fBProcessing\fR: pull
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Each time a pull comes in the output, pulls from its inputs
++in turn until one produces a packet. When the next pull
++comes in, it starts from the input after the one that
++last produced a packet. This amounts to a round robin
++scheduler.
++.PP
++The inputs usually come from Queues or other pull schedulers.
++\fBRoundRobinSched\fR uses notification to avoid pulling from empty inputs.
++.PP
++
++.SH "SEE ALSO"
++.M PrioSched n ,
++.M StrideSched n ,
++.M DRRSched n ,
++.M RoundRobinSwitch n ,
++.M SimpleRoundRobinSched "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/RoundRobinSwitch.n click-1.6.0-27/inst/share/man/mann/RoundRobinSwitch.n
+--- click-1.6.0/inst/share/man/mann/RoundRobinSwitch.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/RoundRobinSwitch.n      2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,33 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/rrswitch.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ROUNDROBINSWITCH" n "11/Feb/2009" "Click"
++.SH "NAME"
++RoundRobinSwitch \- Click element;
++sends packets to round-robin outputs
++.SH "SYNOPSIS"
++RoundRobinSwitch
++
++\fBPorts\fR: one input, one or more outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Pushes each arriving packet to one of the N outputs. The next packet
++will be pushed to the following output in round-robin order.
++.PP
++
++.SH "SEE ALSO"
++.M StrideSwitch n ,
++.M Switch n ,
++.M HashSwitch n ,
++.M RandomSwitch n ,
++.M RoundRobinSched "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/RoundTripCycleCount.n click-1.6.0-27/inst/share/man/mann/RoundTripCycleCount.n
+--- click-1.6.0/inst/share/man/mann/RoundTripCycleCount.n      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/RoundTripCycleCount.n   2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,50 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/linuxmodule/rtcycles.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ROUNDTRIPCYCLECOUNT" n "11/Feb/2009" "Click"
++.SH "NAME"
++RoundTripCycleCount \- Click element;
++measures round trip cycles on a push or pull path
++.SH "SYNOPSIS"
++\fBRoundTripCycleCount\fR()
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBDrivers\fR: linuxmodule
++.br
++\fBPackage\fR: linuxmodule (core)
++.br
++.SH "DESCRIPTION"
++Measures the number of CPU cycles it takes for a push or pull to come back
++to the element. This is a good indication of how much CPU is spent on the
++Click path after or before this element.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBpackets\fR (read-only)" 5
++Returns the number of packets that have passed.
++.IP "" 5
++.IP "\fBcycles\fR (read-only)" 5
++Returns the accumulated round-trip cycles for all passing packets.
++.IP "" 5
++.IP "\fBreset_counts\fR (write-only)" 5
++Resets \f(CWpackets\fR and \f(CWcycles\fR counters to zero when written.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M SetCycleCount n ,
++.M CycleCountAccum n ,
++.M SetPerfCount n ,
++.M PerfCountAccum "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ScheduleInfo.n click-1.6.0-27/inst/share/man/mann/ScheduleInfo.n
+--- click-1.6.0/inst/share/man/mann/ScheduleInfo.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ScheduleInfo.n  2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,74 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../include/click/standard/scheduleinfo.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SCHEDULEINFO" n "11/Feb/2009" "Click"
++.SH "NAME"
++ScheduleInfo \- Click element;
++specifies scheduling parameters
++.SH "SYNOPSIS"
++\fBScheduleInfo\fR(ELEMENT PARAM, ...)
++
++\fBPorts\fR: None
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Provides scheduling parameters for specified elements. Each configuration
++argument has the form `ELEMENT PARAM', meaning that the element
++named ELEMENT has scheduling parameter PARAM. Scheduling
++parameters are real numbers that set how often one element should be
++scheduled in relation to another. For example,
++if elements A and B have
++scheduling parameters 2 and 0.5, respectively, then A will be scheduled
++2/0.5 = 4 times as often as B. The default scheduling parameter is 1.
++.PP
++\fBScheduleInfo\fR elements inside a compound element can specify scheduling
++parameters for that compound's components.
++Outer \fBScheduleInfo\fR elements
++can specify a ``scheduling parameter'' for the compound
++element as a whole. This ``scheduling parameter'' is really a scaling
++factor affecting the compound's components. For example, consider this
++configuration,
++.PP
++.nf
++\&   elementclass Compound {
++\&     i :: InfiniteSource -> output;
++\&     ScheduleInfo(i 0.5);
++\&   }
++\&   c :: Compound -> Discard;
++\&   ScheduleInfo(c 4);
++.fi
++.PP
++which is the same as the following configuration, after compound elements
++are expanded.
++.PP
++.nf
++\&   c/i :: InfiniteSource -> Discard@3 :: Discard;
++\&   c/ScheduleInfo@2 :: ScheduleInfo(i 0.5);
++\&   ScheduleInfo@4 :: ScheduleInfo(c 4);
++.fi
++.PP
++The name of the first \fBScheduleInfo\fR element starts with `c/', so it is
++used to look up scheduling parameters for elements named `c/\fIwhatever\fR'.
++(This includes all components of the compound element `c'.) 
++The second \fBScheduleInfo\fR element, however, has no slash in its name,
++so it is used to look up all scheduling parameters,
++including scaling factors for compound elements.
++The InfiniteSource's final scaling parameter will be 2:
++the scaling factor 4 times the local scheduling parameter 0.5.
++.PP
++An outer \fBScheduleInfo\fR element can override local scheduling parameters.
++For example, if the second \fBScheduleInfo\fR element above was
++.PP
++.nf
++\&   ScheduleInfo@4 :: ScheduleInfo(c 4, c/i 10.5)
++.fi
++.PP
++then the InfiniteSource's final scaling parameter would be 10.5.
++
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ScheduleLinux.n click-1.6.0-27/inst/share/man/mann/ScheduleLinux.n
+--- click-1.6.0/inst/share/man/mann/ScheduleLinux.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ScheduleLinux.n 2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,30 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/linuxmodule/schedulelinux.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SCHEDULELINUX" n "11/Feb/2009" "Click"
++.SH "NAME"
++ScheduleLinux \- Click element;
++returns to Linux scheduler
++.SH "SYNOPSIS"
++ScheduleLinux
++
++\fBPorts\fR: none
++.br
++\fBDrivers\fR: linuxmodule
++.br
++\fBPackage\fR: linuxmodule (core)
++.br
++.SH "DESCRIPTION"
++Returns to Linux's scheduler every time it is scheduled by Click. Use
++.M ScheduleInfo "n" 
++to specify how often this should happen.
++.PP
++
++.SH "SEE ALSO"
++.M ScheduleInfo "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Script.n click-1.6.0-27/inst/share/man/mann/Script.n
+--- click-1.6.0/inst/share/man/mann/Script.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Script.n        2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,267 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/script.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SCRIPT" n "11/Feb/2009" "Click"
++.SH "NAME"
++Script \- Click element;
++script a Click router configuration
++.SH "SYNOPSIS"
++\fBScript\fR(INSTRUCTIONS...)
++
++\fBPorts\fR: none
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++The \fBScript\fR element implements a simple scripting language useful for
++controlling Click configurations.  Scripts can set variables, call handlers,
++wait for prodding from other elements, and stop the router.
++.PP
++
++.SH "INSTRUCTIONS"
++Each configuration argument is an \fIinstruction\fR (except for optional
++keywords; see below).  \fBScript\fR generally processes these instructions
++sequentially.
++.PP
++
++.SS "Handler Instructions"
++In all cases, text arguments are subject to substitutions; see below.
++.PP
++
++.IP "\&'\f(CWset\fR VAR TEXT'" 8
++Sets the script variable $VAR to TEXT.
++.IP "" 8
++.IP "\&'\f(CWinit\fR VAR TEXT'" 8
++Initializes the script variable $VAR to TEXT.  This assignment happens exactly
++once, when the \fBScript\fR element is initialized; later the instruction has no
++effect.
++.IP "" 8
++.IP "\&'\f(CWprint\fR [>FILE | >>FILE] [TEXT | HANDLER]'" 8
++Prints text, or the result of calling a read handler, followed by a newline.
++At user level, the text is written to the standard output, except that if the
++argument begins with > or >>, then the text is written or appended to the
++specified FILE.  In the kernel, the text is written to the system log.
++.IP "" 8
++If \f(CWprint\fR's argument starts with a letter, '@', or '_', then it is treated
++as a read handler.  Otherwise, it is treated as quoted text; \fBScript\fR prints the
++unquoted version.  For example, assuming the 'c.count' read handler
++returns "0":
++.IP "" 8
++.nf
++\&   print c.count     => 0
++\&   print "c.count"   => c.count
++\&   print '"c.count"' => "c.count"
++\&   set x c.count
++\&   print $x          => c.count
++\&   print $($x)       => 0
++.fi
++.IP "" 8
++
++
++.IP "\&'\f(CWread\fR HANDLER [ARG...]'" 8
++Call a read handler and print the handler name and result to standard error.  (In the kernel, the result is printed to the system log.)  For example, the
++configuration 'Idle -> c::Counter -> Idle; \fBScript\fR(read c.count)' would print
++print this to standard error:
++.IP "" 8
++.nf
++\&   c.count:
++\&   0
++.fi
++.IP "" 8
++Contrast the '\f(CWprint\fR' instruction.
++.IP "" 8
++
++.IP "\&'\f(CWwrite\fR HANDLER [ARG...]'" 8
++Call a write handler.  The handler's return status is available in following
++instructions as the '$?' variable.
++.IP "" 8
++.IP "\&'\f(CWreadq\fR HANDLER [ARG...]', '\f(CWwriteq\fR HANDLER [ARG...]'" 8
++Same as \f(CWread\fR and \f(CWwrite\fR, but removes one layer of quoting from the ARGs
++before calling the handler.
++.IP "" 8
++.PP
++
++.SS "Blocking Instructions"
++
++
++.IP "\&'\f(CWpause\fR [COUNT]'" 8
++Block until the \fBScript\fR element's 'step' handler is called COUNT times.  COUNT
++defaults to 1.
++.IP "" 8
++.IP "\&'\f(CWwait\fR TIME'" 8
++Wait for TIME seconds, or until a step, whichever comes first; then go to the
++next instruction.  TIME has microsecond precision.
++.IP "" 8
++.PP
++
++.SS "Control Instructions"
++
++
++.IP "\&'\f(CWlabel\fR LABEL'" 8
++Defines a label named LABEL.
++.IP "" 8
++.IP "\&'\f(CWgoto\fR LABEL [CONDITION]'" 8
++Transfers control to the named label.  \fBScript\fR elements detect loops; if an
++element's script appears to be looping (it executes 1000 goto instructions
++without blocking), the script is disabled.  If CONDITION is supplied, then the
++branch executes only when CONDITION is true.
++.IP "" 8
++As a special case, '\f(CWgoto exit [CONDITION]\fR' or '\f(CWgoto end [CONDITION]\fR'
++ends execution of the script, much like an '\f(CWexit\fR' or '\f(CWend\fR' instruction.
++.IP "" 8
++.IP "\&'\f(CWloop\fR'" 8
++Transfers control to the first instruction.
++.IP "" 8
++.IP "\&'\f(CWreturn\fR [VALUE]'" 8
++End execution of this script, returning VALUE.  This instruction is most
++useful for passive scripts; VALUE will be returned as the value of the \f(CWrun\fR
++handler.
++.IP "" 8
++.IP "\&'\f(CWexit\fR', '\f(CWend\fR'" 8
++End execution of this script.  For signal scripts, the '\f(CWexit\fR' instruction
++\fIdoes not\fR reinstall the script, whereas the '\f(CWend\fR' instruction does.
++.IP "" 8
++.PP
++
++.SH "SCRIPT TYPES"
++Scripts come in several types, including active scripts, which start running
++as soon as the configuration is loaded; passive scripts, which run only when
++prodded; signal scripts, which run in response to a signal; and driver
++scripts, which are active scripts that also control when the driver stops.
++The optional TYPE keyword argument is used to select a script type.  The types
++are:
++.PP
++
++
++.IP "\f(CWACTIVE\fR" 8
++An active script starts running as soon as the router is initialized.  This is
++the default.
++.IP "" 8
++.IP "\f(CWPASSIVE\fR" 8
++A passive script runs in response to a handler, namely the \f(CWrun\fR handler.
++Passive scripts can help build complex handlers from existing simple ones; for
++example, here's a passive script whose \f(CWs.run\fR read handler returns the sum
++of two Counter handlers.
++.IP "" 8
++.nf
++\&   ... c1 :: Counter ... c2 :: Counter ...
++\&   s :: Script(TYPE PASSIVE,
++\&          return $(add $(c1.count) $(c2.count)))
++.fi
++.IP "" 8
++Within the script, the \f(CWrun\fR handler's arguments, if any, are available
++via the \f(CW$args\fR variable.  The first, second, and so forth space-separated
++portions of \f(CW$args\fR are available via the \f(CW$1\fR, \f(CW$2\fR, ... variables.
++.nf
++\&          
++.fi
++.IP "" 8
++
++
++.IP "\f(CWDRIVER\fR" 8
++A driver script manages the Click driver's stop events.  See 
++.M DriverManager "n" 
++for
++more information.
++.IP "" 8
++.IP "\f(CWSIGNAL\fR SIGNO..." 8
++User-level only: A signal script runs in response to the signal(s) specified
++by the SIGNO argument(s).  Each SIGNO can be an integer or a signal name, such
++as INT or HUP.  Soon after the driver receives a named signal, this script
++will run.  The signal handler is automatically blocked until the script runs.
++The signal script will be reinstalled atomically as long as the script
++completes without blocking.  If it blocks, however, the signal script will not
++be installed from the blocking point until the script completes.  If multiple
++\fBScript\fR elements select the same signal, all the scripts will run.
++.IP "" 8
++.PP
++
++.SH "SUBSTITUTIONS"
++Text in most \fBScript\fR instructions undergoes variable substitution.  References
++to script variables, such as '\f(CW$x\fR', are replaced by the variable text.
++Additionally, the form '\f(CW$(HANDLER [ARG...])\fR' can be used to interpolate a
++read handler's value.  Variable and handler references can be nested inside
++a '\f(CW$(...)\fR' block.  For example, the following script will print 0, 1, 2, 3,
++and 4 on separate lines, then exit.  Note the use of \fBScript\fR's arithmetic
++handlers.
++.PP
++.nf
++\&   s :: Script(set x 0,
++\&               label begin_loop,
++\&               print $x,
++\&               set x $(s.add $x 1),
++\&               goto begin_loop $(s.lt $x 5),
++\&               stop);
++.fi
++.PP
++This can be further shortened since local handler references do not require
++the element name.  Thus, "$(s.add ...)" can be written "$(add ...)", as below.
++.PP
++.nf
++\&   Script(set x 0,
++\&          label begin_loop,
++\&          print $x,
++\&          set x $(add $x 1),
++\&          goto begin_loop $(lt $x 5),
++\&          stop);
++.fi
++.PP
++
++
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBstep\fR (write-only)" 5
++Advance the instruction pointer past the current blocking instruction (\f(CWpause\fR or \f(CWwait\fR).  A numeric argument will step past that many blocking instructions.
++.IP "" 5
++.IP "\fBgoto\fR (write-only)" 5
++Move the instruction pointer to the specified label.
++.IP "" 5
++.IP "\fBrun\fR (read/write)" 5
++Run the script.  If the script ends with a '\f(CWreturn\fR' instruction, then the
++handler returns with that value.
++.IP "" 5
++.IP "\fBadd\fR (read with parameters)" 5
++Useful for arithmetic.  Adds a space-separated list of integers; for example,
++\&'\f(CWadd 10 5 2\fR' returns "\f(CW17\fR".  (At user level, the arithmetic and
++comparison operators can parse floating-point numbers as well as integers.)
++.IP "" 5
++.IP "\fBsub\fR (read with parameters)" 5
++Subtracts a space-separated list of
++numbers; for example, '\f(CWsub 10 5 2\fR' returns
++"\f(CW3\fR".
++.IP "" 5
++.IP "\fBmul, div, idiv\fR (read with parameters)" 5
++Multiplies or divides a space-separated list of numbers and returns the
++result.  At user level, the '\f(CWidiv\fR' handler truncates its result to an
++integer and returns that, whereas the '\f(CWdiv\fR' handler returns a
++floating-point number; in the kernel, '\f(CWidiv\fR' and '\f(CWdiv\fR' both perform
++integer division.
++.IP "" 5
++.IP "\fBeq, ne, lt, gt, le, ge\fR (read with parameters)" 5
++Compares two parameters and return the result.  For example, '\f(CWeq 10
++0xA\fR' returns "\f(CWtrue\fR", but '\f(CWle 9 8\fR' returns "\f(CWfalse\fR".  If either
++parameter cannot be interpreted as a number, performs a string comparison.
++For example, '\f(CWeq 10x 10x\fR' return "\f(CWtrue\fR".
++.IP "" 5
++.IP "\fBnot\fR (read with parameters)" 5
++Useful for true/false operations.  Parses its parameter as a Boolean and
++returns its negation.
++.IP "" 5
++.IP "\fBsprintf\fR (read with parameters)" 5
++Parses its parameters as a space-separated list of arguments.  The first
++argument is a format string; the remaining arguments are formatted
++accordingly.  For example, '\f(CWsprintf "%05x" 127\fR' returns "\f(CW0007F\fR".
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M DriverManager "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/SetAnnoByte.n click-1.6.0-27/inst/share/man/mann/SetAnnoByte.n
+--- click-1.6.0/inst/share/man/mann/SetAnnoByte.n      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/SetAnnoByte.n   2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,42 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/setannobyte.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SETANNOBYTE" n "11/Feb/2009" "Click"
++.SH "NAME"
++SetAnnoByte \- Click element;
++sets packet user annotations
++.SH "SYNOPSIS"
++\fBSetAnnoByte\fR(OFFSET, VALUE)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Sets each packet's user annotation byte at OFFSET to VALUE, an integer
++0..255.  Permissible values for OFFSET are 0 to n-1, inclusive, where
++n is typically 24.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBoffset\fR (read-only)" 5
++Returns OFFSET
++.IP "" 5
++.IP "\fBvalue\fR (read-only)" 5
++Returns VALUE 
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M Paint "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/SetCRC32.n click-1.6.0-27/inst/share/man/mann/SetCRC32.n
+--- click-1.6.0/inst/share/man/mann/SetCRC32.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/SetCRC32.n      2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,28 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/setcrc32.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SETCRC32" n "11/Feb/2009" "Click"
++.SH "NAME"
++SetCRC32 \- Click element;
++calculates CRC32 and prepends to packet
++.SH "SYNOPSIS"
++\fBSetCRC32\fR()
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Computes a CRC32 over each packet and appends the 4 CRC
++bytes to the packet.
++
++.SH "SEE ALSO"
++.M CheckCRC32 "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/SetCycleCount.n click-1.6.0-27/inst/share/man/mann/SetCycleCount.n
+--- click-1.6.0/inst/share/man/mann/SetCycleCount.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/SetCycleCount.n 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,42 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/linuxmodule/setcyclecount.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SETCYCLECOUNT" n "11/Feb/2009" "Click"
++.SH "NAME"
++SetCycleCount \- Click element;
++stores cycle count in annotation
++.SH "SYNOPSIS"
++\fBSetCycleCount\fR()
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBDrivers\fR: linuxmodule
++.br
++\fBPackage\fR: linuxmodule (core)
++.br
++.SH "DESCRIPTION"
++Stores the current cycle count in an annotation in each packet. In
++combination with 
++.M CycleCountAccum "n" ,
++this lets you measure how many cycles it
++takes a packet to pass from one point to another.
++.PP
++
++.SH "NOTES"
++A packet has room for either exactly one cycle count or exactly one
++performance metric.
++.PP
++
++.SH "SEE ALSO"
++.M CycleCountAccum n ,
++.M RoundTripCycleCount n ,
++.M SetPerfCount n ,
++.M PerfCountAccum "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/SetIPAddress.n click-1.6.0-27/inst/share/man/mann/SetIPAddress.n
+--- click-1.6.0/inst/share/man/mann/SetIPAddress.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/SetIPAddress.n  2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,30 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/setipaddress.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SETIPADDRESS" n "11/Feb/2009" "Click"
++.SH "NAME"
++SetIPAddress \- Click element;
++sets destination IP address annotations
++.SH "SYNOPSIS"
++\fBSetIPAddress\fR(IPADDR)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Set the destination IP address annotation of incoming packets to the
++static IP address IPADDR.
++.PP
++
++.SH "SEE ALSO"
++.M StoreIPAddress n ,
++.M GetIPAddress "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/SetIPChecksum.n click-1.6.0-27/inst/share/man/mann/SetIPChecksum.n
+--- click-1.6.0/inst/share/man/mann/SetIPChecksum.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/SetIPChecksum.n 2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,41 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/setipchecksum.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SETIPCHECKSUM" n "11/Feb/2009" "Click"
++.SH "NAME"
++SetIPChecksum \- Click element;
++sets IP packets' checksums
++.SH "SYNOPSIS"
++\fBSetIPChecksum\fR()
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Expects an IP packet as input.
++Calculates the IP header's checksum and sets the checksum header field.
++.PP
++You will not normally need \fBSetIPChecksum\fR. Most elements that modify an IP
++header, like 
++.M DecIPTTL "n" ,
++.M SetIPDSCP "n" ,
++and 
++.M IPRewriter "n" ,
++already update the
++checksum incrementally.
++.PP
++
++.SH "SEE ALSO"
++.M CheckIPHeader n ,
++.M DecIPTTL n ,
++.M SetIPDSCP n ,
++.M IPRewriter "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/SetIPDSCP.n click-1.6.0-27/inst/share/man/mann/SetIPDSCP.n
+--- click-1.6.0/inst/share/man/mann/SetIPDSCP.n        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/SetIPDSCP.n     2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,28 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/setipdscp.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SETIPDSCP" n "11/Feb/2009" "Click"
++.SH "NAME"
++SetIPDSCP \- Click element;
++sets IP packets' DSCP fields
++.SH "SYNOPSIS"
++\fBSetIPDSCP\fR(DSCP)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Expects IP packets as input and
++sets their Differential Services Code Point to DSCP.
++Then it incrementally recalculates the IP checksum
++and passes the packet to output 0.
++The DSCP is the upper 6 bits of the IP TOS field.
++
+diff -Nurb click-1.6.0/inst/share/man/mann/SetPacketType.n click-1.6.0-27/inst/share/man/mann/SetPacketType.n
+--- click-1.6.0/inst/share/man/mann/SetPacketType.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/SetPacketType.n 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,28 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/setpackettype.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SETPACKETTYPE" n "11/Feb/2009" "Click"
++.SH "NAME"
++SetPacketType \- Click element;
++sets packet type annotation
++.SH "SYNOPSIS"
++\fBSetPacketType\fR(TYPE)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++\fBSetPacketType\fR sets passing packets' packet type annotations to TYPE. The
++packet type annotation tells Linux about the packet's link-level
++characteristics. For example, was the packet sent directly to this host, or
++was it broadcast? TYPE should be one of `\f(CWHOST\fR', `\f(CWBROADCAST\fR',
++`\f(CWMULTICAST\fR', `\f(CWOTHERHOST\fR', `\f(CWOUTGOING\fR', or `\f(CWLOOPBACK\fR'.
++
+diff -Nurb click-1.6.0/inst/share/man/mann/SetPerfCount.n click-1.6.0-27/inst/share/man/mann/SetPerfCount.n
+--- click-1.6.0/inst/share/man/mann/SetPerfCount.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/SetPerfCount.n  2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,46 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/linuxmodule/setperfcount.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SETPERFCOUNT" n "11/Feb/2009" "Click"
++.SH "NAME"
++SetPerfCount \- Click element;
++stores Pentium Pro performance metric in annotation
++.SH "SYNOPSIS"
++\fBSetPerfCount\fR(TYPE)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBDrivers\fR: linuxmodule
++.br
++\fBPackage\fR: linuxmodule (core)
++.br
++.SH "DESCRIPTION"
++Stores information about the Pentium Pro performance metric TYPE in each
++packet. In combination with 
++.M PerfCountAccum "n" ,
++this lets you measure how the
++metric changes over the packet's lifetime.
++.PP
++
++.SH "NOTES"
++A packet has room for either exactly one cycle count or exactly one
++performance metric.
++.PP
++Valid performance metric names are \f(CWBUS_TRAN_INVAL\fR, \f(CWBUS_TRAN_MEM\fR,
++\f(CWDCU_MISS_OUTSTANDING\fR, \f(CWIFU_FETCH\fR, \f(CWIFU_FETCH_MISS\fR, \f(CWIFU_MEM_STALL\fR,
++\f(CWINST_RETIRED\fR, \f(CWL2_IFETCH\fR, \f(CWL2_LD\fR, \f(CWL2_LINES_IN\fR, \f(CWL2_LINES_OUT\fR,
++\f(CWL2_LINES_OUTM\fR, and \f(CWL2_RQSTS\fR.
++.PP
++
++.SH "SEE ALSO"
++.M PerfCountAccum n ,
++.M SetCycleCount n ,
++.M CycleCountAccum "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/SetRandIPAddress.n click-1.6.0-27/inst/share/man/mann/SetRandIPAddress.n
+--- click-1.6.0/inst/share/man/mann/SetRandIPAddress.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/SetRandIPAddress.n      2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,33 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/setrandipaddress.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SETRANDIPADDRESS" n "11/Feb/2009" "Click"
++.SH "NAME"
++SetRandIPAddress \- Click element;
++sets destination IP address annotations randomly
++.SH "SYNOPSIS"
++\fBSetRandIPAddress\fR(PREFIX, [LIMIT])
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Set the destination IP address annotation to a random number within
++the specified PREFIX.
++.PP
++If LIMIT is given, at most LIMIT distinct addresses will be generated.
++.PP
++
++.SH "SEE ALSO"
++.M StoreIPAddress n ,
++.M GetIPAddress n ,
++.M SetIPAddress "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/SetTCPChecksum.n click-1.6.0-27/inst/share/man/mann/SetTCPChecksum.n
+--- click-1.6.0/inst/share/man/mann/SetTCPChecksum.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/SetTCPChecksum.n        2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,34 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/tcpudp/settcpchecksum.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SETTCPCHECKSUM" n "11/Feb/2009" "Click"
++.SH "NAME"
++SetTCPChecksum \- Click element;
++sets TCP packets' checksums
++.SH "SYNOPSIS"
++\fBSetTCPChecksum\fR([FIXOFF])
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: tcpudp (core)
++.br
++.SH "DESCRIPTION"
++Input packets should be TCP in IP.
++.PP
++Calculates the TCP header's checksum and sets the checksum header field.
++Uses the IP header fields to generate the pseudo-header.
++.PP
++
++.SH "SEE ALSO"
++.M CheckTCPHeader n ,
++.M SetIPChecksum n ,
++.M CheckIPHeader n ,
++.M SetUDPChecksum "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/SetTimestamp.n click-1.6.0-27/inst/share/man/mann/SetTimestamp.n
+--- click-1.6.0/inst/share/man/mann/SetTimestamp.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/SetTimestamp.n  2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,45 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/settimestamp.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SETTIMESTAMP" n "11/Feb/2009" "Click"
++.SH "NAME"
++SetTimestamp \- Click element;
++store the time in the packet's timestamp annotation
++.SH "SYNOPSIS"
++\fBSetTimestamp\fR([TIMESTAMP, \fIkeyword\fR FIRST, DELTA])
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Store the specified TIMESTAMP in the packet's timestamp annotation. If
++TIMESTAMP is not specified, then sets the annotation to the system time when
++the packet arrived at the \fBSetTimestamp\fR element.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "FIRST" 8
++Boolean.  If true, then set the packet's "first timestamp" annotation, not its
++timestamp annotation.  Default is true.
++.IP "" 8
++.IP "DELTA" 8
++Boolean.  If true, then set the packet's timestamp annotation to the
++difference between its current timestamp annotation and its "first timestamp"
++annotation.  Default is false.
++.IP "" 8
++.PP
++
++.SH "SEE ALSO"
++.M StoreTimestamp n ,
++.M PrintOld "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/SetUDPChecksum.n click-1.6.0-27/inst/share/man/mann/SetUDPChecksum.n
+--- click-1.6.0/inst/share/man/mann/SetUDPChecksum.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/SetUDPChecksum.n        2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,38 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/tcpudp/setudpchecksum.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SETUDPCHECKSUM" n "11/Feb/2009" "Click"
++.SH "NAME"
++SetUDPChecksum \- Click element;
++sets UDP packets' checksums
++.SH "SYNOPSIS"
++\fBSetUDPChecksum\fR()
++
++\fBPorts\fR: 1 input, 1-2 outputs
++.br
++\fBProcessing\fR: agnostic, but output 1 is push
++.br
++\fBPackage\fR: tcpudp (core)
++.br
++.SH "DESCRIPTION"
++Input packets must be UDP in IP (the protocol field isn't checked).
++.PP
++Calculates the UDP checksum and sets the UDP header's checksum field. Uses
++IP header fields to generate the pseudo-header.
++.PP
++If input packets are IP fragments, or the UDP length is longer than the
++packet, then pushes the input packets to the 2nd output, or drops them if
++there is no 2nd output.
++.PP
++
++.SH "SEE ALSO"
++.M CheckUDPHeader n ,
++.M SetIPChecksum n ,
++.M CheckIPHeader n ,
++.M SetTCPChecksum "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Shaper.n click-1.6.0-27/inst/share/man/mann/Shaper.n
+--- click-1.6.0/inst/share/man/mann/Shaper.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Shaper.n        2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,54 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/shaper.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SHAPER" n "11/Feb/2009" "Click"
++.SH "NAME"
++Shaper \- Click element;
++shapes traffic to maximum rate (pkt/s) 
++.SH "SYNOPSIS"
++\fBShaper\fR(RATE)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: pull
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++\fBShaper\fR is a pull element that allows a maximum of RATE packets per second
++to pass through. That is, traffic is shaped to RATE packets per
++second. \fBShaper\fR is dependent on the timing of its pull requests; if it
++receives only sporadic pull requests, then it will emit packets only
++sporadically. However, if it receives a large number of evenly-spaced pull
++requests, then it will emit packets at the specified RATE with low
++burstiness.
++.PP
++
++.SH "NOTES"
++\fBShaper\fR cannot implement every rate smoothly. For example, it can smoothly
++generate 1000000 packets per second and 1000244 packets per second, but not
++rates in between. (In-between rates will result in minor burstiness.) This
++granularity issue is negligible at low rates, and becomes serious at very
++high rates; for example, \fBShaper\fR cannot smoothly implement any rate between
++2.048e10 and 4.096e10 packets per second.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBrate\fR (read/write)" 5
++Returns or sets the RATE parameter.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M BandwidthShaper n ,
++.M RatedSplitter n ,
++.M RatedUnqueue "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/SimpleQueue.n click-1.6.0-27/inst/share/man/mann/SimpleQueue.n
+--- click-1.6.0/inst/share/man/mann/SimpleQueue.n      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/SimpleQueue.n   2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,80 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/simplequeue.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SIMPLEQUEUE" n "11/Feb/2009" "Click"
++.SH "NAME"
++SimpleQueue \- Click element;
++stores packets in a FIFO queue
++.SH "SYNOPSIS"
++SimpleQueue
++.br
++\fBSimpleQueue\fR(CAPACITY)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: push inputs, pull outputs
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Stores incoming packets in a first-in-first-out queue.
++Drops incoming packets if the queue already holds CAPACITY packets.
++The default for CAPACITY is 1000.
++.PP
++\fBMultithreaded Click note:\fR \fBSimpleQueue\fR is designed to be used in an
++environment with at most one concurrent pusher and at most one concurrent
++puller.  Thus, at most one thread pushes to the \fBSimpleQueue\fR at a time and at
++most one thread pulls from the \fBSimpleQueue\fR at a time.  Different threads can
++push to and pull from the \fBSimpleQueue\fR concurrently, however.  See 
++.M MSQueue "n" 
++for
++a queue that can support multiple concurrent pushers.
++.PP
++
++.SH "NOTES"
++The 
++.M Queue "n" 
++and 
++.M NotifierQueue "n" 
++elements act like \fBSimpleQueue\fR, but additionally
++notify interested parties when they change state (from nonempty to empty or
++vice versa, and/or from nonfull to full or vice versa).
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBlength\fR (read-only)" 5
++Returns the current number of packets in the queue.
++.IP "" 5
++.IP "\fBhighwater_length\fR (read-only)" 5
++Returns the maximum number of packets that have ever been in the queue at once.
++.IP "" 5
++.IP "\fBcapacity\fR (read/write)" 5
++Returns or sets the queue's capacity.
++.IP "" 5
++.IP "\fBdrops\fR (read-only)" 5
++Returns the number of packets dropped by the queue so far.
++.IP "" 5
++.IP "\fBreset_counts\fR (write-only)" 5
++When written, resets the \f(CWdrops\fR and \f(CWhighwater_length\fR counters.
++.IP "" 5
++.IP "\fBreset\fR (write-only)" 5
++When written, drops all packets in the queue.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M Queue n ,
++.M NotifierQueue n ,
++.M MixedQueue n ,
++.M RED n ,
++.M FrontDropQueue n ,
++.M MSQueue "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Socket.n click-1.6.0-27/inst/share/man/mann/Socket.n
+--- click-1.6.0/inst/share/man/mann/Socket.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Socket.n        2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,165 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/userlevel/socket.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SOCKET" n "11/Feb/2009" "Click"
++.SH "NAME"
++Socket \- Click element;
++a socket transport (user-level)
++.SH "SYNOPSIS"
++\fBSocket\fR("TCP", IP, PORTNUMBER [, LOCALIP] [, LOCALPORTNUMBER] [, \fIKEYWORDS\fR])
++.br
++\fBSocket\fR("UDP", IP, PORTNUMBER [, LOCALIP] [, LOCALPORTNUMBER] [, \fIKEYWORDS\fR])
++.br
++\fBSocket\fR("UNIX", FILENAME [, LOCALFILENAME] [, \fIKEYWORDS\fR])
++.br
++\fBSocket\fR("UNIX_DGRAM", FILENAME [, LOCALFILENAME] [, \fIKEYWORDS\fR])
++
++\fBPorts\fR: at most 1 input, at most 1 output
++.br
++\fBDrivers\fR: userlevel
++.br
++\fBPackage\fR: userlevel (core)
++.br
++.SH "DESCRIPTION"
++Transports packets over various types of sockets. Packets do not flow
++through \fBSocket\fR elements (i.e., \fBSocket\fR is an "x/y" element). Instead,
++input packets are sent to a remote host or process, and packets
++received from the remote host or process are emitted on the output.
++.PP
++A \fBSocket\fR element of type "TCP" or "UNIX" may be either a server (the
++default if CLIENT is not set) or a client (if CLIENT is set or if the
++element has no outputs). If a server, the specified address/port/file
++is bound and connections are accepted one at a time. If a client, a
++connection attempt is made to the specified address/port/file during
++element initialization.
++.PP
++A \fBSocket\fR element of type "UDP" or "UNIX_DGRAM" may also be either a
++server or client. However, because datagram sockets are not connection
++oriented, a datagram server may receive (and thus emit) packets from
++multiple remote hosts or processes. If a server, input packets are
++sent to the last remote host or process to send a packet to the
++server. If a client, input packets are sent to the specified
++address/port/file.
++.PP
++For convenience, if a client UDP \fBSocket\fR is configured with a zero IP
++address, the \fBSocket\fR will send input packets to the destination IP
++annotation of each packet.
++.PP
++If "LOCALIP"/"LOCALPORTNUMBER" or "LOCALFILENAME" is specified, CLIENT
++is assumed if not set and the specified local address/port/file will
++be bound before the connection attempt is made. If CLIENT is set to
++false, any "LOCALIP"/"LOCALPORTNUMBER" and "LOCALFILENAME" arguments
++are ignored.
++.PP
++\fBSocket\fR inputs are agnostic, i.e., they may be either "pull" or
++"push". If pushed, packets will block on the underlying socket;
++otherwise, the socket will pull packets as it can accept them. For
++best performance, place a Notifier element (such as NotifierQueue)
++upstream of a "pull" \fBSocket\fR.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "SNAPLEN" 8
++Unsigned integer. Maximum length of packets that can be
++received. Default is 2048 bytes.
++.IP "" 8
++.IP "NODELAY" 8
++Boolean. Applies to TCP sockets only. If set, disable the Nagle
++algorithm. This means that segments are always sent as soon as
++possible, even if there is only a small amount of data. When not set,
++data is buffered until there is a sufficient amount to send out,
++thereby avoiding the frequent sending of small packets, which results
++in poor utilization of the network. Default is true.
++.IP "" 8
++.IP "CLIENT" 8
++Boolean. If set, forces the socket to connect() (if SOCK_STREAM) to
++the specified address/port (if AF_INET) or file handle (if AF_UNIX),
++instead of bind()-ing and listen()-ing to it.
++.IP "" 8
++Default is false. However, if a \fBSocket\fR element has no output and
++CLIENT is unspecified, it is assumed to be a client socket. If a
++\fBSocket\fR element has no input and CLIENT is unspecified, it is assumed
++to be a server socket.
++.IP "" 8
++.IP "SNDBUF" 8
++Unsigned integer. Sets the maximum size in bytes of the underlying
++socket send buffer. The default value is set by the wmem_default
++sysctl and the maximum allowed value is set by the wmem_max sysctl.
++.IP "" 8
++.IP "RCVBUF" 8
++Unsigned integer. Sets the maximum size in bytes of the underlying
++socket receive buffer. The default value is set by the rmem_default
++sysctl and the maximum allowed value is set by the rmem_max sysctl.
++.IP "" 8
++.IP "TIMESTAMP" 8
++Boolean. If set, sets the timestamp field on received packets to the
++current time. Default is true.
++.IP "" 8
++.IP "ALLOW" 8
++The name of an IPRouteTable element, like RadixIPLookup or
++DirectIPLookup. If set and the \fBSocket\fR element is a server, the \fBSocket\fR
++element will lookup source IP addresses of clients in the specified
++IPRouteTable before accepting a connection (if SOCK_STREAM) or
++datagram (if SOCK_DGRAM). If the address is found, the connection or
++datagram is accepted. If the address is not found, the DENY table will
++then be checked (see below).
++.IP "" 8
++.IP "DENY" 8
++The name of an IPRouteTable element, like RadixIPLookup or
++DirectIPLookup. If set and the \fBSocket\fR element is a server, the \fBSocket\fR
++element will lookup source IP addresses of clients in the specified
++IPRouteTable before accepting a connection (if SOCK_STREAM) or
++datagram (if SOCK_DGRAM). If the address is found, the connection or
++datagram is dropped, otherwise it is accepted. Note that the ALLOW
++table, if specified, is checked first. Wildcard matches may be
++specified with netmasks; for example, to deny all hosts, specify a
++route to "0.0.0.0/0" in the DENY table.
++.IP "" 8
++.IP "VERBOSE" 8
++Boolean. When true, \fBSocket\fR will print messages whenever it accepts a
++new connection or drops an old one. Default is false.
++.IP "" 8
++.IP "PROPER" 8
++Boolean. PlanetLab specific. If true and Click has been configured
++--with-proper, use Proper to bind a reserved port.
++.IP "" 8
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\&  // A server socket
++\&  Socket(TCP, 0.0.0.0, 80) -> ...
++\& 
++\&  // A client socket
++\&  ... -> Socket(TCP, 1.2.3.4, 80)
++\& 
++\&  // A bi-directional server socket (handles one client at a time)
++\&  ... -> Socket(TCP, 0.0.0.0, 80) -> ...
++\& 
++\&  // A bi-directional client socket
++\&  ... -> Socket(TCP, 1.2.3.4, 80, CLIENT true) -> ...
++\& 
++\&  // A bi-directional client socket bound to a particular local port
++\&  ... -> Socket(TCP, 1.2.3.4, 80, 0.0.0.0, 54321) -> ...
++\& 
++\&  // A localhost server socket
++\&  allow :: RadixIPLookup(127.0.0.1 0);
++\&  deny :: RadixIPLookup(0.0.0.0/0       0);
++\&  allow -> deny -> allow; // (makes the configuration valid)
++\&  Socket(TCP, 0.0.0.0, 80, ALLOW allow, DENY deny) -> ...
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M RawSocket "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/SortedIPLookup.n click-1.6.0-27/inst/share/man/mann/SortedIPLookup.n
+--- click-1.6.0/inst/share/man/mann/SortedIPLookup.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/SortedIPLookup.n        2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,34 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/sortediplookup.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SORTEDIPLOOKUP" n "11/Feb/2009" "Click"
++.SH "NAME"
++SortedIPLookup \- Click element;
++simple IP routing table
++.SH "SYNOPSIS"
++\fBSortedIPLookup\fR(ADDR1/MASK1 [GW1] OUT1, ADDR2/MASK2 [GW2] OUT2, ...)
++
++\fBPorts\fR: 1 input, any number of outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++\fBSortedIPLookup\fR is a version of 
++.M LinearIPLookup "n" 
++that sorts the routing table.
++In practice, however, it performs worse than 
++.M LinearIPLookup "n" ,
++which itself
++performs terribly, so it is deprecated.
++.PP
++
++.SH "SEE ALSO"
++.M LinearIPLookup "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/SourceIPHashMapper.n click-1.6.0-27/inst/share/man/mann/SourceIPHashMapper.n
+--- click-1.6.0/inst/share/man/mann/SourceIPHashMapper.n       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/SourceIPHashMapper.n    2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,40 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/siphmapper.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SOURCEIPHASHMAPPER" n "11/Feb/2009" "Click"
++.SH "NAME"
++SourceIPHashMapper \- Click element;
++Source IP Hash mapper for 
++.M IPRewriter n 
++.SH "SYNOPSIS"
++\fBSourceIPHashMapper\fR(NNODES SEED, PATTERN1, ..., PATTERNn)
++
++\fBPorts\fR: none
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Works in tandem with 
++.M IPRewriter "n" 
++to provide source IP-based rewriting. 
++This is useful, for example, in load-balancing applications. Implements the
++IPMapper interface.
++.PP
++Like 
++.M RoundRobinIPMapper "n" ,
++but also uses consistent hashing to map
++map elements by source IP to the same node in the cluster, even
++if nodes are added or removed.
++.PP
++
++.SH "SEE ALSO"
++.M IPRewriter n ,
++.M TCPRewriter n ,
++.M IPRewriterPatterns n ,
++.M RoundRobinIPMapper "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/SpinlockAcquire.n click-1.6.0-27/inst/share/man/mann/SpinlockAcquire.n
+--- click-1.6.0/inst/share/man/mann/SpinlockAcquire.n  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/SpinlockAcquire.n       2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,24 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/spinlockacquire.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SPINLOCKACQUIRE" n "11/Feb/2009" "Click"
++.SH "NAME"
++SpinlockAcquire \- Click element;
++acquires spinlock
++.SH "SYNOPSIS"
++\fBSpinlockAcquire\fR(LOCK)
++
++\fBPorts\fR: any number of inputs, any number of outputs
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Acquires the spinlock named LOCK. LOCK must be defined in a SpinlockInfo element.
++
+diff -Nurb click-1.6.0/inst/share/man/mann/SpinlockInfo.n click-1.6.0-27/inst/share/man/mann/SpinlockInfo.n
+--- click-1.6.0/inst/share/man/mann/SpinlockInfo.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/SpinlockInfo.n  2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,24 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/spinlockinfo.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SPINLOCKINFO" n "11/Feb/2009" "Click"
++.SH "NAME"
++SpinlockInfo \- Click element;
++specifies names of spinlocks
++.SH "SYNOPSIS"
++\fBSpinlockInfo\fR(NAME, ...)
++
++\fBPorts\fR: none
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Lets you use mnemonic names for spinlocks. Each name names a spinlock that
++the SpinlockAcquire and SpinlockRelease elements can use to reference a
++spinlock.
++
+diff -Nurb click-1.6.0/inst/share/man/mann/SpinlockRelease.n click-1.6.0-27/inst/share/man/mann/SpinlockRelease.n
+--- click-1.6.0/inst/share/man/mann/SpinlockRelease.n  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/SpinlockRelease.n       2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,24 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/spinlockrelease.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SPINLOCKRELEASE" n "11/Feb/2009" "Click"
++.SH "NAME"
++SpinlockRelease \- Click element;
++releases spinlock
++.SH "SYNOPSIS"
++\fBSpinlockRelease\fR(LOCK)
++
++\fBPorts\fR: any number of inputs, any number of outputs
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Releases the spinlock named LOCK. LOCK must be defined in a SpinlockInfo element.
++
+diff -Nurb click-1.6.0/inst/share/man/mann/StaticIPLookup.n click-1.6.0-27/inst/share/man/mann/StaticIPLookup.n
+--- click-1.6.0/inst/share/man/mann/StaticIPLookup.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/StaticIPLookup.n        2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,60 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/lookupiproute.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "STATICIPLOOKUP" n "11/Feb/2009" "Click"
++.SH "NAME"
++StaticIPLookup \- Click element;
++simple static IP routing table
++.SH "SYNOPSIS"
++\fBStaticIPLookup\fR(ADDR1/MASK1 [GW1] OUT1, ADDR2/MASK2 [GW2] OUT2, ...)
++
++\fBPorts\fR: 1 input, any number of outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++\fBNote:\fR Lookups and table updates with \fBStaticIPLookup\fR are extremely slow; the
++.M RadixIPLookup "n" ,
++.M DirectIPLookup "n" ,
++and 
++.M RangeIPLookup "n" 
++elements should be preferred
++in almost all cases.  See 
++.M IPRouteTable "n" 
++for a performance comparison.  We
++provide \fBStaticIPLookup\fR nevertheless for its simplicity.
++.PP
++This element acts like 
++.M LinearIPLookup "n" ,
++but does not allow dynamic adding and
++deleting of routes.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBtable\fR (read-only)" 5
++Outputs a human-readable version of the current routing table.
++.IP "" 5
++.IP "\fBlookup\fR (read-only)" 5
++Reports the OUTput port and GW corresponding to an address.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M RadixIPLookup n ,
++.M DirectIPLookup n ,
++.M RangeIPLookup n ,
++.M LinearIPLookup n ,
++.M SortedIPLookup n ,
++.M LinuxIPLookup n ,
++.M IPRouteTable "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/StaticPullSwitch.n click-1.6.0-27/inst/share/man/mann/StaticPullSwitch.n
+--- click-1.6.0/inst/share/man/mann/StaticPullSwitch.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/StaticPullSwitch.n      2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,41 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/staticpullswitch.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "STATICPULLSWITCH" n "11/Feb/2009" "Click"
++.SH "NAME"
++StaticPullSwitch \- Click element;
++forwards pull requests to fixed input
++.SH "SYNOPSIS"
++\fBStaticPullSwitch\fR(INPUT)
++
++\fBPorts\fR: any number of inputs, 1 output
++.br
++\fBProcessing\fR: pull
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++On every pull, \fBStaticPullSwitch\fR returns the packet pulled from one of its
++input ports -- specifically, INPUT. Negative INPUTs mean always return
++a null packet. \fBStaticPullSwitch\fR has an unlimited number of inputs.
++.PP
++
++.SH "NOTES"
++\fBStaticPullSwitch\fR differs from 
++.M PullSwitch "n" 
++in that it has no \f(CWswitch\fR write
++handler, and thus does not allow INPUT to be changed at run time.
++.PP
++
++.SH "SEE ALSO"
++.M PullSwitch n ,
++.M PrioSched n ,
++.M RoundRobinSched n ,
++.M StrideSched n ,
++.M Switch "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/StaticSwitch.n click-1.6.0-27/inst/share/man/mann/StaticSwitch.n
+--- click-1.6.0/inst/share/man/mann/StaticSwitch.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/StaticSwitch.n  2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,40 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/staticswitch.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "STATICSWITCH" n "11/Feb/2009" "Click"
++.SH "NAME"
++StaticSwitch \- Click element;
++sends packet stream to fixed output
++.SH "SYNOPSIS"
++\fBStaticSwitch\fR(OUTPUT)
++
++\fBPorts\fR: 1 input, any number of outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++\fBStaticSwitch\fR sends every incoming packet to one of its output ports --
++specifically, OUTPUT. Negative OUTPUT means to destroy input packets
++instead of forwarding them. \fBStaticSwitch\fR has an unlimited number of
++outputs.
++.PP
++
++.SH "NOTES"
++\fBStaticSwitch\fR differs from 
++.M Switch "n" 
++in that it has no \f(CWswitch\fR write handler,
++and thus does not allow OUTPUT to be changed at run time.
++.PP
++
++.SH "SEE ALSO"
++.M Switch n ,
++.M StrideSwitch n ,
++.M PullSwitch "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/StaticThreadSched.n click-1.6.0-27/inst/share/man/mann/StaticThreadSched.n
+--- click-1.6.0/inst/share/man/mann/StaticThreadSched.n        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/StaticThreadSched.n     2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,30 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/linuxmodule/staticthreadsched.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "STATICTHREADSCHED" n "11/Feb/2009" "Click"
++.SH "NAME"
++StaticThreadSched \- Click element;
++specifies element and thread scheduling parameters
++.SH "SYNOPSIS"
++\fBStaticThreadSched\fR(ELEMENT THREAD, ...)
++
++\fBPorts\fR: none
++.br
++\fBDrivers\fR: linuxmodule
++.br
++\fBPackage\fR: linuxmodule (core)
++.br
++.SH "DESCRIPTION"
++Statically binds elements to threads. If more than one \fBStaticThreadSched\fR
++is specified, they will all run. The one that runs later may override an
++earlier run.
++
++.SH "SEE ALSO"
++.M ThreadMonitor n ,
++.M BalancedThreadSched "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/StoreData.n click-1.6.0-27/inst/share/man/mann/StoreData.n
+--- click-1.6.0/inst/share/man/mann/StoreData.n        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/StoreData.n     2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,29 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/storedata.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "STOREDATA" n "11/Feb/2009" "Click"
++.SH "NAME"
++StoreData \- Click element;
++changes packet data
++.SH "SYNOPSIS"
++\fBStoreData\fR(OFFSET, DATA)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Changes packet data starting at OFFSET to DATA.
++.PP
++
++.SH "SEE ALSO"
++.M AlignmentInfo n ,
++click-align(1)
++
+diff -Nurb click-1.6.0/inst/share/man/mann/StoreIPAddress.n click-1.6.0-27/inst/share/man/mann/StoreIPAddress.n
+--- click-1.6.0/inst/share/man/mann/StoreIPAddress.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/StoreIPAddress.n        2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,69 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/storeipaddress.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "STOREIPADDRESS" n "11/Feb/2009" "Click"
++.SH "NAME"
++StoreIPAddress \- Click element;
++stores IP address in packet
++.SH "SYNOPSIS"
++\fBStoreIPAddress\fR(OFFSET)
++.br
++\fBStoreIPAddress\fR(ADDRESS, OFFSET)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++The one-argument form writes the destination IP address annotation into the
++packet at offset OFFSET, usually an integer. But if the annotation is zero, it
++doesn't change the packet.
++.PP
++The two-argument form writes ADDRESS into the packet at offset OFFSET. ADDRESS
++can be zero.
++.PP
++The OFFSET argument may be the special string 'src' or 'dst'.  In this case,
++incoming packets must be IP packets.  \fBStoreIPAddress\fR writes the address into
++either the source or destination field of the IP packet header, as specified,
++and incrementally updates the IP checksum (and, if appropriate, the TCP/UDP
++checksum) to account for the change.
++.PP
++
++.SH "NOTES"
++Unless you use a special OFFSET of 'src' or 'dst', this element doesn't
++recalculate any checksums.  If you store the address into an existing IP
++packet, the packet's checksum will need to be set -- for example, with
++.M SetIPChecksum "n" .
++And don't forget that you might need to recalculate TCP and UDP
++checksums as well. Here's a useful compound element:
++.PP
++.nf
++\&  elementclass FixIPChecksums {
++\&      // fix the IP checksum, and any embedded checksums that
++\&      // include data from the IP header (TCP and UDP in particular)
++\&      input -> SetIPChecksum
++\&          -> ipc :: IPClassifier(tcp, udp, -)
++\&          -> SetTCPChecksum
++\&          -> output;
++\&      ipc[1] -> SetUDPChecksum -> output;
++\&      ipc[2] -> output
++\&  }
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M SetIPChecksum n ,
++.M SetTCPChecksum n ,
++.M SetUDPChecksum n ,
++.M IPAddrPairRewriter n ,
++.M IPAddrRewriter "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/StrideSched.n click-1.6.0-27/inst/share/man/mann/StrideSched.n
+--- click-1.6.0/inst/share/man/mann/StrideSched.n      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/StrideSched.n   2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,52 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/stridesched.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "STRIDESCHED" n "11/Feb/2009" "Click"
++.SH "NAME"
++StrideSched \- Click element;
++pulls from stride-scheduled inputs
++.SH "SYNOPSIS"
++\fBStrideSched\fR(TICKETS0, ..., TICKETS\fIN-1\fR)
++
++\fBPorts\fR: 1 or more inputs, 1 output
++.br
++\fBProcessing\fR: pull
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Has one output and N inputs.  Performs simple packet-based stride
++scheduling, assigning TICKETS\fIi\fR to input \fIi\fR for each input.
++.PP
++Each time a pull comes in on the output, it pulls on its inputs in the order
++specified by the stride scheduling queue, until all inputs have been tried
++or one produces a packet.  If an input does not produce a packet, it is not
++tried again in the current round (for the current pull on the output) even
++if it has a very short stride.  This minimizes overhead and ensures that
++an input that produces a packet, if any, is found as soon as possible,
++consistently with the stride scheduler ordering.
++.PP
++The inputs usually come from Queues or other pull schedulers.
++\fBStrideSched\fR uses notification to avoid pulling from empty inputs.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBtickets0...tickets\fIN-1\fB\fR (read/write)" 5
++Returns or sets the number of tickets for each input port.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M PrioSched n ,
++.M RoundRobinSched n ,
++.M DRRSched n ,
++.M StrideSwitch "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/StrideSwitch.n click-1.6.0-27/inst/share/man/mann/StrideSwitch.n
+--- click-1.6.0/inst/share/man/mann/StrideSwitch.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/StrideSwitch.n  2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,45 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/strideswitch.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "STRIDESWITCH" n "11/Feb/2009" "Click"
++.SH "NAME"
++StrideSwitch \- Click element;
++sends packets to stride-scheduled outputs
++.SH "SYNOPSIS"
++\fBStrideSwitch\fR(TICKETS0, ..., TICKETS\fIN-1\fR)
++
++\fBPorts\fR: 1 input, 1 or more outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Has one input and N outputs.  Performs simple packet-based stride
++switching, assigning TICKETS\fIi\fR to output \fIi\fR.
++.PP
++Each time a packet arrives on the input, \fBStrideSwitch\fR sends the packet to
++the next scheduled output according to the stride scheduling algorithm.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBtickets0...tickets\fIN-1\fB\fR (read/write)" 5
++Returns or sets the number of tickets for each output port.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M RoundRobinSwitch n ,
++.M Switch n ,
++.M HashSwitch n ,
++.M RandomSwitch n ,
++.M StrideSched "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Strip.n click-1.6.0-27/inst/share/man/mann/Strip.n
+--- click-1.6.0/inst/share/man/mann/Strip.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Strip.n 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,41 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/strip.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "STRIP" n "11/Feb/2009" "Click"
++.SH "NAME"
++Strip \- Click element;
++strips bytes from front of packets
++.SH "SYNOPSIS"
++\fBStrip\fR(LENGTH)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Deletes the first LENGTH bytes from each packet.
++
++.SH "EXAMPLES"
++Use this to get rid of the Ethernet header:
++.PP
++.nf
++\&  Strip(14)
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M StripToNetworkHeader n ,
++.M StripIPHeader n ,
++.M EtherEncap n ,
++.M IPEncap n ,
++.M Truncate "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/StripIPHeader.n click-1.6.0-27/inst/share/man/mann/StripIPHeader.n
+--- click-1.6.0/inst/share/man/mann/StripIPHeader.n    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/StripIPHeader.n 2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,42 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/stripipheader.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "STRIPIPHEADER" n "11/Feb/2009" "Click"
++.SH "NAME"
++StripIPHeader \- Click element;
++strips outermost IP header
++.SH "SYNOPSIS"
++\fBStripIPHeader\fR()
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Strips the outermost IP header from IP packets, based on the IP Header
++annotation.
++.PP
++Note that the packet's annotations are not changed.  Thus, the packet's IP
++header annotation continues to point at the IP header, even though the IP
++header's data is now out of range.  To correctly handle an IP-in-IP packet,
++you will probably need to follow \fBStripIPHeader\fR with a 
++.M CheckIPHeader "n" 
++or
++.M MarkIPHeader "n" 
++element, thus marking the packet's inner header.
++.PP
++
++.SH "SEE ALSO"
++.M CheckIPHeader n ,
++.M CheckIPHeader2 n ,
++.M MarkIPHeader n ,
++.M UnstripIPHeader n ,
++.M Strip "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/StripToNetworkHeader.n click-1.6.0-27/inst/share/man/mann/StripToNetworkHeader.n
+--- click-1.6.0/inst/share/man/mann/StripToNetworkHeader.n     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/StripToNetworkHeader.n  2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,33 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/striptonet.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "STRIPTONETWORKHEADER" n "11/Feb/2009" "Click"
++.SH "NAME"
++StripToNetworkHeader \- Click element;
++strips everything preceding network header
++.SH "SYNOPSIS"
++\fBStripToNetworkHeader\fR()
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Strips any data preceding the network header from every passing packet.
++Requires a network header annotation, such as an IP header annotation,
++on every packet.
++If the packet's network header annotation points before the start of the
++packet data, then \fBStripToNetworkHeader\fR will move the packet data pointer
++back, to point at the network header.
++.PP
++
++.SH "SEE ALSO"
++.M Strip "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Suppressor.n click-1.6.0-27/inst/share/man/mann/Suppressor.n
+--- click-1.6.0/inst/share/man/mann/Suppressor.n       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Suppressor.n    2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,41 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/suppressor.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SUPPRESSOR" n "11/Feb/2009" "Click"
++.SH "NAME"
++Suppressor \- Click element;
++passes packets unchanged, optionally dropping some input ports
++.SH "SYNOPSIS"
++Suppressor
++
++\fBPorts\fR: any number of inputs, the same number of outputs
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++\fBSuppressor\fR has \fIn\fR inputs and \fIn\fR outputs. It generally passes packets
++from input \fIi\fR to output \fIi\fR unchanged. However, any input port can be
++suppressed, through a handler or a method call by another element. Packets
++arriving on suppressed push input ports are dropped; pull requests arriving
++on suppressed pull output ports are ignored.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBactive0...active\fIN-1\fB\fR (read/write)" 5
++Returns or sets whether each port is active (that is, not suppressed).
++Every port starts out active.
++.IP "" 5
++.IP "\fBreset\fR (write-only)" 5
++Resets every port to active.
++.PP
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Switch.n click-1.6.0-27/inst/share/man/mann/Switch.n
+--- click-1.6.0/inst/share/man/mann/Switch.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Switch.n        2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,52 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/switch.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "SWITCH" n "11/Feb/2009" "Click"
++.SH "NAME"
++Switch \- Click element;
++sends packet stream to settable output
++.SH "SYNOPSIS"
++\fBSwitch\fR([OUTPUT])
++
++\fBPorts\fR: 1 input, any number of outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++\fBSwitch\fR sends every incoming packet to one of its output ports --
++specifically, OUTPUT. The default OUTPUT is zero; negative OUTPUT means to
++destroy input packets instead of forwarding them. You can change OUTPUT with a
++write handler. \fBSwitch\fR has an unlimited number of outputs.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBswitch\fR (read/write)" 5
++Return or set the OUTPUT parameter.
++.IP "" 5
++.IP "\fBCLICK_LLRPC_GET_SWITCH\fR (llrpc)" 5
++Argument is a pointer to an integer, in which the \fBSwitch\fR's K parameter is
++stored.
++.IP "" 5
++.IP "\fBCLICK_LLRPC_SET_SWITCH\fR (llrpc)" 5
++Argument is a pointer to an integer. Sets the K parameter to that integer.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M StaticSwitch n ,
++.M PullSwitch n ,
++.M RoundRobinSwitch n ,
++.M StrideSwitch n ,
++.M HashSwitch n ,
++.M RandomSwitch "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/TCPRewriter.n click-1.6.0-27/inst/share/man/mann/TCPRewriter.n
+--- click-1.6.0/inst/share/man/mann/TCPRewriter.n      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/TCPRewriter.n   2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,87 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/tcpudp/tcprewriter.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "TCPREWRITER" n "11/Feb/2009" "Click"
++.SH "NAME"
++TCPRewriter \- Click element;
++rewrites TCP packets' addresses, ports, and sequence numbers
++.SH "SYNOPSIS"
++\fBTCPRewriter\fR(INPUTSPEC1, ..., INPUTSPECn [, KEYWORDS])
++
++\fBPorts\fR: 1 or more inputs, 1-256 outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: tcpudp (core)
++.br
++.SH "DESCRIPTION"
++Rewrites TCP flows by changing their source address, source port, destination
++address, and/or destination port, and optionally, their sequence numbers and
++acknowledgement numbers. It also changes the destination IP address
++annotation; see the DST_ANNO keyword argument below.
++.PP
++This element is an 
++.M IPRewriter "n" -like
++element. Please read the 
++.M IPRewriter "n" 
++documentation for more information and a detailed description of its
++INPUTSPEC arguments.
++.PP
++In addition to 
++.M IPRewriter "n" 's
++functionality, the \fBTCPRewriter\fR element can add or
++subtract amounts from incoming packets' sequence and acknowledgement numbers,
++including any SACK acknowledgement numbers. Each newly created mapping starts
++with these deltas at zero; other elements can request changes to a given
++mapping. For example, 
++.M FTPPortMapper "n" 
++uses this facility.
++.PP
++Keyword arguments determine how often stale mappings should be removed.
++.PP
++
++
++.IP "TCP_TIMEOUT \fItime\fR" 5
++Time out TCP connections every \fItime\fR seconds. Default is 24 hours.
++.IP "" 5
++.IP "TCP_DONE_TIMEOUT \fItime\fR" 5
++Time out completed TCP connections every \fItime\fR seconds. Default is 30
++seconds. FIN and RST flags mark TCP connections as complete.
++.IP "" 5
++.IP "REAP_TCP \fItime\fR" 5
++Reap timed-out TCP connections every \fItime\fR seconds. If no packets
++corresponding to a given mapping have been seen for TCP_TIMEOUT, remove the
++mapping as stale. Default is 1 hour.
++.IP "" 5
++.IP "REAP_TCP_DONE \fItime\fR" 5
++Reap timed-out completed TCP connections every \fItime\fR seconds. Default is 10
++seconds.
++.IP "" 5
++.IP "DST_ANNO" 5
++Boolean. If true, then set the destination IP address annotation on passing
++packets to the rewritten destination address. Default is true.
++.IP "" 5
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBmappings\fR (read-only)" 5
++Returns a human-readable description of the \fBTCPRewriter\fR's current set of
++mappings.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M IPRewriter n ,
++.M IPAddrRewriter n ,
++.M IPAddrPairRewriter n ,
++.M IPRewriterPatterns n ,
++.M FTPPortMapper "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Tee.n click-1.6.0-27/inst/share/man/mann/Tee.n
+--- click-1.6.0/inst/share/man/mann/Tee.n      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Tee.n   2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,34 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/tee.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "TEE, PULLTEE" n "11/Feb/2009" "Click"
++.SH "NAME"
++Tee, PullTee \- Click elements;
++duplicates packets
++.SH "SYNOPSIS"
++\fBTee\fR([N])
++.br
++\fBPullTee\fR([N])
++
++\fBPorts\fR: 1 input, 1 or more outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++\fBTee\fR sends a copy of each incoming packet out each output.
++.PP
++\fBPullTee\fR's input and its first output are pull; its other outputs are push.
++Each time the pull output pulls a packet, it
++sends a copy out the push outputs.
++.PP
++\fBTee\fR and \fBPullTee\fR have however many outputs are used in the configuration,
++but you can say how many outputs you expect with the optional argument
++N.
++
+diff -Nurb click-1.6.0/inst/share/man/mann/TimedSink.n click-1.6.0-27/inst/share/man/mann/TimedSink.n
+--- click-1.6.0/inst/share/man/mann/TimedSink.n        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/TimedSink.n     2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,28 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/timedsink.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "TIMEDSINK" n "11/Feb/2009" "Click"
++.SH "NAME"
++TimedSink \- Click element;
++periodically pulls and drops a packet
++.SH "SYNOPSIS"
++\fBTimedSink\fR([INTERVAL])
++
++\fBPorts\fR: 1 input, no outputs
++.br
++\fBProcessing\fR: pull
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Pulls one packet every INTERVAL seconds from its input.
++Discards the packet.  Default INTERVAL is 500 milliseconds.
++
++.SH "SEE ALSO"
++.M Shaper "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/TimedSource.n click-1.6.0-27/inst/share/man/mann/TimedSource.n
+--- click-1.6.0/inst/share/man/mann/TimedSource.n      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/TimedSource.n   2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,70 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/timedsource.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "TIMEDSOURCE" n "11/Feb/2009" "Click"
++.SH "NAME"
++TimedSource \- Click element;
++periodically generates a packet
++.SH "SYNOPSIS"
++\fBTimedSource\fR([INTERVAL, DATA, \fIKEYWORDS\fR])
++
++\fBPorts\fR: no inputs, 1 output
++.br
++\fBProcessing\fR: push
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Creates packets consisting of DATA. Pushes such a packet out its single output
++about once every INTERVAL seconds. INTERVAL has millisecond precision. Default
++INTERVAL is 500 milliseconds; default DATA is at least 64 bytes long.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "DATA" 8
++String. Same as the DATA argument.
++.IP "" 8
++.IP "INTERVAL" 8
++Number of seconds. Same as the INTERVAL argument.
++.IP "" 8
++.IP "LIMIT" 8
++Integer. Stops sending after LIMIT packets are generated; but if LIMIT is
++negative, sends packets forever.
++.IP "" 8
++.IP "STOP" 8
++Boolean. If true, then stop the driver once LIMIT packets are sent. Default is
++false.
++.IP "" 8
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\&  TimedSource(INTERVAL 0.333) -> ...
++.fi
++.PP
++
++
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBdata\fR (read/write)" 5
++Returns or sets the DATA parameter.
++.IP "" 5
++.IP "\fBinterval\fR (read/write)" 5
++Returns or sets the INTERVAL parameter.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M InfiniteSource "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ToDevice.n click-1.6.0-27/inst/share/man/mann/ToDevice.n
+--- click-1.6.0/inst/share/man/mann/ToDevice.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ToDevice.n      2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,112 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/linuxmodule/todevice.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "TODEVICE" n "11/Feb/2009" "Click"
++.SH "NAME"
++ToDevice \- Click element;
++sends packets to network device (Linux kernel)
++.SH "SYNOPSIS"
++\fBToDevice\fR(DEVNAME [, BURST, \fIKEYWORDS\fR])
++
++\fBPorts\fR: 1 input, no outputs
++.br
++\fBProcessing\fR: pull
++.br
++\fBDrivers\fR: linuxmodule
++.br
++\fBPackage\fR: linuxmodule (core)
++.br
++.SH "DESCRIPTION"
++This manual page describes the Linux kernel module version of the \fBToDevice\fR
++element. For the user-level element, read the 
++.M ToDevice.u "n" 
++manual page.
++.PP
++Pulls packets from its single input and sends them out the Linux network
++interface named DEVNAME. DEVNAME may also be an Ethernet address, in which
++case \fBToDevice\fR searches for a device with that address.
++.PP
++Sends up to BURST packets each time it is scheduled. By default, BURST is 16.
++For good performance, you should set BURST to be 8 times the number of
++elements that could generate packets for this device.
++.PP
++Packets must have a link header. For Ethernet, \fBToDevice\fR makes sure every
++packet is at least 60 bytes long (but see NO_PAD).
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "BURST" 8
++Unsigned integer. Same as the BURST argument.
++.IP "" 8
++.IP "QUIET" 8
++Boolean.  If true, then suppress device up/down messages.  Default is false.
++.IP "" 8
++.IP "ALLOW_NONEXISTENT" 8
++Allow nonexistent devices. If true, and no device named DEVNAME exists when
++the router is initialized, then \fBToDevice\fR will report a warning (rather than an
++error). Later, while the router is running, if a device named DEVNAME appears,
++\fBToDevice\fR will seamlessly begin sending packets to it. Default is false.
++.IP "" 8
++.IP "NO_PAD" 8
++Boolean. If true, don't force packets to be at least 60 bytes (the
++minimum Ethernet packet size).  This is useful because some 802.11
++cards can send shorter Ethernet format packets.  Defaults false.
++.IP "" 8
++.PP
++
++.SH "NOTES"
++The Linux networking code may also send packets out the device. If the device
++is in polling mode, Click will try to ensure that Linux eventually sends its
++packets. Linux may cause the device to be busy when a \fBToDevice\fR wants to send a
++packet. Click is not clever enough to re-queue such packets, and discards
++them.
++.PP
++In Linux 2.2, whether or not the device is running in polling mode, \fBToDevice\fR
++depends on the device driver's send operation for synchronization (e.g. tulip
++send operation uses a bit lock). In Linux 2.4, we use the device's "xmit_lock"
++to synchronize.
++.PP
++Packets sent via \fBToDevice\fR will not be received by any packet sniffers on the
++machine. Use 
++.M Tee "n" 
++and 
++.M ToHostSniffers "n" 
++to send packets to sniffers explicitly.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBcount\fR (read-only)" 5
++Returns the number of packets \fBToDevice\fR has pulled.
++.IP "" 5
++.IP "\fBcalls\fR (read-only)" 5
++Returns a summary of \fBToDevice\fR statistics.
++.IP "" 5
++.IP "\fBdrops\fR (read-only)" 5
++Returns the number of packets \fBToDevice\fR has dropped.  \fBToDevice\fR will drop
++packets because they are too short for the device, or because the device
++explicitly rejected them.
++.IP "" 5
++.IP "\fBreset_counts\fR (write-only)" 5
++Resets counters to zero when written.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M FromDevice n ,
++.M PollDevice n ,
++.M FromHost n ,
++.M ToHost n ,
++.M ToDevice.u n ,
++.M Tee n ,
++.M ToHostSniffers "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ToDevice.u.n click-1.6.0-27/inst/share/man/mann/ToDevice.u.n
+--- click-1.6.0/inst/share/man/mann/ToDevice.u.n       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ToDevice.u.n    2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,68 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/userlevel/todevice.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "TODEVICE.U" n "11/Feb/2009" "Click"
++.SH "NAME"
++ToDevice.u \- Click element;
++sends packets to network device (user-level)
++.SH "SYNOPSIS"
++\fBToDevice\fR(DEVNAME [, \fIKEYWORDS\fR])
++
++\fBPorts\fR: 1 input, at most 2 outputs
++.br
++\fBProcessing\fR: pull inputs, push outputs
++.br
++\fBDrivers\fR: userlevel
++.br
++\fBPackage\fR: userlevel (core)
++.br
++.SH "DESCRIPTION"
++This manual page describes the user-level version of the \fBToDevice\fR element.
++For the Linux kernel module element, read the 
++.M ToDevice n 
++manual page.
++.PP
++Pulls packets and sends them out the named device using
++Berkeley Packet Filters (or Linux equivalent).
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "DEBUG" 8
++Boolean.  If true, print out debug messages.
++.IP "" 8
++.PP
++This element is only available at user level.
++.PP
++.SH "NOTES"
++Packets sent via \fBToDevice\fR should already have a link-level
++header prepended. This means that ARP processing,
++for example, must already have been done.
++.PP
++Under Linux, a 
++.M FromDevice n 
++element will not receive packets sent by a
++\fBToDevice\fR element for the same device. Under other operating systems, your
++mileage may vary.
++.PP
++Packets that are written successfully are sent on output 0, if it exists.
++Packets that fail to be written are pushed out output 1, if it exists.
++.PP
++.M KernelTun "n" 
++lets you send IP packets to the host kernel's IP processing code,
++sort of like the kernel module's ToHost element.
++.PP
++
++.SH "SEE ALSO"
++.M FromDevice.u n ,
++.M FromDump n ,
++.M ToDump n ,
++.M KernelTun n ,
++\fBToDevice\fR(n)
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ToDump.n click-1.6.0-27/inst/share/man/mann/ToDump.n
+--- click-1.6.0/inst/share/man/mann/ToDump.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ToDump.n        2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,95 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/userlevel/todump.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "TODUMP" n "11/Feb/2009" "Click"
++.SH "NAME"
++ToDump \- Click element;
++writes packets to a tcpdump file
++.SH "SYNOPSIS"
++\fBToDump\fR(FILENAME [, \fIkeywords\fR SNAPLEN, ENCAP, USE_ENCAP_FROM, EXTRA_LENGTH])
++
++\fBPorts\fR: 1 input, at most 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBDrivers\fR: userlevel, ns
++.br
++\fBPackage\fR: userlevel (core)
++.br
++.SH "DESCRIPTION"
++Writes incoming packets to FILENAME in `tcpdump -w' format. This file can be
++read by `tcpdump -r', or by 
++.M FromDump "n" 
++on a later run. FILENAME can be `-', in
++which case \fBToDump\fR writes to the standard output.
++.PP
++Writes at most SNAPLEN bytes of each packet to the file. The default SNAPLEN
++is 2000. If SNAPLEN is 0, the whole packet will be written to the file.  ENCAP
++specifies the first header each packet is expected to have.  This information
++is stored in the file header, and must be correct or tcpdump won't be able to
++read the file correctly. It can be \f(CWETHER\fR (Ethernet encapsulation),
++\f(CWIP\fR (raw IP packets), \f(CWFDDI\fR, \f(CWATM\fR, \f(CW802_11\fR, \f(CWSLL\fR, \f(CWAIRONET\fR, \f(CWHDLC\fR,
++\f(CWPPP_HDLC\fR, \f(CWPPP\fR, \f(CWSUNATM\fR, \f(CWPRISM\fR, or \f(CWNULL\fR; the default is \f(CWETHER\fR.
++.PP
++\fBToDump\fR may have zero or one output. If it has an output, then it emits all
++received packets on that output. \fBToDump\fR will schedule itself on the task list
++if it is used as a pull element with no outputs.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "SNAPLEN" 8
++Integer.  See above.
++.IP "" 8
++.IP "ENCAP" 8
++The encapsulation type to store in the dump.  See above.
++.IP "" 8
++.IP "USE_ENCAP_FROM" 8
++Argument is a space-separated list of element names. At initialization time,
++\fBToDump\fR will check these elements' `encap' handlers, and parse them as ENCAP
++arguments. If all the handlers agree, \fBToDump\fR will use that encapsulation type;
++otherwise, it will report an error. You can specify at most one of ENCAP and
++USE_ENCAP_FROM. 
++.M FromDump "n" 
++and 
++.M FromDevice.u "n" 
++have `encap' handlers.
++.IP "" 8
++.IP "EXTRA_LENGTH" 8
++Boolean. Set to true if you want \fBToDump\fR to store any extra length as recorded
++in packets' extra length annotations. Default is true.
++.IP "" 8
++.PP
++This element is only available at user level.
++.PP
++.SH "NOTES"
++\fBToDump\fR stores packets' true length annotations when available.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBcount\fR (read-only)" 5
++Returns the number of packets emitted so far.
++.IP "" 5
++.IP "\fBreset_counts\fR (write-only)" 5
++Resets "count" to 0.
++.IP "" 5
++.IP "\fBfilename\fR (read-only)" 5
++Returns the filename.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M FromDump n ,
++.M FromDevice.u n ,
++.M ToDevice.u n ,
++tcpdump(1)
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ToHost.n click-1.6.0-27/inst/share/man/mann/ToHost.n
+--- click-1.6.0/inst/share/man/mann/ToHost.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ToHost.n        2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,107 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/linuxmodule/tohost.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "TOHOST" n "11/Feb/2009" "Click"
++.SH "NAME"
++ToHost \- Click element;
++sends packets to Linux
++.SH "SYNOPSIS"
++\fBToHost\fR([DEVNAME, \fIkeywords\fR SNIFFERS, QUIET, ALLOW_NONEXISTENT])
++
++\fBPorts\fR: 1 input, no outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBDrivers\fR: linuxmodule
++.br
++\fBPackage\fR: linuxmodule (core)
++.br
++.SH "DESCRIPTION"
++Hands packets to the ordinary Linux protocol stack.
++Expects packets with Ethernet headers.
++.PP
++You should probably give Linux IP packets addressed to
++the local machine (including broadcasts), and a copy
++of each ARP reply.
++.PP
++If DEVNAME is present, each packet is marked to appear as if it originated
++from that network device -- that is, its device annotation is set to that
++device. As with 
++.M ToDevice "n" ,
++DEVNAME can be an Ethernet address.
++.PP
++This element is only available in the Linux kernel module.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "SNIFFERS" 8
++Boolean. If true, then \fBToHost\fR will send packets to the kernel so that only
++tcpdump(1), and other sniffer programs on the host, will receive them.
++Default is false.
++.IP "" 8
++.IP "QUIET" 8
++Boolean.  If true, then suppress device up/down messages.  Default is false.
++.IP "" 8
++.IP "ALLOW_NONEXISTENT" 8
++Allow nonexistent devices. If true, and no device named DEVNAME exists when
++the router is initialized, then \fBToHost\fR will report a warning (rather than
++an error). Later, while the router is running, if a device named DEVNAME
++appears, \fBToHost\fR will seamlessly begin using it. Default is false.
++.IP "" 8
++.PP
++
++.SH "NOTES"
++Linux expects packets to have valid device annotations and packet type
++annotations. \fBToHost\fR will not pass packets with null device annotations to
++Linux! Use the `\f(CWToHost(eth0)\fR' syntax to supply a device annotation. Most
++packets generated by Click will have null device annotations -- for
++example, 
++.M InfiniteSource "n" 
++makes packets with null device annotations.
++Exceptions include 
++.M FromDevice "n" 
++and 
++.M PollDevice "n" .
++.PP
++Linux depends on packet type annotations as well. It will generally only
++process packets with packet type annotation HOST. (Other packets, such as
++packets originally sent to some other host, are sent only to packet
++sniffers like tcpdump(1). Linux will handle some BROADCAST and MULTICAST
++packets.) By default, packets made by Click have HOST packet type
++annotations. However, if you modified a packet that you originally got from
++some device, that packet may have some other type. Use 
++.M SetPacketType "n" 
++to
++reset the type appropriately.
++.PP
++Finally, IPv4 packets should have a destination IP address corresponding
++to DEVNAME, and a routable source address. Otherwise Linux will silently
++drop the packets.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBdrops\fR (read-only)" 5
++Reports the number of packets \fBToHost\fR has dropped because they had a null
++device annotation.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M ToHostSniffers n ,
++.M FromHost n ,
++.M FromDevice n ,
++.M PollDevice n ,
++.M ToDevice n ,
++.M SetPacketType n ,
++.M InfiniteSource "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ToHost.u.n click-1.6.0-27/inst/share/man/mann/ToHost.u.n
+--- click-1.6.0/inst/share/man/mann/ToHost.u.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ToHost.u.n      2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,54 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/userlevel/tohost.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "TOHOST.U" n "11/Feb/2009" "Click"
++.SH "NAME"
++ToHost.u \- Click element;
++sends packets to Linux via Universal TUN/TAP device.
++.SH "SYNOPSIS"
++\fBToHost\fR([DEVNAME])
++
++\fBPorts\fR: 1 input, no outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBDrivers\fR: userlevel
++.br
++\fBPackage\fR: userlevel (core)
++.br
++.SH "DESCRIPTION"
++Hands packets to the ordinary Linux protocol stack.
++Expects packets with Ethernet headers.
++.PP
++You should probably give Linux IP packets addressed to
++the local machine (including broadcasts), and a copy
++of each ARP reply.
++.PP
++\fBToHost\fR requires an initialized 
++.M FromHost "n" 
++with the same DEVNAME.
++.PP
++IPv4 packets should have a destination IP address corresponding
++to DEVNAME, and a routable source address. Otherwise Linux will silently
++drop the packets.
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBdrops\fR (read-only)" 5
++Reports the number of packets \fBToHost\fR has dropped because they had a null
++device annotation.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M FromHost.u n ,
++.M FromHost "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ToHostSniffers.n click-1.6.0-27/inst/share/man/mann/ToHostSniffers.n
+--- click-1.6.0/inst/share/man/mann/ToHostSniffers.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ToHostSniffers.n        2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,51 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/linuxmodule/tohostsniffers.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "TOHOSTSNIFFERS" n "11/Feb/2009" "Click"
++.SH "NAME"
++ToHostSniffers \- Click element;
++sends packets to Linux packet sniffers
++.SH "SYNOPSIS"
++\fBToHostSniffers\fR([DEVNAME, \fIkeywords\fR SNIFFERS, QUIET, ALLOW_NONEXISTENT])
++
++\fBPorts\fR: 1 input, no outputs
++.br
++\fBProcessing\fR: push
++.br
++\fBDrivers\fR: linuxmodule
++.br
++\fBPackage\fR: linuxmodule (core)
++.br
++.SH "DESCRIPTION"
++Hands packets to any packet sniffers registered with Linux, such as packet
++sockets. Packets are not passed to the ordinary Linux networking stack.
++Expects packets with Ethernet headers.
++.PP
++If DEVNAME is present, each packet is marked to appear as if it originated
++from that network device. As with 
++.M ToDevice "n" ,
++DEVNAME can be an Ethernet
++address.
++.PP
++This element is only available in the Linux kernel module.
++.PP
++
++.SH "NOTES"
++\fBToHostSniffers\fR behaves exactly like 
++.M ToHost "n" ,
++except that the SNIFFERS
++keyword argument defaults to true.
++.PP
++
++.SH "SEE ALSO"
++.M ToHost n ,
++.M FromHost n ,
++.M FromDevice n ,
++.M PollDevice n ,
++.M ToDevice "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ToRawSocket.n click-1.6.0-27/inst/share/man/mann/ToRawSocket.n
+--- click-1.6.0/inst/share/man/mann/ToRawSocket.n      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ToRawSocket.n   2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,60 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/userlevel/torawsocket.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "TORAWSOCKET" n "11/Feb/2009" "Click"
++.SH "NAME"
++ToRawSocket \- Click element;
++sends IP packets through a safe raw socket (user-level)
++.SH "SYNOPSIS"
++\fBToRawSocket\fR("TCP", <TCP source port number>)
++.br
++\fBToRawSocket\fR("UDP", <UDP source port number>)
++.br
++\fBToRawSocket\fR("GRE", <GRE key or PPTP call ID>)
++.br
++\fBToRawSocket\fR("ICMP", <ICMP identifier>)
++
++\fBPorts\fR: at most 1 input, at most 1 output
++.br
++\fBProcessing\fR: pull
++.br
++\fBDrivers\fR: userlevel
++.br
++\fBPackage\fR: userlevel (core)
++.br
++.SH "DESCRIPTION"
++Writes data to a raw IPv4 socket. The raw IPv4 socket may optionally
++be bound to a source port number in the case of TCP/UDP, a GRE key or
++PPTP call ID in the case of GRE, or an identifier in the case of
++ICMP. Binding a port to a raw IPv4 socket to reserve it and suppress
++TCP RST and ICMP Unreachable errors, is specific to PlanetLab Linux.
++.PP
++This element exists only for backward compatibility. See the more
++general 
++.M RawSocket "n" 
++implementation for details, and for supported
++keyword arguments. A \fBToRawSocket\fR is equivalent to a 
++.M RawSocket "n" 
++with
++no outputs.
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\&  ... -> ToRawSocket(UDP, 47)
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M FromRawSocket n ,
++.M RawSocket n ,
++.M Socket "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/ToSocket.n click-1.6.0-27/inst/share/man/mann/ToSocket.n
+--- click-1.6.0/inst/share/man/mann/ToSocket.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/ToSocket.n      2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,58 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/userlevel/tosocket.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "TOSOCKET" n "11/Feb/2009" "Click"
++.SH "NAME"
++ToSocket \- Click element;
++sends data to socket (user-level)
++.SH "SYNOPSIS"
++\fBToSocket\fR("TCP", IP, PORTNUMBER [, \fIKEYWORDS\fR])
++.br
++\fBToSocket\fR("UDP", IP, PORTNUMBER [, \fIKEYWORDS\fR])
++.br
++\fBToSocket\fR("UNIX", FILENAME [, \fIKEYWORDS\fR])
++.br
++\fBToSocket\fR("UNIX_DGRAM", FILENAME [, \fIKEYWORDS\fR])
++
++\fBPorts\fR: at most 1 input, at most 1 output
++.br
++\fBProcessing\fR: pull
++.br
++\fBDrivers\fR: userlevel
++.br
++\fBPackage\fR: userlevel (core)
++.br
++.SH "DESCRIPTION"
++Sends data to the specified socket. Input packets are sent to the
++remote host or process.
++.PP
++This element exists only for backward compatibility. See the more
++general 
++.M Socket "n" 
++implementation for details, and for supported keyword
++arguments. A \fBToSocket\fR is equivalent to a 
++.M Socket "n" 
++with the CLIENT
++keyword set to TRUE or a 
++.M Socket "n" 
++with no outputs.
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\&  ... -> ToSocket(1.2.3.4, UDP, 47)
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M FromSocket n ,
++.M Socket "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Truncate.n click-1.6.0-27/inst/share/man/mann/Truncate.n
+--- click-1.6.0/inst/share/man/mann/Truncate.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Truncate.n      2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,27 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/truncate.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "TRUNCATE" n "11/Feb/2009" "Click"
++.SH "NAME"
++Truncate \- Click element;
++limit packet length.
++.SH "SYNOPSIS"
++\fBTruncate\fR(LENGTH)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Shorten packets to at most LENGTH bytes.
++
++.SH "SEE ALSO"
++.M Strip "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/UDPIPEncap.n click-1.6.0-27/inst/share/man/mann/UDPIPEncap.n
+--- click-1.6.0/inst/share/man/mann/UDPIPEncap.n       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/UDPIPEncap.n    2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,69 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/tcpudp/udpipencap.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "UDPIPENCAP" n "11/Feb/2009" "Click"
++.SH "NAME"
++UDPIPEncap \- Click element;
++encapsulates packets in static UDP/IP headers
++.SH "SYNOPSIS"
++\fBUDPIPEncap\fR(SRC, SPORT, DST, DPORT [, CHECKSUM])
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: tcpudp (core)
++.br
++.SH "DESCRIPTION"
++Encapsulates each incoming packet in a UDP/IP packet with source address
++SRC, source port SPORT, destination address DST, and destination port
++DPORT. The UDP checksum is calculated if CHECKSUM? is true; it is true by
++default.
++.PP
++As a special case, if DST is "DST_ANNO", then the destination address
++is set to the incoming packet's destination address annotation.
++.PP
++The \fBUDPIPEncap\fR element adds both a UDP header and an IP header.
++.PP
++The 
++.M Strip "n" 
++element can be used by the receiver to get rid of the
++encapsulation header.
++.PP
++
++.SH "EXAMPLES"
++
++.nf
++\&  UDPIPEncap(1.0.0.1, 1234, 2.0.0.2, 1234)
++.fi
++.PP
++
++
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBsrc\fR (read/write)" 5
++Returns or sets the SRC source address argument.
++.IP "" 5
++.IP "\fBsport\fR (read/write)" 5
++Returns or sets the SPORT source port argument.
++.IP "" 5
++.IP "\fBdst\fR (read/write)" 5
++Returns or sets the DST destination address argument.
++.IP "" 5
++.IP "\fBdport\fR (read/write)" 5
++Returns or sets the DPORT destination port argument.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M Strip n ,
++.M IPEncap "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/UMLSwitch.n click-1.6.0-27/inst/share/man/mann/UMLSwitch.n
+--- click-1.6.0/inst/share/man/mann/UMLSwitch.n        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/UMLSwitch.n     2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,37 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/userlevel/umlswitch.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "UMLSWITCH" n "11/Feb/2009" "Click"
++.SH "NAME"
++UMLSwitch \- Click element;
++Connects to a UML switch daemon
++.SH "SYNOPSIS"
++\fBUMLSwitch\fR([FILENAME])
++
++\fBPorts\fR: at most 1 input, at most 1 output
++.br
++\fBProcessing\fR: pull inputs, push outputs
++.br
++\fBDrivers\fR: userlevel
++.br
++\fBPackage\fR: userlevel (core)
++.br
++.SH "DESCRIPTION"
++Transports packets to and from a User Mode Linux switch daemon
++instance. Packets do not flow through \fBUMLSwitch\fR elements (i.e.,
++\fBUMLSwitch\fR is an "x/y" element). Instead, input packets are sent to the
++UML switch, and packets received from the UML switch are emitted on
++the output.
++.PP
++If FILENAME is not specified, "/tmp/uml.ctl" will be used as the path
++to the UML control socket.
++.PP
++
++.SH "SEE ALSO"
++.M Socket "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Unqueue.n click-1.6.0-27/inst/share/man/mann/Unqueue.n
+--- click-1.6.0/inst/share/man/mann/Unqueue.n  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Unqueue.n       2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,55 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/unqueue.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "UNQUEUE" n "11/Feb/2009" "Click"
++.SH "NAME"
++Unqueue \- Click element;
++pull-to-push converter
++.SH "SYNOPSIS"
++\fBUnqueue\fR([BURST, \fIKEYWORDS\fR])
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: pull inputs, push outputs
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Pulls packets whenever they are available, then pushes them out
++its single output. Pulls a maximum of BURST packets every time
++it is scheduled. Default BURST is 1. If BURST
++is less than 0, pull until nothing comes back.
++.PP
++Keyword arguments are:
++.PP
++
++
++.IP "ACTIVE" 4
++If false, does nothing (doesn't pull packets). One possible use
++is to set ACTIVE to false in the configuration, and later
++change it to true with a handler from DriverManager element.
++The default value is true.
++.IP "" 4
++.PP
++
++.SH "ELEMENT HANDLERS"
++
++
++
++.IP "\fBcount\fR (read-only)" 5
++Returns the count of packets that have passed through \fBUnqueue\fR.
++.IP "" 5
++.IP "\fBactive\fR (read/write)" 5
++The same as ACTIVE keyword.
++.IP "" 5
++.PP
++
++.SH "SEE ALSO"
++.M RatedUnqueue n ,
++.M BandwidthRatedUnqueue "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Unqueue2.n click-1.6.0-27/inst/share/man/mann/Unqueue2.n
+--- click-1.6.0/inst/share/man/mann/Unqueue2.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Unqueue2.n      2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,35 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/unqueue2.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "UNQUEUE2" n "11/Feb/2009" "Click"
++.SH "NAME"
++Unqueue2 \- Click element;
++pull-to-push converter
++.SH "SYNOPSIS"
++\fBUnqueue2\fR([BURSTSIZE])
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: pull inputs, push outputs
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Pulls packets whenever they are available, then pushes them out its single
++output. Pulls a maximum of BURSTSIZE packets every time it is scheduled,
++unless downstream queues are full. Default BURSTSIZE is 1. If BURSTSIZE is
++0, pull until nothing comes back. \fBUnqueue2\fR will not pull if there is a
++downstream queue that is full. It will also limit burst size to equal to
++the number of available slots in the fullest downstream queue.
++.PP
++
++.SH "SEE ALSO"
++.M Unqueue n ,
++.M RatedUnqueue n ,
++.M BandwidthRatedUnqueue "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/Unstrip.n click-1.6.0-27/inst/share/man/mann/Unstrip.n
+--- click-1.6.0/inst/share/man/mann/Unstrip.n  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/Unstrip.n       2009-02-11 14:08:51.000000000 -0500
+@@ -0,0 +1,39 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/standard/unstrip.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "UNSTRIP" n "11/Feb/2009" "Click"
++.SH "NAME"
++Unstrip \- Click element;
++unstrips bytes from front of packets
++.SH "SYNOPSIS"
++\fBUnstrip\fR(LENGTH)
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: standard (core)
++.br
++.SH "DESCRIPTION"
++Put LENGTH bytes at the front of the packet. These LENGTH bytes may be bytes
++previously removed by Strip.
++
++.SH "EXAMPLES"
++Use this to get rid of the Ethernet header and put it back on:
++.PP
++.nf
++\&  Strip(14) -> ... -> Unstrip(14)
++.fi
++.PP
++
++
++
++.SH "SEE ALSO"
++.M EtherEncap n ,
++.M IPEncap "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/UnstripIPHeader.n click-1.6.0-27/inst/share/man/mann/UnstripIPHeader.n
+--- click-1.6.0/inst/share/man/mann/UnstripIPHeader.n  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/UnstripIPHeader.n       2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,36 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man' from '../elements/ip/unstripipheader.hh'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "UNSTRIPIPHEADER" n "11/Feb/2009" "Click"
++.SH "NAME"
++UnstripIPHeader \- Click element;
++restores outermost IP header
++.SH "SYNOPSIS"
++\fBUnstripIPHeader\fR()
++
++\fBPorts\fR: 1 input, 1 output
++.br
++\fBProcessing\fR: agnostic
++.br
++\fBPackage\fR: ip (core)
++.br
++.SH "DESCRIPTION"
++Put outermost IP header back onto a stripped packet, based on the IP Header
++annotation from 
++.M MarkIPHeader "n" 
++or 
++.M CheckIPHeader "n" .
++If IP header already on,
++forwards packet unmodified.
++.PP
++
++.SH "SEE ALSO"
++.M CheckIPHeader n ,
++.M MarkIPHeader n ,
++.M StripIPHeader "n" 
++
+diff -Nurb click-1.6.0/inst/share/man/mann/elements-click.n click-1.6.0-27/inst/share/man/mann/elements-click.n
+--- click-1.6.0/inst/share/man/mann/elements-click.n   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/elements-click.n        2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,1323 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ELEMENTS-CLICK" n "11/Feb/2009" "Click"
++.SH "NAME"
++elements-click - documented Click element classes
++.SH "DESCRIPTION"
++This page lists all Click element classes that have manual page documentation.
++.\"html <p><a href="#BY+FUNCTION"><b>By Function</b></a>:
++.\"html <a href="#Basic+Sources+and+Sinks">Basic&nbsp;Sources&nbsp;and&nbsp;Sinks</a>&nbsp;- <a href="#Basic+Classification+and+Selection">Basic&nbsp;Classification&nbsp;and&nbsp;Selection</a>&nbsp;- <a href="#Basic+Packet+Transfer">Basic&nbsp;Packet&nbsp;Transfer</a>&nbsp;- <a href="#Counters">Counters</a>&nbsp;- <a href="#Timestamps">Timestamps</a>&nbsp;- <a href="#Basic+Packet+Modification">Basic&nbsp;Packet&nbsp;Modification</a>&nbsp;- <a href="#Packet+Storage">Packet&nbsp;Storage</a>&nbsp;- <a href="#Active+Queue+Management">Active&nbsp;Queue&nbsp;Management</a>&nbsp;- <a href="#Packet+Scheduling">Packet&nbsp;Scheduling</a>&nbsp;- <a href="#Traffic+Shaping">Traffic&nbsp;Shaping</a>&nbsp;- <a href="#Information+Elements">Information&nbsp;Elements</a>&nbsp;- <a href="#Network+Devices">Network&nbsp;Devices</a>&nbsp;- <a href="#Host+and+Socket+Communication">Host&nbsp;and&nbsp;Socket&nbsp;Communication</a>&nbsp;- <a href="#Ethernet">Ethernet</a>&nbsp;- <a href="#ARP">ARP</a>&nbsp;- <a href="#IPv4">IPv4</a>&nbsp;- <a href="#IPv4+Routing">IPv4&nbsp;Routing</a>&nbsp;- <a href="#ICMP">ICMP</a>&nbsp;- <a href="#Network+Address+Translation">Network&nbsp;Address&nbsp;Translation</a>&nbsp;- <a href="#TCP">TCP</a>&nbsp;- <a href="#UDP">UDP</a>&nbsp;- <a href="#Trace+Manipulation">Trace&nbsp;Manipulation</a>&nbsp;- <a href="#TCP/IP+Measurement">TCP/IP&nbsp;Measurement</a>&nbsp;- <a href="#CRCs">CRCs</a>&nbsp;- <a href="#Paint+Annotations">Paint&nbsp;Annotations</a>&nbsp;- <a href="#Annotations">Annotations</a>&nbsp;- <a href="#Debugging">Debugging</a>&nbsp;- <a href="#Control">Control</a>&nbsp;- <a href="#Multithreaded+Click">Multithreaded&nbsp;Click</a>&nbsp;- <a href="#devices">devices</a><br>
++.\"html <a href="#ALPHABETICAL+LIST"><b>Alphabetical List</b></a></p>
++.SH "BY FUNCTION"
++.SS "Basic Sources and Sinks"
++.PP
++.PD 0
++.TP 20
++.M Discard n
++drops all packets
++.TP 20
++.M DiscardNoFree n
++drops all packets, but does not free any of them.
++.TP 20
++.M Idle n
++discards packets
++.TP 20
++.M InfiniteSource n
++generates packets whenever scheduled
++.TP 20
++.M RandomSource n
++generates random packets whenever scheduled
++.TP 20
++.M RatedSource n
++generates packets at specified rate
++.TP 20
++.M TimedSink n
++periodically pulls and drops a packet
++.TP 20
++.M TimedSource n
++periodically generates a packet
++.PD
++.SS "Basic Classification and Selection"
++.PP
++.PD 0
++.TP 20
++.M CheckLength n
++drops large packets
++.TP 20
++.M Classifier n
++classifies packets by contents
++.TP 20
++.M HashSwitch n
++classifies packets by hash of contents
++.TP 20
++.M RandomSample n
++samples packets with some probability
++.TP 20
++.M RandomSwitch n
++sends packets to random outputs
++.TP 20
++.M RoundRobinSwitch n
++sends packets to round-robin outputs
++.TP 20
++.M StaticSwitch n
++sends packet stream to fixed output
++.TP 20
++.M StrideSwitch n
++sends packets to stride-scheduled outputs
++.TP 20
++.M Suppressor n
++passes packets unchanged, optionally dropping some input ports
++.TP 20
++.M Switch n
++sends packet stream to settable output
++.PD
++.SS "Basic Packet Transfer"
++.PP
++.PD 0
++.TP 20
++.M Null n
++passes packets unchanged
++.TP 20
++.M Null1 n
++copy of 
++.M Null "n" 
++.TP 20
++.M PullNull n
++passes packets unchanged
++.TP 20
++.M PullTee n
++duplicates packets
++.TP 20
++.M PushNull n
++passes packets unchanged
++.TP 20
++.M Tee n
++duplicates packets
++.PD
++.SS "Counters"
++.PP
++.PD 0
++.TP 20
++.M AverageCounter n
++measures historical packet count and rate
++.TP 20
++.M Counter n
++measures packet count and rate
++.TP 20
++.M CycleCountAccum n
++collects differences in cycle counters
++.TP 20
++.M PerfCountAccum n
++collects differences in Pentium Pro performance metrics
++.TP 20
++.M PerfCountInfo n
++turn on Pentium Pro performance metrics
++.TP 20
++.M RoundTripCycleCount n
++measures round trip cycles on a push or pull path
++.TP 20
++.M SetCycleCount n
++stores cycle count in annotation
++.TP 20
++.M SetPerfCount n
++stores Pentium Pro performance metric in annotation
++.PD
++.SS "Timestamps"
++.PP
++.PD 0
++.TP 20
++.M SetTimestamp n
++store the time in the packet's timestamp annotation
++.PD
++.SS "Basic Packet Modification"
++.PP
++.PD 0
++.TP 20
++.M Align n
++aligns packet data
++.TP 20
++.M RandomBitErrors n
++changes packet data with some probability
++.TP 20
++.M StoreData n
++changes packet data
++.TP 20
++.M Strip n
++strips bytes from front of packets
++.TP 20
++.M StripToNetworkHeader n
++strips everything preceding network header
++.TP 20
++.M Truncate n
++limit packet length.
++.TP 20
++.M Unstrip n
++unstrips bytes from front of packets
++.PD
++.SS "Packet Storage"
++.PP
++.PD 0
++.TP 20
++.M FrontDropQueue n
++stores packets in drop-from-front FIFO queue
++.TP 20
++.M MixedQueue n
++stores packets in a FIFO/LIFO queue
++.TP 20
++.M NotifierQueue n
++stores packets in a FIFO queue
++.TP 20
++.M Queue n
++stores packets in a FIFO queue
++.TP 20
++.M SimpleQueue n
++stores packets in a FIFO queue
++.PD
++.SS "Active Queue Management"
++.PP
++.PD 0
++.TP 20
++.M AdaptiveRED n
++drops packets according to Adaptive RED
++.TP 20
++.M RED n
++drops packets according to RED
++.PD
++.SS "Packet Scheduling"
++.PP
++.PD 0
++.TP 20
++.M DRRSched n
++pulls from inputs with deficit round robin scheduling
++.TP 20
++.M PrioSched n
++pulls from priority-scheduled inputs
++.TP 20
++.M PullSwitch n
++forwards pull requests to settable input
++.TP 20
++.M RoundRobinSched n
++pulls from round-robin inputs
++.TP 20
++.M StaticPullSwitch n
++forwards pull requests to fixed input
++.TP 20
++.M StrideSched n
++pulls from stride-scheduled inputs
++.PD
++.SS "Traffic Shaping"
++.PP
++.PD 0
++.TP 20
++.M BandwidthMeter n
++classifies packet stream by arrival rate
++.TP 20
++.M BandwidthRatedSplitter n
++splits flow of packets at specified bandwidth rate
++.TP 20
++.M BandwidthRatedUnqueue n
++pull-to-push converter
++.TP 20
++.M BandwidthShaper n
++shapes traffic to maximum rate (bytes/s) 
++.TP 20
++.M Burster n
++pull-to-push converter
++.TP 20
++.M CompareBlock n
++drops packets out of rate range
++.TP 20
++.M DelayShaper n
++shapes traffic to meet delay requirements
++.TP 20
++.M DelayUnqueue n
++delay inducing pull-to-push converter
++.TP 20
++.M LinkUnqueue n
++link emulator
++.TP 20
++.M Meter n
++classifies packet stream by rate (pkt/s)
++.TP 20
++.M RatedSplitter n
++splits flow of packets at specified rate
++.TP 20
++.M RatedUnqueue n
++pull-to-push converter
++.TP 20
++.M Shaper n
++shapes traffic to maximum rate (pkt/s) 
++.TP 20
++.M Unqueue n
++pull-to-push converter
++.TP 20
++.M Unqueue2 n
++pull-to-push converter
++.PD
++.SS "Information Elements"
++.PP
++.PD 0
++.TP 20
++.M AddressInfo n
++specifies address information
++.TP 20
++.M AlignmentInfo n
++specifies alignment information
++.TP 20
++.M PortInfo n
++stores named TCP/UDP port information
++.TP 20
++.M ScheduleInfo n
++specifies scheduling parameters
++.TP 20
++.M ScheduleLinux n
++returns to Linux scheduler
++.PD
++.SS "Network Devices"
++.PP
++.PD 0
++.TP 20
++.M FromDevice n
++reads packets from network device (Linux kernel)
++.TP 20
++.M FromDevice.u n
++reads packets from network device (user-level)
++.TP 20
++.M PollDevice n
++polls packets from network device (kernel)
++.TP 20
++.M ToDevice n
++sends packets to network device (Linux kernel)
++.TP 20
++.M ToDevice.u n
++sends packets to network device (user-level)
++.PD
++.SS "Host and Socket Communication"
++.PP
++.PD 0
++.TP 20
++.M FromHost n
++reads packets from Linux
++.TP 20
++.M FromHost.u n
++interface to /dev/net/tun or ethertap (user-level)
++.TP 20
++.M FromRawSocket n
++reads raw IP packets from safe raw socket (user-level)
++.TP 20
++.M FromSocket n
++reads data from socket (user-level)
++.TP 20
++.M KernelFilter n
++block kernel from handling packets
++.TP 20
++.M KernelTap n
++interface to /dev/tap or ethertap (user-level)
++.TP 20
++.M KernelTun n
++interface to /dev/tun or ethertap (user-level)
++.TP 20
++.M RawSocket n
++transports raw IP packets via safe raw sockets (user-level)
++.TP 20
++.M Socket n
++a socket transport (user-level)
++.TP 20
++.M ToHost n
++sends packets to Linux
++.TP 20
++.M ToHost.u n
++sends packets to Linux via Universal TUN/TAP device.
++.TP 20
++.M ToHostSniffers n
++sends packets to Linux packet sniffers
++.TP 20
++.M ToRawSocket n
++sends IP packets through a safe raw socket (user-level)
++.TP 20
++.M ToSocket n
++sends data to socket (user-level)
++.PD
++.SS "Ethernet"
++.PP
++.PD 0
++.TP 20
++.M EnsureEther n
++ensures that IP packets are Ethernet encapsulated
++.TP 20
++.M EtherEncap n
++encapsulates packets in Ethernet header
++.TP 20
++.M EtherMirror n
++swaps Ethernet source and destination
++.TP 20
++.M HostEtherFilter n
++drops Ethernet packets sent to other machines
++.PD
++.SS "ARP"
++.PP
++.PD 0
++.TP 20
++.M ARPFaker n
++periodically generates an ARP reply
++.TP 20
++.M ARPPrint n
++pretty-prints ARP packets a la tcpdump
++.TP 20
++.M ARPQuerier n
++encapsulates IP packets in Ethernet headers found via ARP
++.TP 20
++.M ARPResponder n
++generates responses to ARP queries
++.TP 20
++.M CheckARPHeader n
++checks ARP header
++.PD
++.SS "IPv4"
++.PP
++.PD 0
++.TP 20
++.M CheckIPHeader n
++checks IP header
++.TP 20
++.M CheckIPHeader2 n
++checks IP header, no checksum
++.TP 20
++.M DecIPTTL n
++decrements IP time-to-live, drops dead packets
++.TP 20
++.M FixIPSrc n
++sets IP source field if requested by annotation
++.TP 20
++.M GetIPAddress n
++sets destination IP address annotation from packet data
++.TP 20
++.M IPClassifier n
++classifies IP packets by contents
++.TP 20
++.M IPEncap n
++encapsulates packets in static IP header
++.TP 20
++.M IPFilter n
++filters IP packets by contents
++.TP 20
++.M IPFragmenter n
++fragments large IP packets
++.TP 20
++.M IPGWOptions n
++processes router IP options
++.TP 20
++.M IPInputCombo n
++input combo for IP routing
++.TP 20
++.M IPMirror n
++swaps IP source and destination
++.TP 20
++.M IPNameInfo n
++stores name information about IP packets
++.TP 20
++.M IPOutputCombo n
++output combo for IP routing
++.TP 20
++.M IPPrint n
++pretty-prints IP packets
++.TP 20
++.M IPReassembler n
++Reassembles fragmented IP packets
++.TP 20
++.M MarkIPCE n
++sets IP packets' ECN field to Congestion Experienced
++.TP 20
++.M MarkIPHeader n
++sets IP header annotation
++.TP 20
++.M SetIPAddress n
++sets destination IP address annotations
++.TP 20
++.M SetIPChecksum n
++sets IP packets' checksums
++.TP 20
++.M SetIPDSCP n
++sets IP packets' DSCP fields
++.TP 20
++.M SetRandIPAddress n
++sets destination IP address annotations randomly
++.TP 20
++.M StoreIPAddress n
++stores IP address in packet
++.TP 20
++.M StripIPHeader n
++strips outermost IP header
++.TP 20
++.M UnstripIPHeader n
++restores outermost IP header
++.PD
++.SS "IPv4 Routing"
++.PP
++.PD 0
++.TP 20
++.M DirectIPLookup n
++IP routing lookup using direct-indexed tables
++.TP 20
++.M IPRouteTable n
++IP routing table superclass
++.TP 20
++.M LinearIPLookup n
++simple IP routing table
++.TP 20
++.M LinuxIPLookup n
++interface to Linux's routing table
++.TP 20
++.M RadixIPLookup n
++IP lookup using a radix trie
++.TP 20
++.M RangeIPLookup n
++IP routing lookup through binary search in a very compact table
++.TP 20
++.M RIPSend n
++periodically generates specified RIP II packet
++.TP 20
++.M SortedIPLookup n " (deprecated)"
++simple IP routing table
++.TP 20
++.M StaticIPLookup n
++simple static IP routing table
++.PD
++.SS "ICMP"
++.PP
++.PD 0
++.TP 20
++.M CheckICMPHeader n
++checks ICMP header on ICMP packets
++.TP 20
++.M ICMPError n
++generates ICMP error packets
++.TP 20
++.M ICMPPingEncap n
++encapsulates packets in ICMP ping headers
++.TP 20
++.M ICMPPingResponder n
++responds to ICMP echo requests
++.TP 20
++.M ICMPPingSource n
++periodically sends ICMP echo requests
++.PD
++.SS "Network Address Translation"
++.PP
++.PD 0
++.TP 20
++.M FTPPortMapper n
++manipulates 
++.M IPRewriter "n" 
++for FTP
++.TP 20
++.M ICMPPingRewriter n
++rewrites ICMP echo requests and replies
++.TP 20
++.M ICMPRewriter n
++rewrites ICMP packets based on IP rewriter mappings
++.TP 20
++.M IPAddrPairRewriter n
++rewrites IP packets' addresses by address pair
++.TP 20
++.M IPAddrRewriter n
++rewrites IP packets' addresses
++.TP 20
++.M IPRewriter n
++rewrites TCP/UDP packets' addresses and ports
++.TP 20
++.M IPRewriterPatterns n
++specifies shared 
++.M IPRewriter n 
++patterns
++.TP 20
++.M RoundRobinIPMapper n
++round-robin mapper for 
++.M IPRewriter n 
++.TP 20
++.M SourceIPHashMapper n
++Source IP Hash mapper for 
++.M IPRewriter n 
++.TP 20
++.M TCPRewriter n
++rewrites TCP packets' addresses, ports, and sequence numbers
++.PD
++.SS "TCP"
++.PP
++.PD 0
++.TP 20
++.M CheckTCPHeader n
++checks TCP header on TCP/IP packets
++.TP 20
++.M FastTCPFlows n
++creates packets flows with static TCP/IP/Ethernet headers
++.TP 20
++.M RFC2507Comp n
++RFC2507 IPv4/TCP header compressor.
++.TP 20
++.M RFC2507Decomp n
++RFC2507 IPv4/TCP header decompressor.
++.TP 20
++.M SetTCPChecksum n
++sets TCP packets' checksums
++.PD
++.SS "UDP"
++.PP
++.PD 0
++.TP 20
++.M CheckUDPHeader n
++checks UDP header on UDP/IP packets
++.TP 20
++.M DynamicUDPIPEncap n
++encapsulates packets in dynamic UDP/IP headers
++.TP 20
++.M FastUDPFlows n
++creates packets flows with static UDP/IP/Ethernet headers
++.TP 20
++.M FastUDPSource n
++creates packets with static UDP/IP/Ethernet headers
++.TP 20
++.M SetUDPChecksum n
++sets UDP packets' checksums
++.TP 20
++.M UDPIPEncap n
++encapsulates packets in static UDP/IP headers
++.PD
++.SS "Trace Manipulation"
++.PP
++.PD 0
++.TP 20
++.M FromDump n
++reads packets from a tcpdump file
++.TP 20
++.M ToDump n
++writes packets to a tcpdump file
++.PD
++.SS "TCP/IP Measurement"
++.PP
++.PD 0
++.TP 20
++.M IPRateMonitor n
++measures coming and going IP traffic rates
++.PD
++.SS "CRCs"
++.PP
++.PD 0
++.TP 20
++.M CheckCRC32 n
++checks packet CRC32s
++.TP 20
++.M SetCRC32 n
++calculates CRC32 and prepends to packet
++.PD
++.SS "Paint Annotations"
++.PP
++.PD 0
++.TP 20
++.M CheckPaint n
++checks packets' paint annotation
++.TP 20
++.M Paint n
++sets packet paint annotations
++.TP 20
++.M PaintSwitch n
++sends packet stream to output chosen per-packet
++.TP 20
++.M PaintTee n
++duplicates packets with given paint annotation
++.PD
++.SS "Annotations"
++.PP
++.PD 0
++.TP 20
++.M DropBroadcasts n
++drops link-level broadcast and multicast packets
++.TP 20
++.M SetAnnoByte n
++sets packet user annotations
++.TP 20
++.M SetPacketType n
++sets packet type annotation
++.PD
++.SS "Debugging"
++.PP
++.PD 0
++.TP 20
++.M Error n
++always fails
++.TP 20
++.M Print n
++prints packet contents
++.PD
++.SS "Control"
++.PP
++.PD 0
++.TP 20
++.M ChangeUID n
++relinquish root privilege
++.TP 20
++.M ChatterSocket n
++reports chatter messages to connected sockets
++.TP 20
++.M ControlSocket n
++opens control sockets for other programs
++.TP 20
++.M DriverManager n
++a 
++.M Script "n" 
++that manages driver stop events
++.TP 20
++.M KernelHandlerProxy n
++proxies kernel module handlers at user level
++.TP 20
++.M Message n
++prints a message on configuration
++.TP 20
++.M PokeHandlers n " (deprecated)"
++calls write handlers at specified times
++.TP 20
++.M ProgressBar n
++prints a progress bar to standard error
++.TP 20
++.M QuitWatcher n
++stops router processing
++.TP 20
++.M Script n
++script a Click router configuration
++.PD
++.SS "Multithreaded Click"
++.PP
++.PD 0
++.TP 20
++.M CPUQueue n
++stores packets in FIFO queues.
++.TP 20
++.M CPUSwitch n
++classifies packets by cpu
++.TP 20
++.M LookupIPRouteMP n
++simple static IP routing table
++.TP 20
++.M MSQueue n
++stores packets in a FIFO queue
++.TP 20
++.M SpinlockAcquire n
++acquires spinlock
++.TP 20
++.M SpinlockInfo n
++specifies names of spinlocks
++.TP 20
++.M SpinlockRelease n
++releases spinlock
++.TP 20
++.M StaticThreadSched n
++specifies element and thread scheduling parameters
++.PD
++.SS "devices"
++.PP
++.PD 0
++.TP 20
++.M UMLSwitch n
++Connects to a UML switch daemon
++.PD
++.SH "ALPHABETICAL LIST"
++.PP
++.PD 0
++.TP 20
++.M AdaptiveRED n
++drops packets according to Adaptive RED
++.TP 20
++.M AddressInfo n
++specifies address information
++.TP 20
++.M Align n
++aligns packet data
++.TP 20
++.M AlignmentInfo n
++specifies alignment information
++.TP 20
++.M ARPFaker n
++periodically generates an ARP reply
++.TP 20
++.M ARPPrint n
++pretty-prints ARP packets a la tcpdump
++.TP 20
++.M ARPQuerier n
++encapsulates IP packets in Ethernet headers found via ARP
++.TP 20
++.M ARPResponder n
++generates responses to ARP queries
++.TP 20
++.M AverageCounter n
++measures historical packet count and rate
++.TP 20
++.M BandwidthMeter n
++classifies packet stream by arrival rate
++.TP 20
++.M BandwidthRatedSplitter n
++splits flow of packets at specified bandwidth rate
++.TP 20
++.M BandwidthRatedUnqueue n
++pull-to-push converter
++.TP 20
++.M BandwidthShaper n
++shapes traffic to maximum rate (bytes/s) 
++.TP 20
++.M Burster n
++pull-to-push converter
++.TP 20
++.M ChangeUID n
++relinquish root privilege
++.TP 20
++.M ChatterSocket n
++reports chatter messages to connected sockets
++.TP 20
++.M CheckARPHeader n
++checks ARP header
++.TP 20
++.M CheckCRC32 n
++checks packet CRC32s
++.TP 20
++.M CheckICMPHeader n
++checks ICMP header on ICMP packets
++.TP 20
++.M CheckIPHeader n
++checks IP header
++.TP 20
++.M CheckIPHeader2 n
++checks IP header, no checksum
++.TP 20
++.M CheckLength n
++drops large packets
++.TP 20
++.M CheckPaint n
++checks packets' paint annotation
++.TP 20
++.M CheckTCPHeader n
++checks TCP header on TCP/IP packets
++.TP 20
++.M CheckUDPHeader n
++checks UDP header on UDP/IP packets
++.TP 20
++.M Classifier n
++classifies packets by contents
++.TP 20
++.M CompareBlock n
++drops packets out of rate range
++.TP 20
++.M ControlSocket n
++opens control sockets for other programs
++.TP 20
++.M Counter n
++measures packet count and rate
++.TP 20
++.M CPUQueue n
++stores packets in FIFO queues.
++.TP 20
++.M CPUSwitch n
++classifies packets by cpu
++.TP 20
++.M CycleCountAccum n
++collects differences in cycle counters
++.TP 20
++.M DecIPTTL n
++decrements IP time-to-live, drops dead packets
++.TP 20
++.M DelayShaper n
++shapes traffic to meet delay requirements
++.TP 20
++.M DelayUnqueue n
++delay inducing pull-to-push converter
++.TP 20
++.M DirectIPLookup n
++IP routing lookup using direct-indexed tables
++.TP 20
++.M Discard n
++drops all packets
++.TP 20
++.M DiscardNoFree n
++drops all packets, but does not free any of them.
++.TP 20
++.M DriverManager n
++a 
++.M Script "n" 
++that manages driver stop events
++.TP 20
++.M DropBroadcasts n
++drops link-level broadcast and multicast packets
++.TP 20
++.M DRRSched n
++pulls from inputs with deficit round robin scheduling
++.TP 20
++.M DynamicUDPIPEncap n
++encapsulates packets in dynamic UDP/IP headers
++.TP 20
++.M EnsureEther n
++ensures that IP packets are Ethernet encapsulated
++.TP 20
++.M Error n
++always fails
++.TP 20
++.M EtherEncap n
++encapsulates packets in Ethernet header
++.TP 20
++.M EtherMirror n
++swaps Ethernet source and destination
++.TP 20
++.M FastTCPFlows n
++creates packets flows with static TCP/IP/Ethernet headers
++.TP 20
++.M FastUDPFlows n
++creates packets flows with static UDP/IP/Ethernet headers
++.TP 20
++.M FastUDPSource n
++creates packets with static UDP/IP/Ethernet headers
++.TP 20
++.M FixIPSrc n
++sets IP source field if requested by annotation
++.TP 20
++.M FromDevice n
++reads packets from network device (Linux kernel)
++.TP 20
++.M FromDevice.u n
++reads packets from network device (user-level)
++.TP 20
++.M FromDump n
++reads packets from a tcpdump file
++.TP 20
++.M FromHost n
++reads packets from Linux
++.TP 20
++.M FromHost.u n
++interface to /dev/net/tun or ethertap (user-level)
++.TP 20
++.M FromRawSocket n
++reads raw IP packets from safe raw socket (user-level)
++.TP 20
++.M FromSocket n
++reads data from socket (user-level)
++.TP 20
++.M FrontDropQueue n
++stores packets in drop-from-front FIFO queue
++.TP 20
++.M FTPPortMapper n
++manipulates 
++.M IPRewriter "n" 
++for FTP
++.TP 20
++.M GetIPAddress n
++sets destination IP address annotation from packet data
++.TP 20
++.M HashSwitch n
++classifies packets by hash of contents
++.TP 20
++.M HostEtherFilter n
++drops Ethernet packets sent to other machines
++.TP 20
++.M ICMPError n
++generates ICMP error packets
++.TP 20
++.M ICMPPingEncap n
++encapsulates packets in ICMP ping headers
++.TP 20
++.M ICMPPingResponder n
++responds to ICMP echo requests
++.TP 20
++.M ICMPPingRewriter n
++rewrites ICMP echo requests and replies
++.TP 20
++.M ICMPPingSource n
++periodically sends ICMP echo requests
++.TP 20
++.M ICMPRewriter n
++rewrites ICMP packets based on IP rewriter mappings
++.TP 20
++.M Idle n
++discards packets
++.TP 20
++.M InfiniteSource n
++generates packets whenever scheduled
++.TP 20
++.M IPAddrPairRewriter n
++rewrites IP packets' addresses by address pair
++.TP 20
++.M IPAddrRewriter n
++rewrites IP packets' addresses
++.TP 20
++.M IPClassifier n
++classifies IP packets by contents
++.TP 20
++.M IPEncap n
++encapsulates packets in static IP header
++.TP 20
++.M IPFilter n
++filters IP packets by contents
++.TP 20
++.M IPFragmenter n
++fragments large IP packets
++.TP 20
++.M IPGWOptions n
++processes router IP options
++.TP 20
++.M IPInputCombo n
++input combo for IP routing
++.TP 20
++.M IPMirror n
++swaps IP source and destination
++.TP 20
++.M IPNameInfo n
++stores name information about IP packets
++.TP 20
++.M IPOutputCombo n
++output combo for IP routing
++.TP 20
++.M IPPrint n
++pretty-prints IP packets
++.TP 20
++.M IPRateMonitor n
++measures coming and going IP traffic rates
++.TP 20
++.M IPReassembler n
++Reassembles fragmented IP packets
++.TP 20
++.M IPRewriter n
++rewrites TCP/UDP packets' addresses and ports
++.TP 20
++.M IPRewriterPatterns n
++specifies shared 
++.M IPRewriter n 
++patterns
++.TP 20
++.M IPRouteTable n
++IP routing table superclass
++.TP 20
++.M KernelFilter n
++block kernel from handling packets
++.TP 20
++.M KernelHandlerProxy n
++proxies kernel module handlers at user level
++.TP 20
++.M KernelTap n
++interface to /dev/tap or ethertap (user-level)
++.TP 20
++.M KernelTun n
++interface to /dev/tun or ethertap (user-level)
++.TP 20
++.M LinearIPLookup n
++simple IP routing table
++.TP 20
++.M LinkUnqueue n
++link emulator
++.TP 20
++.M LinuxIPLookup n
++interface to Linux's routing table
++.TP 20
++.M LookupIPRouteMP n
++simple static IP routing table
++.TP 20
++.M MarkIPCE n
++sets IP packets' ECN field to Congestion Experienced
++.TP 20
++.M MarkIPHeader n
++sets IP header annotation
++.TP 20
++.M Message n
++prints a message on configuration
++.TP 20
++.M Meter n
++classifies packet stream by rate (pkt/s)
++.TP 20
++.M MixedQueue n
++stores packets in a FIFO/LIFO queue
++.TP 20
++.M MSQueue n
++stores packets in a FIFO queue
++.TP 20
++.M NotifierQueue n
++stores packets in a FIFO queue
++.TP 20
++.M Null n
++passes packets unchanged
++.TP 20
++.M Null1 n
++copy of 
++.M Null "n" 
++.TP 20
++.M Paint n
++sets packet paint annotations
++.TP 20
++.M PaintSwitch n
++sends packet stream to output chosen per-packet
++.TP 20
++.M PaintTee n
++duplicates packets with given paint annotation
++.TP 20
++.M PerfCountAccum n
++collects differences in Pentium Pro performance metrics
++.TP 20
++.M PerfCountInfo n
++turn on Pentium Pro performance metrics
++.TP 20
++.M PokeHandlers n " (deprecated)"
++calls write handlers at specified times
++.TP 20
++.M PollDevice n
++polls packets from network device (kernel)
++.TP 20
++.M PortInfo n
++stores named TCP/UDP port information
++.TP 20
++.M Print n
++prints packet contents
++.TP 20
++.M PrioSched n
++pulls from priority-scheduled inputs
++.TP 20
++.M ProgressBar n
++prints a progress bar to standard error
++.TP 20
++.M PullNull n
++passes packets unchanged
++.TP 20
++.M PullSwitch n
++forwards pull requests to settable input
++.TP 20
++.M PullTee n
++duplicates packets
++.TP 20
++.M PushNull n
++passes packets unchanged
++.TP 20
++.M Queue n
++stores packets in a FIFO queue
++.TP 20
++.M QuitWatcher n
++stops router processing
++.TP 20
++.M RadixIPLookup n
++IP lookup using a radix trie
++.TP 20
++.M RandomBitErrors n
++changes packet data with some probability
++.TP 20
++.M RandomSample n
++samples packets with some probability
++.TP 20
++.M RandomSource n
++generates random packets whenever scheduled
++.TP 20
++.M RandomSwitch n
++sends packets to random outputs
++.TP 20
++.M RangeIPLookup n
++IP routing lookup through binary search in a very compact table
++.TP 20
++.M RatedSource n
++generates packets at specified rate
++.TP 20
++.M RatedSplitter n
++splits flow of packets at specified rate
++.TP 20
++.M RatedUnqueue n
++pull-to-push converter
++.TP 20
++.M RawSocket n
++transports raw IP packets via safe raw sockets (user-level)
++.TP 20
++.M RED n
++drops packets according to RED
++.TP 20
++.M RFC2507Comp n
++RFC2507 IPv4/TCP header compressor.
++.TP 20
++.M RFC2507Decomp n
++RFC2507 IPv4/TCP header decompressor.
++.TP 20
++.M RIPSend n
++periodically generates specified RIP II packet
++.TP 20
++.M RoundRobinIPMapper n
++round-robin mapper for 
++.M IPRewriter n 
++.TP 20
++.M RoundRobinSched n
++pulls from round-robin inputs
++.TP 20
++.M RoundRobinSwitch n
++sends packets to round-robin outputs
++.TP 20
++.M RoundTripCycleCount n
++measures round trip cycles on a push or pull path
++.TP 20
++.M ScheduleInfo n
++specifies scheduling parameters
++.TP 20
++.M ScheduleLinux n
++returns to Linux scheduler
++.TP 20
++.M Script n
++script a Click router configuration
++.TP 20
++.M SetAnnoByte n
++sets packet user annotations
++.TP 20
++.M SetCRC32 n
++calculates CRC32 and prepends to packet
++.TP 20
++.M SetCycleCount n
++stores cycle count in annotation
++.TP 20
++.M SetIPAddress n
++sets destination IP address annotations
++.TP 20
++.M SetIPChecksum n
++sets IP packets' checksums
++.TP 20
++.M SetIPDSCP n
++sets IP packets' DSCP fields
++.TP 20
++.M SetPacketType n
++sets packet type annotation
++.TP 20
++.M SetPerfCount n
++stores Pentium Pro performance metric in annotation
++.TP 20
++.M SetRandIPAddress n
++sets destination IP address annotations randomly
++.TP 20
++.M SetTCPChecksum n
++sets TCP packets' checksums
++.TP 20
++.M SetTimestamp n
++store the time in the packet's timestamp annotation
++.TP 20
++.M SetUDPChecksum n
++sets UDP packets' checksums
++.TP 20
++.M Shaper n
++shapes traffic to maximum rate (pkt/s) 
++.TP 20
++.M SimpleQueue n
++stores packets in a FIFO queue
++.TP 20
++.M Socket n
++a socket transport (user-level)
++.TP 20
++.M SortedIPLookup n " (deprecated)"
++simple IP routing table
++.TP 20
++.M SourceIPHashMapper n
++Source IP Hash mapper for 
++.M IPRewriter n 
++.TP 20
++.M SpinlockAcquire n
++acquires spinlock
++.TP 20
++.M SpinlockInfo n
++specifies names of spinlocks
++.TP 20
++.M SpinlockRelease n
++releases spinlock
++.TP 20
++.M StaticIPLookup n
++simple static IP routing table
++.TP 20
++.M StaticPullSwitch n
++forwards pull requests to fixed input
++.TP 20
++.M StaticSwitch n
++sends packet stream to fixed output
++.TP 20
++.M StaticThreadSched n
++specifies element and thread scheduling parameters
++.TP 20
++.M StoreData n
++changes packet data
++.TP 20
++.M StoreIPAddress n
++stores IP address in packet
++.TP 20
++.M StrideSched n
++pulls from stride-scheduled inputs
++.TP 20
++.M StrideSwitch n
++sends packets to stride-scheduled outputs
++.TP 20
++.M Strip n
++strips bytes from front of packets
++.TP 20
++.M StripIPHeader n
++strips outermost IP header
++.TP 20
++.M StripToNetworkHeader n
++strips everything preceding network header
++.TP 20
++.M Suppressor n
++passes packets unchanged, optionally dropping some input ports
++.TP 20
++.M Switch n
++sends packet stream to settable output
++.TP 20
++.M TCPRewriter n
++rewrites TCP packets' addresses, ports, and sequence numbers
++.TP 20
++.M Tee n
++duplicates packets
++.TP 20
++.M TimedSink n
++periodically pulls and drops a packet
++.TP 20
++.M TimedSource n
++periodically generates a packet
++.TP 20
++.M ToDevice n
++sends packets to network device (Linux kernel)
++.TP 20
++.M ToDevice.u n
++sends packets to network device (user-level)
++.TP 20
++.M ToDump n
++writes packets to a tcpdump file
++.TP 20
++.M ToHost n
++sends packets to Linux
++.TP 20
++.M ToHost.u n
++sends packets to Linux via Universal TUN/TAP device.
++.TP 20
++.M ToHostSniffers n
++sends packets to Linux packet sniffers
++.TP 20
++.M ToRawSocket n
++sends IP packets through a safe raw socket (user-level)
++.TP 20
++.M ToSocket n
++sends data to socket (user-level)
++.TP 20
++.M Truncate n
++limit packet length.
++.TP 20
++.M UDPIPEncap n
++encapsulates packets in static UDP/IP headers
++.TP 20
++.M UMLSwitch n
++Connects to a UML switch daemon
++.TP 20
++.M Unqueue n
++pull-to-push converter
++.TP 20
++.M Unqueue2 n
++pull-to-push converter
++.TP 20
++.M Unstrip n
++unstrips bytes from front of packets
++.TP 20
++.M UnstripIPHeader n
++restores outermost IP header
++.PD
+diff -Nurb click-1.6.0/inst/share/man/mann/elements.n click-1.6.0-27/inst/share/man/mann/elements.n
+--- click-1.6.0/inst/share/man/mann/elements.n 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/inst/share/man/mann/elements.n      2009-02-11 14:08:52.000000000 -0500
+@@ -0,0 +1,1323 @@
++.\" -*- mode: nroff -*-
++.\" Generated by 'click-elem2man'
++.de M
++.IR "\\$1" "(\\$2)\\$3"
++..
++.de RM
++.RI "\\$1" "\\$2" "(\\$3)\\$4"
++..
++.TH "ELEMENTS" n "11/Feb/2009" "Click"
++.SH "NAME"
++elements - documented Click element classes
++.SH "DESCRIPTION"
++This page lists all Click element classes that have manual page documentation.
++.\"html <p><a href="#BY+FUNCTION"><b>By Function</b></a>:
++.\"html <a href="#Basic+Sources+and+Sinks">Basic&nbsp;Sources&nbsp;and&nbsp;Sinks</a>&nbsp;- <a href="#Basic+Classification+and+Selection">Basic&nbsp;Classification&nbsp;and&nbsp;Selection</a>&nbsp;- <a href="#Basic+Packet+Transfer">Basic&nbsp;Packet&nbsp;Transfer</a>&nbsp;- <a href="#Counters">Counters</a>&nbsp;- <a href="#Timestamps">Timestamps</a>&nbsp;- <a href="#Basic+Packet+Modification">Basic&nbsp;Packet&nbsp;Modification</a>&nbsp;- <a href="#Packet+Storage">Packet&nbsp;Storage</a>&nbsp;- <a href="#Active+Queue+Management">Active&nbsp;Queue&nbsp;Management</a>&nbsp;- <a href="#Packet+Scheduling">Packet&nbsp;Scheduling</a>&nbsp;- <a href="#Traffic+Shaping">Traffic&nbsp;Shaping</a>&nbsp;- <a href="#Information+Elements">Information&nbsp;Elements</a>&nbsp;- <a href="#Network+Devices">Network&nbsp;Devices</a>&nbsp;- <a href="#Host+and+Socket+Communication">Host&nbsp;and&nbsp;Socket&nbsp;Communication</a>&nbsp;- <a href="#Ethernet">Ethernet</a>&nbsp;- <a href="#ARP">ARP</a>&nbsp;- <a href="#IPv4">IPv4</a>&nbsp;- <a href="#IPv4+Routing">IPv4&nbsp;Routing</a>&nbsp;- <a href="#ICMP">ICMP</a>&nbsp;- <a href="#Network+Address+Translation">Network&nbsp;Address&nbsp;Translation</a>&nbsp;- <a href="#TCP">TCP</a>&nbsp;- <a href="#UDP">UDP</a>&nbsp;- <a href="#Trace+Manipulation">Trace&nbsp;Manipulation</a>&nbsp;- <a href="#TCP/IP+Measurement">TCP/IP&nbsp;Measurement</a>&nbsp;- <a href="#CRCs">CRCs</a>&nbsp;- <a href="#Paint+Annotations">Paint&nbsp;Annotations</a>&nbsp;- <a href="#Annotations">Annotations</a>&nbsp;- <a href="#Debugging">Debugging</a>&nbsp;- <a href="#Control">Control</a>&nbsp;- <a href="#Multithreaded+Click">Multithreaded&nbsp;Click</a>&nbsp;- <a href="#devices">devices</a>&nbsp;- <a href="#Basic+Sources+and+Sinks">Basic&nbsp;Sources&nbsp;and&nbsp;Sinks</a>&nbsp;- <a href="#Basic+Classification+and+Selection">Basic&nbsp;Classification&nbsp;and&nbsp;Selection</a>&nbsp;- <a href="#Basic+Packet+Transfer">Basic&nbsp;Packet&nbsp;Transfer</a>&nbsp;- <a href="#Counters">Counters</a>&nbsp;- <a href="#Timestamps">Timestamps</a>&nbsp;- <a href="#Basic+Packet+Modification">Basic&nbsp;Packet&nbsp;Modification</a>&nbsp;- <a href="#Packet+Storage">Packet&nbsp;Storage</a>&nbsp;- <a href="#Active+Queue+Management">Active&nbsp;Queue&nbsp;Management</a>&nbsp;- <a href="#Packet+Scheduling">Packet&nbsp;Scheduling</a>&nbsp;- <a href="#Traffic+Shaping">Traffic&nbsp;Shaping</a>&nbsp;- <a href="#Information+Elements">Information&nbsp;Elements</a>&nbsp;- <a href="#Network+Devices">Network&nbsp;Devices</a>&nbsp;- <a href="#Host+and+Socket+Communication">Host&nbsp;and&nbsp;Socket&nbsp;Communication</a>&nbsp;- <a href="#Ethernet">Ethernet</a>&nbsp;- <a href="#ARP">ARP</a>&nbsp;- <a href="#IPv4">IPv4</a>&nbsp;- <a href="#IPv4+Routing">IPv4&nbsp;Routing</a>&nbsp;- <a href="#ICMP">ICMP</a>&nbsp;- <a href="#Network+Address+Translation">Network&nbsp;Address&nbsp;Translation</a>&nbsp;- <a href="#TCP">TCP</a>&nbsp;- <a href="#UDP">UDP</a>&nbsp;- <a href="#Trace+Manipulation">Trace&nbsp;Manipulation</a>&nbsp;- <a href="#TCP/IP+Measurement">TCP/IP&nbsp;Measurement</a>&nbsp;- <a href="#CRCs">CRCs</a>&nbsp;- <a href="#Paint+Annotations">Paint&nbsp;Annotations</a>&nbsp;- <a href="#Annotations">Annotations</a>&nbsp;- <a href="#Debugging">Debugging</a>&nbsp;- <a href="#Control">Control</a>&nbsp;- <a href="#Multithreaded+Click">Multithreaded&nbsp;Click</a>&nbsp;- <a href="#devices">devices</a><br>
++.\"html <a href="#ALPHABETICAL+LIST"><b>Alphabetical List</b></a></p>
++.SH "BY FUNCTION"
++.SS "Basic Sources and Sinks"
++.PP
++.PD 0
++.TP 20
++.M Discard n
++drops all packets
++.TP 20
++.M DiscardNoFree n
++drops all packets, but does not free any of them.
++.TP 20
++.M Idle n
++discards packets
++.TP 20
++.M InfiniteSource n
++generates packets whenever scheduled
++.TP 20
++.M RandomSource n
++generates random packets whenever scheduled
++.TP 20
++.M RatedSource n
++generates packets at specified rate
++.TP 20
++.M TimedSink n
++periodically pulls and drops a packet
++.TP 20
++.M TimedSource n
++periodically generates a packet
++.PD
++.SS "Basic Classification and Selection"
++.PP
++.PD 0
++.TP 20
++.M CheckLength n
++drops large packets
++.TP 20
++.M Classifier n
++classifies packets by contents
++.TP 20
++.M HashSwitch n
++classifies packets by hash of contents
++.TP 20
++.M RandomSample n
++samples packets with some probability
++.TP 20
++.M RandomSwitch n
++sends packets to random outputs
++.TP 20
++.M RoundRobinSwitch n
++sends packets to round-robin outputs
++.TP 20
++.M StaticSwitch n
++sends packet stream to fixed output
++.TP 20
++.M StrideSwitch n
++sends packets to stride-scheduled outputs
++.TP 20
++.M Suppressor n
++passes packets unchanged, optionally dropping some input ports
++.TP 20
++.M Switch n
++sends packet stream to settable output
++.PD
++.SS "Basic Packet Transfer"
++.PP
++.PD 0
++.TP 20
++.M Null n
++passes packets unchanged
++.TP 20
++.M Null1 n
++copy of 
++.M Null "n" 
++.TP 20
++.M PullNull n
++passes packets unchanged
++.TP 20
++.M PullTee n
++duplicates packets
++.TP 20
++.M PushNull n
++passes packets unchanged
++.TP 20
++.M Tee n
++duplicates packets
++.PD
++.SS "Counters"
++.PP
++.PD 0
++.TP 20
++.M AverageCounter n
++measures historical packet count and rate
++.TP 20
++.M Counter n
++measures packet count and rate
++.TP 20
++.M CycleCountAccum n
++collects differences in cycle counters
++.TP 20
++.M PerfCountAccum n
++collects differences in Pentium Pro performance metrics
++.TP 20
++.M PerfCountInfo n
++turn on Pentium Pro performance metrics
++.TP 20
++.M RoundTripCycleCount n
++measures round trip cycles on a push or pull path
++.TP 20
++.M SetCycleCount n
++stores cycle count in annotation
++.TP 20
++.M SetPerfCount n
++stores Pentium Pro performance metric in annotation
++.PD
++.SS "Timestamps"
++.PP
++.PD 0
++.TP 20
++.M SetTimestamp n
++store the time in the packet's timestamp annotation
++.PD
++.SS "Basic Packet Modification"
++.PP
++.PD 0
++.TP 20
++.M Align n
++aligns packet data
++.TP 20
++.M RandomBitErrors n
++changes packet data with some probability
++.TP 20
++.M StoreData n
++changes packet data
++.TP 20
++.M Strip n
++strips bytes from front of packets
++.TP 20
++.M StripToNetworkHeader n
++strips everything preceding network header
++.TP 20
++.M Truncate n
++limit packet length.
++.TP 20
++.M Unstrip n
++unstrips bytes from front of packets
++.PD
++.SS "Packet Storage"
++.PP
++.PD 0
++.TP 20
++.M FrontDropQueue n
++stores packets in drop-from-front FIFO queue
++.TP 20
++.M MixedQueue n
++stores packets in a FIFO/LIFO queue
++.TP 20
++.M NotifierQueue n
++stores packets in a FIFO queue
++.TP 20
++.M Queue n
++stores packets in a FIFO queue
++.TP 20
++.M SimpleQueue n
++stores packets in a FIFO queue
++.PD
++.SS "Active Queue Management"
++.PP
++.PD 0
++.TP 20
++.M AdaptiveRED n
++drops packets according to Adaptive RED
++.TP 20
++.M RED n
++drops packets according to RED
++.PD
++.SS "Packet Scheduling"
++.PP
++.PD 0
++.TP 20
++.M DRRSched n
++pulls from inputs with deficit round robin scheduling
++.TP 20
++.M PrioSched n
++pulls from priority-scheduled inputs
++.TP 20
++.M PullSwitch n
++forwards pull requests to settable input
++.TP 20
++.M RoundRobinSched n
++pulls from round-robin inputs
++.TP 20
++.M StaticPullSwitch n
++forwards pull requests to fixed input
++.TP 20
++.M StrideSched n
++pulls from stride-scheduled inputs
++.PD
++.SS "Traffic Shaping"
++.PP
++.PD 0
++.TP 20
++.M BandwidthMeter n
++classifies packet stream by arrival rate
++.TP 20
++.M BandwidthRatedSplitter n
++splits flow of packets at specified bandwidth rate
++.TP 20
++.M BandwidthRatedUnqueue n
++pull-to-push converter
++.TP 20
++.M BandwidthShaper n
++shapes traffic to maximum rate (bytes/s) 
++.TP 20
++.M Burster n
++pull-to-push converter
++.TP 20
++.M CompareBlock n
++drops packets out of rate range
++.TP 20
++.M DelayShaper n
++shapes traffic to meet delay requirements
++.TP 20
++.M DelayUnqueue n
++delay inducing pull-to-push converter
++.TP 20
++.M LinkUnqueue n
++link emulator
++.TP 20
++.M Meter n
++classifies packet stream by rate (pkt/s)
++.TP 20
++.M RatedSplitter n
++splits flow of packets at specified rate
++.TP 20
++.M RatedUnqueue n
++pull-to-push converter
++.TP 20
++.M Shaper n
++shapes traffic to maximum rate (pkt/s) 
++.TP 20
++.M Unqueue n
++pull-to-push converter
++.TP 20
++.M Unqueue2 n
++pull-to-push converter
++.PD
++.SS "Information Elements"
++.PP
++.PD 0
++.TP 20
++.M AddressInfo n
++specifies address information
++.TP 20
++.M AlignmentInfo n
++specifies alignment information
++.TP 20
++.M PortInfo n
++stores named TCP/UDP port information
++.TP 20
++.M ScheduleInfo n
++specifies scheduling parameters
++.TP 20
++.M ScheduleLinux n
++returns to Linux scheduler
++.PD
++.SS "Network Devices"
++.PP
++.PD 0
++.TP 20
++.M FromDevice n
++reads packets from network device (Linux kernel)
++.TP 20
++.M FromDevice.u n
++reads packets from network device (user-level)
++.TP 20
++.M PollDevice n
++polls packets from network device (kernel)
++.TP 20
++.M ToDevice n
++sends packets to network device (Linux kernel)
++.TP 20
++.M ToDevice.u n
++sends packets to network device (user-level)
++.PD
++.SS "Host and Socket Communication"
++.PP
++.PD 0
++.TP 20
++.M FromHost n
++reads packets from Linux
++.TP 20
++.M FromHost.u n
++interface to /dev/net/tun or ethertap (user-level)
++.TP 20
++.M FromRawSocket n
++reads raw IP packets from safe raw socket (user-level)
++.TP 20
++.M FromSocket n
++reads data from socket (user-level)
++.TP 20
++.M KernelFilter n
++block kernel from handling packets
++.TP 20
++.M KernelTap n
++interface to /dev/tap or ethertap (user-level)
++.TP 20
++.M KernelTun n
++interface to /dev/tun or ethertap (user-level)
++.TP 20
++.M RawSocket n
++transports raw IP packets via safe raw sockets (user-level)
++.TP 20
++.M Socket n
++a socket transport (user-level)
++.TP 20
++.M ToHost n
++sends packets to Linux
++.TP 20
++.M ToHost.u n
++sends packets to Linux via Universal TUN/TAP device.
++.TP 20
++.M ToHostSniffers n
++sends packets to Linux packet sniffers
++.TP 20
++.M ToRawSocket n
++sends IP packets through a safe raw socket (user-level)
++.TP 20
++.M ToSocket n
++sends data to socket (user-level)
++.PD
++.SS "Ethernet"
++.PP
++.PD 0
++.TP 20
++.M EnsureEther n
++ensures that IP packets are Ethernet encapsulated
++.TP 20
++.M EtherEncap n
++encapsulates packets in Ethernet header
++.TP 20
++.M EtherMirror n
++swaps Ethernet source and destination
++.TP 20
++.M HostEtherFilter n
++drops Ethernet packets sent to other machines
++.PD
++.SS "ARP"
++.PP
++.PD 0
++.TP 20
++.M ARPFaker n
++periodically generates an ARP reply
++.TP 20
++.M ARPPrint n
++pretty-prints ARP packets a la tcpdump
++.TP 20
++.M ARPQuerier n
++encapsulates IP packets in Ethernet headers found via ARP
++.TP 20
++.M ARPResponder n
++generates responses to ARP queries
++.TP 20
++.M CheckARPHeader n
++checks ARP header
++.PD
++.SS "IPv4"
++.PP
++.PD 0
++.TP 20
++.M CheckIPHeader n
++checks IP header
++.TP 20
++.M CheckIPHeader2 n
++checks IP header, no checksum
++.TP 20
++.M DecIPTTL n
++decrements IP time-to-live, drops dead packets
++.TP 20
++.M FixIPSrc n
++sets IP source field if requested by annotation
++.TP 20
++.M GetIPAddress n
++sets destination IP address annotation from packet data
++.TP 20
++.M IPClassifier n
++classifies IP packets by contents
++.TP 20
++.M IPEncap n
++encapsulates packets in static IP header
++.TP 20
++.M IPFilter n
++filters IP packets by contents
++.TP 20
++.M IPFragmenter n
++fragments large IP packets
++.TP 20
++.M IPGWOptions n
++processes router IP options
++.TP 20
++.M IPInputCombo n
++input combo for IP routing
++.TP 20
++.M IPMirror n
++swaps IP source and destination
++.TP 20
++.M IPNameInfo n
++stores name information about IP packets
++.TP 20
++.M IPOutputCombo n
++output combo for IP routing
++.TP 20
++.M IPPrint n
++pretty-prints IP packets
++.TP 20
++.M IPReassembler n
++Reassembles fragmented IP packets
++.TP 20
++.M MarkIPCE n
++sets IP packets' ECN field to Congestion Experienced
++.TP 20
++.M MarkIPHeader n
++sets IP header annotation
++.TP 20
++.M SetIPAddress n
++sets destination IP address annotations
++.TP 20
++.M SetIPChecksum n
++sets IP packets' checksums
++.TP 20
++.M SetIPDSCP n
++sets IP packets' DSCP fields
++.TP 20
++.M SetRandIPAddress n
++sets destination IP address annotations randomly
++.TP 20
++.M StoreIPAddress n
++stores IP address in packet
++.TP 20
++.M StripIPHeader n
++strips outermost IP header
++.TP 20
++.M UnstripIPHeader n
++restores outermost IP header
++.PD
++.SS "IPv4 Routing"
++.PP
++.PD 0
++.TP 20
++.M DirectIPLookup n
++IP routing lookup using direct-indexed tables
++.TP 20
++.M IPRouteTable n
++IP routing table superclass
++.TP 20
++.M LinearIPLookup n
++simple IP routing table
++.TP 20
++.M LinuxIPLookup n
++interface to Linux's routing table
++.TP 20
++.M RadixIPLookup n
++IP lookup using a radix trie
++.TP 20
++.M RangeIPLookup n
++IP routing lookup through binary search in a very compact table
++.TP 20
++.M RIPSend n
++periodically generates specified RIP II packet
++.TP 20
++.M SortedIPLookup n " (deprecated)"
++simple IP routing table
++.TP 20
++.M StaticIPLookup n
++simple static IP routing table
++.PD
++.SS "ICMP"
++.PP
++.PD 0
++.TP 20
++.M CheckICMPHeader n
++checks ICMP header on ICMP packets
++.TP 20
++.M ICMPError n
++generates ICMP error packets
++.TP 20
++.M ICMPPingEncap n
++encapsulates packets in ICMP ping headers
++.TP 20
++.M ICMPPingResponder n
++responds to ICMP echo requests
++.TP 20
++.M ICMPPingSource n
++periodically sends ICMP echo requests
++.PD
++.SS "Network Address Translation"
++.PP
++.PD 0
++.TP 20
++.M FTPPortMapper n
++manipulates 
++.M IPRewriter "n" 
++for FTP
++.TP 20
++.M ICMPPingRewriter n
++rewrites ICMP echo requests and replies
++.TP 20
++.M ICMPRewriter n
++rewrites ICMP packets based on IP rewriter mappings
++.TP 20
++.M IPAddrPairRewriter n
++rewrites IP packets' addresses by address pair
++.TP 20
++.M IPAddrRewriter n
++rewrites IP packets' addresses
++.TP 20
++.M IPRewriter n
++rewrites TCP/UDP packets' addresses and ports
++.TP 20
++.M IPRewriterPatterns n
++specifies shared 
++.M IPRewriter n 
++patterns
++.TP 20
++.M RoundRobinIPMapper n
++round-robin mapper for 
++.M IPRewriter n 
++.TP 20
++.M SourceIPHashMapper n
++Source IP Hash mapper for 
++.M IPRewriter n 
++.TP 20
++.M TCPRewriter n
++rewrites TCP packets' addresses, ports, and sequence numbers
++.PD
++.SS "TCP"
++.PP
++.PD 0
++.TP 20
++.M CheckTCPHeader n
++checks TCP header on TCP/IP packets
++.TP 20
++.M FastTCPFlows n
++creates packets flows with static TCP/IP/Ethernet headers
++.TP 20
++.M RFC2507Comp n
++RFC2507 IPv4/TCP header compressor.
++.TP 20
++.M RFC2507Decomp n
++RFC2507 IPv4/TCP header decompressor.
++.TP 20
++.M SetTCPChecksum n
++sets TCP packets' checksums
++.PD
++.SS "UDP"
++.PP
++.PD 0
++.TP 20
++.M CheckUDPHeader n
++checks UDP header on UDP/IP packets
++.TP 20
++.M DynamicUDPIPEncap n
++encapsulates packets in dynamic UDP/IP headers
++.TP 20
++.M FastUDPFlows n
++creates packets flows with static UDP/IP/Ethernet headers
++.TP 20
++.M FastUDPSource n
++creates packets with static UDP/IP/Ethernet headers
++.TP 20
++.M SetUDPChecksum n
++sets UDP packets' checksums
++.TP 20
++.M UDPIPEncap n
++encapsulates packets in static UDP/IP headers
++.PD
++.SS "Trace Manipulation"
++.PP
++.PD 0
++.TP 20
++.M FromDump n
++reads packets from a tcpdump file
++.TP 20
++.M ToDump n
++writes packets to a tcpdump file
++.PD
++.SS "TCP/IP Measurement"
++.PP
++.PD 0
++.TP 20
++.M IPRateMonitor n
++measures coming and going IP traffic rates
++.PD
++.SS "CRCs"
++.PP
++.PD 0
++.TP 20
++.M CheckCRC32 n
++checks packet CRC32s
++.TP 20
++.M SetCRC32 n
++calculates CRC32 and prepends to packet
++.PD
++.SS "Paint Annotations"
++.PP
++.PD 0
++.TP 20
++.M CheckPaint n
++checks packets' paint annotation
++.TP 20
++.M Paint n
++sets packet paint annotations
++.TP 20
++.M PaintSwitch n
++sends packet stream to output chosen per-packet
++.TP 20
++.M PaintTee n
++duplicates packets with given paint annotation
++.PD
++.SS "Annotations"
++.PP
++.PD 0
++.TP 20
++.M DropBroadcasts n
++drops link-level broadcast and multicast packets
++.TP 20
++.M SetAnnoByte n
++sets packet user annotations
++.TP 20
++.M SetPacketType n
++sets packet type annotation
++.PD
++.SS "Debugging"
++.PP
++.PD 0
++.TP 20
++.M Error n
++always fails
++.TP 20
++.M Print n
++prints packet contents
++.PD
++.SS "Control"
++.PP
++.PD 0
++.TP 20
++.M ChangeUID n
++relinquish root privilege
++.TP 20
++.M ChatterSocket n
++reports chatter messages to connected sockets
++.TP 20
++.M ControlSocket n
++opens control sockets for other programs
++.TP 20
++.M DriverManager n
++a 
++.M Script "n" 
++that manages driver stop events
++.TP 20
++.M KernelHandlerProxy n
++proxies kernel module handlers at user level
++.TP 20
++.M Message n
++prints a message on configuration
++.TP 20
++.M PokeHandlers n " (deprecated)"
++calls write handlers at specified times
++.TP 20
++.M ProgressBar n
++prints a progress bar to standard error
++.TP 20
++.M QuitWatcher n
++stops router processing
++.TP 20
++.M Script n
++script a Click router configuration
++.PD
++.SS "Multithreaded Click"
++.PP
++.PD 0
++.TP 20
++.M CPUQueue n
++stores packets in FIFO queues.
++.TP 20
++.M CPUSwitch n
++classifies packets by cpu
++.TP 20
++.M LookupIPRouteMP n
++simple static IP routing table
++.TP 20
++.M MSQueue n
++stores packets in a FIFO queue
++.TP 20
++.M SpinlockAcquire n
++acquires spinlock
++.TP 20
++.M SpinlockInfo n
++specifies names of spinlocks
++.TP 20
++.M SpinlockRelease n
++releases spinlock
++.TP 20
++.M StaticThreadSched n
++specifies element and thread scheduling parameters
++.PD
++.SS "devices"
++.PP
++.PD 0
++.TP 20
++.M UMLSwitch n
++Connects to a UML switch daemon
++.PD
++.SH "ALPHABETICAL LIST"
++.PP
++.PD 0
++.TP 20
++.M AdaptiveRED n
++drops packets according to Adaptive RED
++.TP 20
++.M AddressInfo n
++specifies address information
++.TP 20
++.M Align n
++aligns packet data
++.TP 20
++.M AlignmentInfo n
++specifies alignment information
++.TP 20
++.M ARPFaker n
++periodically generates an ARP reply
++.TP 20
++.M ARPPrint n
++pretty-prints ARP packets a la tcpdump
++.TP 20
++.M ARPQuerier n
++encapsulates IP packets in Ethernet headers found via ARP
++.TP 20
++.M ARPResponder n
++generates responses to ARP queries
++.TP 20
++.M AverageCounter n
++measures historical packet count and rate
++.TP 20
++.M BandwidthMeter n
++classifies packet stream by arrival rate
++.TP 20
++.M BandwidthRatedSplitter n
++splits flow of packets at specified bandwidth rate
++.TP 20
++.M BandwidthRatedUnqueue n
++pull-to-push converter
++.TP 20
++.M BandwidthShaper n
++shapes traffic to maximum rate (bytes/s) 
++.TP 20
++.M Burster n
++pull-to-push converter
++.TP 20
++.M ChangeUID n
++relinquish root privilege
++.TP 20
++.M ChatterSocket n
++reports chatter messages to connected sockets
++.TP 20
++.M CheckARPHeader n
++checks ARP header
++.TP 20
++.M CheckCRC32 n
++checks packet CRC32s
++.TP 20
++.M CheckICMPHeader n
++checks ICMP header on ICMP packets
++.TP 20
++.M CheckIPHeader n
++checks IP header
++.TP 20
++.M CheckIPHeader2 n
++checks IP header, no checksum
++.TP 20
++.M CheckLength n
++drops large packets
++.TP 20
++.M CheckPaint n
++checks packets' paint annotation
++.TP 20
++.M CheckTCPHeader n
++checks TCP header on TCP/IP packets
++.TP 20
++.M CheckUDPHeader n
++checks UDP header on UDP/IP packets
++.TP 20
++.M Classifier n
++classifies packets by contents
++.TP 20
++.M CompareBlock n
++drops packets out of rate range
++.TP 20
++.M ControlSocket n
++opens control sockets for other programs
++.TP 20
++.M Counter n
++measures packet count and rate
++.TP 20
++.M CPUQueue n
++stores packets in FIFO queues.
++.TP 20
++.M CPUSwitch n
++classifies packets by cpu
++.TP 20
++.M CycleCountAccum n
++collects differences in cycle counters
++.TP 20
++.M DecIPTTL n
++decrements IP time-to-live, drops dead packets
++.TP 20
++.M DelayShaper n
++shapes traffic to meet delay requirements
++.TP 20
++.M DelayUnqueue n
++delay inducing pull-to-push converter
++.TP 20
++.M DirectIPLookup n
++IP routing lookup using direct-indexed tables
++.TP 20
++.M Discard n
++drops all packets
++.TP 20
++.M DiscardNoFree n
++drops all packets, but does not free any of them.
++.TP 20
++.M DriverManager n
++a 
++.M Script "n" 
++that manages driver stop events
++.TP 20
++.M DropBroadcasts n
++drops link-level broadcast and multicast packets
++.TP 20
++.M DRRSched n
++pulls from inputs with deficit round robin scheduling
++.TP 20
++.M DynamicUDPIPEncap n
++encapsulates packets in dynamic UDP/IP headers
++.TP 20
++.M EnsureEther n
++ensures that IP packets are Ethernet encapsulated
++.TP 20
++.M Error n
++always fails
++.TP 20
++.M EtherEncap n
++encapsulates packets in Ethernet header
++.TP 20
++.M EtherMirror n
++swaps Ethernet source and destination
++.TP 20
++.M FastTCPFlows n
++creates packets flows with static TCP/IP/Ethernet headers
++.TP 20
++.M FastUDPFlows n
++creates packets flows with static UDP/IP/Ethernet headers
++.TP 20
++.M FastUDPSource n
++creates packets with static UDP/IP/Ethernet headers
++.TP 20
++.M FixIPSrc n
++sets IP source field if requested by annotation
++.TP 20
++.M FromDevice n
++reads packets from network device (Linux kernel)
++.TP 20
++.M FromDevice.u n
++reads packets from network device (user-level)
++.TP 20
++.M FromDump n
++reads packets from a tcpdump file
++.TP 20
++.M FromHost n
++reads packets from Linux
++.TP 20
++.M FromHost.u n
++interface to /dev/net/tun or ethertap (user-level)
++.TP 20
++.M FromRawSocket n
++reads raw IP packets from safe raw socket (user-level)
++.TP 20
++.M FromSocket n
++reads data from socket (user-level)
++.TP 20
++.M FrontDropQueue n
++stores packets in drop-from-front FIFO queue
++.TP 20
++.M FTPPortMapper n
++manipulates 
++.M IPRewriter "n" 
++for FTP
++.TP 20
++.M GetIPAddress n
++sets destination IP address annotation from packet data
++.TP 20
++.M HashSwitch n
++classifies packets by hash of contents
++.TP 20
++.M HostEtherFilter n
++drops Ethernet packets sent to other machines
++.TP 20
++.M ICMPError n
++generates ICMP error packets
++.TP 20
++.M ICMPPingEncap n
++encapsulates packets in ICMP ping headers
++.TP 20
++.M ICMPPingResponder n
++responds to ICMP echo requests
++.TP 20
++.M ICMPPingRewriter n
++rewrites ICMP echo requests and replies
++.TP 20
++.M ICMPPingSource n
++periodically sends ICMP echo requests
++.TP 20
++.M ICMPRewriter n
++rewrites ICMP packets based on IP rewriter mappings
++.TP 20
++.M Idle n
++discards packets
++.TP 20
++.M InfiniteSource n
++generates packets whenever scheduled
++.TP 20
++.M IPAddrPairRewriter n
++rewrites IP packets' addresses by address pair
++.TP 20
++.M IPAddrRewriter n
++rewrites IP packets' addresses
++.TP 20
++.M IPClassifier n
++classifies IP packets by contents
++.TP 20
++.M IPEncap n
++encapsulates packets in static IP header
++.TP 20
++.M IPFilter n
++filters IP packets by contents
++.TP 20
++.M IPFragmenter n
++fragments large IP packets
++.TP 20
++.M IPGWOptions n
++processes router IP options
++.TP 20
++.M IPInputCombo n
++input combo for IP routing
++.TP 20
++.M IPMirror n
++swaps IP source and destination
++.TP 20
++.M IPNameInfo n
++stores name information about IP packets
++.TP 20
++.M IPOutputCombo n
++output combo for IP routing
++.TP 20
++.M IPPrint n
++pretty-prints IP packets
++.TP 20
++.M IPRateMonitor n
++measures coming and going IP traffic rates
++.TP 20
++.M IPReassembler n
++Reassembles fragmented IP packets
++.TP 20
++.M IPRewriter n
++rewrites TCP/UDP packets' addresses and ports
++.TP 20
++.M IPRewriterPatterns n
++specifies shared 
++.M IPRewriter n 
++patterns
++.TP 20
++.M IPRouteTable n
++IP routing table superclass
++.TP 20
++.M KernelFilter n
++block kernel from handling packets
++.TP 20
++.M KernelHandlerProxy n
++proxies kernel module handlers at user level
++.TP 20
++.M KernelTap n
++interface to /dev/tap or ethertap (user-level)
++.TP 20
++.M KernelTun n
++interface to /dev/tun or ethertap (user-level)
++.TP 20
++.M LinearIPLookup n
++simple IP routing table
++.TP 20
++.M LinkUnqueue n
++link emulator
++.TP 20
++.M LinuxIPLookup n
++interface to Linux's routing table
++.TP 20
++.M LookupIPRouteMP n
++simple static IP routing table
++.TP 20
++.M MarkIPCE n
++sets IP packets' ECN field to Congestion Experienced
++.TP 20
++.M MarkIPHeader n
++sets IP header annotation
++.TP 20
++.M Message n
++prints a message on configuration
++.TP 20
++.M Meter n
++classifies packet stream by rate (pkt/s)
++.TP 20
++.M MixedQueue n
++stores packets in a FIFO/LIFO queue
++.TP 20
++.M MSQueue n
++stores packets in a FIFO queue
++.TP 20
++.M NotifierQueue n
++stores packets in a FIFO queue
++.TP 20
++.M Null n
++passes packets unchanged
++.TP 20
++.M Null1 n
++copy of 
++.M Null "n" 
++.TP 20
++.M Paint n
++sets packet paint annotations
++.TP 20
++.M PaintSwitch n
++sends packet stream to output chosen per-packet
++.TP 20
++.M PaintTee n
++duplicates packets with given paint annotation
++.TP 20
++.M PerfCountAccum n
++collects differences in Pentium Pro performance metrics
++.TP 20
++.M PerfCountInfo n
++turn on Pentium Pro performance metrics
++.TP 20
++.M PokeHandlers n " (deprecated)"
++calls write handlers at specified times
++.TP 20
++.M PollDevice n
++polls packets from network device (kernel)
++.TP 20
++.M PortInfo n
++stores named TCP/UDP port information
++.TP 20
++.M Print n
++prints packet contents
++.TP 20
++.M PrioSched n
++pulls from priority-scheduled inputs
++.TP 20
++.M ProgressBar n
++prints a progress bar to standard error
++.TP 20
++.M PullNull n
++passes packets unchanged
++.TP 20
++.M PullSwitch n
++forwards pull requests to settable input
++.TP 20
++.M PullTee n
++duplicates packets
++.TP 20
++.M PushNull n
++passes packets unchanged
++.TP 20
++.M Queue n
++stores packets in a FIFO queue
++.TP 20
++.M QuitWatcher n
++stops router processing
++.TP 20
++.M RadixIPLookup n
++IP lookup using a radix trie
++.TP 20
++.M RandomBitErrors n
++changes packet data with some probability
++.TP 20
++.M RandomSample n
++samples packets with some probability
++.TP 20
++.M RandomSource n
++generates random packets whenever scheduled
++.TP 20
++.M RandomSwitch n
++sends packets to random outputs
++.TP 20
++.M RangeIPLookup n
++IP routing lookup through binary search in a very compact table
++.TP 20
++.M RatedSource n
++generates packets at specified rate
++.TP 20
++.M RatedSplitter n
++splits flow of packets at specified rate
++.TP 20
++.M RatedUnqueue n
++pull-to-push converter
++.TP 20
++.M RawSocket n
++transports raw IP packets via safe raw sockets (user-level)
++.TP 20
++.M RED n
++drops packets according to RED
++.TP 20
++.M RFC2507Comp n
++RFC2507 IPv4/TCP header compressor.
++.TP 20
++.M RFC2507Decomp n
++RFC2507 IPv4/TCP header decompressor.
++.TP 20
++.M RIPSend n
++periodically generates specified RIP II packet
++.TP 20
++.M RoundRobinIPMapper n
++round-robin mapper for 
++.M IPRewriter n 
++.TP 20
++.M RoundRobinSched n
++pulls from round-robin inputs
++.TP 20
++.M RoundRobinSwitch n
++sends packets to round-robin outputs
++.TP 20
++.M RoundTripCycleCount n
++measures round trip cycles on a push or pull path
++.TP 20
++.M ScheduleInfo n
++specifies scheduling parameters
++.TP 20
++.M ScheduleLinux n
++returns to Linux scheduler
++.TP 20
++.M Script n
++script a Click router configuration
++.TP 20
++.M SetAnnoByte n
++sets packet user annotations
++.TP 20
++.M SetCRC32 n
++calculates CRC32 and prepends to packet
++.TP 20
++.M SetCycleCount n
++stores cycle count in annotation
++.TP 20
++.M SetIPAddress n
++sets destination IP address annotations
++.TP 20
++.M SetIPChecksum n
++sets IP packets' checksums
++.TP 20
++.M SetIPDSCP n
++sets IP packets' DSCP fields
++.TP 20
++.M SetPacketType n
++sets packet type annotation
++.TP 20
++.M SetPerfCount n
++stores Pentium Pro performance metric in annotation
++.TP 20
++.M SetRandIPAddress n
++sets destination IP address annotations randomly
++.TP 20
++.M SetTCPChecksum n
++sets TCP packets' checksums
++.TP 20
++.M SetTimestamp n
++store the time in the packet's timestamp annotation
++.TP 20
++.M SetUDPChecksum n
++sets UDP packets' checksums
++.TP 20
++.M Shaper n
++shapes traffic to maximum rate (pkt/s) 
++.TP 20
++.M SimpleQueue n
++stores packets in a FIFO queue
++.TP 20
++.M Socket n
++a socket transport (user-level)
++.TP 20
++.M SortedIPLookup n " (deprecated)"
++simple IP routing table
++.TP 20
++.M SourceIPHashMapper n
++Source IP Hash mapper for 
++.M IPRewriter n 
++.TP 20
++.M SpinlockAcquire n
++acquires spinlock
++.TP 20
++.M SpinlockInfo n
++specifies names of spinlocks
++.TP 20
++.M SpinlockRelease n
++releases spinlock
++.TP 20
++.M StaticIPLookup n
++simple static IP routing table
++.TP 20
++.M StaticPullSwitch n
++forwards pull requests to fixed input
++.TP 20
++.M StaticSwitch n
++sends packet stream to fixed output
++.TP 20
++.M StaticThreadSched n
++specifies element and thread scheduling parameters
++.TP 20
++.M StoreData n
++changes packet data
++.TP 20
++.M StoreIPAddress n
++stores IP address in packet
++.TP 20
++.M StrideSched n
++pulls from stride-scheduled inputs
++.TP 20
++.M StrideSwitch n
++sends packets to stride-scheduled outputs
++.TP 20
++.M Strip n
++strips bytes from front of packets
++.TP 20
++.M StripIPHeader n
++strips outermost IP header
++.TP 20
++.M StripToNetworkHeader n
++strips everything preceding network header
++.TP 20
++.M Suppressor n
++passes packets unchanged, optionally dropping some input ports
++.TP 20
++.M Switch n
++sends packet stream to settable output
++.TP 20
++.M TCPRewriter n
++rewrites TCP packets' addresses, ports, and sequence numbers
++.TP 20
++.M Tee n
++duplicates packets
++.TP 20
++.M TimedSink n
++periodically pulls and drops a packet
++.TP 20
++.M TimedSource n
++periodically generates a packet
++.TP 20
++.M ToDevice n
++sends packets to network device (Linux kernel)
++.TP 20
++.M ToDevice.u n
++sends packets to network device (user-level)
++.TP 20
++.M ToDump n
++writes packets to a tcpdump file
++.TP 20
++.M ToHost n
++sends packets to Linux
++.TP 20
++.M ToHost.u n
++sends packets to Linux via Universal TUN/TAP device.
++.TP 20
++.M ToHostSniffers n
++sends packets to Linux packet sniffers
++.TP 20
++.M ToRawSocket n
++sends IP packets through a safe raw socket (user-level)
++.TP 20
++.M ToSocket n
++sends data to socket (user-level)
++.TP 20
++.M Truncate n
++limit packet length.
++.TP 20
++.M UDPIPEncap n
++encapsulates packets in static UDP/IP headers
++.TP 20
++.M UMLSwitch n
++Connects to a UML switch daemon
++.TP 20
++.M Unqueue n
++pull-to-push converter
++.TP 20
++.M Unqueue2 n
++pull-to-push converter
++.TP 20
++.M Unstrip n
++unstrips bytes from front of packets
++.TP 20
++.M UnstripIPHeader n
++restores outermost IP header
++.PD
+Files click-1.6.0/inst.tar.gz and click-1.6.0-27/inst.tar.gz differ
+diff -Nurb click-1.6.0/installch click-1.6.0-27/installch
+--- click-1.6.0/installch      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/installch   2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,66 @@
++#! /bin/sh
++#
++# installch - install a program, script, or datafile if changed
++#
++# Copyright (c) 2006 Mazu Networks, Inc.
++#
++# Permission is hereby granted, free of charge, to any person obtaining a
++# copy of this software and associated documentation files (the "Software"),
++# to deal in the Software without restriction, subject to the conditions
++# listed in the Click LICENSE file. These conditions include: you must
++# preserve this copyright notice, and you cannot mention the copyright
++# holders in advertising related to the Software without their permission.
++# The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++# notice is a summary of the Click LICENSE file; the license in that file is
++# legally binding.
++
++install=${INSTALL-/usr/bin/install -c}
++src=
++dst=
++multi=
++mode=0755
++user=`id -u`
++group=`id -g`
++
++while [ x"$1" != x ]; do
++    case $1 in
++    -m)
++      mode="$2"; install="$install -m $2"; shift; shift; continue;;
++    -*)
++      echo "installch: unknown option $1" 1>&2; exit 1;;
++    *)
++      if [ x"$src" = x ]; then
++          src="$1"
++      elif [ x"$dst" = x ]; then
++          dst="$1"
++      else
++          multi=1; src="$src $dst"; dst="$1"
++      fi
++      shift; continue;;
++    esac
++done
++
++if [ x"$dst" = x ]; then
++    echo "installch: too few arguments" 1>&2; exit 1
++fi
++
++if [ x"$multi" = 1 -a ! -d "$dst" ]; then
++    echo "installch: last argument must be directory" 1>&2; exit 1
++fi
++
++doinstall () {
++    while [ x"$1" != x ]; do
++      if [ -d "$dst" ]; then d="$dst/"`basename "$1"`; else d="$dst"; fi
++      if [ -r "$d" ] && cmp "$1" "$d" >/dev/null; then
++          chmod $mode "$d" || exit 1
++          chgrp $group "$d" || exit 1
++      else
++          $install "$1" "$d" || exit 1
++      fi
++      shift
++    done
++}
++
++doinstall $src
++
++exit 0
+diff -Nurb click-1.6.0/lib/bitvector.cc.orig click-1.6.0-27/lib/bitvector.cc.orig
+--- click-1.6.0/lib/bitvector.cc.orig  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/lib/bitvector.cc.orig       2007-07-16 19:47:50.000000000 -0400
+@@ -0,0 +1,216 @@
++// -*- c-basic-offset: 4; related-file-name: "../include/click/bitvector.hh" -*-
++/*
++ * bitvector.{cc,hh} -- generic bit vector class
++ * Eddie Kohler
++ *
++ * Copyright (c) 1999-2000 Massachusetts Institute of Technology
++ * Copyright (c) 2002 International Computer Science Institute
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, subject to the conditions
++ * listed in the Click LICENSE file. These conditions include: you must
++ * preserve this copyright notice, and you cannot mention the copyright
++ * holders in advertising related to the Software without their permission.
++ * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++ * notice is a summary of the Click LICENSE file; the license in that file is
++ * legally binding.
++ */
++
++#include <click/config.h>
++#include <click/bitvector.hh>
++CLICK_DECLS
++
++void
++Bitvector::finish_copy_constructor(const Bitvector &o)
++{
++    int nn = max_word();
++    _data = new uint32_t[nn + 1];
++    for (int i = 0; i <= nn; i++)
++      _data[i] = o._data[i];
++}
++
++void
++Bitvector::clear()
++{
++    int nn = max_word();
++    for (int i = 0; i <= nn; i++)
++      _data[i] = 0;
++}
++
++bool
++Bitvector::zero() const
++{
++    int nn = max_word();
++    for (int i = 0; i <= nn; i++)
++      if (_data[i])
++          return false;
++    return true;
++}
++
++void
++Bitvector::resize_to_max(int new_max, bool valid_n)
++{
++    int want_u = (new_max >> 5) + 1;
++    int have_u = (valid_n ? max_word() : MAX_INLINE_WORD) + 1;
++    if (have_u < MAX_INLINE_WORD + 1)
++      have_u = MAX_INLINE_WORD + 1;
++    if (want_u <= have_u)
++      return;
++
++    uint32_t *new_data = new uint32_t[want_u];
++    memcpy(new_data, _data, have_u * sizeof(uint32_t));
++    memset(new_data + have_u, 0, (want_u - have_u) * sizeof(uint32_t));
++    if (_data != &_f0)
++      delete[] _data;
++    _data = new_data;
++}
++
++void
++Bitvector::clear_last()
++{
++    if ((_max&0x1F) != 0x1F) {
++      uint32_t mask = (1U << ((_max&0x1F)+1)) - 1;
++      _data[_max>>5] &= mask;
++    } else if (_max < 0)
++      _data[0] = 0;
++}
++
++Bitvector &
++Bitvector::operator=(const Bitvector &o)
++{
++#if CLICK_LINUXMODULE || CLICK_BSDMODULE
++    // We might not have been initialized properly.
++    if (!_data)
++      _max = -1, _data = &_f0;
++#endif
++    if (&o == this)
++      /* nada */;
++    else if (o.max_word() <= MAX_INLINE_WORD)
++      memcpy(_data, o._data, 8);
++    else {
++      if (_data != &_f0)
++          delete[] _data;
++      _data = new uint32_t[o.max_word() + 1];
++      memcpy(_data, o._data, (o.max_word() + 1) * sizeof(uint32_t));
++    }
++    _max = o._max;
++    return *this;
++}
++
++Bitvector &
++Bitvector::assign(int n, bool value)
++{
++    resize(n);
++    uint32_t bits = (value ? 0xFFFFFFFFU : 0U);
++    int copy = max_word();
++    for (int i = 0; i <= copy; i++)
++      _data[i] = bits;
++    if (value)
++      clear_last();
++    return *this;
++}
++
++void
++Bitvector::negate()
++{
++    int nn = max_word();
++    uint32_t *data = _data;
++    for (int i = 0; i <= nn; i++)
++      data[i] = ~data[i];
++    clear_last();
++}
++
++Bitvector &
++Bitvector::operator&=(const Bitvector &o)
++{
++    assert(o._max == _max);
++    int nn = max_word();
++    uint32_t *data = _data, *o_data = o._data;
++    for (int i = 0; i <= nn; i++)
++      data[i] &= o_data[i];
++    return *this;
++}
++
++Bitvector &
++Bitvector::operator|=(const Bitvector &o)
++{
++    if (o._max > _max)
++      resize(o._max + 1);
++    int nn = max_word();
++    uint32_t *data = _data, *o_data = o._data;
++    for (int i = 0; i <= nn; i++)
++      data[i] |= o_data[i];
++    return *this;
++}
++
++Bitvector &
++Bitvector::operator^=(const Bitvector &o)
++{
++    assert(o._max == _max);
++    int nn = max_word();
++    uint32_t *data = _data, *o_data = o._data;
++    for (int i = 0; i <= nn; i++)
++      data[i] ^= o_data[i];
++    return *this;
++}
++
++void
++Bitvector::or_at(const Bitvector &o, int offset)
++{
++    assert(offset >= 0 && offset + o._max <= _max);
++    uint32_t bits_1st = offset&0x1F;
++    int my_pos = offset>>5;
++    int o_pos = 0;
++    int my_max_word = max_word();
++    int o_max_word = o.max_word();
++    uint32_t *data = _data;
++    uint32_t *o_data = o._data;
++
++    while (true) {
++      uint32_t val = o_data[o_pos];
++      data[my_pos] |= (val << bits_1st);
++
++      my_pos++;
++      if (my_pos > my_max_word)
++          break;
++    
++      if (bits_1st)
++          data[my_pos] |= (val >> (32 - bits_1st));
++    
++      o_pos++;
++      if (o_pos > o_max_word)
++          break;
++    }
++}
++
++void
++Bitvector::or_with_difference(const Bitvector &o, Bitvector &diff)
++{
++    if (o._max > _max)
++      resize(o._max + 1);
++    if (diff._max > _max)
++      diff.resize(o._max + 1);
++    int nn = max_word();
++    uint32_t *data = _data, *diff_data = diff._data;
++    const uint32_t *o_data = o._data;
++    for (int i = 0; i <= nn; i++) {
++      diff_data[i] = o_data[i] & ~data[i];
++      data[i] |= o_data[i];
++    }
++}
++
++bool
++Bitvector::nonzero_intersection(const Bitvector &o) const
++{
++    int nn = o.max_word();
++    if (nn > max_word())
++      nn = max_word();
++    const uint32_t *data = _data, *o_data = o._data;
++    for (int i = 0; i <= nn; i++)
++      if (data[i] & o_data[i])
++          return true;
++    return false;
++}
++
++CLICK_ENDDECLS
+diff -Nurb click-1.6.0/lib/in_cksum.c.orig click-1.6.0-27/lib/in_cksum.c.orig
+--- click-1.6.0/lib/in_cksum.c.orig    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/lib/in_cksum.c.orig 2007-07-16 19:47:50.000000000 -0400
+@@ -0,0 +1,111 @@
++/* -*- c-basic-offset: 4 -*-
++ *
++ * in_cksum.c -- Internet checksum
++ * borrowed, with bug fixes, from one of the BSDs
++ */
++
++#include <click/config.h>
++#if CLICK_BSDMODULE
++# include <sys/param.h>
++# include <sys/proc.h>
++#endif
++#include <clicknet/ip.h>
++#if CLICK_LINUXMODULE
++# include <linux/string.h>
++#else
++# include <string.h>
++#endif
++
++#if !CLICK_LINUXMODULE
++uint16_t
++click_in_cksum(const unsigned char *addr, int len)
++{
++    int nleft = len;
++    const uint16_t *w = (const uint16_t *)addr;
++    uint32_t sum = 0;
++    uint16_t answer = 0;
++    
++    /*
++     * Our algorithm is simple, using a 32 bit accumulator (sum), we add
++     * sequential 16 bit words to it, and at the end, fold back all the
++     * carry bits from the top 16 bits into the lower 16 bits.
++     */
++    while (nleft > 1)  {
++      sum += *w++;
++      nleft -= 2;
++    }
++  
++    /* mop up an odd byte, if necessary */
++    if (nleft == 1) {
++      *(unsigned char *)(&answer) = *(const unsigned char *)w ;
++      sum += answer;
++    }
++  
++    /* add back carry outs from top 16 bits to low 16 bits */
++    sum = (sum & 0xffff) + (sum >> 16);
++    sum += (sum >> 16);
++    /* guaranteed now that the lower 16 bits of sum are correct */
++  
++    answer = ~sum;              /* truncate to 16 bits */
++    return answer;
++}
++
++uint16_t
++click_in_cksum_pseudohdr_raw(uint32_t csum, uint32_t src, uint32_t dst, int proto, int packet_len)
++{
++    assert(csum <= 0xFFFF);
++    csum = ~csum & 0xFFFF;
++# ifdef __i386__
++    // borrowed from Linux
++    __asm__("\n\
++      addl %1, %0\n\
++      adcl %2, %0\n\
++      adcl %3, %0\n\
++      adcl $0, %0\n"
++          : "=r" (csum)
++          : "g" (src), "g" (dst), "g" ((htons(packet_len) << 16) + (proto << 8)), "0" (csum));
++    __asm__("\n\
++      addl %1, %0\n\
++      adcl $0xffff, %0\n"
++          : "=r" (csum)
++          : "r" (csum << 16), "0" (csum & 0xFFFF0000));
++    return (~csum) >> 16;
++# else
++    csum += (src & 0xffff) + (src >> 16);
++    csum += (dst & 0xffff) + (dst >> 16);
++    csum += htons(packet_len) + htons(proto);
++    csum = (csum & 0xffff) + (csum >> 16);
++    return ~(csum + (csum >> 16)) & 0xFFFF;
++# endif
++}
++#endif
++
++uint16_t
++click_in_cksum_pseudohdr_hard(uint32_t csum, const struct click_ip *iph, int packet_len)
++{
++    const uint8_t *opt = (const uint8_t *)(iph + 1);
++    const uint8_t *end_opt = ((const uint8_t *)iph) + (iph->ip_hl << 2);
++    while (opt < end_opt) {
++      /* check one-byte options */
++      if (*opt == IPOPT_NOP) {
++          opt++;
++          continue;
++      } else if (*opt == IPOPT_EOL)
++          break;
++
++      /* check option length */
++      if (opt + 1 >= end_opt || opt[1] < 2 || opt + opt[1] > end_opt)
++          break;
++
++      /* grab correct final destination from source routing option */
++      if ((*opt == IPOPT_SSRR || *opt == IPOPT_LSRR) && opt[1] >= 7) {
++          uint32_t daddr;
++          memcpy(&daddr, opt + opt[1] - 4, 4);
++          return click_in_cksum_pseudohdr_raw(csum, iph->ip_src.s_addr, daddr, iph->ip_p, packet_len);
++      }
++
++      opt += opt[1];
++    }
++    
++    return click_in_cksum_pseudohdr_raw(csum, iph->ip_src.s_addr, iph->ip_dst.s_addr, iph->ip_p, packet_len);
++}
+diff -Nurb click-1.6.0/lib/ino.cc click-1.6.0-27/lib/ino.cc
+--- click-1.6.0/lib/ino.cc     2007-09-11 15:39:22.000000000 -0400
++++ click-1.6.0-27/lib/ino.cc  2009-01-20 22:34:50.000000000 -0500
+@@ -34,6 +34,16 @@
+     _generation = 0;
+ }
++#define DT_UNKNOWN      0
++#define DT_FIFO         1
++#define DT_CHR          2
++#define DT_DIR          4
++#define DT_BLK          6
++#define DT_REG          8
++#define DT_LNK          10
++#define DT_SOCK         12
++#define DT_WHT          14
++
+ void
+ ClickIno::cleanup()
+ {
+diff -Nurb click-1.6.0/lib/ino.cc.orig click-1.6.0-27/lib/ino.cc.orig
+--- click-1.6.0/lib/ino.cc.orig        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/lib/ino.cc.orig     2007-09-11 15:39:22.000000000 -0400
+@@ -0,0 +1,440 @@
++// -*- c-basic-offset: 4; related-file-name: "../include/click/ino.hh" -*-
++/*
++ * ino.{cc,hh} -- inode numbers for Click file systems
++ * Eddie Kohler
++ *
++ * Copyright (c) 2002 International Computer Science Institute
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software")
++ * to deal in the Software without restriction, subject to the conditions
++ * listed in the Click LICENSE file. These conditions include: you must
++ * preserve this copyright notice, and you cannot mention the copyright
++ * holders in advertising related to the Software without their permission.
++ * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++ * notice is a summary of the Click LICENSE file; the license in that file is
++ * legally binding.
++ */
++
++#include <click/config.h>
++#include <click/glue.hh>
++#include <click/ino.hh>
++#include <click/router.hh>
++#if INO_DEBUG
++# include <click/straccum.hh>
++#endif
++CLICK_DECLS
++
++void
++ClickIno::initialize()
++{
++    _x = 0;
++    _nentries = _cap = 0;
++    _router = 0;
++    _generation = 0;
++}
++
++void
++ClickIno::cleanup()
++{
++    for (int i = 0; i < _cap; i++)
++      _x[i].name.~String();
++    CLICK_LFREE(_x, sizeof(Entry) * _cap);
++    initialize();
++}
++
++int
++ClickIno::grow(int min_size)
++{
++    if (_cap >= min_size)
++      return 0;
++    int new_cap = (_cap ? _cap : 128);
++    while (new_cap < min_size)
++      new_cap *= 2;
++    // cheat on memory: bad me!
++    Entry *nse = (Entry *)CLICK_LALLOC(sizeof(Entry) * new_cap);
++    if (!nse)
++      return -ENOMEM;
++    memcpy(nse, _x, sizeof(Entry) * _cap);
++    for (int i = _cap; i < new_cap; i++)
++      new((void *)&nse[i]) String();
++    CLICK_LFREE(_x, sizeof(Entry) * _cap);
++    _x = nse;
++    _cap = new_cap;
++    return 0;
++}
++
++
++static int
++entry_compar(const void *v1, const void *v2)
++{
++    const ClickIno::Entry *a = reinterpret_cast<const ClickIno::Entry *>(v1);
++    const ClickIno::Entry *b = reinterpret_cast<const ClickIno::Entry *>(v2);
++    return String::compare(a->name, b->name);
++}
++
++int
++ClickIno::true_prepare(Router *r, uint32_t generation)
++{
++    // config lock must be held!
++
++    int nelem = (r ? r->nelements() : 0) + 1;
++    if (grow(nelem) < 0)
++      return -ENOMEM;
++
++    // add sentinel entry
++    _x[0].name = String();
++    _x[0].elementno_plus1 = 0;
++    _x[0].xindex = 0;
++    _x[0].skip = 0;
++    _x[0].flags = 0;
++    _nentries = 1;
++
++    // exit early if router is empty
++    if (nelem == 1) {
++      _generation = generation;
++      _router = r;
++      _x[0].flags = X_SUBDIR_CONFLICTS_CALCULATED;
++      return 0;
++    }
++
++    // add entries for actual elements
++    for (int i = 1; i < nelem; i++) {
++      _x[i].name = r->ename(i - 1);
++      _x[i].elementno_plus1 = i;
++      _x[i].skip = 0;
++      _x[i].flags = 0;
++    }
++
++    // sort _x
++    click_qsort(&_x[1], nelem - 1, sizeof(Entry), entry_compar);
++
++    // add new _x entries for intermediate directories
++    int n = nelem;
++    for (int i = 1; i < nelem; i++) {
++      // make local copies of the names since we might resize _x
++      String name = _x[i].name;
++      String last_name = _x[i-1].name;
++      int slash = name.find_right('/');
++      // rely on '/' being less than any other valid name character in
++      // ASCII. If the prefix of "last_name" matches the part of "name"
++      // before a slash, then we know that "last_name" matches the whole
++      // component (rather than a fake match like "a/b/cc" <-> "a/b/c/e").
++      while (slash >= 0 && (last_name.length() < slash || memcmp(name.data(), last_name.data(), slash) != 0)) {
++          if (n >= _cap && grow(n + 1) < 0)
++              return -ENOMEM;
++          _x[n].name = name.substring(0, slash);
++          _x[n].elementno_plus1 = n;
++          _x[n].skip = 0;
++          _x[n].flags = X_FAKE;
++          slash = _x[n].name.find_right('/');
++          n++;
++      }
++    }
++ 
++    // resort _x if necessary
++    if (n != nelem)
++      click_qsort(&_x[1], n - 1, sizeof(Entry), entry_compar);
++
++    // calculate 'skip'
++    _x[0].skip = n - 1;
++    for (int i = 1; i < n - 1; i++) {
++      const String &name = _x[i].name;
++      int length = name.length();
++      int j = i + 1;
++      while (j < n && _x[j].name.length() > length
++             && _x[j].name[length] == '/') {
++          assert(_x[j].name.substring(0, length) == name);
++          _x[i].skip++;
++          j++;
++      }
++    }
++
++    // calculate 'xindex'
++    for (int i = 1; i < n; i++)
++      _x[_x[i].elementno_plus1].xindex = i;
++
++    // done
++    _nentries = n;
++    _generation = generation;
++    _router = r;
++    return 0;
++}
++
++
++static int
++string_compar(const void *v1, const void *v2)
++{
++    const String *a = reinterpret_cast<const String *>(v1);
++    const String *b = reinterpret_cast<const String *>(v2);
++    return String::compare(*a, *b);
++}
++
++void
++ClickIno::calculate_handler_conflicts(int parent_elementno)
++{
++    // configuration lock must be held!
++    
++    // no conflicts if no router, no children, or this element is fake
++    assert(parent_elementno >= -1 && parent_elementno < _nentries - 1);
++    int parent_xindex = xindex(parent_elementno);
++    if ((_x[parent_xindex].flags & (X_FAKE | X_SUBDIR_CONFLICTS_CALCULATED))
++      || _x[parent_xindex].skip == 0) {
++      _x[parent_xindex].flags |= X_SUBDIR_CONFLICTS_CALCULATED;
++      return;
++    }
++
++    // find the relevant handler indexes and names
++    Vector<int> his;
++    Router::element_hindexes(Router::element(_router, parent_elementno), his);
++    Vector<String> names;
++    for (int* hip = his.begin(); hip < his.end(); hip++) {
++      const Handler* h = Router::handler(_router, *hip);
++      if (h->visible())
++          names.push_back(h->name());
++    }
++
++    // sort names
++    if (names.size())
++      click_qsort(&names[0], names.size(), sizeof(String), string_compar);
++
++    // run over the arrays, marking conflicts
++    int xi = parent_xindex + 1;
++    int next_xi = next_xindex(parent_elementno);
++    int hi = 0;
++    int name_start = (parent_xindex ? _x[parent_xindex].name.length() + 1 : 0);
++    while (xi < next_xi && hi < names.size()) {
++      int compare = String::compare(_x[xi].name.substring(name_start), names[hi]);
++      if (compare == 0) {     // there is a conflict
++          _x[xi].flags |= X_HANDLER_CONFLICT;
++          xi += _x[xi].skip + 1;
++          hi++;
++      } else if (compare < 0)
++          xi += _x[xi].skip + 1;
++      else
++          hi++;
++    }
++
++    // mark subdirectory as calculated
++    _x[parent_xindex].flags |= X_SUBDIR_CONFLICTS_CALCULATED;
++}
++
++
++int
++ClickIno::nlink(ino_t ino)
++{
++    // must be called with config_lock held
++    int elementno = INO_ELEMENTNO(ino);
++
++    // it might be a handler
++    if (INO_ISHANDLER(ino)) {
++      int xi = xindex(elementno);
++      // one for the number directory (or global directory), plus one if the
++      // name directory exists (for element handlers whose element name
++      // isn't a handler conflict)
++      return 1 + (xi > 0 && !(_x[xi].flags & X_HANDLER_CONFLICT));
++    }
++    
++    // otherwise, it is a directory
++    int nlink = 2;
++    if (INO_DT_HAS_U(ino) && _router)
++      nlink += _router->nelements();
++    if (INO_DT_HAS_N(ino)) {
++      int xi = xindex(elementno) + 1;
++      if (!(_x[xi - 1].flags & X_SUBDIR_CONFLICTS_CALCULATED))
++          calculate_handler_conflicts(elementno);
++      int next_xi = next_xindex(elementno);
++      while (xi < next_xi) {
++          if (!(_x[xi].flags & X_HANDLER_CONFLICT) || INO_DIRTYPE(ino) == INO_DT_N)
++              nlink++;
++          xi += _x[xi].skip + 1;
++      }
++    }
++    return nlink;
++}
++
++int
++ClickIno::name_search(const String &n, int first_xi, int last_xi, int name_offset) const
++{
++    while (first_xi <= last_xi) {
++      int mid = (first_xi + last_xi) >> 1;
++      int cmp = String::compare(n, _x[mid].name.substring(name_offset));
++      if (cmp == 0)
++          return mid;
++      else if (cmp < 0)
++          last_xi = mid - 1;
++      else
++          first_xi = mid + 1;
++    }
++    return -1;
++}
++
++ino_t
++ClickIno::lookup(ino_t ino, const String &component)
++{
++    // must be called with config_lock held
++    int elementno = INO_ELEMENTNO(ino);
++    int nelements = (_router ? _router->nelements() : 0);
++
++    // quit early on empty string
++    if (!component.length())
++      return 0;
++
++    // quick check for dot
++    if (component[0] == '.' && component.length() == 1)
++      return ino;
++    
++    // look for numbers
++    if (INO_DT_HAS_U(ino) && component[0] >= '1' && component[0] <= '9') {
++      int eindex = component[0] - '0';
++      for (int i = 1; i < component.length(); i++)
++          if (component[i] >= '0' && component[i] <= '9' && eindex < 1000000000)
++              eindex = (eindex * 10) + component[i] - '0';
++          else
++              goto number_failed;
++      eindex--;
++      if (!_router || eindex >= _router->nelements())
++          goto number_failed;
++      return INO_MKHDIR(eindex);
++    }
++    
++  number_failed:
++    // look for handlers
++    if (INO_DT_HAS_H(ino) && elementno < nelements) {
++      Element *element = Router::element(_router, elementno);
++      int hi = Router::hindex(element, component);
++      if (hi >= 0)
++          if (Router::handler(_router, hi)->visible())
++              return INO_MKHANDLER(elementno, hi);
++    }
++
++    // look for names
++    if (INO_DT_HAS_N(ino)) {
++      // delimit boundaries of search region
++      int first_xi = xindex(elementno) + 1;
++      int last_xi = next_xindex(elementno) - 1;
++      int name_offset = _x[first_xi - 1].name.length() + 1;
++      int found = name_search(component, first_xi, last_xi, (name_offset > 1 ? name_offset : 0));
++      if (found >= 0) 
++          return INO_MKHNDIR(ClickIno::elementno(found));
++    }
++
++    // check for dot dot
++    if (component[0] == '.' && component.length() == 2 && component[1] == '.') {
++      int xi = xindex(elementno);
++      int slash = _x[xi].name.find_right('/');
++      if (slash < 0 || INO_DIRTYPE(ino) == INO_DT_H)
++          return INO_GLOBALDIR;
++      int found = name_search(_x[xi].name.substring(0, slash), 1, _nentries - 1, 0);
++      if (found >= 0)
++          return INO_MKHNDIR(ClickIno::elementno(found));
++      panic("clickfs: ..");   // should never happen
++    }
++
++    // no luck
++    return 0;
++}
++
++int
++ClickIno::readdir(ino_t ino, uint32_t &f_pos, filldir_t filldir, void *thunk)
++{
++    // File positions:
++    // 0x00000-0x0FFFF  ignored
++    // 0x10000-0x1FFFF  handlers
++    // 0x20000-0x2FFFF  numbers
++    // 0x30000-0x3FFFF        names
++
++#define RD_HOFF               0x10000
++#define RD_UOFF               0x20000
++#define RD_NOFF               0x30000
++#define RD_XOFF               0x40000
++#define FILLDIR(a, b, c, d, e, f)  do { if (!filldir(a, b, c, d, e, f)) return 0; } while (0)
++    
++    int elementno = INO_ELEMENTNO(ino);
++    int nelements = (_router ? _router->nelements() : 0);
++
++    // handler names
++    if (f_pos < RD_HOFF)
++      f_pos = RD_HOFF;
++    if (f_pos < RD_UOFF && INO_DT_HAS_H(ino) && elementno < nelements) {
++      Element *element = Router::element(_router, elementno);
++      Vector<int> his;
++      Router::element_hindexes(element, his);
++      while (f_pos >= RD_HOFF && f_pos < his.size() + RD_HOFF) {
++          const Handler* h = Router::handler(_router, his[f_pos - RD_HOFF]);
++          if (h->visible())
++              FILLDIR(h->name().data(), h->name().length(), INO_MKHANDLER(elementno, his[f_pos - RD_HOFF]), DT_REG, f_pos, thunk);
++          f_pos++;
++      }
++    }
++
++    // subdirectory numbers
++    if (f_pos < RD_UOFF)
++      f_pos = RD_UOFF;
++    if (f_pos < RD_NOFF && INO_DT_HAS_U(ino) && _router) {
++      char buf[10];
++      int nelem = _router->nelements();
++      while (f_pos >= RD_UOFF && f_pos < RD_UOFF + nelem) {
++          int elem = f_pos - RD_UOFF;
++          sprintf(buf, "%d", elem + 1);
++          FILLDIR(buf, strlen(buf), INO_MKHDIR(elem), DT_DIR, f_pos, thunk);
++          f_pos++;
++      }
++    }
++
++    // figure out edges of directory
++    int xi = xindex(elementno) + 1;
++    int next_xi = next_xindex(elementno);
++
++    // subdirectory names
++    if (f_pos < RD_NOFF)
++      f_pos = RD_NOFF;
++    if (f_pos < RD_XOFF && INO_DT_HAS_N(ino)) {
++      bool include_conflicts = (INO_DIRTYPE(ino) == INO_DT_N);
++      if (!include_conflicts && !(_x[xi - 1].flags & X_SUBDIR_CONFLICTS_CALCULATED))
++          calculate_handler_conflicts(elementno);
++      int name_offset = _x[xi - 1].name.length();
++      if (name_offset > 0)
++          name_offset++;      // skip slash
++      for (int j = RD_NOFF; xi < next_xi; xi += _x[xi].skip + 1, j++)
++          if (f_pos == j) {
++              if (!(_x[xi].flags & X_HANDLER_CONFLICT) || include_conflicts)
++                  FILLDIR(_x[xi].name.data() + name_offset, _x[xi].name.length() - name_offset, INO_MKHNDIR(ClickIno::elementno(xi)), DT_DIR, f_pos, thunk);
++              f_pos++;
++          }
++    }
++    
++    f_pos = RD_XOFF;
++    return 1;
++}
++
++#if INO_DEBUG
++String
++ClickIno::info() const
++{
++    StringAccum sa;
++    for (int i = 0; i < _nentries; i++) {
++      sa << i << ". " << _x[i].name;
++      if (_x[i].name.length() >= 40)
++          sa << ' ';
++      else
++          sa.append("                                                                                                                                       ", 40 - _x[i].name.length());
++      sa << 'E' << (_x[i].elementno_plus1 - 1) << '/'
++         << 'X' << _x[i].xindex << '\t'
++         << "->" << (i + 1 + _x[i].skip);
++      if (_x[i].flags) {
++          sa << '\t';
++          if (_x[i].flags & X_FAKE)
++              sa << 'F';
++          if (_x[i].flags & X_HANDLER_CONFLICT)
++              sa << 'H';
++          if (_x[i].flags & X_SUBDIR_CONFLICTS_CALCULATED)
++              sa << 'S';
++      }
++      sa << '\n';
++    }
++    return sa.take_string();
++}
++#endif
++
++CLICK_ENDDECLS
+diff -Nurb click-1.6.0/lib/nameinfo.cc.orig click-1.6.0-27/lib/nameinfo.cc.orig
+--- click-1.6.0/lib/nameinfo.cc.orig   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/lib/nameinfo.cc.orig        2007-07-16 19:47:50.000000000 -0400
+@@ -0,0 +1,536 @@
++// -*- c-basic-offset: 4; related-file-name: "../include/click/nameinfo.hh" -*-
++/*
++ * nameinfo.{cc,hh} -- stores name information
++ * Eddie Kohler
++ *
++ * Copyright (c) 2005 The Regents of the University of California
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, subject to the conditions
++ * listed in the Click LICENSE file. These conditions include: you must
++ * preserve this copyright notice, and you cannot mention the copyright
++ * holders in advertising related to the Software without their permission.
++ * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++ * notice is a summary of the Click LICENSE file; the license in that file is
++ * legally binding.
++ */
++
++#include <click/config.h>
++#include <click/nameinfo.hh>
++#include <click/glue.hh>
++#include <click/confparse.hh>
++#include <click/router.hh>
++#include <click/error.hh>
++CLICK_DECLS
++
++static NameInfo *the_name_info;
++
++void
++NameDB::define(const String &, const void *, int)
++{
++}
++
++String
++NameDB::revfind(const void *, int)
++{
++    return String();
++}
++
++
++bool
++StaticNameDB::query(const String &name, void *value, int vsize)
++{
++    assert(vsize == 4);
++    const char *namestr = name.c_str();
++    int l = 0, r = _nentries - 1;
++    while (l <= r) {
++      int m = (l + r) / 2;
++      int cmp = strcmp(namestr, _entries[m].name);
++      if (cmp == 0) {
++          *reinterpret_cast<uint32_t *>(value) = _entries[m].value;
++          return true;
++      } else if (cmp < 0)
++          r = m - 1;
++      else
++          l = m + 1;
++    }
++    return false;
++}
++
++String
++StaticNameDB::revfind(const void *value, int vsize)
++{
++    assert(vsize == 4);
++    uint32_t ivalue;
++    memcpy(&ivalue, value, 4);
++    for (int i = 0; i < _nentries; i++)
++      if (_entries[i].value == ivalue)
++          return String::stable_string(_entries[i].name);
++    return String();
++}
++
++
++void *
++DynamicNameDB::find(const String &name, bool create)
++{
++    if (_sorted > 20)
++      sort();
++
++    if (_sorted == 100) {
++      int l = 0, r = _names.size() - 1, m;
++      while (l <= r) {
++          m = (l + r) / 2;
++          int cmp = String::compare(name, _names[m]);
++          if (cmp == 0)
++              return _values.data() + value_size() * m;
++          else if (cmp < 0)
++              r = m - 1;
++          else
++              l = m + 1;
++      }
++    } else {
++      _sorted++;
++      for (int i = 0; i < _names.size(); i++)
++          if (name == _names[i])
++              return _values.data() + value_size() * i;
++    }
++
++    if (create) {
++      _sorted = 0;
++      _names.push_back(name);
++      _values.extend(value_size());
++      return _values.data() + _values.length() - value_size();
++    } else
++      return 0;
++}
++
++static int
++namelist_sort_compar(const void *athunk, const void *bthunk, void *othunk)
++{
++    const int *a = (const int *) athunk, *b = (const int *) bthunk;
++    const String *o = (const String *) othunk;
++    return String::compare(o[*a], o[*b]);
++}
++
++void
++DynamicNameDB::sort()
++{
++    if (_sorted == 100 || _names.size() == 0)
++      return;
++    
++    Vector<int> permutation(_names.size(), 0);
++    for (int i = 0; i < _names.size(); i++)
++      permutation[i] = i;
++    click_qsort(permutation.begin(), permutation.size(), sizeof(int), namelist_sort_compar, _names.begin());
++    
++    Vector<String> new_names(_names.size(), String());
++    StringAccum new_values(_values.length());
++    new_values.extend(_values.length());
++
++    String *nn = new_names.begin();
++    char *nv = new_values.data();
++    for (int i = 0; i < _names.size(); i++, nn++, nv += value_size()) {
++      *nn = _names[permutation[i]];
++      memcpy(nv, _values.data() + value_size() * permutation[i], value_size());
++    }
++
++    _names.swap(new_names);
++    _values.swap(new_values);
++    _sorted = 100;
++}
++
++bool
++DynamicNameDB::query(const String& name, void* value, int vsize)
++{
++    assert(value_size() == vsize);
++    if (void *x = find(name, false)) {
++      memcpy(value, x, vsize);
++      return true;
++    } else
++      return false;
++}
++
++void
++DynamicNameDB::define(const String& name, const void* value, int vsize)
++{
++    assert(value_size() == vsize);
++    if (void *x = find(name, true))
++      memcpy(x, value, vsize);
++}
++
++
++String
++DynamicNameDB::revfind(const void *value, int vsize)
++{
++    const uint8_t *dx = (const uint8_t *) _values.data();
++    for (int i = 0; i < _names.size(); i++, dx += vsize)
++      if (memcmp(dx, value, vsize) == 0)
++          return _names[i];
++    return String();
++}
++
++
++NameInfo::NameInfo()
++{
++#ifdef CLICK_NAMEDB_CHECK
++    _check_generation = (uintptr_t) this;
++#endif
++}
++
++NameInfo::~NameInfo()
++{
++    for (int i = 0; i < _namedbs.size(); i++)
++      delete _namedbs[i];
++}
++
++void
++NameInfo::static_initialize()
++{
++    the_name_info = new NameInfo;
++}
++
++void
++NameInfo::static_cleanup()
++{
++    delete the_name_info;
++}
++
++#if 0
++String
++NameInfo::NameList::rlookup(uint32_t val)
++{
++    assert(_value_size == 4);
++    const uint32_t *x = (const uint32_t *) _values.value_size();
++    for (int i = 0; i < _names.size(); i++)
++      if (x[i] == val)
++          return _names[i];
++    return String();
++}
++#endif
++
++NameDB *
++NameInfo::namedb(uint32_t type, int vsize, const String &prefix, NameDB *install)
++{
++    NameDB *db;
++
++    // binary-search types
++    int l = 0, r = _namedb_roots.size() - 1, m;
++    while (l <= r) {
++      m = (l + r) / 2;
++      if (type == _namedb_roots[m]->_type)
++          goto found_root;
++      else if (type < _namedb_roots[m]->_type)
++          r = m - 1;
++      else
++          l = m + 1;
++    }
++
++    // type not found
++    if (install == install_dynamic_sentinel())
++      install = new DynamicNameDB(type, prefix, vsize);
++    if (install) {
++      assert(!install->_installed);
++      install->_installed = this;
++      _namedbs.push_back(install);
++      _namedb_roots.insert(_namedb_roots.begin() + l, install);
++      return install;
++    } else
++      return 0;
++
++  found_root:
++    // walk tree to find prefix match; keep track of closest prefix
++    db = _namedb_roots[m];
++    NameDB *closest = 0;
++    while (db) {
++      if (db->_prefix.length() <= prefix.length()
++          && memcmp(db->_prefix.data(), prefix.data(), db->_prefix.length()) == 0) {
++          closest = db;
++          db = db->_prefix_child;
++      } else
++          db = db->_prefix_sibling;
++    }
++
++    // prefix found?
++    if (closest && closest->_prefix == prefix) {
++      assert(vsize < 0 || closest->_value_size == vsize);
++      return closest;
++    }
++    
++    // prefix not found
++    if (install == install_dynamic_sentinel())
++      install = new DynamicNameDB(type, prefix, vsize);
++    if (install) {
++      assert(!install->_installed);
++      install->_installed = this;
++      _namedbs.push_back(install);
++      install->_prefix_parent = closest;
++      NameDB **pp = (closest ? &closest->_prefix_child : &_namedb_roots[m]);
++      install->_prefix_sibling = *pp;
++      *pp = install;
++      // adopt nodes that should be our children
++      pp = &install->_prefix_sibling;
++      while (*pp) {
++          if (prefix.length() < (*pp)->_prefix.length()
++              && memcmp((*pp)->_prefix.data(), prefix.data(), prefix.length()) == 0) {
++              NameDB *new_child = *pp;
++              *pp = new_child->_prefix_sibling;
++              new_child->_prefix_parent = install;
++              new_child->_prefix_sibling = install->_prefix_child;
++              install->_prefix_child = new_child;
++          } else
++              pp = &(*pp)->_prefix_sibling;
++      }
++      return install;
++    } else {
++      assert(!closest || vsize < 0 || closest->_value_size == vsize);
++      return closest;
++    }
++}
++
++NameDB *
++NameInfo::getdb(uint32_t type, const Element *e, int vsize, bool create)
++{
++    if (e) {
++      if (NameInfo *ni = (create ? e->router()->force_name_info() : e->router()->name_info())) {
++          NameDB *install = (create ? ni->install_dynamic_sentinel() : 0);
++          String ename = e->name();
++          int last_slash = ename.find_right('/');
++          if (last_slash >= 0)
++              return ni->namedb(type, vsize, ename.substring(0, last_slash + 1), install);
++          else
++              return ni->namedb(type, vsize, String(), install);
++      }
++    }
++
++    NameDB *install = (create ? the_name_info->install_dynamic_sentinel() : 0);
++    return the_name_info->namedb(type, vsize, String(), install);
++}
++
++void
++NameInfo::installdb(NameDB *db, const Element *prefix)
++{
++    NameInfo *ni = (prefix ? prefix->router()->force_name_info() : the_name_info);
++    NameDB *curdb = ni->namedb(db->type(), db->value_size(), db->prefix(), db);
++    if (curdb != db) {
++      assert(!curdb->_prefix_child || curdb->_prefix_child->prefix().length() > db->prefix().length());
++      db->_installed = ni;
++      db->_prefix_child = curdb->_prefix_child;
++      db->_prefix_parent = curdb;
++      curdb->_prefix_child = db;
++      for (NameDB *child = db->_prefix_child; child; child = child->_prefix_sibling)
++          child->_prefix_parent = db;
++      ni->_namedbs.push_back(db);
++    }
++#if CLICK_NAMEDB_CHECK
++    ni->check(ErrorHandler::default_handler());
++#endif
++}
++
++void
++NameInfo::removedb(NameDB *db)
++{
++    if (!db->_installed)
++      return;
++    
++    // This is an uncommon operation, so don't worry about its performance.
++    NameInfo *ni = db->_installed;
++    int m;
++    for (m = 0; m < ni->_namedb_roots.size(); m++)
++      if (ni->_namedb_roots[m]->_type == db->_type)
++          break;
++
++    NameDB **pp = (db->_prefix_parent ? &db->_prefix_parent->_prefix_child
++                 : &ni->_namedb_roots[m]);
++    // Remove from sibling list
++    for (NameDB *sib = *pp; sib != db; sib = sib->_prefix_sibling)
++      /* do nothing */;
++    // Patch children in
++    *pp = db->_prefix_sibling;
++    while (NameDB *cdb = db->_prefix_child) {
++      db->_prefix_child = cdb->_prefix_sibling;
++      cdb->_prefix_parent = db->_prefix_parent;
++      cdb->_prefix_sibling = *pp;
++      *pp = cdb;
++    }
++    // Maybe remove root
++    if (!*pp && !db->_prefix_parent)
++      ni->_namedb_roots.erase(pp);
++    // Remove from _namedbs
++    for (int i = 0; i < ni->_namedbs.size(); i++)
++      if (ni->_namedbs[i] == db) {
++          ni->_namedbs[i] = ni->_namedbs.back();
++          ni->_namedbs.pop_back();
++          break;
++      }
++    // Mark as not installed
++    db->_installed = 0;
++
++#if CLICK_NAMEDB_CHECK
++    ni->check(ErrorHandler::default_handler());
++#endif
++}
++
++bool
++NameInfo::query(uint32_t type, const Element *e, const String &name, void *value, int vsize)
++{
++    while (1) {
++      NameDB *db = getdb(type, e, vsize, false);
++      while (db) {
++          if (db->query(name, value, vsize))
++              return true;
++          db = db->prefix_parent();
++      }
++      if (!e)
++          return false;
++      e = 0;
++    }
++}
++
++bool
++NameInfo::query_int(uint32_t type, const Element *e, const String &name, int32_t *value)
++{
++    return query(type, e, name, value, 4) || cp_integer(name, value);
++}
++
++bool
++NameInfo::query_int(uint32_t type, const Element *e, const String &name, uint32_t *value)
++{
++    return query(type, e, name, value, 4) || cp_integer(name, value);
++}
++
++String
++NameInfo::revquery(uint32_t type, const Element *e, const void *value, int vsize)
++{
++    while (1) {
++      NameDB *db = getdb(type, e, vsize, false);
++      while (db) {
++          if (String s = db->revfind(value, vsize))
++              return s;
++          db = db->prefix_parent();
++      }
++      if (!e)
++          return String();
++      e = 0;
++    }
++}
++
++
++#ifdef CLICK_NAMEDB_CHECK
++void
++NameInfo::check(ErrorHandler *errh)
++{
++    StringAccum sa;
++    sa << "NameInfo[" << (void*) this << "]: ";
++    PrefixErrorHandler perrh(errh, sa.take_string());
++    _check_generation++;
++    for (int i = 0; i < _namedb_roots.size(); i++) {
++      NameDB *db = _namedb_roots[i];
++      if (i < _namedb_roots.size() - 1
++          && db->type() >= _namedb_roots[i+1]->type())
++          perrh.error("db roots out of order at %i (%x/%x)", i, (unsigned) db->type(), (unsigned) _namedb_roots[i+1]->type());
++      checkdb(db, 0, &perrh);
++    }
++    for (int i = 0; i < _namedbs.size(); i++)
++      if (_namedbs[i]->_check_generation != _check_generation)
++          perrh.error("DB[%x %s %p] in namedbs, but inaccessible", _namedbs[i]->_type, _namedbs[i]->_prefix.c_str(), _namedbs[i]);
++}
++
++void
++NameInfo::checkdb(NameDB *db, NameDB *parent, ErrorHandler *errh)
++{
++    StringAccum sa;
++    sa.snprintf(20, "DB[%x ", db->_type);
++    if (db->_prefix)
++      sa << db->_prefix << ' ';
++    sa << (void*) db << "]: ";
++    PrefixErrorHandler perrh(errh, sa.take_string());
++
++    // check self
++    if (!db->_installed)
++      perrh.error("not installed");
++    else if (db->_installed != this)
++      perrh.error("installed in %p, not this NameInfo", db->_installed);
++    if (db->_check_generation == _check_generation)
++      perrh.error("installed in more than one place");
++    db->_check_generation = _check_generation;
++    for (int i = 0; i < _namedbs.size(); i++)
++      if (_namedbs[i] == db)
++          goto found_in_namedbs;
++    perrh.error("not in _namedbs");
++  found_in_namedbs:
++    
++    // check parent relationships
++    if (db->_prefix_parent != parent)
++      perrh.error("bad parent (%p/%p)", db->_prefix_parent, parent);
++    else if (parent && (db->_prefix.length() < parent->_prefix.length()
++                      || db->_prefix.substring(0, parent->_prefix.length()) != parent->_prefix))
++      perrh.error("parent prefix (%s) disagrees with prefix", parent->_prefix.c_str());
++    if (db->_prefix && db->_prefix.back() != '/')
++      perrh.error("prefix doesn't end with '/'");
++    if (parent && parent->_type != db->_type)
++      perrh.error("parent DB[%x %s %p] has different type", parent->_type, parent->_prefix.c_str(), parent);
++    if (parent && parent->_value_size != db->_value_size)
++      perrh.error("parent DB[%x %s %p] has different value size (%u/%u)", parent->_type, parent->_prefix.c_str(), parent, parent->_value_size, db->_value_size);
++    
++    // check sibling relationships
++    for (NameDB* sib = db->_prefix_sibling; sib; sib = sib->_prefix_sibling) {
++      int l1 = db->_prefix.length(), l2 = sib->_prefix.length();
++      if (l1 < l2 ? sib->_prefix.substring(0, l1) == db->_prefix
++          : db->_prefix.substring(0, l2) == sib->_prefix)
++          perrh.error("sibling DB[%x %s %p] should have parent/child relationship", sib->_type, sib->_prefix.c_str(), sib);
++      if (sib->_type != db->_type)
++          perrh.error("sibling DB[%x %s %p] has different type", sib->_type, sib->_prefix.c_str(), sib);
++      if (sib->_value_size != db->_value_size)
++          perrh.error("sibling DB[%x %s %p] has different value size (%u/%u)", sib->_type, sib->_prefix.c_str(), sib, sib->_value_size, db->_value_size);
++    }
++    
++    // check db itself
++    db->check(&perrh);
++
++    // recurse down and to the side
++    perrh.message("OK");
++    if (db->_prefix_child) {
++      PrefixErrorHandler perrh2(errh, "  ");
++      checkdb(db->_prefix_child, db, &perrh2);
++    }
++    if (db->_prefix_sibling)
++      checkdb(db->_prefix_sibling, parent, errh);
++}
++
++void
++NameDB::check(ErrorHandler *)
++{
++}
++
++void
++StaticNameDB::check(ErrorHandler *errh)
++{
++    for (int i = 0; i < _nentries - 1; i++)
++      if (strcmp(_entries[i].name, _entries[i+1].name) >= 0)
++          errh->error("entries %d/%d (%s/%s) out of order", i, i+1, _entries[i].name, _entries[i+1].name);
++}
++
++void
++DynamicNameDB::check(ErrorHandler *errh)
++{
++    if (_sorted == 100)
++      for (int i = 0; i < _names.size() - 1; i++)
++          if (String::compare(_names[i], _names[i+1]) >=0)
++              errh->error("entries %d/%d (%s/%s) out of order", i, i+1, _names[i].c_str(), _names[i+1].c_str());
++    if (_values.length() != _names.size() * value_size())
++      errh->error("odd value length %d (should be %d)", _values.length(), _names.size() * value_size());
++}
++
++void
++NameInfo::check(const Element *e, ErrorHandler *errh)
++{
++    if (e)
++      if (NameInfo *ni = e->router()->name_info())
++          ni->check(errh);
++    the_name_info->check(errh);
++}
++#endif
++
++
++CLICK_ENDDECLS
+diff -Nurb click-1.6.0/lib/straccum.cc.orig click-1.6.0-27/lib/straccum.cc.orig
+--- click-1.6.0/lib/straccum.cc.orig   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/lib/straccum.cc.orig        2007-08-28 01:08:36.000000000 -0400
+@@ -0,0 +1,302 @@
++// -*- c-basic-offset: 4; related-file-name: "../include/click/straccum.hh" -*-
++/*
++ * straccum.{cc,hh} -- build up strings with operator<<
++ * Eddie Kohler
++ *
++ * Copyright (c) 1999-2000 Massachusetts Institute of Technology
++ * Copyright (c) 2007 Regents of the University of California
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, subject to the conditions
++ * listed in the Click LICENSE file. These conditions include: you must
++ * preserve this copyright notice, and you cannot mention the copyright
++ * holders in advertising related to the Software without their permission.
++ * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++ * notice is a summary of the Click LICENSE file; the license in that file is
++ * legally binding.
++ */
++
++#include <click/config.h>
++#include <click/straccum.hh>
++#include <click/string.hh>
++#include <click/glue.hh>
++#include <click/confparse.hh>
++#include <click/timestamp.hh>
++#include <stdarg.h>
++CLICK_DECLS
++
++/** @class StringAccum
++ * @brief Efficiently build up Strings from pieces.
++ *
++ * Like the String class, StringAccum represents a string of characters.
++ * However, unlike a String, a StringAccum is inherently mutable, and
++ * efficiently supports building up a large string from many smaller pieces.
++ *
++ * StringAccum objects support operator<<() operations for most fundamental
++ * data types.  A StringAccum is generally built up by operator<<(), and then
++ * turned into a String by the take_string() method.  Extracting the String
++ * from a StringAccum does no memory allocation or copying; the StringAccum's
++ * memory is donated to the String.
++ *
++ * <h3>Out-of-memory StringAccums</h3>
++ *
++ * When there is not enough memory to add requested characters to a
++ * StringAccum object, the object becomes a special "out-of-memory" string.
++ * Out-of-memory strings are contagious: the result of any concatenation
++ * operation involving an out-of-memory string is another out-of-memory
++ * string.  Calling take_string() on an out-of-memory StringAccum returns an
++ * out-of-memory String.
++ *
++ * Out-of-memory StringAccum objects nominally have zero characters.
++ */
++    
++
++void
++StringAccum::make_out_of_memory()
++{
++    assert(_cap >= 0);
++    CLICK_LFREE(_s, _cap);
++    _s = reinterpret_cast<unsigned char *>(const_cast<char *>(String::out_of_memory_data()));
++    _cap = -1;
++    _len = 0;
++}
++
++bool
++StringAccum::grow(int want)
++{
++    // can't append to out-of-memory strings
++    if (_cap < 0)
++      return false;
++  
++    int ncap = (_cap ? _cap * 2 : 128);
++    while (ncap <= want)
++      ncap *= 2;
++  
++    unsigned char *n = (unsigned char *) CLICK_LALLOC(ncap);
++    if (!n) {
++      make_out_of_memory();
++      return false;
++    }
++  
++    if (_s)
++      memcpy(n, _s, _cap);
++    CLICK_LFREE(_s, _cap);
++    _s = n;
++    _cap = ncap;
++    return true;
++}
++
++/** @brief Append @a len copies of character @a c to this StringAccum. */
++void
++StringAccum::append_fill(int c, int len)
++{
++    if (char *s = extend(len))
++      memset(s, c, len);
++}
++
++/** @brief Null-terminate this StringAccum and return its data.
++
++    Note that the null character does not contribute to the StringAccum's
++    length(), and later append() and similar operations can overwrite it.  If
++    appending the null character fails, the StringAccum becomes out-of-memory
++    and the returned value is a null string. */
++const char *
++StringAccum::c_str()
++{
++    if (_len < _cap || grow(_len))
++      _s[_len] = '\0';
++    return reinterpret_cast<char *>(_s);
++}
++
++/** @brief Return a String object with this StringAccum's contents.
++
++    This operation donates the StringAccum's memory to the returned String.
++    After a call to take_string(), the StringAccum object becomes empty, and
++    any future append() operations may cause memory allocations.  If the
++    StringAccum is out-of-memory, the returned String is also out-of-memory.
++    However, take_string() resets the StringAccum's out-of-memory state. */
++String
++StringAccum::take_string()
++{
++    int len = length();
++    int cap = _cap;
++    char *str = reinterpret_cast<char *>(_s);
++    if (len > 0) {
++      _s = 0;
++      _len = _cap = 0;
++      return String::claim_string(str, len, cap);
++    } else if (!out_of_memory())
++      return String();
++    else {
++      clear();
++      return String::out_of_memory_string();
++    }
++}
++
++/** @brief Swaps this StringAccum's contents with @a o. */
++void
++StringAccum::swap(StringAccum &o)
++{
++    unsigned char *os = o._s;
++    int olen = o._len, ocap = o._cap;
++    o._s = _s;
++    o._len = _len, o._cap = _cap;
++    _s = os;
++    _len = olen, _cap = ocap;
++}
++
++/** @relates StringAccum
++    @brief Append decimal representation of @a i to @a sa.
++    @return @a sa */
++StringAccum &
++operator<<(StringAccum &sa, long i)
++{
++    if (char *x = sa.reserve(24)) {
++      int len = sprintf(x, "%ld", i);
++      sa.adjust_length(len);
++    }
++    return sa;
++}
++
++/** @relates StringAccum
++    @brief Append decimal representation of @a u to @a sa.
++    @return @a sa */
++StringAccum &
++operator<<(StringAccum &sa, unsigned long u)
++{
++    if (char *x = sa.reserve(24)) {
++      int len = sprintf(x, "%lu", u);
++      sa.adjust_length(len);
++    }
++    return sa;
++}
++
++/** @brief Append representation of @a num to this StringAccum.
++    @param  num        number to append
++    @param  base       numeric base: must be 8, 10, or 16
++    @param  uppercase  true means use uppercase letters in base 16 */
++void
++StringAccum::append_numeric(String::uint_large_t num, int base, bool uppercase)
++{
++    // Unparse a large integer. Linux kernel sprintf can't handle %lld, so we
++    // provide our own function, and use it everywhere to catch bugs.
++  
++    char buf[256];
++    char *trav = buf + 256;
++
++    assert(base == 10 || base == 16 || base == 8);
++    if (base != 10) {
++      const char *digits = (uppercase ? "0123456789ABCDEF" : "0123456789abcdef");
++      while (num > 0) {
++          *--trav = digits[num & (base - 1)];
++          num >>= (base >> 3) + 2;
++      }
++    }
++  
++    while (num > 0) {
++      // k = Approx[num/10] -- know that k <= num/10
++      String::uint_large_t k = (num >> 4) + (num >> 5) + (num >> 8)
++          + (num >> 9) + (num >> 12) + (num >> 13) + (num >> 16)
++          + (num >> 17);
++      String::uint_large_t m;
++
++      // increase k until it exactly equals floor(num/10). on exit, m is
++      // the remainder: m < 10 and num == 10*k + m.
++      while (1) {
++          // d = 10*k
++          String::uint_large_t d = (k << 3) + (k << 1);
++          m = num - d;
++          if (m < 10)
++              break;
++      
++          // delta = Approx[m/10] -- know that delta <= m/10
++          String::uint_large_t delta = (m >> 4) + (m >> 5) + (m >> 8) + (m >> 9);
++          if (m >= 0x1000)
++              delta += (m >> 12) + (m >> 13) + (m >> 16) + (m >> 17);
++      
++          // delta might have underflowed: add at least 1
++          k += (delta ? delta : 1);
++      }
++      
++      *--trav = '0' + (unsigned)m;
++      num = k;
++    }
++  
++    // make sure at least one 0 is written
++    if (trav == buf + 256)
++      *--trav = '0';
++
++    append(trav, buf + 256);
++}
++
++/** @overload */
++void
++StringAccum::append_numeric(String::int_large_t num, int base, bool uppercase)
++{
++    if (num < 0) {
++      *this << '-';
++      append_numeric(static_cast<String::uint_large_t>(-num), base, uppercase);
++    } else
++      append_numeric(static_cast<String::uint_large_t>(num), base, uppercase);
++}
++
++#if defined(CLICK_USERLEVEL) || defined(CLICK_TOOL)
++/** @relates StringAccum
++    @brief Append decimal representation of @a d to @a sa.
++    @return @a sa */
++StringAccum &
++operator<<(StringAccum &sa, double d)
++{
++    if (char *x = sa.reserve(256)) {
++      int len = sprintf(x, "%.12g", d);
++      sa.adjust_length(len);
++    }
++    return sa;
++}
++#endif
++
++/** @relates StringAccum
++    @brief Append hexadecimal representation @a ptr's value to @a sa.
++    @return @a sa */
++StringAccum &
++operator<<(StringAccum &sa, void *ptr)
++{
++    if (char *x = sa.reserve(30)) {
++      int len = sprintf(x, "%p", ptr);
++      sa.adjust_length(len);
++    }
++    return sa;
++}
++
++/** @brief Append result of snprintf() to this StringAccum.
++    @param  n       maximum number of characters to print
++    @param  format  format argument to snprintf()
++
++    The terminating null character is not appended to the string.
++    
++    @note The safe vsnprintf() variant is called if it exists.  It does in
++    the Linux kernel, and on modern Unix variants.  However,
++    if it does not exist on your machine, then this function is actually
++    unsafe, and you should make sure that the printf() invocation represented
++    by your arguments will never write more than @a n characters, not
++    including the terminating null. */
++StringAccum &
++StringAccum::snprintf(int n, const char *format, ...)
++{
++    va_list val;
++    va_start(val, format);
++    if (char *x = reserve(n + 1)) {
++#if CLICK_LINUXMODULE || HAVE_VSNPRINTF
++      int len = vsnprintf(x, n + 1, format, val);
++#else
++      int len = vsprintf(x, format, val);
++      assert(len <= n);
++#endif
++      adjust_length(len);
++    }
++    va_end(val);
++    return *this;
++}
++
++CLICK_ENDDECLS
+diff -Nurb click-1.6.0/lib/string.cc.orig click-1.6.0-27/lib/string.cc.orig
+--- click-1.6.0/lib/string.cc.orig     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/lib/string.cc.orig  2007-09-09 23:45:30.000000000 -0400
+@@ -0,0 +1,836 @@
++// -*- c-basic-offset: 4; related-file-name: "../include/click/string.hh" -*-
++/*
++ * string.{cc,hh} -- a String class with shared substrings
++ * Eddie Kohler
++ *
++ * Copyright (c) 1999-2000 Massachusetts Institute of Technology
++ * Copyright (c) 2004-2007 Regents of the University of California
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, subject to the conditions
++ * listed in the Click LICENSE file. These conditions include: you must
++ * preserve this copyright notice, and you cannot mention the copyright
++ * holders in advertising related to the Software without their permission.
++ * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++ * notice is a summary of the Click LICENSE file; the license in that file is
++ * legally binding.
++ */
++
++#include <click/config.h>
++#include <click/string.hh>
++#include <click/straccum.hh>
++#include <click/glue.hh>
++CLICK_DECLS
++
++/** @file string.hh
++ * @brief Click's String class.
++ */
++
++/** @class String
++ * @brief A string of characters.
++ *
++ * The String class represents a string of characters.  Strings may be
++ * constructed from C strings, characters, numbers, and so forth.  They may
++ * also be added together.  The underlying character arrays are dynamically
++ * allocated; String operations allocate and free memory as needed.  A String
++ * and its substrings generally share memory.  Accessing a character by index
++ * takes O(1) time; so does creating a substring.
++ *
++ * <h3>Initialization</h3>
++ *
++ * The String implementation must be explicitly initialized before use; see
++ * static_initialize().  Explicit initialization is used because static
++ * constructors and other automatic initialization tricks don't work in the
++ * kernel.  However, at user level, you can declare a String::Initializer
++ * object to initialize the library.
++ *
++ * <h3>Out-of-memory strings</h3>
++ *
++ * When there is not enough memory to create a particular string, a special
++ * "out-of-memory" string is returned instead.  Out-of-memory strings are
++ * contagious: the result of any concatenation operation involving an
++ * out-of-memory string is another out-of-memory string.  Thus, the final
++ * result of a series of String operations will be an out-of-memory string,
++ * even if the out-of-memory condition occurs in the middle.
++ *
++ * Out-of-memory strings have zero characters, but they aren't equal to other
++ * empty strings.  If @a s is a normal String (even an empty string), and @a
++ * oom is an out-of-memory string, then @a s @< @a oom.
++ *
++ * All out-of-memory strings are equal and share the same data(), which is
++ * different from the data() of any other string.  See
++ * String::out_of_memory_data().  The String::out_of_memory_string() function
++ * returns an out-of-memory string.
++ */
++
++String::Memo *String::null_memo = 0;
++String::Memo *String::permanent_memo = 0;
++String::Memo *String::oom_memo = 0;
++String *String::null_string_p = 0;
++String *String::oom_string_p = 0;
++const char String::oom_string_data = 0;
++
++/** @cond never */
++inline
++String::Memo::Memo()
++  : _capacity(0), _real_data("")
++{
++    _refcount = 0;
++    _dirty = 0;
++}
++
++inline
++String::Memo::Memo(char *data, int dirty, int capacity)
++  : _capacity(capacity), _real_data(data)
++{
++    _refcount = 0;
++    _dirty = dirty;
++}
++
++String::Memo::Memo(int dirty, int capacity)
++  : _capacity(capacity), _real_data((char *) CLICK_LALLOC(capacity))
++{
++    assert(capacity >= dirty);
++    _refcount = 1;
++    _dirty = dirty;
++}
++
++String::Memo::~Memo()
++{
++  if (_capacity) {
++    assert(_capacity >= _dirty);
++    CLICK_LFREE(_real_data, _capacity);
++  }
++}
++/** @endcond never */
++
++
++/** @brief Create a String containing the ASCII base-10 representation of @a i.
++ */
++String::String(int i)
++{
++  char buf[128];
++  sprintf(buf, "%d", i);
++  assign(buf, -1);
++}
++
++/** @brief Create a String containing the ASCII base-10 representation of @a u.
++ */
++String::String(unsigned u)
++{
++  char buf[128];
++  sprintf(buf, "%u", u);
++  assign(buf, -1);
++}
++
++/** @brief Create a String containing the ASCII base-10 representation of @a i.
++ */
++String::String(long i)
++{
++  char buf[128];
++  sprintf(buf, "%ld", i);
++  assign(buf, -1);
++}
++
++/** @brief Create a String containing the ASCII base-10 representation of @a u.
++ */
++String::String(unsigned long u)
++{
++  char buf[128];
++  sprintf(buf, "%lu", u);
++  assign(buf, -1);
++}
++
++// Implemented a [u]int64_t converter in StringAccum
++// (use the code even at user level to hunt out bugs)
++
++#if HAVE_LONG_LONG
++/** @brief Create a String containing the ASCII base-10 representation of @a q.
++ */
++String::String(long long q)
++{
++  StringAccum sa;
++  sa << q;
++  assign(sa.data(), sa.length());
++}
++
++/** @brief Create a String containing the ASCII base-10 representation of @a q.
++ */
++String::String(unsigned long long q)
++{
++  StringAccum sa;
++  sa << q;
++  assign(sa.data(), sa.length());
++}
++#endif
++
++#if HAVE_INT64_TYPES && !HAVE_INT64_IS_LONG && !HAVE_INT64_IS_LONG_LONG
++/** @brief Create a String containing the ASCII base-10 representation of @a q.
++ */
++String::String(int64_t q)
++{
++  StringAccum sa;
++  sa << q;
++  assign(sa.data(), sa.length());
++}
++
++/** @brief Create a String containing the ASCII base-10 representation of @a q.
++ */
++String::String(uint64_t q)
++{
++  StringAccum sa;
++  sa << q;
++  assign(sa.data(), sa.length());
++}
++#endif
++
++#ifdef CLICK_USERLEVEL
++
++/** @brief Create a String containing the ASCII base-10 representation of @a d.
++ * @note This function is only available at user level.
++ */
++String::String(double d)
++{
++  char buf[128];
++  int len = sprintf(buf, "%.12g", d);
++  assign(buf, len);
++}
++
++#endif
++
++String
++String::claim_string(char *str, int len, int capacity)
++{
++  assert(str && len > 0 && capacity >= len);
++  Memo *new_memo = new Memo(str, len, capacity);
++  if (new_memo)
++    return String(str, len, new_memo);
++  else
++    return String(&oom_string_data, 0, oom_memo);
++}
++
++/** @brief Return a String that directly references the first @a len
++ * characters of @a s.
++ *
++ * This function is suitable for static constant strings whose data is known
++ * to stay around forever, such as C string constants.  If @a len @< 0, treats
++ * @a s as a null-terminated C string.
++ */
++String
++String::stable_string(const char *s, int len)
++{
++  if (len < 0)
++    len = (s ? strlen(s) : 0);
++  return String(s, len, permanent_memo);
++}
++
++/** @brief Create and return a String containing @a len random characters. */
++String
++String::garbage_string(int len)
++{
++  String s;
++  s.append_garbage(len);
++  return s;
++}
++
++/** @brief Create and return a String containing an ASCII representation of @a num.
++ *  @param  num        Number.
++ *  @param  base       Base; must be 8, 10, or 16.  Defaults to 10.
++ *  @param  uppercase  If true, then use uppercase letters in base 16.
++ */
++String
++String::numeric_string(int_large_t num, int base, bool uppercase)
++{
++    StringAccum sa;
++    sa.append_numeric(num, base, uppercase);
++    return sa.take_string();
++}
++
++/** @brief Create and return a String containing an ASCII representation of @a num.
++ *  @param  num        Number.
++ *  @param  base       Base; must be 8, 10, or 16.  Defaults to 10.
++ *  @param  uppercase  If true, then use uppercase letters in base 16.
++ */
++String
++String::numeric_string(uint_large_t num, int base, bool uppercase)
++{
++    StringAccum sa;
++    sa.append_numeric(num, base, uppercase);
++    return sa.take_string();
++}
++
++void
++String::make_out_of_memory()
++{
++  if (_memo)
++    deref();
++  _memo = oom_memo;
++  _memo->_refcount++;
++  _data = _memo->_real_data;
++  _length = 0;
++}
++
++void
++String::assign(const char *str, int len)
++{
++  if (!str) {
++    assert(len <= 0);
++    len = 0;
++  } else if (len < 0)
++    len = strlen(str);
++  
++  if (len == 0) {
++    _memo = (str == &oom_string_data ? oom_memo : null_memo);
++    _memo->_refcount++;
++    
++  } else {
++    // Make 'capacity' a multiple of 16 characters and bigger than 'len'.
++    int capacity = (len + 16) & ~15;
++    _memo = new Memo(len, capacity);
++    if (!_memo || !_memo->_real_data) {
++      make_out_of_memory();
++      return;
++    }
++    memcpy(_memo->_real_data, str, len);
++  }
++  
++  _data = _memo->_real_data;
++  _length = len;
++}
++
++/** @brief Append @a len random characters to this string.
++    @return  Modifiable pointer to the appended random characters.
++
++    The caller may safely modify the returned memory.  Null is returned if the
++    string becomes out-of-memory. */
++char *
++String::append_garbage(int len)
++{
++    // Appending anything to "out of memory" leaves it as "out of memory"
++    if (len <= 0 || _memo == oom_memo)
++      return 0;
++  
++    // If we can, append into unused space. First, we check that there's
++    // enough unused space for 'len' characters to fit; then, we check
++    // that the unused space immediately follows the data in '*this'.
++    uint32_t dirty = _memo->_dirty;
++    if (_memo->_capacity > dirty + len) {
++      char *real_dirty = _memo->_real_data + dirty;
++      if (real_dirty == _data + _length
++          && _memo->_dirty.compare_and_swap(dirty, dirty + len)) {
++          _length += len;
++          assert(_memo->_dirty < _memo->_capacity);
++          return real_dirty;
++      }
++    }
++  
++    // Now we have to make new space. Make sure the new capacity is a
++    // multiple of 16 characters and that it is at least 16. But for large
++    // strings, allocate a power of 2, since power-of-2 sizes minimize waste
++    // in frequently-used allocators, like Linux kmalloc.
++    int new_capacity = (_length + len < 1024 ? (_length + 16) & ~15 : 1024);
++    while (new_capacity < _length + len)
++      new_capacity *= 2;
++
++#if CLICK_DMALLOC
++    // Keep total allocation a power of 2 by leaving extra space for the
++    // DMALLOC Chunk.
++    if (_length + len < new_capacity - 32)
++      new_capacity -= 32;
++#endif
++    
++    Memo *new_memo = new Memo(_length + len, new_capacity);
++    if (!new_memo || !new_memo->_real_data) {
++      delete new_memo;
++      make_out_of_memory();
++      return 0;
++    }
++
++    char *new_data = new_memo->_real_data;
++    memcpy(new_data, _data, _length);
++  
++    deref();
++    _data = new_data;
++    new_data += _length;      // now new_data points to the garbage
++    _length += len;
++    _memo = new_memo;
++    return new_data;
++}
++
++/** @brief Append the first @a len characters of @a suffix to this string.
++ *
++ * @param suffix data to append
++ * @param len length of data
++ *
++ * If @a len @< 0, treats @a suffix as a null-terminated C string. */ 
++void
++String::append(const char *suffix, int len)
++{
++    if (!suffix) {
++      assert(len <= 0);
++      len = 0;
++    } else if (len < 0)
++      len = strlen(suffix);
++
++    if (suffix == &oom_string_data)
++      // Appending "out of memory" to a regular string makes it "out of
++      // memory"
++      make_out_of_memory();
++    else if (char *space = append_garbage(len))
++      memcpy(space, suffix, len);
++}
++
++/** @brief Append @a len copies of character @a c to this string. */
++void
++String::append_fill(int c, int len)
++{
++    assert(len >= 0);
++    if (char *space = append_garbage(len))
++      memset(space, c, len);
++}
++
++/** @brief Ensure the string's data is unshared and return a mutable pointer
++ * to it. */
++char *
++String::mutable_data()
++{
++  // If _memo has a capacity (it's not one of the special strings) and it's
++  // uniquely referenced, return _data right away.
++  if (_memo->_capacity && _memo->_refcount == 1)
++    return const_cast<char *>(_data);
++  
++  // Otherwise, make a copy of it. Rely on: deref() doesn't change _data or
++  // _length; and if _capacity == 0, then deref() doesn't free _real_data.
++  assert(!_memo->_capacity || _memo->_refcount > 1);
++  deref();
++  assign(_data, _length);
++  return const_cast<char *>(_data);
++}
++
++/** @brief Null-terminates the string and returns a mutable pointer to its
++ * data.
++ * @sa String::c_str */
++char *
++String::mutable_c_str()
++{
++  (void) mutable_data();
++  (void) c_str();
++  return const_cast<char *>(_data);
++}
++
++/** @brief Null-terminates the string.
++ *
++ * The terminating null character isn't considered part of the string, so
++ * this->length() doesn't change.  Returns a corresponding C string pointer.
++ * The returned pointer is semi-temporary; it will persist until the string is
++ * destroyed, or someone appends to it. */
++const char *
++String::c_str() const
++{
++  // If _memo has no capacity, then this is one of the special strings (null
++  // or PermString). We are guaranteed, in these strings, that _data[_length]
++  // exists. We can return _data immediately if we have a '\0' in the right
++  // place.
++  if (!_memo->_capacity && _data[_length] == '\0')
++    return _data;
++  
++  // Otherwise, this invariant must hold (there's more real data in _memo than
++  // in our substring).
++  assert(!_memo->_capacity
++       || _memo->_real_data + _memo->_dirty >= _data + _length);
++  
++  // Has the character after our substring been set?
++  uint32_t dirty = _memo->_dirty;
++  if (_memo->_real_data + dirty == _data + _length) {
++      if (_memo->_capacity > dirty
++        && _memo->_dirty.compare_and_swap(dirty, dirty + 1)) {
++        // Character after our substring has not been set. Change it to '\0'.
++        // This case will never occur on special strings.
++        char *real_data = const_cast<char *>(_data);
++        real_data[_length] = '\0';
++        return _data;
++      }
++    
++  } else {
++    // Character after our substring has been set. OK to return _data if it is
++    // already '\0'.
++    if (_data[_length] == '\0')
++      return _data;
++  }
++  
++  // If we get here, we must make a copy of our portion of the string.
++  {
++    String s(_data, _length);
++    deref();
++    assign(s);
++  }
++  
++  char *real_data = const_cast<char *>(_data);
++  real_data[_length] = '\0';
++  _memo->_dirty++;            // include '\0' in used portion of _memo
++  return _data;
++}
++
++/** @brief Returns a substring of this string, consisting of the @a len
++ * characters starting at index @a pos.
++ * 
++ * @param pos substring's first position relative to the string.
++ * @param len length of the substring.
++ *
++ * If @a pos is negative, starts that far from the end of the string.  If @a
++ * len is negative, leaves that many characters off the end of the string.
++ * (This follows perl's semantics.)  Returns a null string if the adjusted @a
++ * pos is out of range.  Truncates the substring if @a len goes beyond the end
++ * of the string.
++ */
++String
++String::substring(int pos, int len) const
++{
++    if (pos < 0)
++      pos += _length;
++    if (len < 0)
++      len = _length - pos + len;
++    if (pos + len > _length)
++      len = _length - pos;
++  
++    if (pos < 0 || len <= 0)
++      return String();
++    else
++      return String(_data + pos, len, _memo);
++}
++
++/** @brief Search for a character in a string.
++ *
++ * @param c character to search for
++ * @param start initial search position
++ *
++ * Return the index of the leftmost occurence of @a c, starting at index @a
++ * start and working up to the end of the string.  Returns -1 if @a c is not
++ * found. */
++int
++String::find_left(char c, int start) const
++{
++    if (start < 0)
++      start = 0;
++    for (int i = start; i < _length; i++)
++      if (_data[i] == c)
++          return i;
++    return -1;
++}
++
++/** @brief Search for a substring in a string.
++ *
++ * @param str substring to search for
++ * @param start initial search position
++ *
++ * Return the index of the leftmost occurence of the substring @a str, starting
++ * at index @a start and working up to the end of the string.  Returns -1 if
++ * @a str is not found. */
++int
++String::find_left(const String &str, int start) const
++{
++    if (start < 0)
++      start = 0;
++    if (start >= length())
++      return -1;
++    if (!str.length())
++      return 0;
++    int first_c = (unsigned char)str[0];
++    int pos = start, max_pos = length() - str.length();
++    for (pos = find_left(first_c, pos); pos >= 0 && pos <= max_pos;
++       pos = find_left(first_c, pos + 1))
++      if (!memcmp(_data + pos, str._data, str.length()))
++          return pos;
++    return -1;
++}
++
++/** @brief Search for a character in a string.
++ *
++ * @param c character to search for
++ * @param start initial search position
++ *
++ * Return the index of the rightmost occurence of the character @a c, starting
++ * at index @a start and working back to the beginning of the string.  Returns
++ * -1 if @a c is not found.  @a start may start beyond the end of the
++ * string. */
++int
++String::find_right(char c, int start) const
++{
++    if (start >= _length)
++      start = _length - 1;
++    for (int i = start; i >= 0; i--)
++      if (_data[i] == c)
++          return i;
++    return -1;
++}
++
++static String
++hard_lower(const String &s, int pos)
++{
++    String new_s(s.data(), s.length());
++    char *x = const_cast<char *>(new_s.data()); // know it's mutable
++    int len = s.length();
++    for (; pos < len; pos++)
++      x[pos] = tolower(x[pos]);
++    return new_s;
++}
++
++/** @brief Returns a lowercased version of this string.
++ *
++ * Translates the ASCII characters 'A' through 'Z' into their lowercase
++ * equivalents. */
++String
++String::lower() const
++{
++    // avoid copies
++    for (int i = 0; i < _length; i++)
++      if (_data[i] >= 'A' && _data[i] <= 'Z')
++          return hard_lower(*this, i);
++    return *this;
++}
++
++static String
++hard_upper(const String &s, int pos)
++{
++    String new_s(s.data(), s.length());
++    char *x = const_cast<char *>(new_s.data()); // know it's mutable
++    int len = s.length();
++    for (; pos < len; pos++)
++      x[pos] = toupper(x[pos]);
++    return new_s;
++}
++
++/** @brief Returns an uppercased version of this string.
++ *
++ * Translates the ASCII characters 'a' through 'z' into their uppercase
++ * equivalents. */
++String
++String::upper() const
++{
++    // avoid copies
++    for (int i = 0; i < _length; i++)
++      if (_data[i] >= 'a' && _data[i] <= 'z')
++          return hard_upper(*this, i);
++    return *this;
++}
++
++static String
++hard_printable(const String &s, int pos)
++{
++    StringAccum sa(s.length() * 2);
++    sa.append(s.data(), pos);
++    const unsigned char *x = reinterpret_cast<const unsigned char *>(s.data());
++    int len = s.length();
++    for (; pos < len; pos++) {
++      if (x[pos] >= 32 && x[pos] < 127)
++          sa << x[pos];
++      else if (x[pos] < 32)
++          sa << '^' << (unsigned char)(x[pos] + 64);
++      else if (char *buf = sa.extend(4, 1))
++          sprintf(buf, "\\%03o", x[pos]);
++    }
++    return sa.take_string();
++}
++
++/** @brief Returns a "printable" version of this string.
++ *
++ * Translates control characters 0-31 into "control" sequences, such as "^@"
++ * for the null character, and characters 127-255 into octal escape sequences,
++ * such as "\377" for 255. */
++String
++String::printable() const
++{
++    // avoid copies
++    for (int i = 0; i < _length; i++)
++      if (_data[i] < 32 || _data[i] > 126)
++          return hard_printable(*this, i);
++    return *this;
++}
++
++/** @brief Returns a substring with spaces trimmed from the end. */
++String
++String::trim_space() const
++{
++    for (int i = _length - 1; i >= 0; i--)
++      if (!isspace(_data[i]))
++          return substring(0, i + 1);
++    // return out-of-memory string if input is out-of-memory string
++    return (_length ? String() : *this);
++}
++
++/** @brief Returns a hex-quoted version of the string.
++ *
++ * For example, the string "Abcd" would convert to "\<41626364>". */
++String
++String::quoted_hex() const
++{
++    static const char hex_digits[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
++    StringAccum sa;
++    char *buf;
++    if (out_of_memory() || !(buf = sa.extend(length() * 2 + 3)))
++      return out_of_memory_string();
++    *buf++ = '\\';
++    *buf++ = '<';
++    const uint8_t *e = reinterpret_cast<const uint8_t*>(end());
++    for (const uint8_t *x = reinterpret_cast<const uint8_t*>(begin()); x < e; x++) {
++      *buf++ = hex_digits[(*x >> 4) & 0xF];
++      *buf++ = hex_digits[*x & 0xF];
++    }
++    *buf++ = '>';
++    return sa.take_string();
++}
++
++/** @brief Hash function.
++ * @return The hash value of this String.
++ *
++ * Equal String objects always have equal hashcode() values.
++ */
++size_t
++String::hashcode() const
++{
++    int l = length();
++    const char *d = data();
++    if (!l)
++      return 0;
++    else if (l == 1)
++      return d[0] | (d[0] << 8);
++    else if (l < 4)
++      return d[0] + (d[1] << 3) + (l << 12);
++    else
++      return d[0] + (d[1] << 8) + (d[2] << 16) + (d[3] << 24)
++          + (l << 12) + (d[l-1] << 10);
++}
++
++/** @brief Return true iff this string is equal to the data in @a s.
++ * @param s string data to compare to
++ * @param len length of @a s
++ * 
++ * Same as String::compare(*this, String(s, len)) == 0.  If @a len @< 0, then
++ * treats @a s as a null-terminated C string.
++ *
++ * @sa String::compare(const String &a, const String &b) */
++bool
++String::equals(const char *s, int len) const
++{
++    // It'd be nice to make "out-of-memory" strings compare unequal to
++    // anything, even themseleves, but this would be a bad idea for Strings
++    // used as (for example) keys in hashtables. Instead, "out-of-memory"
++    // strings compare unequal to other null strings, but equal to each other.
++    if (len < 0)
++      len = strlen(s);
++    if (_length != len)
++      return false;
++    else if (_data == s)
++      return true;
++    else if (len == 0)
++      return (s != &oom_string_data && _memo != oom_memo);
++    else
++      return memcmp(_data, s, len) == 0;
++}
++
++/** @brief Compare this string with the data in @a s.
++ * @param s string data to compare to
++ * @param len length of @a s
++ * 
++ * Same as String::compare(*this, String(s, len)).  If @a len @< 0, then treats
++ * @a s as a null-terminated C string.
++ *
++ * @sa String::compare(const String &a, const String &b) */
++int
++String::compare(const char *s, int len) const
++{
++    if (len < 0)
++      len = strlen(s);
++    if (_data == s)
++      return _length - len;
++    else if (_memo == oom_memo)
++      return 1;
++    else if (s == &oom_string_data)
++      return -1;
++    else if (_length == len)
++      return memcmp(_data, s, len);
++    else if (_length < len) {
++      int v = memcmp(_data, s, _length);
++      return (v ? v : -1);
++    } else {
++      int v = memcmp(_data, s, len);
++      return (v ? v : 1);
++    }
++}
++
++
++/** @class String::Initializer
++ * @brief Initializes the String implementation.
++ *
++ * This class's constructor initializes the String implementation by calling
++ * String::static_initialize().  You should declare a String::Initializer
++ * object at global scope in any file that declares a global String object.
++ * For example:
++ * @code
++ *    static String::Initializer initializer;
++ *    String global_string = "100";
++ * @endcode */
++
++String::Initializer::Initializer()
++{
++    String::static_initialize();
++}
++
++/** @brief Initialize the String implementation.
++ *
++ * This function must be called before any String functionality is used.  It
++ * is safe to call it multiple times.
++ *
++ * @note Elements don't need to worry about static_initialize(); Click drivers
++ * have already called it for you.
++ *
++ * @sa String::Initializer */
++void
++String::static_initialize()
++{
++    // function called to initialize static globals
++    if (!null_memo) {
++#if CLICK_DMALLOC
++      CLICK_DMALLOC_REG("str0");
++#endif
++      null_memo = new Memo;
++      null_memo->_refcount++;
++      permanent_memo = new Memo;
++      permanent_memo->_refcount++;
++      // use a separate string for oom_memo's data, so we can distinguish
++      // the pointer
++      oom_memo = new Memo;
++      oom_memo->_refcount++;
++      oom_memo->_real_data = const_cast<char*>(&oom_string_data);
++      null_string_p = new String;
++      oom_string_p = new String(&oom_string_data, 0, oom_memo);
++#if CLICK_DMALLOC
++      CLICK_DMALLOC_REG("????");
++#endif
++    }
++}
++
++/** @brief Clean up the String implementation.
++ *
++ * Call this function to release any memory allocated by the String
++ * implementation. */
++void
++String::static_cleanup()
++{
++    if (null_string_p) {
++      delete null_string_p;
++      null_string_p = 0;
++      delete oom_string_p;
++      oom_string_p = 0;
++      if (oom_memo->_refcount.dec_and_test())
++          delete oom_memo;
++      if (permanent_memo->_refcount.dec_and_test())
++          delete permanent_memo;
++      if (null_memo->_refcount.dec_and_test())
++          delete null_memo;
++      null_memo = permanent_memo = oom_memo = 0;
++    }
++}
++
++CLICK_ENDDECLS
+diff -Nurb click-1.6.0/lib/vectorv.cc.orig click-1.6.0-27/lib/vectorv.cc.orig
+--- click-1.6.0/lib/vectorv.cc.orig    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/lib/vectorv.cc.orig 2007-07-16 19:47:50.000000000 -0400
+@@ -0,0 +1,125 @@
++/*
++ * vectorv.cc -- template specialization for Vector<void*>
++ * Eddie Kohler
++ *
++ * Copyright (c) 1999-2000 Massachusetts Institute of Technology
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, subject to the conditions
++ * listed in the Click LICENSE file. These conditions include: you must
++ * preserve this copyright notice, and you cannot mention the copyright
++ * holders in advertising related to the Software without their permission.
++ * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++ * notice is a summary of the Click LICENSE file; the license in that file is
++ * legally binding.
++ */
++
++#include <click/config.h>
++#include <click/glue.hh>
++#include <click/vector.hh>
++CLICK_DECLS
++
++Vector<void*>::Vector(const Vector<void*> &o)
++  : _l(0), _n(0), _capacity(0)
++{
++  *this = o;
++}
++
++Vector<void*>::~Vector()
++{
++  delete[] _l;
++}
++
++Vector<void*> &
++Vector<void*>::operator=(const Vector<void*> &o)
++{
++  if (&o != this) {
++    _n = 0;
++    if (reserve(o._n)) {
++      _n = o._n;
++      memcpy(_l, o._l, sizeof(void *) * _n);
++    }
++  }
++  return *this;
++}
++
++Vector<void*> &
++Vector<void*>::assign(size_type n, void* e)
++{
++  _n = 0;
++  resize(n, e);
++  return *this;
++}
++
++bool
++Vector<void*>::reserve(size_type want)
++{
++  if (want < 0)
++    want = (_capacity > 0 ? _capacity * 2 : 4);
++  if (want <= _capacity)
++    return true;
++  
++  void** new_l = new void*[want];
++  if (!new_l)
++    return false;
++  
++  memcpy(new_l, _l, sizeof(void*) * _n);
++  delete[] _l;
++  
++  _l = new_l;
++  _capacity = want;
++  return true;
++}
++
++Vector<void*>::iterator
++Vector<void*>::insert(iterator i, void* e)
++{
++  assert(i >= begin() && i <= end());
++  size_type pos = i - begin();
++  if (_n < _capacity || reserve(RESERVE_GROW)) {
++    i = begin() + pos;
++    memmove(i + 1, i, (end() - i) * sizeof(void*));
++    *i = e;
++    _n++;
++  }
++  return i;
++}
++
++Vector<void*>::iterator
++Vector<void*>::erase(iterator a, iterator b)
++{
++  if (b > a) {
++    assert(a >= begin() && b <= end());
++    memmove(a, b, (end() - b) * sizeof(void*));
++    _n -= b - a;
++    return a;
++  } else
++    return b;
++}
++
++void
++Vector<void*>::resize(size_type nn, void* e)
++{
++  if (nn <= _capacity || reserve(nn)) {
++    for (size_type i = _n; i < nn; i++)
++      _l[i] = e;
++    _n = nn;
++  }
++}
++
++void
++Vector<void*>::swap(Vector<void*>& o)
++{
++  void **l = _l;
++  size_type n = _n;
++  size_type cap = _capacity;
++  _l = o._l;
++  _n = o._n;
++  _capacity = o._capacity;
++  o._l = l;
++  o._n = n;
++  o._capacity = cap;
++}
++
++CLICK_ENDDECLS
+diff -Nurb click-1.6.0/linuxmodule/.tmp_versions/click.mod click-1.6.0-27/linuxmodule/.tmp_versions/click.mod
+--- click-1.6.0/linuxmodule/.tmp_versions/click.mod    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/linuxmodule/.tmp_versions/click.mod 2009-02-11 16:55:09.000000000 -0500
+@@ -0,0 +1,2 @@
++/d/click/click-1.6.0-27/linuxmodule/click.ko
++/d/click/click-1.6.0-27/linuxmodule/crc32.o /d/click/click-1.6.0-27/linuxmodule/in_cksum.o /d/click/click-1.6.0-27/linuxmodule/string.o /d/click/click-1.6.0-27/linuxmodule/straccum.o /d/click/click-1.6.0-27/linuxmodule/nameinfo.o /d/click/click-1.6.0-27/linuxmodule/bitvector.o /d/click/click-1.6.0-27/linuxmodule/vectorv.o /d/click/click-1.6.0-27/linuxmodule/templatei.o /d/click/click-1.6.0-27/linuxmodule/bighashmap_arena.o /d/click/click-1.6.0-27/linuxmodule/ipaddress.o /d/click/click-1.6.0-27/linuxmodule/ipflowid.o /d/click/click-1.6.0-27/linuxmodule/etheraddress.o /d/click/click-1.6.0-27/linuxmodule/packet.o /d/click/click-1.6.0-27/linuxmodule/error.o /d/click/click-1.6.0-27/linuxmodule/timestamp.o /d/click/click-1.6.0-27/linuxmodule/glue.o /d/click/click-1.6.0-27/linuxmodule/task.o /d/click/click-1.6.0-27/linuxmodule/timer.o /d/click/click-1.6.0-27/linuxmodule/atomic.o /d/click/click-1.6.0-27/linuxmodule/gaprate.o /d/click/click-1.6.0-27/linuxmodule/element.o /d/click/click-1.6.0-27/linuxmodule/confparse.o /d/click/click-1.6.0-27/linuxmodule/variableenv.o /d/click/click-1.6.0-27/linuxmodule/lexer.o /d/click/click-1.6.0-27/linuxmodule/elemfilter.o /d/click/click-1.6.0-27/linuxmodule/routerthread.o /d/click/click-1.6.0-27/linuxmodule/router.o /d/click/click-1.6.0-27/linuxmodule/master.o /d/click/click-1.6.0-27/linuxmodule/handlercall.o /d/click/click-1.6.0-27/linuxmodule/notifier.o /d/click/click-1.6.0-27/linuxmodule/integers.o /d/click/click-1.6.0-27/linuxmodule/iptable.o /d/click/click-1.6.0-27/linuxmodule/driver.o /d/click/click-1.6.0-27/linuxmodule/ino.o /d/click/click-1.6.0-27/linuxmodule/addressinfo.o /d/click/click-1.6.0-27/linuxmodule/alignmentinfo.o /d/click/click-1.6.0-27/linuxmodule/errorelement.o /d/click/click-1.6.0-27/linuxmodule/portinfo.o /d/click/click-1.6.0-27/linuxmodule/scheduleinfo.o /d/click/click-1.6.0-27/linuxmodule/ftpportmapper.o /d/click/click-1.6.0-27/linuxmodule/adaptivered.o /d/click/click-1.6.0-27/linuxmodule/red.o /d/click/click-1.6.0-27/linuxmodule/arpfaker.o /d/click/click-1.6.0-27/linuxmodule/arpprint.o /d/click/click-1.6.0-27/linuxmodule/arpquerier.o /d/click/click-1.6.0-27/linuxmodule/arpresponder.o /d/click/click-1.6.0-27/linuxmodule/checkarpheader.o /d/click/click-1.6.0-27/linuxmodule/ensureether.o /d/click/click-1.6.0-27/linuxmodule/etherencap.o /d/click/click-1.6.0-27/linuxmodule/ethermirror.o /d/click/click-1.6.0-27/linuxmodule/hostetherfilter.o /d/click/click-1.6.0-27/linuxmodule/checkicmpheader.o /d/click/click-1.6.0-27/linuxmodule/icmperror.o /d/click/click-1.6.0-27/linuxmodule/icmppingencap.o /d/click/click-1.6.0-27/linuxmodule/icmppingresponder.o /d/click/click-1.6.0-27/linuxmodule/icmppingrewriter.o /d/click/click-1.6.0-27/linuxmodule/icmprewriter.o /d/click/click-1.6.0-27/linuxmodule/icmpsendpings.o /d/click/click-1.6.0-27/linuxmodule/checkipheader.o /d/click/click-1.6.0-27/linuxmodule/checkipheader2.o /d/click/click-1.6.0-27/linuxmodule/crapfilter.o /d/click/click-1.6.0-27/linuxmodule/crapfilter2.o /d/click/click-1.6.0-27/linuxmodule/crapfilter3.o /d/click/click-1.6.0-27/linuxmodule/decipttl.o /d/click/click-1.6.0-27/linuxmodule/fixipsrc.o /d/click/click-1.6.0-27/linuxmodule/getipaddress.o /d/click/click-1.6.0-27/linuxmodule/ipaddrpairrewriter.o /d/click/click-1.6.0-27/linuxmodule/ipaddrrewriter.o /d/click/click-1.6.0-27/linuxmodule/ipclassifier.o /d/click/click-1.6.0-27/linuxmodule/ipencap.o /d/click/click-1.6.0-27/linuxmodule/ipfieldinfo.o /d/click/click-1.6.0-27/linuxmodule/ipfilter.o /d/click/click-1.6.0-27/linuxmodule/ipfragmenter.o /d/click/click-1.6.0-27/linuxmodule/ipgwoptions.o /d/click/click-1.6.0-27/linuxmodule/ipinputcombo.o /d/click/click-1.6.0-27/linuxmodule/ipmirror.o /d/click/click-1.6.0-27/linuxmodule/ipnameinfo.o /d/click/click-1.6.0-27/linuxmodule/ipoutputcombo.o /d/click/click-1.6.0-27/linuxmodule/ipprint.o /d/click/click-1.6.0-27/linuxmodule/ipreassembler.o /d/click/click-1.6.0-27/linuxmodule/iproutetable.o /d/click/click-1.6.0-27/linuxmodule/iprw.o /d/click/click-1.6.0-27/linuxmodule/iprwpatterns.o /d/click/click-1.6.0-27/linuxmodule/lineariplookup.o /d/click/click-1.6.0-27/linuxmodule/lookupiproute.o /d/click/click-1.6.0-27/linuxmodule/lookupiproutemp.o /d/click/click-1.6.0-27/linuxmodule/markipce.o /d/click/click-1.6.0-27/linuxmodule/markipheader.o /d/click/click-1.6.0-27/linuxmodule/radixiplookup.o /d/click/click-1.6.0-27/linuxmodule/rfc2507c.o /d/click/click-1.6.0-27/linuxmodule/rfc2507d.o /d/click/click-1.6.0-27/linuxmodule/ripsend.o /d/click/click-1.6.0-27/linuxmodule/rripmapper.o /d/click/click-1.6.0-27/linuxmodule/setipaddress.o /d/click/click-1.6.0-27/linuxmodule/setipchecksum.o /d/click/click-1.6.0-27/linuxmodule/setipdscp.o /d/click/click-1.6.0-27/linuxmodule/setrandipaddress.o /d/click/click-1.6.0-27/linuxmodule/siphmapper.o /d/click/click-1.6.0-27/linuxmodule/sortediplookup.o /d/click/click-1.6.0-27/linuxmodule/storeipaddress.o /d/click/click-1.6.0-27/linuxmodule/stripipheader.o /d/click/click-1.6.0-27/linuxmodule/unstripipheader.o /d/click/click-1.6.0-27/linuxmodule/anydevice.o /d/click/click-1.6.0-27/linuxmodule/cpuqueue.o /d/click/click-1.6.0-27/linuxmodule/cpuswitch.o /d/click/click-1.6.0-27/linuxmodule/cyclecountaccum.o /d/click/click-1.6.0-27/linuxmodule/fasttcpflows.o /d/click/click-1.6.0-27/linuxmodule/fastudpflows.o /d/click/click-1.6.0-27/linuxmodule/fastudpsrc.o /d/click/click-1.6.0-27/linuxmodule/fromdevice.o /d/click/click-1.6.0-27/linuxmodule/fromhost.o /d/click/click-1.6.0-27/linuxmodule/perfcountaccum.o /d/click/click-1.6.0-27/linuxmodule/perfcountinfo.o /d/click/click-1.6.0-27/linuxmodule/perfcountuser.o /d/click/click-1.6.0-27/linuxmodule/polldevice.o /d/click/click-1.6.0-27/linuxmodule/rtcycles.o /d/click/click-1.6.0-27/linuxmodule/schedulelinux.o /d/click/click-1.6.0-27/linuxmodule/setcyclecount.o /d/click/click-1.6.0-27/linuxmodule/setperfcount.o /d/click/click-1.6.0-27/linuxmodule/staticthreadsched.o /d/click/click-1.6.0-27/linuxmodule/todevice.o /d/click/click-1.6.0-27/linuxmodule/tohost.o /d/click/click-1.6.0-27/linuxmodule/tohostsniffers.o /d/click/click-1.6.0-27/linuxmodule/align.o /d/click/click-1.6.0-27/linuxmodule/averagecounter.o /d/click/click-1.6.0-27/linuxmodule/bandwidthmeter.o /d/click/click-1.6.0-27/linuxmodule/bandwidthshaper.o /d/click/click-1.6.0-27/linuxmodule/burster.o /d/click/click-1.6.0-27/linuxmodule/bwratedsplitter.o /d/click/click-1.6.0-27/linuxmodule/bwratedunqueue.o /d/click/click-1.6.0-27/linuxmodule/checkcrc32.o /d/click/click-1.6.0-27/linuxmodule/checklength.o /d/click/click-1.6.0-27/linuxmodule/checkpaint.o /d/click/click-1.6.0-27/linuxmodule/classifier.o /d/click/click-1.6.0-27/linuxmodule/compblock.o /d/click/click-1.6.0-27/linuxmodule/counter.o /d/click/click-1.6.0-27/linuxmodule/delayshaper.o /d/click/click-1.6.0-27/linuxmodule/delayunqueue.o /d/click/click-1.6.0-27/linuxmodule/devirtualizeinfo.o /d/click/click-1.6.0-27/linuxmodule/discard.o /d/click/click-1.6.0-27/linuxmodule/discardnofree.o /d/click/click-1.6.0-27/linuxmodule/drivermanager.o /d/click/click-1.6.0-27/linuxmodule/dropbroadcasts.o /d/click/click-1.6.0-27/linuxmodule/drr.o /d/click/click-1.6.0-27/linuxmodule/frontdropqueue.o /d/click/click-1.6.0-27/linuxmodule/fullnotequeue.o /d/click/click-1.6.0-27/linuxmodule/hashswitch.o /d/click/click-1.6.0-27/linuxmodule/idle.o /d/click/click-1.6.0-27/linuxmodule/infinitesource.o /d/click/click-1.6.0-27/linuxmodule/linkunqueue.o /d/click/click-1.6.0-27/linuxmodule/messageelement.o /d/click/click-1.6.0-27/linuxmodule/meter.o /d/click/click-1.6.0-27/linuxmodule/mixedqueue.o /d/click/click-1.6.0-27/linuxmodule/msqueue.o /d/click/click-1.6.0-27/linuxmodule/notifierqueue.o /d/click/click-1.6.0-27/linuxmodule/nullelement.o /d/click/click-1.6.0-27/linuxmodule/nulls.o /d/click/click-1.6.0-27/linuxmodule/paint.o /d/click/click-1.6.0-27/linuxmodule/paintswitch.o /d/click/click-1.6.0-27/linuxmodule/painttee.o /d/click/click-1.6.0-27/linuxmodule/pokehandlers.o /d/click/click-1.6.0-27/linuxmodule/print.o /d/click/click-1.6.0-27/linuxmodule/priosched.o /d/click/click-1.6.0-27/linuxmodule/pullswitch.o /d/click/click-1.6.0-27/linuxmodule/quitwatcher.o /d/click/click-1.6.0-27/linuxmodule/randomerror.o /d/click/click-1.6.0-27/linuxmodule/randomsample.o /d/click/click-1.6.0-27/linuxmodule/randomsource.o /d/click/click-1.6.0-27/linuxmodule/randomswitch.o /d/click/click-1.6.0-27/linuxmodule/ratedsource.o /d/click/click-1.6.0-27/linuxmodule/ratedsplitter.o /d/click/click-1.6.0-27/linuxmodule/ratedunqueue.o /d/click/click-1.6.0-27/linuxmodule/rrsched.o /d/click/click-1.6.0-27/linuxmodule/rrswitch.o /d/click/click-1.6.0-27/linuxmodule/script.o /d/click/click-1.6.0-27/linuxmodule/setannobyte.o /d/click/click-1.6.0-27/linuxmodule/setcrc32.o /d/click/click-1.6.0-27/linuxmodule/setpackettype.o /d/click/click-1.6.0-27/linuxmodule/settimestamp.o /d/click/click-1.6.0-27/linuxmodule/shaper.o /d/click/click-1.6.0-27/linuxmodule/simplequeue.o /d/click/click-1.6.0-27/linuxmodule/spinlockacquire.o /d/click/click-1.6.0-27/linuxmodule/spinlockinfo.o /d/click/click-1.6.0-27/linuxmodule/spinlockrelease.o /d/click/click-1.6.0-27/linuxmodule/staticpullswitch.o /d/click/click-1.6.0-27/linuxmodule/staticswitch.o /d/click/click-1.6.0-27/linuxmodule/storedata.o /d/click/click-1.6.0-27/linuxmodule/stridesched.o /d/click/click-1.6.0-27/linuxmodule/strideswitch.o /d/click/click-1.6.0-27/linuxmodule/strip.o /d/click/click-1.6.0-27/linuxmodule/striptonet.o /d/click/click-1.6.0-27/linuxmodule/suppressor.o /d/click/click-1.6.0-27/linuxmodule/switch.o /d/click/click-1.6.0-27/linuxmodule/tee.o /d/click/click-1.6.0-27/linuxmodule/timedsink.o /d/click/click-1.6.0-27/linuxmodule/timedsource.o /d/click/click-1.6.0-27/linuxmodule/truncate.o /d/click/click-1.6.0-27/linuxmodule/unqueue.o /d/click/click-1.6.0-27/linuxmodule/unqueue2.o /d/click/click-1.6.0-27/linuxmodule/unstrip.o /d/click/click-1.6.0-27/linuxmodule/checktcpheader.o /d/click/click-1.6.0-27/linuxmodule/checkudpheader.o /d/click/click-1.6.0-27/linuxmodule/dynudpipencap.o /d/click/click-1.6.0-27/linuxmodule/iprewriter.o /d/click/click-1.6.0-27/linuxmodule/settcpchecksum.o /d/click/click-1.6.0-27/linuxmodule/setudpchecksum.o /d/click/click-1.6.0-27/linuxmodule/tcprewriter.o /d/click/click-1.6.0-27/linuxmodule/udpipencap.o /d/click/click-1.6.0-27/linuxmodule/kernelversion.o /d/click/click-1.6.0-27/linuxmodule/read-pmc.o /d/click/click-1.6.0-27/linuxmodule/config.o /d/click/click-1.6.0-27/linuxmodule/sched.o /d/click/click-1.6.0-27/linuxmodule/module.o /d/click/click-1.6.0-27/linuxmodule/clickfs.o /d/click/click-1.6.0-27/linuxmodule/skbmgr.o /d/click/click-1.6.0-27/linuxmodule/ksyms.o /d/click/click-1.6.0-27/linuxmodule/elements.o
+diff -Nurb click-1.6.0/linuxmodule/.tmp_versions/proclikefs.mod click-1.6.0-27/linuxmodule/.tmp_versions/proclikefs.mod
+--- click-1.6.0/linuxmodule/.tmp_versions/proclikefs.mod       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/linuxmodule/.tmp_versions/proclikefs.mod    2009-02-11 16:55:09.000000000 -0500
+@@ -0,0 +1,2 @@
++/d/click/click-1.6.0-27/linuxmodule/proclikefs.ko
++/d/click/click-1.6.0-27/linuxmodule/proclikefsmod.o
+diff -Nurb click-1.6.0/linuxmodule/Makefile click-1.6.0-27/linuxmodule/Makefile
+--- click-1.6.0/linuxmodule/Makefile   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/linuxmodule/Makefile        2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,294 @@
++## The following line supports click-mkmindriver and should not be changed.
++## Click linuxmodule driver Makefile ##
++SHELL = /bin/sh
++
++subdir := linuxmodule
++conf_auxdir = $(top_srcdir)
++
++prefix = /d/click/click-1.6.0-27/inst
++exec_prefix = /d/click/click-1.6.0-27/inst
++bindir = /d/click/click-1.6.0-27/inst/bin
++sbindir = /d/click/click-1.6.0-27/inst/sbin
++libdir = /d/click/click-1.6.0-27/inst/lib
++linuxdir = /d/kernels/linux-2.6.27.10-clickport
++
++LIB_CXX_OBJS = string.o straccum.o nameinfo.o \
++      bitvector.o vectorv.o templatei.o bighashmap_arena.o \
++      ipaddress.o ipflowid.o etheraddress.o \
++      packet.o \
++      error.o timestamp.o glue.o task.o timer.o atomic.o gaprate.o \
++      element.o \
++      confparse.o variableenv.o lexer.o elemfilter.o \
++      routerthread.o router.o master.o handlercall.o notifier.o \
++      integers.o iptable.o \
++      driver.o ino.o \
++      $(EXTRA_DRIVER_OBJS)
++
++EXTRA_DRIVER_OBJS = 
++
++LIB_C_OBJS = crc32.o in_cksum.o
++
++LINUXMODULE_CXX_OBJS = config.o sched.o module.o clickfs.o skbmgr.o
++
++LINUXMODULE_C_OBJS = kernelversion.o read-pmc.o
++
++STD_ELEMENT_OBJS = addressinfo.o alignmentinfo.o \
++      errorelement.o portinfo.o scheduleinfo.o
++
++ifndef MINDRIVER
++DRIVER = click
++ELEMENTSCONF = elements
++KSYMS = ksyms
++else
++DRIVER = $(MINDRIVER)click
++ELEMENTSCONF = elements_$(MINDRIVER)
++KSYMS = ksyms_$(MINDRIVER)
++endif
++
++INSTALLOBJS = $(DRIVER).o proclikefs.o
++
++
++ifeq (1,1)
++
++##########################################################################
++## LINUX 2.6                                                          ##
++
++KERNELPATH = /d/kernels/linux-2.6.27.10-clickport
++
++ifeq ($(KBUILD_EXTMOD),)
++top_srcdir := ..
++srcdir := .
++top_builddir := ..
++else
++ifeq (.,.)
++top_srcdir := $(src)/..
++srcdir := $(src)
++else
++ifeq ($(patsubst /%,/,.),/)
++top_srcdir := ..
++srcdir := .
++else
++top_srcdir := $(obj)/..
++srcdir := $(obj)/.
++endif
++endif
++top_builddir := $(obj)/..
++endif
++
++CLICKINSTALL = /usr/bin/install -c
++CLICKINSTALL_DATA = /usr/bin/install -c -m 644
++CLICKmkinstalldirs = $(conf_auxdir)/mkinstalldirs
++
++CLICK_ELEM2MAKE = $(top_builddir)/click-buildtool elem2make --linux26
++
++CLICKCC = gcc -w -W -Wall
++CLICKCXX = g++ -w -W -Wall -fno-exceptions -fno-rtti  -D__SMP__
++
++LINUXCFLAGS = $(shell echo "$(CPPFLAGS) $(CFLAGS)" | sed \
++      -e s,-fno-unit-at-a-time,, -e s,-Wstrict-prototypes,, \
++      -e s,-Wdeclaration-after-statement,, \
++      -e s,-Wno-pointer-sign,, -e s,-fno-common,,)
++CLICKCPPFLAGS =  -DCLICK_LINUXMODULE
++CLICKCFLAGS =  -O2
++CLICKCXXFLAGS =  -O2
++CLICKDEPCFLAGS = -Wp,-MD,$(depfile)
++
++CLICKDEFS = -DHAVE_CONFIG_H 
++CLICKINCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
++      -I$(srcdir) -I$(top_srcdir) -I$(linuxdir)/include -I$(linuxdir)/include/asm/mach-default
++
++CXXCOMPILE = $(CLICKCXX) $(LINUXCFLAGS) $(CLICKCPPFLAGS) $(CLICKCFLAGS) \
++      $(CLICKCXXFLAGS) $(CLICKDEFS) $(CLICKINCLUDES) $(CLICKDEPCFLAGS)
++COMPILE = $(CLICKCC) $(LINUXCFLAGS) $(CLICKCPPFLAGS) $(CLICKCFLAGS) \
++      $(CLICKDEFS) $(CLICKINCLUDES) $(CLICKDEPCFLAGS)
++
++quiet_cmd_cxxcompile = CXX $(quiet_modtag) $(subst $(obj)/,,$@)
++cmd_cxxcompile = $(CXXCOMPILE) -c -o $@ $<
++
++quiet_cmd_ccompile = CC $(quiet_modtag) $(subst $(obj)/,,$@)
++cmd_ccompile = $(COMPILE) -c -o $@ $<
++
++EXTRA_CFLAGS = $(CLICKCPPFLAGS) $(CLICKCFLAGS) $(CLICKDEFS) $(CLICKINCLUDES) 
++
++obj-m += $(INSTALLOBJS)
++
++$(DRIVER)-objs = $(LIB_C_OBJS) $(LIB_CXX_OBJS) $(STD_ELEMENT_OBJS) \
++      $(ELEMENT_OBJS) $(LINUXMODULE_C_OBJS) $(LINUXMODULE_CXX_OBJS) \
++      $(KSYMS).o $(ELEMENTSCONF).o
++proclikefs-objs = proclikefsmod.o
++
++KSYM_OBJS = $(LIB_C_OBJS) $(LIB_CXX_OBJS) $(STD_ELEMENT_OBJS) \
++      $(ELEMENT_OBJS) $(LINUXMODULE_C_OBJS) $(LINUXMODULE_CXX_OBJS)
++
++all: Makefile $(ELEMENTSCONF).mk $(ELEMENTSCONF).cc always
++      $(MAKE) -C $(KERNELPATH) M=$(shell pwd) modules
++
++
++$(addprefix $(obj)/,$(LIB_CXX_OBJS)): $(obj)/%.o : $(top_srcdir)/lib/%.cc
++      $(call if_changed_dep,cxxcompile)
++
++$(addprefix $(obj)/,$(LIB_C_OBJS)): $(obj)/%.o : $(top_srcdir)/lib/%.c
++      $(call if_changed_dep,ccompile)
++
++$(addprefix $(obj)/,$(LINUXMODULE_CXX_OBJS)): $(obj)/%.o : $(srcdir)/%.cc
++      $(call if_changed_dep,cxxcompile)
++
++$(addprefix $(obj)/,$(LINUXMODULE_C_OBJS)): $(obj)/%.o : $(srcdir)/%.c
++      $(call if_changed_dep,ccompile)
++
++$(addprefix $(obj)/,$(STD_ELEMENT_OBJS)): $(obj)/%.o : $(top_srcdir)/elements/standard/%.cc
++      $(call if_changed_dep,cxxcompile)
++
++$(obj)/$(ELEMENTSCONF).o : $(obj)/$(ELEMENTSCONF).cc
++      $(call if_changed_dep,cxxcompile)
++
++$(obj)/proclikefsmod.o : $(srcdir)/proclikefs.c
++      $(call if_changed_rule,cc_o_c)
++
++$(obj)/$(KSYMS).c: $(addprefix $(obj)/,$(KSYM_OBJS)) $(top_builddir)/click-buildtool $(addprefix $(obj)/,$(ELEMENTSCONF).mk)
++      $(top_builddir)/click-buildtool ksyms -C $(obj) -x kernelversion.o $(KSYM_OBJS) > $(obj)/$(KSYMS).c
++$(obj)/$(KSYMS).o: $(obj)/$(KSYMS).c
++      $(call if_changed_dep,ccompile)
++
++ifneq ($(MAKECMDGOALS),clean)
++-include $(obj)/$(ELEMENTSCONF).mk
++endif
++
++# Don't install in Linux directories for now
++# $(MAKE) -C $(KERNELPATH) M=$(shell pwd) modules_install
++install: Makefile $(ELEMENTSCONF).mk $(ELEMENTSCONF).cc all
++      $(CLICKmkinstalldirs) $(DESTDIR)$(libdir)
++      for i in $(patsubst %.o,%.ko,$(INSTALLOBJS)); do $(CLICKINSTALL_DATA) $$i $(DESTDIR)$(libdir)/$$i; done
++install-man:
++      :
++uninstall:
++      for i in $(patsubst %.o,%.ko,$(INSTALLOBJS)); do /bin/rm -f $(DESTDIR)$(libdir)/$$i; done
++
++else
++
++##########################################################################
++## LINUX 2.4                                                          ##
++
++top_srcdir := ..
++srcdir := .
++top_builddir := ..
++
++VPATH = .:$(top_srcdir)/lib:$(top_srcdir)/$(subdir):$(top_srcdir)/elements/standard
++
++CC = gcc -w -W -Wall
++CPP = gcc -W -Wall -E
++CXX = g++ -w -W -Wall -fno-exceptions -fno-rtti  -D__SMP__
++CXXCPP = g++ -W -Wall  -E
++LD = ld
++STRIP = strip
++INSTALL = /usr/bin/install -c
++INSTALL_DATA = /usr/bin/install -c -m 644
++mkinstalldirs = $(conf_auxdir)/mkinstalldirs
++CLICK_ELEM2MAKE = $(top_builddir)/click-buildtool elem2make
++
++ifeq ($(V),1)
++ccompile = $(COMPILE) $(1)
++cxxcompile = $(CXXCOMPILE) $(1)
++else
++ccompile = @/bin/echo ' ' $(2) $< && $(COMPILE) $(1)
++cxxcompile = @/bin/echo ' ' $(2) $< && $(CXXCOMPILE) $(1)
++endif
++
++.SUFFIXES:
++.SUFFIXES: .c .cc .o .S .s .i .ii
++
++.c.o:
++      $(call ccompile,-c $< -o $@,CC)
++.c.i:
++      $(call ccompile,-E $< > $@,CPP)
++.s.o:
++      $(call ccompile,-c $< -o $@,ASM)
++.S.o:
++      $(call ccompile,-c $< -o $@,ASM)
++.cc.o:
++      $(call cxxcompile,-c $< -o $@,CXX)
++.cc.s:
++      $(call cxxcompile,-S $< -o $@,CXX -S)
++.cc.ii:
++      $(call cxxcompile,-E $< > $@,CXXCPP)
++
++
++OBJS = $(LIB_CXX_OBJS) $(LIB_C_OBJS) $(STD_ELEMENT_OBJS) $(ELEMENT_OBJS) \
++      $(LINUXMODULE_CXX_OBJS) $(LINUXMODULE_C_OBJS) $(ELEMENTSCONF).o
++
++CPPFLAGS =  -DCLICK_LINUXMODULE
++CFLAGS =  -O2
++CXXFLAGS =  -O2
++DEPCFLAGS = -MD
++
++DEFS = -DHAVE_CONFIG_H 
++INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
++      -I$(srcdir) -I$(top_srcdir) -I$(linuxdir)/include
++LDFLAGS = 
++LIBS = 
++
++CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) $(DEPCFLAGS)
++CXXLD = $(CXX)
++CXXLINK = $(CXXLD) $(CXXFLAGS) $(LDFLAGS) -o $@
++COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEPCFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(CFLAGS) $(LDFLAGS) -o $@
++
++all: $(INSTALLOBJS)
++
++ifneq ($(MAKECMDGOALS),clean)
++-include $(ELEMENTSCONF).mk
++endif
++
++$(DRIVER).o: Makefile $(OBJS)
++      $(LD) -r -o $(DRIVER).o $(OBJS)
++      $(STRIP) -g $(DRIVER).o
++
++proclikefs.o: proclikefs.c Makefile
++      $(COMPILE) -D__KERNEL__ -DMODULE -c $< -o $@
++
++DEPFILES := $(wildcard *.d)
++ifneq ($(DEPFILES),)
++include $(DEPFILES)
++endif
++
++install: $(INSTALLOBJS)
++      $(mkinstalldirs) $(DESTDIR)$(libdir)
++      for i in $(INSTALLOBJS); do $(INSTALL_DATA) $$i $(DESTDIR)$(libdir)/$$i; done
++install-man:
++      :
++uninstall:
++      for i in $(INSTALLOBJS); do /bin/rm -f $(DESTDIR)$(libdir)/$$i; done
++
++endif
++
++
++##########################################################################
++## ANY LINUX                                                          ##
++
++elemlist:
++      @/bin/rm -f elements.conf
++      @$(MAKE) elements.conf
++elements.conf: $(top_builddir)/config.status $(top_builddir)/click-buildtool
++      echo "linuxmodule  app aqm ethernet icmp ip standard tcpudp" | $(top_builddir)/click-buildtool findelem -r linuxmodule -p $(top_srcdir) > elements.conf
++$(ELEMENTSCONF).mk: $(ELEMENTSCONF).conf $(top_builddir)/click-buildtool
++      $(CLICK_ELEM2MAKE) -x "$(STD_ELEMENT_OBJS)" < $(ELEMENTSCONF).conf > $(ELEMENTSCONF).mk
++$(ELEMENTSCONF).cc: $(ELEMENTSCONF).conf $(top_builddir)/click-buildtool
++      $(top_builddir)/click-buildtool elem2export < $(ELEMENTSCONF).conf > $(ELEMENTSCONF).cc
++      @rm -f $(ELEMENTSCONF).d
++
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++      cd $(top_builddir) \
++        && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
++
++always:
++      @:
++
++clean:
++      -rm -f *~ *.d *.o *.mod.c *.ko
++      -rm -f .version .*.o.flags .*.o.d .*.o.cmd .*.ko.cmd
++      -rm -f $(ELEMENTSCONF).mk $(ELEMENTSCONF).cc $(KSYMS).c elements.conf
++distclean: clean
++      -rm -f Makefile
++
++.PHONY: all clean distclean elemlist install uninstall always
+diff -Nurb click-1.6.0/linuxmodule/Makefile.in click-1.6.0-27/linuxmodule/Makefile.in
+--- click-1.6.0/linuxmodule/Makefile.in        2007-09-12 18:26:17.000000000 -0400
++++ click-1.6.0-27/linuxmodule/Makefile.in     2009-01-27 12:21:27.000000000 -0500
+@@ -95,7 +95,7 @@
+ CLICKDEFS = @DEFS@ 
+ CLICKINCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
+-      -I$(srcdir) -I$(top_srcdir) -I$(linuxdir)/include
++      -I$(srcdir) -I$(top_srcdir) -I$(linuxdir)/include -I$(linuxdir)/include/asm/mach-default
+ CXXCOMPILE = $(CLICKCXX) $(LINUXCFLAGS) $(CLICKCPPFLAGS) $(CLICKCFLAGS) \
+       $(CLICKCXXFLAGS) $(CLICKDEFS) $(CLICKINCLUDES) $(CLICKDEPCFLAGS)
+diff -Nurb click-1.6.0/linuxmodule/Makefile.in.orig click-1.6.0-27/linuxmodule/Makefile.in.orig
+--- click-1.6.0/linuxmodule/Makefile.in.orig   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/linuxmodule/Makefile.in.orig        2007-09-12 18:26:17.000000000 -0400
+@@ -0,0 +1,294 @@
++## The following line supports click-mkmindriver and should not be changed.
++## Click linuxmodule driver Makefile ##
++SHELL = @SHELL@
++
++subdir := linuxmodule
++conf_auxdir = @conf_auxdir@
++
++prefix = @prefix@
++exec_prefix = @exec_prefix@
++bindir = @bindir@
++sbindir = @sbindir@
++libdir = @libdir@
++linuxdir = @linuxdir@
++
++LIB_CXX_OBJS = string.o straccum.o nameinfo.o \
++      bitvector.o vectorv.o templatei.o bighashmap_arena.o \
++      ipaddress.o ipflowid.o etheraddress.o \
++      packet.o \
++      error.o timestamp.o glue.o task.o timer.o atomic.o gaprate.o \
++      element.o \
++      confparse.o variableenv.o lexer.o elemfilter.o \
++      routerthread.o router.o master.o handlercall.o notifier.o \
++      integers.o iptable.o \
++      driver.o ino.o \
++      $(EXTRA_DRIVER_OBJS)
++
++EXTRA_DRIVER_OBJS = @EXTRA_DRIVER_OBJS@
++
++LIB_C_OBJS = crc32.o in_cksum.o
++
++LINUXMODULE_CXX_OBJS = config.o sched.o module.o clickfs.o skbmgr.o
++
++LINUXMODULE_C_OBJS = kernelversion.o read-pmc.o
++
++STD_ELEMENT_OBJS = addressinfo.o alignmentinfo.o \
++      errorelement.o portinfo.o scheduleinfo.o
++
++ifndef MINDRIVER
++DRIVER = click
++ELEMENTSCONF = elements
++KSYMS = ksyms
++else
++DRIVER = $(MINDRIVER)click
++ELEMENTSCONF = elements_$(MINDRIVER)
++KSYMS = ksyms_$(MINDRIVER)
++endif
++
++INSTALLOBJS = $(DRIVER).o proclikefs.o
++
++
++ifeq (@LINUXMODULE_2_6@,1)
++
++##########################################################################
++## LINUX 2.6                                                          ##
++
++KERNELPATH = @linuxdir@
++
++ifeq ($(KBUILD_EXTMOD),)
++top_srcdir := @top_srcdir@
++srcdir := @srcdir@
++top_builddir := ..
++else
++ifeq (@srcdir@,.)
++top_srcdir := $(src)/..
++srcdir := $(src)
++else
++ifeq ($(patsubst /%,/,@srcdir@),/)
++top_srcdir := @top_srcdir@
++srcdir := @srcdir@
++else
++top_srcdir := $(obj)/@top_srcdir@
++srcdir := $(obj)/@srcdir@
++endif
++endif
++top_builddir := $(obj)/..
++endif
++
++CLICKINSTALL = @INSTALL@
++CLICKINSTALL_DATA = @INSTALL@ -m 644
++CLICKmkinstalldirs = $(conf_auxdir)/mkinstalldirs
++
++CLICK_ELEM2MAKE = $(top_builddir)/click-buildtool elem2make --linux26
++
++CLICKCC = @KERNEL_CC@
++CLICKCXX = @KERNEL_CXX@
++
++LINUXCFLAGS = $(shell echo "$(CPPFLAGS) $(CFLAGS)" | sed \
++      -e s,-fno-unit-at-a-time,, -e s,-Wstrict-prototypes,, \
++      -e s,-Wdeclaration-after-statement,, \
++      -e s,-Wno-pointer-sign,, -e s,-fno-common,,)
++CLICKCPPFLAGS = @CPPFLAGS@ -DCLICK_LINUXMODULE
++CLICKCFLAGS = @CFLAGS_NDEBUG@
++CLICKCXXFLAGS = @CXXFLAGS_NDEBUG@
++CLICKDEPCFLAGS = -Wp,-MD,$(depfile)
++
++CLICKDEFS = @DEFS@ 
++CLICKINCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
++      -I$(srcdir) -I$(top_srcdir) -I$(linuxdir)/include
++
++CXXCOMPILE = $(CLICKCXX) $(LINUXCFLAGS) $(CLICKCPPFLAGS) $(CLICKCFLAGS) \
++      $(CLICKCXXFLAGS) $(CLICKDEFS) $(CLICKINCLUDES) $(CLICKDEPCFLAGS)
++COMPILE = $(CLICKCC) $(LINUXCFLAGS) $(CLICKCPPFLAGS) $(CLICKCFLAGS) \
++      $(CLICKDEFS) $(CLICKINCLUDES) $(CLICKDEPCFLAGS)
++
++quiet_cmd_cxxcompile = CXX $(quiet_modtag) $(subst $(obj)/,,$@)
++cmd_cxxcompile = $(CXXCOMPILE) -c -o $@ $<
++
++quiet_cmd_ccompile = CC $(quiet_modtag) $(subst $(obj)/,,$@)
++cmd_ccompile = $(COMPILE) -c -o $@ $<
++
++EXTRA_CFLAGS = $(CLICKCPPFLAGS) $(CLICKCFLAGS) $(CLICKDEFS) $(CLICKINCLUDES) 
++
++obj-m += $(INSTALLOBJS)
++
++$(DRIVER)-objs = $(LIB_C_OBJS) $(LIB_CXX_OBJS) $(STD_ELEMENT_OBJS) \
++      $(ELEMENT_OBJS) $(LINUXMODULE_C_OBJS) $(LINUXMODULE_CXX_OBJS) \
++      $(KSYMS).o $(ELEMENTSCONF).o
++proclikefs-objs = proclikefsmod.o
++
++KSYM_OBJS = $(LIB_C_OBJS) $(LIB_CXX_OBJS) $(STD_ELEMENT_OBJS) \
++      $(ELEMENT_OBJS) $(LINUXMODULE_C_OBJS) $(LINUXMODULE_CXX_OBJS)
++
++all: Makefile $(ELEMENTSCONF).mk $(ELEMENTSCONF).cc always
++      $(MAKE) -C $(KERNELPATH) M=$(shell pwd) modules
++
++
++$(addprefix $(obj)/,$(LIB_CXX_OBJS)): $(obj)/%.o : $(top_srcdir)/lib/%.cc
++      $(call if_changed_dep,cxxcompile)
++
++$(addprefix $(obj)/,$(LIB_C_OBJS)): $(obj)/%.o : $(top_srcdir)/lib/%.c
++      $(call if_changed_dep,ccompile)
++
++$(addprefix $(obj)/,$(LINUXMODULE_CXX_OBJS)): $(obj)/%.o : $(srcdir)/%.cc
++      $(call if_changed_dep,cxxcompile)
++
++$(addprefix $(obj)/,$(LINUXMODULE_C_OBJS)): $(obj)/%.o : $(srcdir)/%.c
++      $(call if_changed_dep,ccompile)
++
++$(addprefix $(obj)/,$(STD_ELEMENT_OBJS)): $(obj)/%.o : $(top_srcdir)/elements/standard/%.cc
++      $(call if_changed_dep,cxxcompile)
++
++$(obj)/$(ELEMENTSCONF).o : $(obj)/$(ELEMENTSCONF).cc
++      $(call if_changed_dep,cxxcompile)
++
++$(obj)/proclikefsmod.o : $(srcdir)/proclikefs.c
++      $(call if_changed_rule,cc_o_c)
++
++$(obj)/$(KSYMS).c: $(addprefix $(obj)/,$(KSYM_OBJS)) $(top_builddir)/click-buildtool $(addprefix $(obj)/,$(ELEMENTSCONF).mk)
++      $(top_builddir)/click-buildtool ksyms -C $(obj) -x kernelversion.o $(KSYM_OBJS) > $(obj)/$(KSYMS).c
++$(obj)/$(KSYMS).o: $(obj)/$(KSYMS).c
++      $(call if_changed_dep,ccompile)
++
++ifneq ($(MAKECMDGOALS),clean)
++-include $(obj)/$(ELEMENTSCONF).mk
++endif
++
++# Don't install in Linux directories for now
++# $(MAKE) -C $(KERNELPATH) M=$(shell pwd) modules_install
++install: Makefile $(ELEMENTSCONF).mk $(ELEMENTSCONF).cc all
++      $(CLICKmkinstalldirs) $(DESTDIR)$(libdir)
++      for i in $(patsubst %.o,%.ko,$(INSTALLOBJS)); do $(CLICKINSTALL_DATA) $$i $(DESTDIR)$(libdir)/$$i; done
++install-man:
++      :
++uninstall:
++      for i in $(patsubst %.o,%.ko,$(INSTALLOBJS)); do /bin/rm -f $(DESTDIR)$(libdir)/$$i; done
++
++else
++
++##########################################################################
++## LINUX 2.4                                                          ##
++
++top_srcdir := @top_srcdir@
++srcdir := @srcdir@
++top_builddir := ..
++
++VPATH = .:$(top_srcdir)/lib:$(top_srcdir)/$(subdir):$(top_srcdir)/elements/standard
++
++CC = @KERNEL_CC@
++CPP = @CPP@
++CXX = @KERNEL_CXX@
++CXXCPP = @CXXCPP@
++LD = @LD@
++STRIP = @STRIP@
++INSTALL = @INSTALL@
++INSTALL_DATA = @INSTALL@ -m 644
++mkinstalldirs = $(conf_auxdir)/mkinstalldirs
++CLICK_ELEM2MAKE = $(top_builddir)/click-buildtool elem2make
++
++ifeq ($(V),1)
++ccompile = $(COMPILE) $(1)
++cxxcompile = $(CXXCOMPILE) $(1)
++else
++ccompile = @/bin/echo ' ' $(2) $< && $(COMPILE) $(1)
++cxxcompile = @/bin/echo ' ' $(2) $< && $(CXXCOMPILE) $(1)
++endif
++
++.SUFFIXES:
++.SUFFIXES: .c .cc .o .S .s .i .ii
++
++.c.o:
++      $(call ccompile,-c $< -o $@,CC)
++.c.i:
++      $(call ccompile,-E $< > $@,CPP)
++.s.o:
++      $(call ccompile,-c $< -o $@,ASM)
++.S.o:
++      $(call ccompile,-c $< -o $@,ASM)
++.cc.o:
++      $(call cxxcompile,-c $< -o $@,CXX)
++.cc.s:
++      $(call cxxcompile,-S $< -o $@,CXX -S)
++.cc.ii:
++      $(call cxxcompile,-E $< > $@,CXXCPP)
++
++
++OBJS = $(LIB_CXX_OBJS) $(LIB_C_OBJS) $(STD_ELEMENT_OBJS) $(ELEMENT_OBJS) \
++      $(LINUXMODULE_CXX_OBJS) $(LINUXMODULE_C_OBJS) $(ELEMENTSCONF).o
++
++CPPFLAGS = @CPPFLAGS@ -DCLICK_LINUXMODULE
++CFLAGS = @CFLAGS_NDEBUG@
++CXXFLAGS = @CXXFLAGS_NDEBUG@
++DEPCFLAGS = @DEPCFLAGS@
++
++DEFS = @DEFS@ 
++INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
++      -I$(srcdir) -I$(top_srcdir) -I$(linuxdir)/include
++LDFLAGS = @LDFLAGS@
++LIBS = @LIBS@
++
++CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) $(DEPCFLAGS)
++CXXLD = $(CXX)
++CXXLINK = $(CXXLD) $(CXXFLAGS) $(LDFLAGS) -o $@
++COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEPCFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(CFLAGS) $(LDFLAGS) -o $@
++
++all: $(INSTALLOBJS)
++
++ifneq ($(MAKECMDGOALS),clean)
++-include $(ELEMENTSCONF).mk
++endif
++
++$(DRIVER).o: Makefile $(OBJS)
++      $(LD) -r -o $(DRIVER).o $(OBJS)
++      $(STRIP) -g $(DRIVER).o
++
++proclikefs.o: proclikefs.c Makefile
++      $(COMPILE) -D__KERNEL__ -DMODULE -c $< -o $@
++
++DEPFILES := $(wildcard *.d)
++ifneq ($(DEPFILES),)
++include $(DEPFILES)
++endif
++
++install: $(INSTALLOBJS)
++      $(mkinstalldirs) $(DESTDIR)$(libdir)
++      for i in $(INSTALLOBJS); do $(INSTALL_DATA) $$i $(DESTDIR)$(libdir)/$$i; done
++install-man:
++      :
++uninstall:
++      for i in $(INSTALLOBJS); do /bin/rm -f $(DESTDIR)$(libdir)/$$i; done
++
++endif
++
++
++##########################################################################
++## ANY LINUX                                                          ##
++
++elemlist:
++      @/bin/rm -f elements.conf
++      @$(MAKE) elements.conf
++elements.conf: $(top_builddir)/config.status $(top_builddir)/click-buildtool
++      echo "linuxmodule @element_groups@" | $(top_builddir)/click-buildtool findelem -r linuxmodule -p $(top_srcdir) > elements.conf
++$(ELEMENTSCONF).mk: $(ELEMENTSCONF).conf $(top_builddir)/click-buildtool
++      $(CLICK_ELEM2MAKE) -x "$(STD_ELEMENT_OBJS)" < $(ELEMENTSCONF).conf > $(ELEMENTSCONF).mk
++$(ELEMENTSCONF).cc: $(ELEMENTSCONF).conf $(top_builddir)/click-buildtool
++      $(top_builddir)/click-buildtool elem2export < $(ELEMENTSCONF).conf > $(ELEMENTSCONF).cc
++      @rm -f $(ELEMENTSCONF).d
++
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++      cd $(top_builddir) \
++        && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
++
++always:
++      @:
++
++clean:
++      -rm -f *~ *.d *.o *.mod.c *.ko
++      -rm -f .version .*.o.flags .*.o.d .*.o.cmd .*.ko.cmd
++      -rm -f $(ELEMENTSCONF).mk $(ELEMENTSCONF).cc $(KSYMS).c elements.conf
++distclean: clean
++      -rm -f Makefile
++
++.PHONY: all clean distclean elemlist install uninstall always
+diff -Nurb click-1.6.0/linuxmodule/Makefile.orig click-1.6.0-27/linuxmodule/Makefile.orig
+--- click-1.6.0/linuxmodule/Makefile.orig      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/linuxmodule/Makefile.orig   2009-01-19 15:15:55.000000000 -0500
+@@ -0,0 +1,294 @@
++## The following line supports click-mkmindriver and should not be changed.
++## Click linuxmodule driver Makefile ##
++SHELL = /bin/sh
++
++subdir := linuxmodule
++conf_auxdir = $(top_srcdir)
++
++prefix = /usr/local
++exec_prefix = ${prefix}
++bindir = /usr/local/bin
++sbindir = /usr/local/sbin
++libdir = /usr/local/lib
++linuxdir = /d/kernels/linux-2.6.27.10-click
++
++LIB_CXX_OBJS = string.o straccum.o nameinfo.o \
++      bitvector.o vectorv.o templatei.o bighashmap_arena.o \
++      ipaddress.o ipflowid.o etheraddress.o \
++      packet.o \
++      error.o timestamp.o glue.o task.o timer.o atomic.o gaprate.o \
++      element.o \
++      confparse.o variableenv.o lexer.o elemfilter.o \
++      routerthread.o router.o master.o handlercall.o notifier.o \
++      integers.o iptable.o \
++      driver.o ino.o \
++      $(EXTRA_DRIVER_OBJS)
++
++EXTRA_DRIVER_OBJS = 
++
++LIB_C_OBJS = crc32.o in_cksum.o
++
++LINUXMODULE_CXX_OBJS = config.o sched.o module.o clickfs.o skbmgr.o
++
++LINUXMODULE_C_OBJS = kernelversion.o read-pmc.o
++
++STD_ELEMENT_OBJS = addressinfo.o alignmentinfo.o \
++      errorelement.o portinfo.o scheduleinfo.o
++
++ifndef MINDRIVER
++DRIVER = click
++ELEMENTSCONF = elements
++KSYMS = ksyms
++else
++DRIVER = $(MINDRIVER)click
++ELEMENTSCONF = elements_$(MINDRIVER)
++KSYMS = ksyms_$(MINDRIVER)
++endif
++
++INSTALLOBJS = $(DRIVER).o proclikefs.o
++
++
++ifeq (1,1)
++
++##########################################################################
++## LINUX 2.6                                                          ##
++
++KERNELPATH = /d/kernels/linux-2.6.27.10-click
++
++ifeq ($(KBUILD_EXTMOD),)
++top_srcdir := ..
++srcdir := .
++top_builddir := ..
++else
++ifeq (.,.)
++top_srcdir := $(src)/..
++srcdir := $(src)
++else
++ifeq ($(patsubst /%,/,.),/)
++top_srcdir := ..
++srcdir := .
++else
++top_srcdir := $(obj)/..
++srcdir := $(obj)/.
++endif
++endif
++top_builddir := $(obj)/..
++endif
++
++CLICKINSTALL = /usr/bin/install -c
++CLICKINSTALL_DATA = /usr/bin/install -c -m 644
++CLICKmkinstalldirs = $(conf_auxdir)/mkinstalldirs
++
++CLICK_ELEM2MAKE = $(top_builddir)/click-buildtool elem2make --linux26
++
++CLICKCC = gcc -w -W -Wall
++CLICKCXX = g++ -w -W -Wall -fno-exceptions -fno-rtti  -D__SMP__
++
++LINUXCFLAGS = $(shell echo "$(CPPFLAGS) $(CFLAGS)" | sed \
++      -e s,-fno-unit-at-a-time,, -e s,-Wstrict-prototypes,, \
++      -e s,-Wdeclaration-after-statement,, \
++      -e s,-Wno-pointer-sign,, -e s,-fno-common,,)
++CLICKCPPFLAGS =  -DCLICK_LINUXMODULE
++CLICKCFLAGS =  -O2
++CLICKCXXFLAGS =  -O2
++CLICKDEPCFLAGS = -Wp,-MD,$(depfile)
++
++CLICKDEFS = -DHAVE_CONFIG_H 
++CLICKINCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
++      -I$(srcdir) -I$(top_srcdir) -I$(linuxdir)/include
++
++CXXCOMPILE = $(CLICKCXX) $(LINUXCFLAGS) $(CLICKCPPFLAGS) $(CLICKCFLAGS) \
++      $(CLICKCXXFLAGS) $(CLICKDEFS) $(CLICKINCLUDES) $(CLICKDEPCFLAGS)
++COMPILE = $(CLICKCC) $(LINUXCFLAGS) $(CLICKCPPFLAGS) $(CLICKCFLAGS) \
++      $(CLICKDEFS) $(CLICKINCLUDES) $(CLICKDEPCFLAGS)
++
++quiet_cmd_cxxcompile = CXX $(quiet_modtag) $(subst $(obj)/,,$@)
++cmd_cxxcompile = $(CXXCOMPILE) -c -o $@ $<
++
++quiet_cmd_ccompile = CC $(quiet_modtag) $(subst $(obj)/,,$@)
++cmd_ccompile = $(COMPILE) -c -o $@ $<
++
++EXTRA_CFLAGS = $(CLICKCPPFLAGS) $(CLICKCFLAGS) $(CLICKDEFS) $(CLICKINCLUDES) 
++
++obj-m += $(INSTALLOBJS)
++
++$(DRIVER)-objs = $(LIB_C_OBJS) $(LIB_CXX_OBJS) $(STD_ELEMENT_OBJS) \
++      $(ELEMENT_OBJS) $(LINUXMODULE_C_OBJS) $(LINUXMODULE_CXX_OBJS) \
++      $(KSYMS).o $(ELEMENTSCONF).o
++proclikefs-objs = proclikefsmod.o
++
++KSYM_OBJS = $(LIB_C_OBJS) $(LIB_CXX_OBJS) $(STD_ELEMENT_OBJS) \
++      $(ELEMENT_OBJS) $(LINUXMODULE_C_OBJS) $(LINUXMODULE_CXX_OBJS)
++
++all: Makefile $(ELEMENTSCONF).mk $(ELEMENTSCONF).cc always
++      $(MAKE) -C $(KERNELPATH) M=$(shell pwd) modules
++
++
++$(addprefix $(obj)/,$(LIB_CXX_OBJS)): $(obj)/%.o : $(top_srcdir)/lib/%.cc
++      $(call if_changed_dep,cxxcompile)
++
++$(addprefix $(obj)/,$(LIB_C_OBJS)): $(obj)/%.o : $(top_srcdir)/lib/%.c
++      $(call if_changed_dep,ccompile)
++
++$(addprefix $(obj)/,$(LINUXMODULE_CXX_OBJS)): $(obj)/%.o : $(srcdir)/%.cc
++      $(call if_changed_dep,cxxcompile)
++
++$(addprefix $(obj)/,$(LINUXMODULE_C_OBJS)): $(obj)/%.o : $(srcdir)/%.c
++      $(call if_changed_dep,ccompile)
++
++$(addprefix $(obj)/,$(STD_ELEMENT_OBJS)): $(obj)/%.o : $(top_srcdir)/elements/standard/%.cc
++      $(call if_changed_dep,cxxcompile)
++
++$(obj)/$(ELEMENTSCONF).o : $(obj)/$(ELEMENTSCONF).cc
++      $(call if_changed_dep,cxxcompile)
++
++$(obj)/proclikefsmod.o : $(srcdir)/proclikefs.c
++      $(call if_changed_rule,cc_o_c)
++
++$(obj)/$(KSYMS).c: $(addprefix $(obj)/,$(KSYM_OBJS)) $(top_builddir)/click-buildtool $(addprefix $(obj)/,$(ELEMENTSCONF).mk)
++      $(top_builddir)/click-buildtool ksyms -C $(obj) -x kernelversion.o $(KSYM_OBJS) > $(obj)/$(KSYMS).c
++$(obj)/$(KSYMS).o: $(obj)/$(KSYMS).c
++      $(call if_changed_dep,ccompile)
++
++ifneq ($(MAKECMDGOALS),clean)
++-include $(obj)/$(ELEMENTSCONF).mk
++endif
++
++# Don't install in Linux directories for now
++# $(MAKE) -C $(KERNELPATH) M=$(shell pwd) modules_install
++install: Makefile $(ELEMENTSCONF).mk $(ELEMENTSCONF).cc all
++      $(CLICKmkinstalldirs) $(DESTDIR)$(libdir)
++      for i in $(patsubst %.o,%.ko,$(INSTALLOBJS)); do $(CLICKINSTALL_DATA) $$i $(DESTDIR)$(libdir)/$$i; done
++install-man:
++      :
++uninstall:
++      for i in $(patsubst %.o,%.ko,$(INSTALLOBJS)); do /bin/rm -f $(DESTDIR)$(libdir)/$$i; done
++
++else
++
++##########################################################################
++## LINUX 2.4                                                          ##
++
++top_srcdir := ..
++srcdir := .
++top_builddir := ..
++
++VPATH = .:$(top_srcdir)/lib:$(top_srcdir)/$(subdir):$(top_srcdir)/elements/standard
++
++CC = gcc -w -W -Wall
++CPP = gcc -W -Wall -E
++CXX = g++ -w -W -Wall -fno-exceptions -fno-rtti  -D__SMP__
++CXXCPP = g++ -W -Wall  -E
++LD = ld
++STRIP = strip
++INSTALL = /usr/bin/install -c
++INSTALL_DATA = /usr/bin/install -c -m 644
++mkinstalldirs = $(conf_auxdir)/mkinstalldirs
++CLICK_ELEM2MAKE = $(top_builddir)/click-buildtool elem2make
++
++ifeq ($(V),1)
++ccompile = $(COMPILE) $(1)
++cxxcompile = $(CXXCOMPILE) $(1)
++else
++ccompile = @/bin/echo ' ' $(2) $< && $(COMPILE) $(1)
++cxxcompile = @/bin/echo ' ' $(2) $< && $(CXXCOMPILE) $(1)
++endif
++
++.SUFFIXES:
++.SUFFIXES: .c .cc .o .S .s .i .ii
++
++.c.o:
++      $(call ccompile,-c $< -o $@,CC)
++.c.i:
++      $(call ccompile,-E $< > $@,CPP)
++.s.o:
++      $(call ccompile,-c $< -o $@,ASM)
++.S.o:
++      $(call ccompile,-c $< -o $@,ASM)
++.cc.o:
++      $(call cxxcompile,-c $< -o $@,CXX)
++.cc.s:
++      $(call cxxcompile,-S $< -o $@,CXX -S)
++.cc.ii:
++      $(call cxxcompile,-E $< > $@,CXXCPP)
++
++
++OBJS = $(LIB_CXX_OBJS) $(LIB_C_OBJS) $(STD_ELEMENT_OBJS) $(ELEMENT_OBJS) \
++      $(LINUXMODULE_CXX_OBJS) $(LINUXMODULE_C_OBJS) $(ELEMENTSCONF).o
++
++CPPFLAGS =  -DCLICK_LINUXMODULE
++CFLAGS =  -O2
++CXXFLAGS =  -O2
++DEPCFLAGS = -MD
++
++DEFS = -DHAVE_CONFIG_H 
++INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
++      -I$(srcdir) -I$(top_srcdir) -I$(linuxdir)/include
++LDFLAGS = 
++LIBS = 
++
++CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) $(DEPCFLAGS)
++CXXLD = $(CXX)
++CXXLINK = $(CXXLD) $(CXXFLAGS) $(LDFLAGS) -o $@
++COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEPCFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(CFLAGS) $(LDFLAGS) -o $@
++
++all: $(INSTALLOBJS)
++
++ifneq ($(MAKECMDGOALS),clean)
++-include $(ELEMENTSCONF).mk
++endif
++
++$(DRIVER).o: Makefile $(OBJS)
++      $(LD) -r -o $(DRIVER).o $(OBJS)
++      $(STRIP) -g $(DRIVER).o
++
++proclikefs.o: proclikefs.c Makefile
++      $(COMPILE) -D__KERNEL__ -DMODULE -c $< -o $@
++
++DEPFILES := $(wildcard *.d)
++ifneq ($(DEPFILES),)
++include $(DEPFILES)
++endif
++
++install: $(INSTALLOBJS)
++      $(mkinstalldirs) $(DESTDIR)$(libdir)
++      for i in $(INSTALLOBJS); do $(INSTALL_DATA) $$i $(DESTDIR)$(libdir)/$$i; done
++install-man:
++      :
++uninstall:
++      for i in $(INSTALLOBJS); do /bin/rm -f $(DESTDIR)$(libdir)/$$i; done
++
++endif
++
++
++##########################################################################
++## ANY LINUX                                                          ##
++
++elemlist:
++      @/bin/rm -f elements.conf
++      @$(MAKE) elements.conf
++elements.conf: $(top_builddir)/config.status $(top_builddir)/click-buildtool
++      echo "linuxmodule  app aqm ethernet icmp ip standard tcpudp" | $(top_builddir)/click-buildtool findelem -r linuxmodule -p $(top_srcdir) > elements.conf
++$(ELEMENTSCONF).mk: $(ELEMENTSCONF).conf $(top_builddir)/click-buildtool
++      $(CLICK_ELEM2MAKE) -x "$(STD_ELEMENT_OBJS)" < $(ELEMENTSCONF).conf > $(ELEMENTSCONF).mk
++$(ELEMENTSCONF).cc: $(ELEMENTSCONF).conf $(top_builddir)/click-buildtool
++      $(top_builddir)/click-buildtool elem2export < $(ELEMENTSCONF).conf > $(ELEMENTSCONF).cc
++      @rm -f $(ELEMENTSCONF).d
++
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++      cd $(top_builddir) \
++        && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
++
++always:
++      @:
++
++clean:
++      -rm -f *~ *.d *.o *.mod.c *.ko
++      -rm -f .version .*.o.flags .*.o.d .*.o.cmd .*.ko.cmd
++      -rm -f $(ELEMENTSCONF).mk $(ELEMENTSCONF).cc $(KSYMS).c elements.conf
++distclean: clean
++      -rm -f Makefile
++
++.PHONY: all clean distclean elemlist install uninstall always
+diff -Nurb click-1.6.0/linuxmodule/Module.symvers click-1.6.0-27/linuxmodule/Module.symvers
+--- click-1.6.0/linuxmodule/Module.symvers     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/linuxmodule/Module.symvers  2009-02-11 16:55:10.000000000 -0500
+@@ -0,0 +1,3826 @@
++0x00000000    _ZN4IPRw9clear_mapER7HashMapI8IPFlowIDPNS_7MappingEE    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV7Element    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7MSQueue10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV4IPRw       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPMirror13simple_actionEP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z20click_cleanup_configv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13AlignmentInfo5queryEP7ElementiRiS2_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ToHostC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13RadixIPLookup9add_routeERK7IPRoutebPS0_P12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIN7IPTable5EntryEE8capacityEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV10IPRewriter        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ICMPRewriter13simple_actionEP6Packet       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZlsR11StringAccumRK12EtherAddress      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7PullTeeC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7PullTeeC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15SpinlockRelease10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10Classifier16count_inbranchesER6VectorIiE  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ClassifierC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5AlignD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5AlignC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjED1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjE9set_arenaEP20HashMap_ArenaFactory      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjEC2EiRKj    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjEC1EiRKj    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PacketTestC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8ToDevice10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RFC2507c13simple_actionEP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEE4veltEPS1_i /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPEncap12add_handlersEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDPvE6insertERKS0_S1_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10EtherEncap20can_live_reconfigureEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV18SilentErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11DelayShaper10class_nameEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12CompareBlock23fwd_weight_read_handlerEP7ElementPv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14InfiniteSource8run_taskEP4Task     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriter4castEPKc       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpUnsignedReal10        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10VectorTestD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10UDPIPEncap10processingEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ToDevice17static_initializeEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16RoundRobinSwitchC2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16RoundRobinSwitchC1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    __assert_fail   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN10BpfyFilter4InsnEED1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN10Classifier4ExprEED1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ToDevice12queue_packetEP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI9IPAddressjE16dynamic_resizingEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEE4backEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13SetPacketTypeD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13SetPacketTypeD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13SetPacketTypeD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13SetPacketTypeC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13SetPacketTypeC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router15add_requirementERK6String   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13QueueYankTest     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13QueueYankTest9run_timerEP5Timer    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14IPAddrRewriter7cleanupEN7Element12CleanupStageE    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13CheckIPHeader     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK3Tee10port_countEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriter10TCPMapping10apply_sackEP9click_tcpi   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8PortInfo10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12IPInputCombo      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8FixIPSrc10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8DecIPTTL10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16ICMPPingRewriter4pushEiP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6PacketC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6MasterC2Ei  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEE9pop_frontEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI8IPFlowIDPvE9find_pairERKS0_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16ICMPPingRewriter7Mapping5applyEP14WritablePacket   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12AnyDeviceMap6insertEP9AnyDeviceb   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String18make_out_of_memoryEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12RandomSource10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10HashSwitch9configureER6VectorI6StringEP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12FastUDPFlows10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10CheckPaintD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8Unqueue212add_handlersEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPRouteTable11run_commandEiRK6StringP6VectorI7IPRouteEP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8IPFilter9Primitive20add_comparison_exprsEP10ClassifierR6VectorIiEiibb      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilter9Primitive13simple_negateEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpHandlerCallWrite      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14BigHashMapTestD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressE6resizeEiRKS0_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SortedIPLookup10sort_tableEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8PortInfo15configure_phaseEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEEC1EiRKS1_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9IPAddress11make_prefixEi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiE6insertERKS0_RKi   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Lexer8Compound10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEE5frontEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilter4pushEiP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpOptional      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriter13apply_patternEPN4IPRw7PatternEiRK8IPFlowIDii  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Lexer12element_typeERK6String      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV7Unqueue    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK18RoundRobinIPMapper10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router12set_runcountEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetPerfCount9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV10CrapFilter        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8NameInfo9installdbEP6NameDBPK7Element       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11QuitWatcher10initializeEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12StaticNameDB      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14MessageElement9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13ICMPPingEncap5flagsEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpIPPrefix      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Router10attachmentERK6String       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7MSQueue7cleanupEN7Element12CleanupStageE    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer22process_line_directiveEPKc   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier19negate_expr_subtreeER6VectorIiE        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6String9find_leftERKS_i     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ScheduleLinux12add_handlersEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier18DominatorOptimizer16dom_shift_branchEiiiiP6VectorIiE   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8RTCycles10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6RouterC1ERK6StringP6Master  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14PerfCountAccum10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckARPHeader12reason_textsE      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIPvEC1ERKS1_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK17_HashMap_iteratorI6StringiE4pairEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIN7IPTable5EntryEE4backEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11DelayShaperC2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11DelayShaperC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15BandwidthShaperD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13RatedSplitter     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16ICMPPingRewriter7MappingC1Eb       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckIPHeader2D1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckIPHeader2C1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorI9IPAddressE4veltEi  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjE4swapERS1_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer11yconnectionEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12IPRouteTable      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11StringAccumC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ActiveNotifier20add_dependent_signalEP14NotifierSignal     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIN7IPTable5EntryEEixEi       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPRouteTable9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler14static_cleanupEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ComparePacketsD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SortedIPLookup9add_routeERK7IPRoutebPS0_P12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11CiscyFilter4pushEiP6Packet /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    click_config_generation /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ToHost12add_handlersEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String14static_cleanupEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIN7IPTable5EntryEE5beginEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRw9clean_mapER7HashMapI8IPFlowIDPNS_7MappingEEj   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z20skbmgr_allocate_skbsjjPi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRwD2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRwD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRwD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRwC2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRwC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11IPGWOptions10class_nameEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ICMPRewriter19rewrite_ping_packetEP14WritablePacketP8click_ipP20click_icmp_sequencedRK8IPFlowIDPN16ICMPPingRewriter7MappingE       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10EtherEncap4pushEiP6Packet  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8SetCRC3210port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SetAnnoByte13simple_actionEP6Packet        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router16add_read_handlerEPK7ElementRK6StringPFS3_PS0_PvES7_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element19nelements_allocatedE       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringEC1ERKS1_     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK16SetRandIPAddress10processingEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV16ICMPPingRewriter  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10Classifier4Expr10compatibleERKS0_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ARPQuerier9handle_ipEP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressE5beginEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11IPGWOptions9configureER6VectorI6StringEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDiE10initializeEP20HashMap_ArenaFactoryj    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15PushNullElementC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15PullNullElementC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10EtherEncap10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SetUDPChecksumD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SetTCPChecksumD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9PrioSched7cleanupEN7Element12CleanupStageE  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13QueueYankTest9configureER6VectorI6StringEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ICMPPingSource12add_handlersEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11QuitWatcher9configureER6VectorI6StringEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ICMPPingEncap12read_handlerEP7ElementPv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10BpfyFilterC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ToHostD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12ARPResponder6lookupE9IPAddressR12EtherAddress     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11ErrorVeneer9nwarningsEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x4a54e14b    proclikefs_register_filesystem  /d/click/click-1.6.0-27/linuxmodule/proclikefs  EXPORT_SYMBOL
++0x00000000    _ZNK14StoreIPAddress10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPAddrPairRewriter7cleanupEN7Element12CleanupStageE        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI6StringiEixERKS0_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEE10push_frontERKS1_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressED2Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressED1Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressEC2Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressEC1Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK18SourceIPHashMapper10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpIP6Prefix     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11LinkUnqueue10processingEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastTCPFlows12change_portsEi       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV7Burster    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14DropBroadcasts13simple_actionEP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Discard12read_handlerEP7ElementPv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z7cp_timeRK6StringP7timeval    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12RatedUnqueue10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11StrideSched7ticketsEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15SpinlockAcquireD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ToDevice7cleanupEN7Element12CleanupStageE   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI8IPFlowIDbE5findpERKS0_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12MarkIPHeader10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK4IPRw15configure_phaseEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11HandlerCall10initializeEiP7ElementP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEE8pop_backEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11PaintSwitchC2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11PaintSwitchC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPReassemblerD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPReassemblerD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPReassemblerD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPReassemblerC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPReassemblerC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier18DominatorOptimizer15intersect_listsERK6VectorIiES4_S4_iiRS2_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10UDPIPEncapD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router14static_cleanupEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14StaticIPLookup9add_routeERK7IPRoutebPS0_P12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8DRRSched4castEPKc   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9Bitvector4zeroEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11IPGWOptions12add_handlersEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11ErrorVeneerD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11ErrorVeneerD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV8Unqueue2   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPPrint9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPEncapC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPEncapC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8DRRSched10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13HashMap_Arena10hard_allocEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6PacketD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6MasterD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer10add_tunnelE6StringS0_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPRewriter4pushEiP6Packet  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN19_GLOBAL__N_cp_errno10CpVaHelper16assign_argumentsERK6VectorI6StringEPKcP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9Bitvector6negateEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6String5upperEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6String5lowerEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8MarkIPCE12read_handlerEP7ElementPv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11HandlerCall10call_writeEP7ElementRK6StringS4_P12ErrorHandler       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastUDPFlows7cleanupEN7Element12CleanupStageE      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK17DynamicUDPIPEncap10class_nameEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbE3endEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ARPQuerier10initializeEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPRouteTable9add_routeERK7IPRoutebPS0_P12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z17cp_unparse_real10ii /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14CheckIPHeader210class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11AddressInfo14query_ethernetE6StringPhP7Element     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5TimerC2EP4Task      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11RatedSource12setup_packetEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12MarkIPHeader13simple_actionEP6Packet       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8Notifier14EMPTY_NOTIFIERE   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9TimedSink10port_countEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI7IPRouteE4swapERS1_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Lexer16find_connectionsERKN6Router6HookupEbR6VectorIS1_E   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13IPReassembler10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8DecIPTTL7drop_itEP6Packet   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    update_crc      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbED2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbEC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiE5frontEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10EtherEncap12read_handlerEP7ElementPv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8CPUQueue10initializeEP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler8lwarningERK6StringPKcz        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorI9IPAddressE8capacityEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressE5eraseEPS0_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15SpinlockAcquire10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13SetCycleCount     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIP7ElementEixEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18RoundRobinIPMapper7get_mapEP4IPRwiRK8IPFlowIDP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13CheckIPHeader5flagsEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SimpleQueue13write_handlerERK6StringP7ElementPvP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Router9elandmarkEi /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11LinkUnqueue10read_paramEP7ElementPv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11StrideSched10port_countEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer9TunnelEnd4findERKN6Router6HookupE     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV18IPAddrPairRewriter        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14InfiniteSource20can_live_reconfigureEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN20HashMap_ArenaFactory11the_factoryE /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV17DynamicUDPIPEncap /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer4yvarEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z16cp_unparse_real2yi  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Suppressor12add_handlersEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13DynamicNameDB4sortEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z8cp_scanfPKcS0_S0_z   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17ICMPPingResponder13simple_actionEP6Packet  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN20LandmarkErrorHandlerD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN20LandmarkErrorHandlerD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI6StringiE16dynamic_resizingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZThn60_N14InfiniteSourceD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZThn60_N14InfiniteSourceD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbE20set_dynamic_resizingEb /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjE6assignEiRKj       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10SuppressorD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9StoreData10class_nameEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPAddrPairRewriter14notify_patternEPN4IPRw7PatternEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12SetIPAddress      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbE7resize0Ej       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8RFC2507d10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8RFC2507c10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15PullNullElement4pullEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14FrontDropQueueD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14FrontDropQueueC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z10cp_is_wordRK6String /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ToDevice13change_deviceEP10net_device       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18SourceIPHashMapper7get_mapEP4IPRwiRK8IPFlowIDP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastUDPFlows10get_packetEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiE9pop_frontEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4Task10initializeEP7Elementb /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIN7IPTable5EntryEE3endEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8DRRSched7cleanupEN7Element12CleanupStageE   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK16StaticPullSwitch10port_countEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN23_HashMap_const_iteratorI9IPAddressjEC2EPK7HashMapIS0_jEb   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN23_HashMap_const_iteratorI9IPAddressjEC1EPK7HashMapIS0_jEb   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV11RatedSource       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z21click_clear_error_logv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14LinearIPLookup12lookup_routeE9IPAddressRS0_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17ICMPPingResponderD2Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17ICMPPingResponderD1Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17ICMPPingResponderD0Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17ICMPPingResponderC2Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17ICMPPingResponderC1Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV7RRSched    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14BandwidthMeter17read_rate_handlerEP7ElementPv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIN6Router6HookupEE4veltEi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiEC2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiEC1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15SpinlockAcquire10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Packet10shift_dataEib       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14SchedOrderTest10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x767af9e9    proclikefs_reinitialize_supers  /d/click/click-1.6.0-27/linuxmodule/proclikefs  EXPORT_SYMBOL
++0x00000000    _ZN6String13null_string_pE      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14IPAddrRewriter10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    click_lalloc    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z9cp_real10RK6StringiPj        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z9cp_real10RK6StringiPi        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN21LinuxModuleLexerExtra7requireE6StringP12ErrorHandler       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7RRSchedC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7RRSchedC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK16ICMPPingRewriter10class_nameEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10FromDeviceC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler19set_default_handlerEPS_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11TimedSource10port_countEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14SetTCPChecksum    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RFC2507d6decodeERPKhRt      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6String9printableEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13SetIPChecksum     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14IPAddrRewriter4castEPKc    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorI6StringE4sizeEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4Task17strong_unscheduleEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4Task17strong_rescheduleEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FullNoteQueue4pushEiP6Packet       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13PerfCountInfo4castEPKc     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEE7reserveEi  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ScheduleLinuxD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ScheduleLinuxD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ScheduleLinuxD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ScheduleLinuxC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ScheduleLinuxC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Paint10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14InfiniteSource    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13ICMPPingEncap10processingEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressE6insertEPS0_RKS0_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK20StripToNetworkHeader10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Script9run_timerEP5Timer    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN19_GLOBAL__N_cp_errno10CpVaHelper23assign_keyword_argumentERK6String /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ClassifierD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6String9find_leftEci        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV16VariableExpander  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ARPResponder12add_handlersEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PacketTestD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEEC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Router20element_ports_stringEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14PerfCountAccum4castEPKc    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Paint9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEED1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Element10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV11CiscyFilter       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ARPQuerier9configureER6VectorI6StringEP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14ToHostSniffers    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8Notifier15remove_listenerEP4Task    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IdleD2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IdleD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IdleD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IdleC2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IdleC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15HostEtherFilterD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10CheckPaint4pushEiP6Packet  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEE6assignEiRKS1_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15SpinlockAcquire9configureER6VectorI6StringEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12RandomSample10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI6StringiE3endEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11IPGWOptionsC2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11IPGWOptionsC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element4pullEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiE6assignEiRKi       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK3RED10processingEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetPerfCountD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetPerfCountD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetPerfCountD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetPerfCountC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetPerfCountC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13DiscardNoFree10port_countEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8MarkIPCE10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13IPOutputCombo10processingEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14IPAddrRewriter22dump_nmappings_handlerEP7ElementPv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z30cp_register_stringlist_argtypePKcS0_i       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckUDPHeader4dropENS_6ReasonEP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13AlignmentInfo6query1EP7ElementiRiS2_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriter21dump_patterns_handlerEP7ElementPv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18RoundRobinIPMapper15notify_rewriterEP4IPRwP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11QuitWatcherC2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11QuitWatcherC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer23expand_compound_elementEiR19VariableEnvironment      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element12PUSH_TO_PULLE      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z28cp_va_kparse_remove_keywordsR6VectorI6StringEP7ElementP12ErrorHandlerz      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8Truncate10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14MessageElement10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjE6insertERKS0_RKj        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV7PullTee    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RFC2507c7encodeXEiiPcRi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPField5parseEPKcS1_iPS_P12ErrorHandlerP7Element    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11SimpleQueue10processingEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Counter13write_handlerERK6StringP7ElementPvP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV20StripToNetworkHeader      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13StripIPHeader     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7MSQueue9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14IPAddrRewriterD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14IPAddrRewriterC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDPvE6resizeEj       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDPvE6removeERKS0_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK17ICMPPingResponder10class_nameEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ShaperC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSample4pushEiP6Packet        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV5Lexer      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Element13configurationER6VectorI6StringE   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5MeterD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5MeterC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiE5eraseEPiS1_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressEC2EiRKS0_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressEC1EiRKS0_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z19click_cleanup_schedv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14LinearIPLookup12lookup_entryE9IPAddress   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12RandomSource10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ICMPPingSourceD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ICMPPingSourceC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12FastUDPFlows10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ComparePackets5checkEP6PacketS1_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13RadixIPLookupD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13RadixIPLookupD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13RadixIPLookupD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13RadixIPLookupC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13RadixIPLookupC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8NameInfoD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8NameInfoD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8NameInfoC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8NameInfoC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDPvE9set_arenaEP20HashMap_ArenaFactory      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckTCPHeader12add_handlersEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SimpleQueue12read_handlerEP7ElementPv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK3RED13configurationER6VectorI6StringE       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14PerfCountAccumD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14PerfCountAccumC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPRouteTableD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPRouteTableD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8IPFilter5flagsEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18SourceIPHashMapper15notify_rewriterEP4IPRwP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13DiscardNoFree12add_handlersEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEE4at_uEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Shaper10processingEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV16UpstreamNotifier  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    click_fsmode    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler5debugEPKcz    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Unqueue10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10PullSwitch10port_countEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PollDeviceC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10LexerExtraD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPNameInfo17static_initializeEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler12ERROR_RESULTE        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpHandlerCallPtrRead    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN19_GLOBAL__N_cp_errno10CpVaHelper17add_keyword_errorER11StringAccumiRK6StringPKci    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK17_HashMap_iteratorI6StringiE5valueEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String14append_garbageEi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV17ICMPPingResponder /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ClickIno7cleanupEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpWriteHandlerCall      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z10cp_integerRK6StringiPi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringE6resizeEiRKS0_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilter9Primitive16set_transp_protoEiP12ErrorHandler       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ICMPPingSource13write_handlerERK6StringP7ElementPvP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11NullElementC2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11NullElementC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer8CompoundD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer8CompoundD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12DelayUnqueue12add_handlersEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ToHost14static_cleanupEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Timer10unscheduleEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiE3endEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12StaticSwitch10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11HandlerCall6assignEP7ElementRK6StringS4_iP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV21LinuxModuleLexerExtra     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9TimedSink9configureER6VectorI6StringEP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z20cp_va_static_cleanupv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11CheckPacket10port_countEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIPvE6resizeEiS0_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK3RED12check_paramsEjjjjP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ARPQuerier11expire_hookEP5TimerPv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRw16parse_input_specERK6StringRNS_9InputSpecES0_P12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler9make_textENS_11SeriousnessEPKcPc      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Element4nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10CheckCRC32C1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Unqueue11write_paramERK6StringP7ElementPvP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z10cp_keywordRK6StringPS_S2_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15CheckICMPHeaderC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10RandomSeedC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiE15find_pair_forceERKS0_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressE7reserveEi        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12RandomSwitch10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5PaintD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5PaintC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14StaticIPLookup    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjEC1ERKjP20HashMap_ArenaFactory   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8SetCRC3213simple_actionEP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10EtherEncapC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjE20set_dynamic_resizingEb        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element17add_write_handlerERK6StringPFiS2_PS_PvP12ErrorHandlerES4_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9BitvectoroRERKS_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9BitvectoreOERKS_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9BitvectoraSERKS_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9BitvectoraNERKS_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5TimerC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8NameInfo14static_cleanupEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String4MemoC1Eii    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z7cp_wordRK6StringPS_S2_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjE6insertEPjRKj      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ActiveNotifierD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12GetIPAddress10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier21redirect_expr_subtreeEiiii     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN22BandwidthRatedSplitterD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN22BandwidthRatedSplitterD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN22BandwidthRatedSplitterD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN22BandwidthRatedSplitterC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN22BandwidthRatedSplitterC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13ConfParseTest10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV7Unstrip    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13NotifierQueueD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13NotifierQueueD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13NotifierQueueD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13NotifierQueueC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13NotifierQueueC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14IPAddrRewriter9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10BpfyFilterD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13QueueYankTest10processingEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRw7MappingC2Eb    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRw7MappingC1Eb    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8FromHost20set_device_addressesEP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13CheckIPHeader10processingEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3RED10initializeEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer10lex_configEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9IPAddress17unparse_with_maskES_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDPvE4swapERS2_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV7Counter    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PullSwitchC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14LinearIPLookupD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14IPAddrRewriter21dump_mappings_handlerEP7ElementPv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13SetPacketType20can_live_reconfigureEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14PerfCountAccum9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPOutputComboD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPOutputComboD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPOutputComboD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPOutputComboC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPOutputComboC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbEC1ERKbP20HashMap_ArenaFactory    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16StaticPullSwitchC2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16StaticPullSwitchC1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15LookupIPRouteMP10initializeEP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14FrontDropQueue10take_stateEP7ElementP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Counter9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ARPFaker13make_responseEPhS0_S0_S0_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9IPAddress7unparseEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ComparePackets12read_handlerEP7ElementPv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8PaintTee9configureER6VectorI6StringEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckUDPHeader12reason_textsE      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10PacketTest10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11StringAccum4swapERS_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Discard8run_taskEP4Task     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cp_errno        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7RIPSendC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7RIPSendC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilter9Primitive5checkERKS0_jP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11IPFieldInfo14static_cleanupEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12RatedUnqueue10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Burster10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Script17static_initializeEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV16RoundRobinSwitch  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Element13configurationEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14CheckUDPHeader10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIjE8capacityEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIiE8capacityEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN4IPRw9InputSpecEE5eraseEPS1_S3_     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorI9IPAddressE5emptyEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String12claim_stringEPcii   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11EnsureEther8smactionEP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element13simple_actionEP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8CPUQueue4pushEiP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RouterThreadD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RouterThreadD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Router14element_lerrorEP12ErrorHandlerP7ElementPKcz        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPRewriterC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Discard10initializeEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z8cp_real2RK6StringiPj /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z8cp_real2RK6StringiPi /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier21bubble_sort_and_exprsEi        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ShaperD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8PaintTee10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13AlignmentInfo9configureER6VectorI6StringEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPTableD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPTableD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Element10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10UDPIPEncap5flagsEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8ToDevice10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11TCPRewriter10class_nameEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9StoreData10port_countEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9SetIPDSCP10processingEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SchedOrderTestD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbE10find_forceERKS0_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV8PortInfo   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    srandom /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV8FixIPSrc   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV8DecIPTTL   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiE8pop_backEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN45_GLOBAL__N__ZN14NotifierSignal12static_valueE21NotifierElementFilter11check_matchEP7ElementiN13ElementFilter8PortTypeE     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14InfiniteSource12setup_packetEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEE2atEi       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12ErrorElement10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSource12add_handlersEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element13COMPLETE_FLOWE     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpArgument      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13RatedSplitter10processingEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18SilentErrorHandler11handle_textEN12ErrorHandler11SeriousnessERK6String     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RFC2507c10make_otherEP6Packet       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN23_HashMap_const_iteratorI8IPFlowIDPvEppEi   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK16UpstreamNotifier10class_nameEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SetAnnoByte9configureER6VectorI6StringEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14CheckARPHeader10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6SwitchD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Router20unparse_requirementsER11StringAccumRK6String       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    __cxa_pure_virtual      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11EtherMirror10port_countEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8DecIPTTL12add_handlersEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z19cp_unparse_intervalRK7timeval       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12SetPerfCount10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14InfiniteSource7cleanupEN7Element12CleanupStageE    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZThn60_N11DelayShaperD1Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZThn60_N11DelayShaperD0Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbEC1ERKS1_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiE4swapERS1_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringE5beginEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpIPAddressList /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SimpleQueue4castEPKc       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11CheckLength10port_countEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z15cp_handler_nameRK6StringPP7ElementPS_S3_P12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Element9flow_codeEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10BpfyFilter10port_countEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ScriptD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15LookupIPRouteMPD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15LookupIPRouteMPD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10CheckCRC3210class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12EtherAddress7unparseEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN19ContextErrorHandlerC2EP12ErrorHandlerRK6StringS4_S4_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ARPQuerier10read_tableEP7ElementPv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Master3useEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8MarkIPCED2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8MarkIPCED1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8MarkIPCED0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8MarkIPCEC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8MarkIPCEC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14BigHashMapTest10initializeEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Unqueue10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ToHostSniffersD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ToHostSniffersC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringE10push_frontERKS0_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV11EnsureEther       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Element20can_live_reconfigureEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ARPQuerier10take_stateEP7ElementP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RTCycles4pushEiP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14ActiveNotifier    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier4pushEiP6Packet  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI8IPFlowIDbE8nbucketsEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18RoundRobinIPMapper4castEPKc        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckTCPHeaderD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckTCPHeaderC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SetAnnoByte12add_handlersEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11EtherMirrorD2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11EtherMirrorD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11EtherMirrorD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13DiscardNoFreeD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13DiscardNoFreeD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13DiscardNoFreeD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13DiscardNoFreeC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13DiscardNoFreeC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier18DominatorOptimizer3runEi       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV6ToHost     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI6StringiE8nbucketsEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10FromDeviceD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8RTCycles10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Router15context_messageEiPKc       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11LinkUnqueue10initializeEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14AverageCounter    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11AddressInfo10class_nameEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7RRSched10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11StrideSchedD2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11StrideSchedD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11StrideSchedD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14StaticIPLookup12add_handlersEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN11CiscyFilter4InsnEE7reserveEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10VectorTestC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11StrideSched7cleanupEN7Element12CleanupStageE       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11StringAccum11take_stringEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12DelayUnqueue10read_paramEP7ElementPv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13RatedSplitter13configurationER6VectorI6StringE    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    click_assert_failed     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN5Lexer11ElementTypeEED1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer5unlexERK6Lexeme       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z11cp_unargvecRK6VectorI6StringE       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16UpstreamNotifier9configureER6VectorI6StringEP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14ComparePackets10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjE11findp_forceERKS0_RKj  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18SourceIPHashMapper4castEPKc        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16SetRandIPAddress4pickEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11PaintSwitch13configurationER6VectorI6StringE      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element17set_handler_flagsERK6Stringi       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIN6Router6HookupEE8capacityEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16ICMPPingRewriterC2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16ICMPPingRewriterC1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10CheckPaintC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckARPHeaderD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckARPHeaderC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12SetTimestamp      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8SetCRC3210processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13RatedSplitter4pushEiP6Packet       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13FTPPortMapper10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringE4backEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9AnyDevice11find_deviceEP12AnyDeviceMapP12ErrorHandler       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10PollDevice10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastTCPFlows12add_handlersEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10ARPQuerier20can_live_reconfigureEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ComparePackets10initializeEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12RandomSample10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI7IPRouteE5eraseEPS0_S2_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer9TunnelEndC2ERKN6Router6HookupEbPS0_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriter5llrpcEjPv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router16element_hindexesEPK7ElementR6VectorIiE      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK16RoundRobinSwitch10class_nameEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12PokeHandlers3addEP7ElementRK6StringS4_i    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriter16tcp_done_gc_hookEP5TimerPv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13SetCycleCount10processingEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK4Idle10class_nameEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK17DynamicUDPIPEncap10processingEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIjE5emptyEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIiE5emptyEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8PaintTeeD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8PaintTeeD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8PaintTeeD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8PaintTeeC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8PaintTeeC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV5Paint      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpBool  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorI9IPAddressEixEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7PullTee10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11LinkUnqueue9configureER6VectorI6StringEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9Bitvector23finish_copy_constructorERKS_     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13FullNoteQueue10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10FromDevice12reset_countsEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12DelayUnqueue10initializeEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV11NullElement       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4Idle4pushEiP6Packet /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z19cp_assign_argumentsRK6VectorI6StringEPKS0_S5_PS1_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13QueueYankTestD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13QueueYankTestD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13QueueYankTestD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13QueueYankTestC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13QueueYankTestC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15CheckICMPHeader10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiE6resizeEj  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringE5eraseEPS0_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z9cp_real10RK6StringiiPj       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Burster10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12ARPResponder10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiE5beginEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PollDeviceD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17CastElementFilterC2ERK6String      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17CastElementFilterC1ERK6String      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14DropBroadcastsD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetPerfCount4pushEiP6Packet        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8DRRSched10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TimedSource12change_paramERK6StringP7ElementPvP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8NameInfo9query_intEjPK7ElementRK6StringPj   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15HostEtherFilter10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12CompareBlock20thresh_write_handlerERK6StringP7ElementPvP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Script10initializeEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTVN45_GLOBAL__N__ZN14NotifierSignal12static_valueE21NotifierElementFilterE    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12IPClassifier10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12DelayUnqueue10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ARPPrint9configureER6VectorI6StringEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK16StaticPullSwitch10processingEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler5fatalEPKcz    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15LookupIPRouteMP9configureER6VectorI6StringEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbE6insertERKS0_RKb /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13SetIPChecksum10processingEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11LinkUnqueue12add_handlersEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9CPUSwitch10processingEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIN6Router6HookupEE4backEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12StaticSwitch10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10CheckCRC32D0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9AnyDevice10set_deviceEP10net_deviceP12AnyDeviceMapb /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SetAnnoByteC2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SetAnnoByteC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15CycleCountAccumC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckARPHeader9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10RandomSeedD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10EtherEncap12add_handlersEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIN6Router6HookupEEixEi       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11LinkUnqueue10class_nameEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPRouteTable4pushEiP6Packet        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10HashSwitch10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10CheckPaint10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8Truncate9configureER6VectorI6StringEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiE11findp_forceERKS0_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14SetTCPChecksum10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Script8add_insnEiiiRK6String        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10EtherEncapD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12StrideSwitch10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIN6Router6HookupEE5beginEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorI6StringE4backEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15PushNullElementD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15PullNullElementD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPAddrPairRewriter21dump_patterns_handlerEP7ElementPv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11StringAccum8snprintfEiPKcz /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SortedIPLookupD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SortedIPLookupC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14InfiniteSource10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10CrapFilterD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    click_master    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriter10take_stateEP7ElementP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPEncap12read_handlerEP7ElementPv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11SetAnnoByte20can_live_reconfigureEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8RFC2507d10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8RFC2507c10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPInputCombo9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10ARPQuerier10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Align4pullEi        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10UDPIPEncapC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEE3endEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4Task10initializeEP6Routerb  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PullSwitch12add_handlersEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer7ytunnelEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPReassembler5checkEP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12GetIPAddress10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element4pushEiP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8CPUQueue10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12CompareBlock10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PollDevice12reset_countsEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18PrefixErrorHandlerD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Unstrip10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PullSwitchD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14IPAddrRewriter21dump_patterns_handlerEP7ElementPv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10EtherEncap10processingEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjE15find_pair_forceERKS0_RKj      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjE2atEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetIPAddress9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router14add_connectionEiiii /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18KernelErrorHandlerD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPRouteTable12remove_routeERK7IPRoutePS0_P12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13FastUDPSource     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12FastTCPFlows10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8ARPPrint10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPRewriter21dump_patterns_handlerEP7ElementPv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element12connect_portEbiPS_i        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z14cp_is_click_idRK6String     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier19finish_expr_subtreeER6VectorIiENS_8CombinerEii /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11CheckLengthD2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11CheckLengthD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11CheckLengthD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK18IPAddrPairRewriter10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Counter10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14PerfCountAccum    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z13cp_ip_addressRK6StringP9IPAddressP7Element  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7RRSched10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEEC2EiRKS1_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15CycleCountAccum10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Unqueue8run_taskEP4Task     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSource10initializeEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Master15process_pendingEP12RouterThread     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDPvE20set_dynamic_resizingEb        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPRewriter12add_handlersEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpShort /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9Bitvector18or_with_differenceERKS_RS_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8Unqueue29configureER6VectorI6StringEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPRewriterD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14InfiniteSource4castEPKc    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK17ICMPPingResponder10processingEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17DynamicUDPIPEncap13simple_actionEP6Packet  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12ScheduleInfo15configure_phaseEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13RadixIPLookup10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Unqueue10initializeEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10UDPIPEncap10port_countEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9TimedSinkD2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9TimedSinkD1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9TimedSinkD0Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9TimedSinkC2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9TimedSinkC1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiE9set_arenaEP20HashMap_ArenaFactory /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV8MarkIPCE   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEE6insertEPS1_RKS1_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ARPFaker10initializeEP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z19cp_expand_in_quotesRK6Stringi       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI9IPAddressjE5emptyEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15RandomBitErrorsC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPRewriterPatternsD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPRewriterPatternsC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12CompareBlock9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14StaticIPLookupD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14StaticIPLookupC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Switch9configureER6VectorI6StringEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    strtol  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Unqueue10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler6lfatalERK6StringPKcz  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRw7Pattern10parse_naptER6VectorI6StringEPPS0_P7ElementP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17DynamicUDPIPEncapD2Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17DynamicUDPIPEncapD1Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17DynamicUDPIPEncapD0Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17DynamicUDPIPEncapC2Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17DynamicUDPIPEncapC1Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15SpinlockRelease13simple_actionEP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16ICMPPingRewriter10initializeEP12ErrorHandler       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13ICMPPingEncap10port_countEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z10cp_unquoteRK6String /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8Truncate10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI8IPFlowIDbE4findERKS0_RKb  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router21check_hookup_elementsEP12ErrorHandler       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12GetIPAddress13simple_actionEP6Packet       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Switch10processingEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPRewriterPatterns9configureER6VectorI6StringEP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringE7reserveEi   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15CycleCountAccum10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Script9configureER6VectorI6StringEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDiE9set_arenaEP20HashMap_ArenaFactory       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11DelayShaper4castEPKc       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12AnyDeviceMap10initializeEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiEC2ERKS0_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PullSwitch5llrpcEjPv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiEaSERKS0_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiEC1ERKS0_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier18start_expr_subtreeER6VectorIiE /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13SetIPChecksumD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13SetIPChecksumD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13SetIPChecksumD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13SetIPChecksumC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13SetIPChecksumC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11LinkUnqueueC2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11LinkUnqueueC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEE5beginEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpInterval      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIjE4at_uEi   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIiE4at_uEi   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiEaSERKS1_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiEC2ERKS1_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiEC1ERKS1_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7PullTee10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12SetPerfCount10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14InfiniteSourceD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14InfiniteSourceC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPFragmenter12add_handlersEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV15UnstripIPHeader   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15RecycledSkbPool10initializeEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13IPOutputCombo10port_countEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ToHost7cleanupEN7Element12CleanupStageE     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetTimestamp13simple_actionEP6Packet       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Strip9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11EtherMirror13simple_actionEP6Packet        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Router4findERK6StringS0_P12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16UpstreamNotifier4castEPKc  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SchedOrderTest12read_handlerEP7ElementPv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18RoundRobinIPMapperD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiE5beginEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3RED11should_dropEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element7cleanupENS_12CleanupStageE  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ARPPrintD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ARPPrintD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ARPPrintD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ARPPrintC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ARPPrintC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9StoreData13simple_actionEP6Packet   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12PokeHandlers11write_paramERK6StringP7ElementPvP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPRewriter5llrpcEjPv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpArguments     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ClassifierC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIN6Router6HookupEE3endEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PacketTestC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3RED16live_reconfigureER6VectorI6StringEP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbE10find_forceERKS0_RKb    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringE9push_backERKS0_     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV9SetIPDSCP  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Handler17the_blank_handlerE /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPRewriter11udp_gc_hookEP5TimerPv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPRewriter11tcp_gc_hookEP5TimerPv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10Classifier10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14CheckIPHeader2    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI6StringiE4findERKS0_RKi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router15force_name_infoEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5PrintD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5PrintC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10FromDevice7got_skbEP7sk_buff       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15UnstripIPHeaderC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Suppressor10initializeEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRw7Pattern5parseERK6StringPPS0_P7ElementP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastTCPFlows10initializeEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpString        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10VectorTestD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEE6resizeEiRKS1_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRw14take_state_mapER7HashMapI8IPFlowIDPNS_7MappingEEPS3_S6_RK6VectorIPNS_7PatternEESC_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8TruncateD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8TruncateD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8TruncateD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8TruncateC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8TruncateC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriter21dump_mappings_handlerEP7ElementPv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11SimpleQueue10class_nameEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPMapperD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPMapperD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4Task11add_pendingEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18SourceIPHashMapperD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router12hookup_errorERKNS_6HookupEbPKcP12ErrorHandler       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14AverageCounterD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14AverageCounterC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9IPAddress18mask_to_prefix_lenEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV16BaseErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11CiscyFilterD2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11CiscyFilterD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11CiscyFilterD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpIgnore        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV8Notifier   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7DiscardD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7DiscardD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7DiscardD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10CheckPaintD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Burster10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10RandomSeed15configure_phaseEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEE5clearEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Router19unparse_connectionsER11StringAccumRK6String        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14FrontDropQueue4pushEiP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV10VectorTest        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV10RandomSeed        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8SortTest10initializeEP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z10cp_integerRK6StringiPx      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiED2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiEC2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiEC1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiE10push_frontERKi   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3RED14read_parameterEP7ElementPv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5LexerD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5LexerC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDPvEC2ES1_P20HashMap_ArenaFactory   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiED1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router6HookupC1Eii  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11RatedSource10processingEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11PaintSwitch10port_countEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressE9push_backERKS0_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16SetRandIPAddressC2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16SetRandIPAddressC1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15RandomBitErrors13simple_actionEP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14InfiniteSource9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastTCPFlows8NO_LIMITE     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Unstrip10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7RIPSend9run_timerEP5Timer   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8NameInfo6namedbEjiRK6StringP6NameDB /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8NameInfo17static_initializeEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ARPResponder12read_handlerEP7ElementPv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Router7unparseER11StringAccumRK6String     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FastUDPSource5resetEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN10BpfyFilter4InsnEE7reserveEi       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN10Classifier4ExprEE7reserveEi       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4TaskD2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4TaskD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12PokeHandlers10timer_hookEP5TimerPv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPNameInfo14static_cleanupEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8FromHost10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9Bitvector20nonzero_intersectionERKS_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FTPPortMapper10initializeEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Counter10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14CheckTCPHeader10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8Unqueue2D2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8Unqueue2D1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8Unqueue2D0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8Unqueue2C2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8Unqueue2C1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3Tee9configureER6VectorI6StringEP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5StripD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5StripC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11RatedSource12change_paramERK6StringP7ElementPvP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV8PaintTee   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZlsR11StringAccumRKN10Classifier4ExprE /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier14optimize_exprsEP12ErrorHandleri        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Timer14schedule_afterERK9Timestamp  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZThn60_N18RoundRobinIPMapper7get_mapEP4IPRwiRK8IPFlowIDP6Packet        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilter9Primitive5clearEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z19cp_register_argtypePKcS0_iPFvP8cp_valueRK6StringP12ErrorHandlerS0_P7ElementEPFvS2_S9_EPv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13QueueYankTest10port_countEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV11SetAnnoByte       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14LinearIPLookup10initializeEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8FromHost15configure_phaseEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13CheckIPHeader10port_countEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN19VariableEnvironmentD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorI9IPAddressE4backEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV3RED        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV10PullSwitch        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8IPMirror10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFlowIDC2EPK6Packet        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFlowIDC1EPK6Packet        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    click_cleanup_packages  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11DelayShaper10port_countEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11CiscyFilter10processingEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI9IPAddressjE8nbucketsEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12ARPResponder10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7MSQueue12add_handlersEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13CheckIPHeader17static_initializeEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6ToHost10port_countEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5PaintD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15LookupIPRouteMP4pushEiP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN12ARPResponder5EntryEEC1ERKS2_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z24click_check_header_sizesv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckUDPHeaderD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckUDPHeaderC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9PrioSched10processingEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12PokeHandlers7unpauseEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14AverageCounter9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK19VariableEnvironment5valueERK6StringRb     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPPrintC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPPrintC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPInputComboD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPInputComboD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPInputComboD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPInputComboC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPInputComboC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringE6insertEPS0_RKS0_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RatedUnqueue12add_handlersEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Paint10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z11cp_ip_route6StringP7IPRoutebP7Element       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN19VariableEnvironmentC2EPS_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8Unqueue210port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8FromHost9configureER6VectorI6StringEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12DelayUnqueue10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpHandlerCallRead       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z10cp_handlerRK6StringiPP7ElementPPK7HandlerS3_P12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiE5clearEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK4Task6masterEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13ScheduleLinux10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RouterThreadC2EP6Masteri   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RouterThreadC1EP6Masteri   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Element15hotswap_elementEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element16initialize_portsEPKiS1_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15CheckICMPHeaderD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15CheckICMPHeaderD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetIPAddressD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetIPAddressD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetIPAddressD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetIPAddressC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetIPAddressC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIN7IPTable5EntryEE5frontEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPRewriterPatterns4findEP7ElementRK6StringP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9Bitvector5clearEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11AdaptiveRED16live_reconfigureER6VectorI6StringEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17RecycledSkbBucket7cleanupEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14MessageElement    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13AlignmentInfoD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13AlignmentInfoD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13AlignmentInfoD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13AlignmentInfoC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13AlignmentInfoC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SchedOrderTest10initializeEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7RRSched10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ICMPPingSource4pushEiP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9Bitvector6assignEib /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14AverageCounter10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6StringC2Ey  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6StringC2Ex  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6StringC2Em  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6StringC2El  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6StringC2Ej  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6StringC2Ei  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZdlPv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZdaPv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14LinearIPLookup9add_routeERK7IPRoutebPS0_P12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10HashSwitchD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14BandwidthMeterD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIPvED2Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Paint10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorElement10initializeEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z9cp_expandRK6StringR16VariableExpanderb       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiE4swapERS0_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEED2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEEC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Script8ExpanderD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringE6assignEiRKS0_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11DirectEWMAXI24StabilityEWMAXParametersILj10EyxEE8update_nEyj       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element9PORTS_1_0E  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element9PORTS_0_0E  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Packet14expensive_pushEj    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z10cp_integerPKcS0_iPy /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z10cp_integerPKcS0_iPx /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z10cp_integerPKcS0_iPj /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z10cp_integerPKcS0_iPi /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13RatedSplitter10port_countEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9PrioSched4pullEi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13PerfCountInfo9configureER6VectorI6StringEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier18DominatorOptimizer12shift_branchEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10UDPIPEncapD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressE4swapERS1_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckTCPHeader4dropENS_6ReasonEP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15CheckICMPHeader12add_handlersEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14SetUDPChecksum10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element16add_read_handlerERK6StringPFS0_PS_PvES4_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12CompareBlockD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12CompareBlockD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12CompareBlockD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12CompareBlockC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12CompareBlockC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer9ycompoundE6String     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10FromDevice10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10CheckCRC3213simple_actionEP6Packet /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3REDD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3REDD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3REDD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3REDC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3REDC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element4PULLE       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12CompareBlock10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbE6removeERKS0_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN20LandmarkErrorHandlerC2EP12ErrorHandlerRK6String    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN20LandmarkErrorHandlerC1EP12ErrorHandlerRK6String    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8CPUQueue12add_handlersEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ARPQuerier10read_statsEP7ElementPv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorI9IPAddressE4sizeEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPEncap10initializeEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ElementFilter6filterER6VectorIP7ElementE   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ActiveNotifier15remove_listenerEP4Task     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV5Meter      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8ARPFaker10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z6jvcompI12chash_node_tIiEiXadL_ZNS1_3keyEEEEiPKvS3_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV6Shaper     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15LookupIPRouteMP10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12FastTCPFlows10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12PokeHandlers11STOP_MARKERE /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12MarkIPHeader      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9ICMPError9configureER6VectorI6StringEP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12ICMPRewriter10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorI6StringEixEi        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11IPGWOptions10port_countEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastUDPFlows4pullEi        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10BpfyFilter10initializeEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV9CPUSwitch  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z11cp_va_parseRK6VectorI6StringEP7ElementP12ErrorHandlerz      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7PullTee10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15PushNullElement10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15PullNullElement10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13DynamicNameDB     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12IPInputCombo10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ComparePackets12add_handlersEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer8Compound6finishEPS_P12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckUDPHeader9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriter4pushEiP6Packet /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiEC2ERKiP20HashMap_ArenaFactory      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiEC1ERKiP20HashMap_ArenaFactory      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16UpstreamNotifierD2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16UpstreamNotifierD1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16UpstreamNotifierD0Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element8AGNOSTICE   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10Classifier4Expr15not_implies_notERKS0_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI7IPRouteED1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Counter12add_handlersEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z16cp_unparse_real2ii  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z17click_init_configv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiE6removeERKS0_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8CPUQueue4pullEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPAddrPairRewriter21dump_mappings_handlerEP7ElementPv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZThn60_N17StaticThreadSched22initial_home_thread_idEP4Taskb    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8Notifier13FULL_NOTIFIERE    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14MessageElementD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPFieldC2Eiii       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPFieldC1Eiii       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12SpinlockInfo15configure_phaseEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7UnstripD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7UnstripD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7UnstripD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Switch11write_paramERK6StringP7ElementPvP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEE4veltEPS1_i /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer11get_elementE6StringiRKS0_S2_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FTPPortMapper9configureER6VectorI6StringEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z15cp_unparse_boolb    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN20StripToNetworkHeaderC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN20StripToNetworkHeaderC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14StoreIPAddressD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14StoreIPAddressC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15LookupIPRouteMP10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler13prepend_linesERK6StringS2_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier25combine_compatible_statesEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Burster9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9TimedSink10initializeEP12ErrorHandler       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiE10initializeEP20HashMap_ArenaFactoryj      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier18DominatorOptimizer26last_common_state_in_listsERK6VectorIiES4_S4_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ToDevice10initializeEP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15PushNullElement10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15PullNullElement10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer9skip_lineEPKc /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z19cp_seconds_as_microRK6StringPj      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RTCycles12add_handlersEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12IPFragmenter10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN23_HashMap_const_iteratorI8IPFlowIDPvEC1EPK7HashMapIS0_S1_Eb /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10FromDeviceC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler8lmessageERK6StringPKcz        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17DynamicUDPIPEncap9configureER6VectorI6StringEP12ErrorHandler       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z12cp_ip_prefixRK6StringP9IPAddressS3_P7Element        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK23_HashMap_const_iteratorI6StringiE4pairEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK23_HashMap_const_iteratorI6StringiE4liveEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV10BpfyFilter        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z24dev_get_by_ether_addressRK6StringP7Element  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI8IPFlowIDbE6bucketERKS0_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjE3endEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEE9pop_frontEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7MSQueueC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7MSQueueC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK16BaseErrorHandler7nerrorsEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15CheckICMPHeader9configureER6VectorI6StringEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringE4swapERS1_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZThn60_N18SourceIPHashMapper7get_mapEP4IPRwiRK8IPFlowIDP6Packet        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Master11kill_routerEP6Router        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13DriverManager10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Switch4pushEiP6Packet       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13SetCycleCount10port_countEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7RRSched10initializeEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier12add_handlersEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjE15find_pair_forceERKS0_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEEC1EiRKS1_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10Suppressor10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    click_dmalloc_totalnew  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEE5frontEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6String10quoted_hexEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ICMPPingSource11make_packetEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler19has_default_handlerEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ClassifierD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13PerfCountUser7prepareERK6StringP12ErrorHandleri    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PacketTestD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10CheckCRC3210processingEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8FromHostD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8FromHostD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8FromHostD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8FromHostC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8FromHostC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13FastUDPSource10processingEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ARPResponder9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9AnyDevice12clear_deviceEP12AnyDeviceMap     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI8IPFlowIDbEixERKS0_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11StrideSched4pullEi /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11StringAccum4growEi /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ICMPPingSource7cleanupEN7Element12CleanupStageE    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String14permanent_memoE     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTVN6Script8ExpanderE  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13DiscardNoFree10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Unstrip10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriter10TCPMapping5applyEP14WritablePacket    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RTCycles4pullEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV15RandomBitErrors   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckTCPHeader12reason_textsE      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI6StringiE5emptyEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14PerfCountAccum4pullEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14IPAddrRewriter9run_timerEP5Timer   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11EnsureEther4pushEiP6Packet /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiE7reserveEi /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ToDevice8run_taskEP4Task    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjED2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11StrideSched10initializeEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer8yrequireEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13AlignmentInfo10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z11click_qsortPvjjPFiPKvS1_E   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FullNoteQueue4castEPKc     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Counter10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router11add_elementEP7ElementRK6StringS4_S4_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9ICMPError12valid_sourceE7in_addr   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler13decorate_textENS_11SeriousnessERK6StringS3_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14CheckARPHeader    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjE5beginEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14PerfCountAccum10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15BandwidthShaper10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3RED13set_C1_and_C2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7UnqueueD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7UnqueueD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7UnqueueD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK4Idle5flagsEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14ICMPPingSource10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4Task10error_hookEPS_Pv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16SetRandIPAddress13simple_actionEP6Packet   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV18PrefixErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Timer8set_hookEP7Element    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14StoreIPAddress9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11StringAccum8capacityEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK18IPAddrPairRewriter17IPAddrPairMapping7unparseEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13SetIPChecksum10port_countEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilter19length_checked_pushEP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8DRRSched10initializeEP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpIPAddressOrPrefix     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorI6StringE8capacityEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK23_HashMap_const_iteratorI6StringiEcvMS1_KFbvEEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6RouterD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11EnsureEther10processingEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15BandwidthShaperC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFlowIDC2EPK8click_ip      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFlowIDC1EPK8click_ip      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z12init_clickfsv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckIPHeader2D0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK3Tee10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Switch5llrpcEjPv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RFC2507c8make_keyERKNS_5tcpipERS0_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8CPUQueue10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpIP6Address    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14BigHashMapTestD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14BigHashMapTestC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIPvE5eraseEPS0_S2_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10PollDevice10processingEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PollDeviceC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Element2idEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckARPHeader13simple_actionEP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6SwitchC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK17StaticThreadSched10class_nameEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FTPPortMapper7cleanupEN7Element12CleanupStageE     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier4Expr4flipEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8ARPPrint10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZlsR11StringAccumRK9Timestamp  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringE5eraseEPS0_S2_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN20HashMap_ArenaFactoryC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN20HashMap_ArenaFactoryC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SimpleQueue10take_stateEP7ElementP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11LinkUnqueue13write_handlerERK6StringP7ElementPvP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK17DynamicUDPIPEncap10port_countEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RatedUnqueue10initializeEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12DelayUnqueue9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12AnyDeviceMap10lookup_allEP10net_devicebR6VectorIP9AnyDeviceE      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11StrideSched9configureER6VectorI6StringEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorI6StringE2atEi       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ScriptC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8IPFilter10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjE6resizeEiRKj       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6String10trim_spaceEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7CounterC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7CounterC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI9IPAddressjE5beginEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15SpinlockReleaseD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13SetCycleCount4pullEi       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier18DominatorOptimizerC2EPS_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier18DominatorOptimizerC1EPS_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10RandomSeedC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13StripIPHeader10port_countEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV15SpinlockRelease   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14ComparePackets    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPAddrPairRewriterD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPAddrPairRewriterC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV17StaticThreadSched /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ARPQuerierD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14SetTCPChecksum10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10MixedQueue4castEPKc        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ToHostC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14PerfCountAccum13reset_handlerERK6StringP7ElementPvP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13CheckIPHeader13simple_actionEP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN22BandwidthRatedSplitter4pushEiP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ComparePacketsD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ComparePacketsC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7PullTeeD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7PullTeeD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7PullTeeD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z14skbmgr_cleanupv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12SetIPAddress10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10CrapFilterC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z19cp_seconds_as_milliRK6StringPj      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN23_HashMap_const_iteratorI6StringiEC2EPK7HashMapIS0_iEb      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilter9Primitive8set_maskEjijP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14InfiniteSource10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15CycleCountAccumD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15CycleCountAccumD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RFC2507d13simple_actionEP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Lexer18element_type_namesER6VectorI6StringE        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI8IPFlowIDbE4findERKS0_     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPAddrPairRewriter9configureER6VectorI6StringEP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18SilentErrorHandlerD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11StrideSched12add_handlersEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12RandomSwitch      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ARPQuerier7cleanupEN7Element12CleanupStageE        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5TimerC1EP7Element   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer9end_parseEi   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14FrontDropQueue10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8FixIPSrc10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8DecIPTTL10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SetAnnoByte18value_read_handlerEP7ElementPv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11NullElement10processingEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9ICMPError7unicastE7in_addr /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK21BandwidthRatedUnqueue10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SetUDPChecksumD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SetUDPChecksumC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SetTCPChecksumD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SetTCPChecksumC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18KernelErrorHandler11handle_textEN12ErrorHandler11SeriousnessERK6String     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ICMPPingEncap9configureER6VectorI6StringEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6ToHost10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Master20timer_reheapify_fromEiP5Timerb      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTVN5Lexer8CompoundE   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10HashSwitch10processingEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14FrontDropQueue4castEPKc    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10CheckPaint10processingEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router6hindexEPK7ElementRK6String   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSample4pullEi        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN20HashMap_ArenaFactory14static_cleanupEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpUnsignedShort /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Align9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Router19gport_list_elementsEbRK9BitvectorR6VectorIP7ElementE       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15CycleCountAccum12add_handlersEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiE6resizeEiRKi       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV6NameDB     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9ICMPError18valid_source_routeEPK8click_ip   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Script18arithmetic_handlerEiR6StringP7ElementPK7HandlerP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router15set_connectionsEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPInputCombo4pushEiP6Packet        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String9null_memoE   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7RIPSend10initializeEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11CheckLength4pullEi /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String6assignEPKci  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String11InitializerC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Switch12add_handlersEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10MixedQueue10port_countEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14LinearIPLookup10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRw27incr_clean_map_free_trackedER7HashMapI8IPFlowIDPNS_7MappingEERS3_S6_j /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN20HashMap_ArenaFactory17static_initializeEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10ARPQuerier10processingEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13DynamicNameDB4findERK6Stringb      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilter9configureER6VectorI6StringEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV9PrioSched  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z16cp_unparse_real2xi  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjEaSERKS1_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjEC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Switch10read_paramEP7ElementPv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PullSwitch10read_paramEP7ElementPv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilter12parse_orexprERK6VectorI6StringEiRS0_IiERNS_9PrimitiveEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV7Discard    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PullSwitch11write_paramERK6StringP7ElementPvP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9AnyDeviceD2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9AnyDeviceD1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9AnyDeviceD0Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9AnyDeviceC2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9AnyDeviceC1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSource9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Script12add_handlersEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6RouterC2ERK6StringP6Master  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14InfiniteSource10read_paramEP7ElementPv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14FrontDropQueueD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14FrontDropQueueC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV10UDPIPEncap        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6SwitchD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18SourceIPHashMapper12parse_serverERK6StringPPN4IPRw7PatternEPiS7_S7_P7ElementP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15RandomBitErrorsD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SortedIPLookup4pushEiP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12IPInputCombo10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ARPQuerier15handle_responseEP6Packet       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ARPFaker9run_timerEP5Timer  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router14set_attachmentERK6StringPv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13RadixIPLookup5Radix10free_radixEPS0_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN20LandmarkErrorHandler13decorate_textEN12ErrorHandler11SeriousnessERK6StringS4_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10UDPIPEncap12read_handlerEP7ElementPv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRw22clean_map_free_trackedER7HashMapI8IPFlowIDPNS_7MappingEERS3_S6_j      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14IPAddrRewriter13apply_patternEPN4IPRw7PatternEiRK8IPFlowIDii       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14DropBroadcasts10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEE5eraseEPS1_S3_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12CompareBlock4pushEiP6Packet        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiE6insertEPiRKi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Script8Expander6expandERK6StringiiR11StringAccum    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK17ICMPPingResponder10port_countEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12ErrorElement      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI8IPFlowIDbE3endEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN4IPRw9InputSpecEED1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ScriptD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12AnyDeviceMap14lookup_unknownEP10net_deviceP9AnyDevice     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router16global_port_flowEbP7ElementiP13ElementFilterR9Bitvector     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV8FromHost   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI9IPAddressjEixERKS0_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13DynamicNameDBD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13DynamicNameDBD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Meter10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPRewriter10initializeEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    click_remove_element_type       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ARPResponderD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ARPResponderD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ARPResponderD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ARPResponderC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ARPResponderC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RFC2507c8encode16EiiPcRi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer24deanonymize_element_nameERK6Stringi  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI6StringiE5beginEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiE10find_forceERKS0_RKi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router11make_gportsEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10FromDevice12add_handlersEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8FixIPSrc13simple_actionEP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiE4at_uEi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer18force_element_typeE6String   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11EtherMirrorC2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11EtherMirrorC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8DecIPTTLD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8DecIPTTLD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8DecIPTTLD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8DecIPTTLC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8DecIPTTLC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z19cp_va_parse_keywordRK6StringP7ElementP12ErrorHandlerz       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15SpinlockAcquire13simple_actionEP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8PortInfo9configureER6VectorI6StringEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV8IPMirror   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10FromDeviceD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element27reconfigure_keyword_handlerERK6StringPS_PvP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11CheckLength9configureER6VectorI6StringEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14BandwidthMeter10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ToHostD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15HostEtherFilterC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZThn60_N17StaticThreadSchedD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    click_cycle_counter     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK4Idle10port_countEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5AlignD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5AlignC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11StrideSchedC2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11StrideSchedC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    click_dmalloc_curnew    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10VectorTestC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK18IPAddrPairRewriter10processingEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPAddrPairRewriter12add_handlersEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11TCPRewriter10port_countEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13SetPacketType12unparse_typeEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI6StringiE5findpERKS0_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4Task11move_threadEi /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router13remove_hookupEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10Classifier4Expr11not_impliesERKS0_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11CheckPacketD2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11CheckPacketD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11CheckPacketD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI6StringiE4findERKS0_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16UpstreamNotifier12add_handlersEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI8IPFlowIDbE5beginEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9ICMPErrorD2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9ICMPErrorD1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9ICMPErrorD0Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9ICMPErrorC2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9ICMPErrorC1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10EtherEncap9configureER6VectorI6StringEP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN19_GLOBAL__N_cp_errno10CpVaHelper15develop_kvaluesEPcP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10IPRewriter10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV22BandwidthRatedSplitter    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14IPAddrRewriterD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Shaper10port_countEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11AddressInfo15query_ip_prefixE6StringPhS1_P7Element /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SchedOrderTest12add_handlersEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15UnstripIPHeaderD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15UnstripIPHeaderD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEE4at_uEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPRewriter21dump_mappings_handlerEP7ElementPv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler11verror_textENS_11SeriousnessERK6StringS3_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier19length_checked_pushEP6Packet   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPEncapD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPEncapD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPEncapD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11RatedSource10class_nameEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6PacketD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6MasterD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer5yportERi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPTable3addE9IPAddressS0_S0_i       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15CycleCountAccum13reset_handlerERK6StringP7ElementPvP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ICMPPingSourceD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ICMPPingSourceC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ICMPPingEncap13write_handlerERK6StringP7ElementPvP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8Unqueue210processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastTCPFlows9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router16force_attachmentERK6String  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14PerfCountAccumD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5LexerD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10Classifier10processingEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6NameDB6defineERK6StringPKvi /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilter10parse_termERK6VectorI6StringEiRS0_IiERNS_9PrimitiveEP12ErrorHandler       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3RED12add_handlersEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PullSwitch9configureER6VectorI6StringEP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpHandlerName   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0xa0d2f184    proclikefs_new_inode_operations /d/click/click-1.6.0-27/linuxmodule/proclikefs  EXPORT_SYMBOL
++0x00000000    _ZN6Router19new_notifier_signalER14NotifierSignal       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13PerfCountInfo10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEEC1ERKS2_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11CiscyFilter10initializeEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjE5frontEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV11StrideSched       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN45_GLOBAL__N__ZN14NotifierSignal12static_valueE21NotifierElementFilterC2EPKc /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN45_GLOBAL__N__ZN14NotifierSignal12static_valueE21NotifierElementFilterC1EPKc /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13CheckIPHeader12read_handlerEP7ElementPv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPMirrorD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPMirrorD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPMirrorD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPMirrorC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPMirrorC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ElementFilterD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ElementFilterD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    __rtti_user     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN19ContextErrorHandler13decorate_textEN12ErrorHandler11SeriousnessERK6StringS4_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12DelayUnqueueD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12DelayUnqueueD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12DelayUnqueueD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12DelayUnqueueC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12DelayUnqueueC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler9make_textENS_11SeriousnessEPKcz       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10EtherEncap10port_countEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14AverageCounter13simple_actionEP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjE5eraseEPj  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RFC2507cD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RFC2507cD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RFC2507cD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RFC2507cC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RFC2507cC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Paint13simple_actionEP6Packet       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRw14notify_patternEPNS_7PatternEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11CiscyFilter10class_nameEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV6Switch     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5StripD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PollDevice12add_handlersEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12ScheduleInfo10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PollDeviceD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPRewriter9configureER6VectorI6StringEP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14BandwidthMeter10initializeEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV8ARPFaker   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13DynamicNameDB6defineERK6StringPKvi /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilterD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilterD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilterD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilterC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilterC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10CrapFilter10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPRewriter22dump_nmappings_handlerEP7ElementPv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9IPAddressC2ERK6String       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9IPAddressC1ERK6String       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDPvED2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV15SpinlockAcquire   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12RandomSource10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12FastUDPFlows10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler17remove_conversionEPNS_10ConversionE  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIPvEaSERKS1_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3RED4pushEiP6Packet  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjE9pop_frontEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer10ystatementEb /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpInteger64     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriter10TCPMappingC1Eb        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13PerfCountInfoD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13PerfCountInfoD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13PerfCountInfoD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13PerfCountInfoC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13PerfCountInfoC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z21click_dmalloc_cleanupv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV11TimedSource       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIPvE6assignEiS0_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13SetPacketType13simple_actionEP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14NotifierSignal12static_valueE      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10RandomSeed12add_handlersEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z11skbmgr_initv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV16SetRandIPAddress  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11LinkUnqueue4castEPKc       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z10cp_integerRK6StringiPj      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12RatedUnqueue20can_live_reconfigureEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11AddressInfoD2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11AddressInfoD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11AddressInfoD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11AdaptiveREDD2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11AdaptiveREDD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11AdaptiveREDD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10RandomSeedD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7RRSchedD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7RRSchedD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7RRSchedD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z12cp_va_kparseRK6StringP7ElementP12ErrorHandlerz      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbED1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbEC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Script4stepEiii     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18RoundRobinIPMapperD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18RoundRobinIPMapperC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10MixedQueueD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPRewriter30dump_tcp_done_mappings_handlerEP7ElementPv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Lexer17anon_element_nameERK6String /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ICMPPingSource9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14AverageCounter10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10HashSwitchC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11HandlerCall10call_writeERK6StringS2_P7ElementP12ErrorHandler       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIPvED1Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler6verrorENS_11SeriousnessERK6StringPKcPc        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13SetPacketType     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Packet13expensive_putEj     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10CrapFilterD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ARPPrint7cleanupEN7Element12CleanupStageE   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorI9IPAddressE5frontEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastTCPFlows5resetEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8CPUQueue12read_handlerEP7ElementPv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RouterThread11driver_onceEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Router14econfigurationEi   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIN7IPTable5EntryEE4at_uEi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastUDPFlows12change_portsEi       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10UDPIPEncapC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjEC2ERKjP20HashMap_ArenaFactory   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SimpleQueue4pushEiP6Packet /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12SetIPAddress10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8MarkIPCE10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilter14static_cleanupEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z18cp_ip_address_listRK6StringP6VectorI9IPAddressEP7Element    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8PortInfoD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8PortInfoD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8PortInfoD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8PortInfoC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8PortInfoC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8NameInfo8revqueryEjPK7ElementPKvi   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18SourceIPHashMapperD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18SourceIPHashMapperC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckUDPHeader13simple_actionEP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIN6Router6HookupEE5frontEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEE2atEi       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK25VerboseFilterErrorHandler13min_verbosityEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11ErrorVeneer11count_errorEN12ErrorHandler11SeriousnessERK6String    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ActiveNotifierD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16ICMPPingRewriter9run_timerEP5Timer /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12StrideSwitch      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13NotifierQueue10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11CheckLengthC2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11CheckLengthC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16DevirtualizeInfoC2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16DevirtualizeInfoC1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11SetAnnoByte10processingEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ActiveNotifierC2EN8Notifier8SearchOpE      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ICMPRewriter9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorElement9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14CheckTCPHeader    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSourceD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSourceD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSourceD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSourceC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSourceC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14IPAddrRewriter13IPAddrMapping5applyEP14WritablePacket      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11ErrorVeneer12reset_countsEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14CheckARPHeader10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbE6resizeEj        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Master10run_routerEP6Routerb        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ICMPPingEncap12add_handlersEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FTPPortMapperD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FTPPortMapperD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FTPPortMapperD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FTPPortMapperC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FTPPortMapperC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN19VariableEnvironment6defineERK6StringS2_b   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorI9IPAddressE2atEi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14LinearIPLookupD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14LinearIPLookupC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RouterThread23unschedule_router_tasksEP6Router     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14DropBroadcasts12add_handlersEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressE6assignEiRKS0_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPReassembler13reap_overfullEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element8run_taskEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14BigHashMapTest10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14IPAddrRewriter14notify_patternEPN4IPRw7PatternEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10CheckPaint9configureER6VectorI6StringEP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z9cp_argvecRK6StringR6VectorIS_E       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12SetTimestamp10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Script14static_cleanupEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetPerfCount4pullEi        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN19ContextErrorHandlerD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressE9pop_frontEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12RatedUnqueue10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14InfiniteSource4pullEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10FromDevice10processingEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV25VerboseFilterErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11LinkUnqueue10port_countEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17RecycledSkbBucket10initializeEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Handler12unparse_nameEP7Element    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Router20unparse_declarationsER11StringAccumRK6String       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI7IPRouteE7reserveEi  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ARPQuerier16live_reconfigureER6VectorI6StringEP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer8CompoundC2ERK6StringS3_P19VariableEnvironment /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer8CompoundC1ERK6StringS3_P19VariableEnvironment /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13ICMPPingEncap10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV11CheckPacket       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13RadixIPLookup12remove_routeERK7IPRoutePS0_P12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4Task10unscheduleEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15LookupIPRouteMPC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SchedOrderTestD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SchedOrderTestC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjE3endEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Discard10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9ICMPError13is_error_typeEi  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ToHostSniffersD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorI9IPAddressE4at_uEi  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16StaticPullSwitch9configureER6VectorI6StringEP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13FastUDPSource10port_countEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Counter5llrpcEjPv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15UnstripIPHeader10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPReassembler10find_queueEP6PacketPPP14WritablePacket      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpFilename      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7MSQueue12read_handlerEP7ElementPv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckTCPHeaderD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckTCPHeaderC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriter14notify_patternEPN4IPRw7PatternEP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3RED11read_queuesEP7ElementPv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13IPOutputCombo10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK16ICMPPingRewriter10port_countEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV11ThreadSched       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN4IPRw9InputSpecEE7reserveEi /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPReassembler13simple_actionEP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPFragmenter9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14ComparePackets10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12RandomSample20can_live_reconfigureEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13NotifierQueue4pushEiP6Packet       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11AddressInfo8query_ipE6StringPhP7Element    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK16SetRandIPAddress10class_nameEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV11AdaptiveRED       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14SetUDPChecksum    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEE9push_backERKS1_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    click_unprovide /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15CycleCountAccum4pushEiP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV8IPFilter   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ClickIno4growEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIjE3endEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIiE3endEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12PokeHandlers12add_handlersEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPOutputCombo4pushEiP6Packet       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11CheckPacket13simple_actionEP6Packet        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastTCPFlowsD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastTCPFlowsD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastTCPFlowsD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastTCPFlowsC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastTCPFlowsC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckARPHeaderD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5TimerC1EPFvPS_PvES1_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10VectorTestD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14StoreIPAddress13simple_actionEP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16RoundRobinSwitchD2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16RoundRobinSwitchD1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16RoundRobinSwitchD0Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String13stable_stringEPKci  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9SetIPDSCP10class_nameEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer9TunnelEndC1ERKN6Router6HookupEbPS0_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8FromHost17static_initializeEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    click_has_provision     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13AnyTaskDevice     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiE10find_forceERKS0_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK3Tee10processingEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11TCPRewriter11get_mappingEiRK8IPFlowID     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11CiscyFilterC2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11CiscyFilterC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z25click_new_file_operationsv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4Idle4pullEi /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpIPAddress     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Unstrip13simple_actionEP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18PrefixErrorHandlerC2EP12ErrorHandlerRK6String      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7RIPSendD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7RIPSendD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7RIPSendD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN19_GLOBAL__N_cp_errno10CpVaHelperC2EP8cp_valueib     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN19_GLOBAL__N_cp_errno10CpVaHelperC1EP8cp_valueib     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14PerfCountAccum10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16ICMPPingRewriter13apply_patternERK8IPFlowID        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpWord  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpSecondsAsMilli        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Align10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10Suppressor10processingEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router17add_write_handlerEPK7ElementRK6StringPFiS5_PS0_PvP12ErrorHandlerES7_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8PaintTee10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element11local_llrpcEjPv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7PullTee4pullEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11EnsureEther10class_nameEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpUnsigned      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10Classifier4Expr9flippableEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ShaperD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiEixEi       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN23_HashMap_const_iteratorI6StringiEppEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN23_HashMap_const_iteratorI6StringiEppEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5MeterD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5MeterC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPRewriter10take_stateEP7ElementP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Align4pushEiP6Packet        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8CPUQueue9configureER6VectorI6StringEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjE8pop_backEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckTCPHeader9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV11EtherMirror       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11AdaptiveRED9run_timerEP5Timer      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PacketTest10initializeEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13StripIPHeaderD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13StripIPHeaderD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13StripIPHeaderD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13StripIPHeaderC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13StripIPHeaderC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPReassembler11check_errorEP12ErrorHandleriPK6PacketPKcz   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8FixIPSrc10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8DecIPTTL10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN11CiscyFilter4InsnEED1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8NameInfo9query_intEjPK7ElementRK6StringPi   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjE10find_forceERKS0_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiE9push_backERKi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router19router_read_handlerEP7ElementPv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12RandomSample10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12StaticNameDBD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12StaticNameDBD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Discard4pushEiP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV11CheckLength       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ScheduleInfo5queryEP7ElementP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18RoundRobinIPMapper7cleanupEN7Element12CleanupStageE        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16ICMPPingRewriter7cleanupEN7Element12CleanupStageE  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element12add_handlersEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15BandwidthShaperD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15BandwidthShaperD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjE5clearEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Shaper10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Counter12read_handlerEP7ElementPv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10Classifier4Expr11implies_notERKS0_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13QueueYankTest10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpSecondsAsMicro        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13CheckIPHeader10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIPvE6insertEPS0_S0_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SimpleQueue16live_reconfigureER6VectorI6StringEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9IPAddressC2EPKh     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9IPAddressC1EPKh     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12MarkIPHeader9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9ICMPError10processingEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SpinlockInfo12add_spinlockERK6VectorI6StringERKS1_P12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiE4backEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ScheduleInfo15initialize_taskEP7ElementP4TaskbP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13DriverManagerD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13DriverManagerD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13DriverManagerC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13DriverManagerC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9SetIPDSCP4pushEiP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Router4findERK6StringP7ElementP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16ICMPPingRewriter9configureER6VectorI6StringEP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI9IPAddressjE5findpERKS0_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPAddrPairRewriter17IPAddrPairMapping5applyEP14WritablePacket      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ICMPPingEncapD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ICMPPingEncapD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ICMPPingEncapD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ICMPPingEncapC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ICMPPingEncapC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11SimpleQueue10port_countEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Script10find_labelERK6String       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10PullSwitch13configurationER6VectorI6StringE       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14PerfCountAccum12read_handlerEP7ElementPv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV17CastElementFilter /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ARPQuerierC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18SourceIPHashMapper7cleanupEN7Element12CleanupStageE        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13DiscardNoFree4pushEiP6Packet       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12DelayUnqueue8run_taskEP4Task       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringE4at_uEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12SpinlockInfo10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV11ErrorVeneer       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14DropBroadcastsD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14DropBroadcastsC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbE10initializeEP20HashMap_ArenaFactoryj    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13SetCycleCountD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13SetCycleCountD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13SetCycleCountD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13SetCycleCountC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13SetCycleCountC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15PushNullElementC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15PullNullElementC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPRewriter16tcp_done_gc_hookEP5TimerPv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10CrapFilter4pushEiP6Packet  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SortedIPLookupD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SortedIPLookupC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13IPReassembler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN23_HashMap_const_iteratorI6StringiEC1EPK7HashMapIS0_iEb      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router25check_hookup_completenessEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RatedUnqueue9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEEaSERKS2_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5TimerC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPPrint10initializeEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriterD2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriterD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriterD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11NullElement10class_nameEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FullNoteQueue4pullEi       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriter7cleanupEN7Element12CleanupStageE       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Discard10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEEC2EiRKS1_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiE5clearEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer13lexeme_stringEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ICMPRewriterD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ICMPRewriterD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ICMPRewriterD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ICMPRewriterC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ICMPRewriterC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10HashSwitchD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorElementD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorElementD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorElementD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorElementC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorElementC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpSeconds       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpEthernetAddress       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer11begin_parseERK6StringS2_P10LexerExtraP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14ICMPPingSource    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIjE4veltEi   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIiE4veltEi   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringED2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringEC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressE4backEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15SpinlockAcquireD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13RatedSplitter10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8NotifierD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8NotifierD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8NotifierD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer8Compound20printable_name_c_strEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z9cp_real10RK6StringiPjS2_     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10UDPIPEncap12add_handlersEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17StaticThreadSchedD2Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17StaticThreadSchedD1Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17StaticThreadSchedD0Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17StaticThreadSchedC2Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17StaticThreadSchedC1Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12StaticSwitch10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEE6insertEPS1_RKS1_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressE4veltEPS0_i       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12SpinlockInfo5queryERK6StringS2_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEE4swapERS2_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10UDPIPEncapD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Lexer8landmarkEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer10skip_quoteEPKcc      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRw7Pattern9parse_natER6VectorI6StringEPPS0_P7ElementP12ErrorHandler       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPReassembler17emit_whole_packetEP14WritablePacketPS1_P6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8FromHost7cleanupEN7Element12CleanupStageE   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ScheduleLinux8run_taskEP4Task      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier9configureER6VectorI6StringEP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Packet4makeEjPKhjj  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6NameDBD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14StoreIPAddress10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z17cp_unparse_real10ji /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11AddressInfo15configure_phaseEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z18cp_va_space_kparseRK6StringP7ElementP12ErrorHandlerz        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Switch10port_countEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14StaticIPLookupD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14StaticIPLookupC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15CheckICMPHeader10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7BursterC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7BursterC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8SetCRC32D2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8SetCRC32D1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8SetCRC32D0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8SetCRC32C2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8SetCRC32C1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12PokeHandlers10read_paramEP7ElementPv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12GetIPAddress10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10CheckCRC3210port_countEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7IPRoute7unparseEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FullNoteQueue9configureER6VectorI6StringEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10FromDevice8run_taskEP4Task /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIjE4backEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIiE4backEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEE5beginEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK16UpstreamNotifier10port_countEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIjEixEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIiEixEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z12cp_ip_prefixRK6StringPhS2_P7Element /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Router13find_ehandlerEiRK6Stringb  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    click_random_seed       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12ErrorElement9flow_codeEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiE5eraseEPi  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV10MixedQueue        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9PrioSchedD2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9PrioSchedD1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9PrioSchedD0Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9PrioSchedC2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9PrioSchedC1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer20skip_backslash_angleEPKc     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPMapper7get_mapEP4IPRwiRK8IPFlowIDP6Packet /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15HostEtherFilter10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9CPUSwitch10class_nameEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SortedIPLookup9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ClickIno7readdirEmRjPFbPKcimijPvES3_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjE5beginEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPFragmenterD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPFragmenterD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPFragmenterD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPFragmenterC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPFragmenterC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z23cp_va_static_initializev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8CPUQueueD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8CPUQueueD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8CPUQueueD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8CPUQueueC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8CPUQueueC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10Classifier5flagsEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZlsR11StringAccumRK7timeval    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10SuppressorD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12SetTimestamp10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDiE20set_dynamic_resizingEb /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14InfiniteSourceD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12DelayUnqueue7cleanupEN7Element12CleanupStageE      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSource8run_taskEP4Task       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK18IPRewriterPatterns15configure_phaseEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12ICMPRewriter      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11EnsureEtherD2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11EnsureEtherD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11EnsureEtherD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDiE7resize0Ej       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11PaintSwitch4pushEiP6Packet /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12ErrorHandler13min_verbosityEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN12ARPResponder5EntryEEaSERKS2_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ToDevice12add_handlersEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI9IPAddressjE9find_pairERKS0_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11PaintSwitch20can_live_reconfigureEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjEC1ERKS1_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15RecycledSkbPool7cleanupEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14IPAddrRewriter10initializeEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15CheckICMPHeader10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z19cp_ethernet_addressRK6StringPhP7Element     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier14program_stringEP7ElementPv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorI9IPAddressE5beginEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressEixEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7ElementC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7ElementC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10Classifier4Expr1sEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer16add_element_typeERK6StringPFP7ElementmEmP6moduleb    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14FrontDropQueue    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14BandwidthMeter12add_handlersEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SchedOrderTest8run_taskEP4Task     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiED2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiED1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringEixEi /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpEnd   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12PokeHandlers10initializeEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14IPAddrRewriter11get_mappingEiRK8IPFlowID  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router7handlerEPK7ElementRK6String  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10PollDevice10port_countEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14PerfCountAccum10initializeEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Element15configure_phaseEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressE5clearEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13SetPacketType10processingEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9SetIPDSCP10port_countEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer3lexEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15HostEtherFilter10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5AlignD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13SetCycleCount10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV7IPPrint    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ICMPRewriter14rewrite_packetEP14WritablePacketP8click_ipP9click_udpRK8IPFlowIDPN4IPRw7MappingE     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEE5clearEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8FixIPSrc6fix_itEP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI9IPAddressjE3endEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZThn60_N18RoundRobinIPMapperD1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element20add_default_handlersEb     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7MSQueue10initializeEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRw7Pattern16parse_with_portsERK6StringPPS0_PiS6_P7ElementP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8IPFilter6lookupE6StringiiRjP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14AverageCounterD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI9IPAddressjE4findERKS0_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12SetPerfCount10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15CheckICMPHeader4dropENS_6ReasonEP6Packet   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router11set_handlerEPK7ElementRK6StringiPFiiRS3_PS0_PK7HandlerP12ErrorHandlerEPvSF_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15RandomBitErrors10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PollDevice8run_taskEP4Task /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14LinearIPLookup    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    click_in_cksum_pseudohdr_hard   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15HostEtherFilterD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15HostEtherFilterD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ActiveNotifier15listener_changeEPvib       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12IPFragmenter      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK3RED10port_countEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14SchedOrderTest10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14IPAddrRewriter10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RTCyclesD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RTCyclesD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RTCyclesD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RTCyclesC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RTCyclesC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN25VerboseFilterErrorHandler11handle_textEN12ErrorHandler11SeriousnessERK6String      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17CastElementFilter11check_matchEP7ElementiN13ElementFilter8PortTypeE        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z15cleanup_clickfsv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10ARPQuerier9flow_codeEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6String5c_strEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK16RoundRobinSwitch10port_countEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7RRSched4pullEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14IPAddrRewriter13IPAddrMapping7unparseEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI9IPAddressjE6bucketERKS0_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringEC2EiRKS0_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13SetPacketType10parse_typeERK6String        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Timer11schedule_atERK9Timestamp     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Shaper9configureER6VectorI6StringEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastUDPFlows12add_handlersEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Znwj   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Znaj   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14CheckTCPHeader10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Strip13simple_actionEP6Packet       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18PrefixErrorHandler13decorate_textEN12ErrorHandler11SeriousnessERK6StringS4_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12ARPResponder20can_live_reconfigureEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10FromDevice10initializeEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14DropBroadcasts    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpNamedInteger  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element10set_nportsEii      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13SetIPChecksum10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router7elementEPKS_i        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11IPFieldInfo17static_initializeEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12MarkIPHeaderD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12MarkIPHeaderD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12MarkIPHeaderD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12MarkIPHeaderC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12MarkIPHeaderC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10IPRewriter10processingEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZlsR11StringAccumRK8IPFlowID   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK4Idle9flow_codeEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Element11declarationEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEEixEi        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13ConfParseTest     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPField7unparseEP7Elementb  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7MSQueue4castEPKc    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Master10run_timersEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8MarkIPCE10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10HashSwitch10port_countEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV15CycleCountAccum   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10CheckPaint10port_countEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckARPHeader12read_handlerEP7ElementPv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Master5unuseEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer19lexical_scoping_outEi        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15CheckICMPHeader12reason_textsE     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8Notifier22downstream_full_signalEP7ElementiP4TaskPS_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiE20set_dynamic_resizingEb   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11StringAccum5c_strEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z10cp_integerRK6StringiPy      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18PrefixErrorHandlerD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8DRRSched4pullEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13RadixIPLookup11dump_routesEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV10EtherEncap        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14BandwidthMeter    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV5Align      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ComparePackets7cleanupEN7Element12CleanupStageE    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Handler12unparse_nameEP7ElementRK6String    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RatedUnqueueD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RatedUnqueueD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RatedUnqueueD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RatedUnqueueC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RatedUnqueueC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18KernelErrorHandlerD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14LinearIPLookup5checkEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilter17static_initializeEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Discard10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckUDPHeaderD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK18RoundRobinIPMapper15configure_phaseEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PollDevice13change_deviceEP10net_device    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjEaSERKS0_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjEC2ERKS0_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjEC1ERKS0_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router16processing_errorERKNS_6HookupES2_biP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10ARPQuerier10port_countEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15SpinlockRelease10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11LinkUnqueue18delay_by_bandwidthEP6PacketRK9Timestamp      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPEncap13simple_actionEP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Discard13write_handlerERK6StringP7ElementPvP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Shaper4pullEi       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Print20can_live_reconfigureEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13StripIPHeader10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV16StaticPullSwitch  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9SetIPDSCP4pullEi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Meter4pushEiP6Packet        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK16ICMPPingRewriter10processingEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15CheckICMPHeaderC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11CheckPacket9configureER6VectorI6StringEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ToHost12read_handlerEP7ElementPv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRw7Mapping5applyEP14WritablePacket        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z28cp_extend_stringlist_argtypePKcz    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6String6equalsEPKci /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10MixedQueueC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14DropBroadcasts7drop_itEP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Counter10initializeEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9Bitvector10clear_lastEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ARPQuerierD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9TimedSink10processingEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10HashSwitch4pushEiP6Packet  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Element5flagsEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIjE2atEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIiE2atEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element9run_timerEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10CrapFilter10processingEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN19VariableEnvironmentD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10LexerExtra7requireE6StringP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9Timestamp3secEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14SetUDPChecksum10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetPerfCount4castEPKc      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPRewriterPatternsD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10CrapFilterC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9CPUSwitch4pushEiP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiEC2EiRKi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiEC1EiRKi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12PokeHandlers20can_live_reconfigureEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element10take_stateEPS_P12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZThn60_N17StaticThreadSchedD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14SortedIPLookup10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16SetRandIPAddress9configureER6VectorI6StringEP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV11QuitWatcher       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10BpfyFilterD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z20cp_unparse_bandwidthj       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12ARPResponder10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0xcd768ff0    proclikefs_new_file_operations  /d/click/click-1.6.0-27/linuxmodule/proclikefs  EXPORT_SYMBOL
++0x00000000    _ZN11TimedSourceD2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TimedSourceD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TimedSourceD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11StrideSched10processingEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PollDevice10initializeEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer7connectEiiii  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TimedSource7cleanupEN7Element12CleanupStageE       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDPvE5clearEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN12ARPResponder5EntryEE7reserveEi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8ToDevice10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15RecycledSkbPool8allocateEjjiPi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRw7Pattern14create_mappingEiRK8IPFlowIDiiPNS_7MappingES5_RK7HashMapIS1_S5_E       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPReassembler4reapEi       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11AdaptiveRED10initializeEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV19VariableEnvironment       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK23_HashMap_const_iteratorI6StringiE3keyEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15HostEtherFilter9configureER6VectorI6StringEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11SetAnnoByte10class_nameEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3RED10read_statsEP7ElementPv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier17init_expr_subtreeER6VectorIiE  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16StaticPullSwitchD2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16StaticPullSwitchD1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16StaticPullSwitchD0Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12IPInputCombo5flagsEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10FromDevice9configureER6VectorI6StringEP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13DiscardNoFree8run_taskEP4Task      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPRouteTable17add_route_handlerERK6StringP7ElementPvP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z14cp_tcpudp_portRK6StringiPtP7Element /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8ToDevice15configure_phaseEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12IPClassifier10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12DelayUnqueue10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6PacketC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6MasterC1Ei  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilter9Primitive12unparse_typeEii /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjE7resize0Ej      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRw7Mapping9make_pairEiRK8IPFlowIDS3_iiPS0_S4_     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7IPRoute7unparseER11StringAccumb    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPRouteTable4castEPKc      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastTCPFlows7cleanupEN7Element12CleanupStageE      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9SetIPDSCP12add_handlersEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14CheckARPHeader10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6String6lengthEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV11PaintSwitch       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14BandwidthMeterD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14BandwidthMeterC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5TimerC1EP4Task      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4Task15true_rescheduleEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZThn60_N18SourceIPHashMapperD1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z8int_sqrtj    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV9ICMPError  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9CPUSwitch10port_countEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIN6Router6HookupEE4at_uEi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringE4veltEPS0_i  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Print9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbE9copy_fromERKS1_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6String9substringEii        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK18SourceIPHashMapper15configure_phaseEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPRewriter4castEPKc        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjED2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjED1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjEC2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjEC1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjE10push_frontERKj   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpInteger       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11TimedSource10processingEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RFC2507d6decodeERPKhRj      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEEC2ERKS2_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbE15find_pair_forceERKS0_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17StaticThreadSched9configureER6VectorI6StringEP12ErrorHandler       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer6expectEib     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6ToHost15configure_phaseEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressE5frontEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8FromHost10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressE2atEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbE11findp_forceERKS0_RKb   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    click_router    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV7IPEncap    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16UpstreamNotifier4pushEiP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorI6StringE4veltEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12StrideSwitchD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12StrideSwitchD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12StrideSwitchD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12StrideSwitchC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12StrideSwitchC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9PrioSched10class_nameEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandlerD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandlerD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV11DelayShaper       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12CompareBlock10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14CheckUDPHeader10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11AddressInfo9configureER6VectorI6StringEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11AdaptiveRED9configureER6VectorI6StringEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10UDPIPEncap13simple_actionEP6Packet /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV7RIPSend    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8Unqueue210read_paramEP7ElementPv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14StoreIPAddressD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8MarkIPCE10initializeEP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8IPMirror10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8RTCycles10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9TimedSink9run_timerEP5Timer /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12PokeHandlers10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12FastTCPFlows10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler6lerrorERK6StringPKcz  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10Classifier10port_countEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10RandomSeed20can_live_reconfigureEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String8oom_memoE    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13RatedSplitter9configureER6VectorI6StringEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8PaintTee10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastTCPFlows10get_packetEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SimpleQueue5yank1IN33_GLOBAL__N__ZN13QueueYankTestC2Ev3FooEEEP6PacketT_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13FTPPortMapper     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router15adjust_runcountEi   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7IPPrint9icmp_lineER11StringAccumPK6Packeti /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpUnsigned64    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressE4at_uEi   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI7IPRouteEC1ERKS1_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router19initialize_handlersEbb      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Lexer16element_landmarkEi  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FastUDPSource10initializeEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpMandatoryKeywords     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15CheckICMPHeader13simple_actionEP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriter10TCPMappingC2Eb        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15LookupIPRouteMPD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer19ycompound_argumentsEPNS_8CompoundE   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13IPReassembler10processingEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ConfParseTest10initializeEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Switch10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PollDevice9configureER6VectorI6StringEP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14ComparePackets10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringE2atEi        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11IPGWOptions14handle_optionsEP6Packet       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z19cp_unparse_intervalRK9Timestamp     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK16StaticPullSwitch10class_nameEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPPrintD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPPrintD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPPrintD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17CastElementFilterD1Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17CastElementFilterD0Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Suppressor4pullEi  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8SetCRC3210class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14MessageElementD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14MessageElementC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer22add_router_connectionsEiRK6VectorIiEP6Router /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEE5eraseEPS1_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9PrioSched10initializeEP12ErrorHandler       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14LinearIPLookup4pushEiP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16ICMPPingRewriter21dump_mappings_handlerEP7ElementPv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI6StringiE4sizeEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12RatedUnqueue13configurationER6VectorI6StringE     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressEaSERKS1_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressEC2ERKS1_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressEC1ERKS1_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN20StripToNetworkHeaderD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN20StripToNetworkHeaderD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN20StripToNetworkHeaderD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13FullNoteQueue     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler14silent_handlerEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPRouteTable20remove_route_handlerERK6StringP7ElementPvP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ICMPPingSource4pullEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSample12add_handlersEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10PullSwitch20can_live_reconfigureEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPFragmenter4pushEiP6Packet        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z12cp_bandwidthRK6StringPj     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV20HashMap_ArenaFactory      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10RandomSeed9configureER6VectorI6StringEP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjE4swapERS0_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5PrintD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5PrintC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14ICMPPingSource10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11CheckPacketC2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11CheckPacketC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastUDPFlows10initializeEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z10cp_elementRK6StringP6RouterP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String4MemoD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7IPPrint10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z21cp_unregister_argtypePKc    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckTCPHeader13simple_actionEP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN12ARPResponder5EntryEED1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14BigHashMapTest    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjE11findp_forceERKS0_     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String14numeric_stringEyib  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String14numeric_stringExib  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10IPRewriter11get_mappingEiRK8IPFlowID      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12CompareBlock24rev_weight_write_handlerERK6StringP7ElementPvP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZlsR11StringAccumm     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZlsR11StringAccuml     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ICMPPingSource9run_timerEP5Timer   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16ICMPPingRewriterD2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16ICMPPingRewriterD1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16ICMPPingRewriterD0Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN10Classifier4ExprEE5eraseEPS1_S3_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIjE5beginEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIiE5beginEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router17upstream_elementsEP7ElementiP13ElementFilterR6VectorIS1_E   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPInputCombo4pullEi        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z13cp_skip_spacePKcS0_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11CheckPacket10processingEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiE9copy_fromERKS1_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3TeeD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3TeeD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3TeeD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3TeeC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3TeeC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8ARPFaker10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6String7compareEPKci        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router19downstream_elementsEP7ElementiP13ElementFilterR6VectorIS1_E /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11ErrorVeneer9make_textEN12ErrorHandler11SeriousnessEPKcPc   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8DRRSched10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6ToHost5flagsEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13PerfCountUser10initializeEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5MeterD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV11IPGWOptions       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPAddrPairRewriter4castEPKc        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SetAnnoByte19offset_read_handlerEP7ElementPv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Lexer14remaining_textEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12RandomSwitch10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK17DynamicUDPIPEncap5flagsEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14BigHashMapTestD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14BigHashMapTestC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEE4backEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13SetIPChecksum13simple_actionEP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FastUDPSource4pullEi       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ARPFaker9configureER6VectorI6StringEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK16UpstreamNotifier10processingEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastUDPFlows8NO_LIMITE     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10VectorTest10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10VectorTest10initializeEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10RandomSeed10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String17static_initializeEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Counter5resetEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SimpleQueueD2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SimpleQueueD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SimpleQueueD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8NameInfo5getdbEjPK7Elementib        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpIP6AddressOrPrefix    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SimpleQueue7cleanupEN7Element12CleanupStageE       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV15LookupIPRouteMP   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIN7IPTable5EntryEE5emptyEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z7cp_boolRK6StringPb   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Burster9run_timerEP5Timer   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressE5eraseEPS0_S2_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9StoreData9configureER6VectorI6StringEP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15SpinlockAcquire10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13RadixIPLookup5Radix6changeEjjij    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TimedSource9run_timerEP5Timer      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13PerfCountUser     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN20HashMap_ArenaFactory9get_arenaEjPS_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI9IPAddressjE4findERKS0_RKj /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ClickIno12true_prepareEP6Routerj    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbE11findp_forceERKS0_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15RandomBitErrors13set_bit_errorEj   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV15PushNullElement   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV15PullNullElement   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14BandwidthMeter19meters_read_handlerEP7ElementPv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV3Tee        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11StrideSched11set_ticketsEiiP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8Notifier10initializeEP6Router       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier20remove_unused_statesEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13RatedSplitter20can_live_reconfigureEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ARPQuerier4pushEiP6Packet  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK4Idle10processingEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element5llrpcEjPv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckIPHeader2D2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckIPHeader2C2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringE8pop_backEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8RFC2507d10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8RFC2507c10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPReassembler10next_chunkEP14WritablePacketPNS_9ChunkLinkE /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV16DevirtualizeInfo  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TimedSource10read_paramEP7ElementPv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router19check_push_and_pullEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5PaintD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5PaintC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDiE6insertERKS0_RKi /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12StaticNameDB5queryERK6StringPvi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ComparePacketsD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ComparePacketsC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK23_HashMap_const_iteratorI6StringiE5valueEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12MarkIPHeader10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11HandlerCall5resetERPS_P7ElementRK6StringS6_iP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10CheckCRC32D2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12ScheduleInfo      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15CycleCountAccumC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11AddressInfoC2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11AddressInfoC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11AdaptiveREDC2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11AdaptiveREDC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11RatedSource8run_taskEP4Task        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z20click_random_srandomv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10FromDevice10port_countEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler17static_initializeEPS_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbEaSERKS1_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9StoreData10processingEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Router15chatter_channelERK6String  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11RatedSource10port_countEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10PullSwitch10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7IPTable6lookupE9IPAddressRS0_Ri    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPFragmenter7optcopyEPK8click_ipPS0_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FastUDPSource9configureER6VectorI6StringEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN20HashMap_ArenaFactoryD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN20HashMap_ArenaFactoryD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN20HashMap_ArenaFactoryD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV6Script     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13RadixIPLookup     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7MSQueueD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7MSQueueD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7MSQueueD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10MixedQueueD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ClickIno6lookupEmRK6String  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10FromDevice10take_stateEP7ElementP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10EtherEncapD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpReadHandlerCall       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringEC2ERKS1_     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router17static_initializeEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12RandomSource      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14IPAddrRewriter12add_handlersEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12FastUDPFlows      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10HashSwitchC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16BaseErrorHandlerD1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16BaseErrorHandlerD0Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV10PacketTest        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ScheduleInfo9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11ThreadSchedD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11ThreadSchedD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11RatedSourceD2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11RatedSourceD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11RatedSourceD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12RandomSample13configurationER6VectorI6StringE     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15PushNullElementD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15PushNullElementD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15PullNullElementD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15PullNullElementD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12GetIPAddress9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SetUDPChecksumD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SetUDPChecksumC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SetTCPChecksumD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SetTCPChecksumC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11RatedSource7cleanupEN7Element12CleanupStageE       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12ErrorElement10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element9run_timerEP5Timer   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10CrapFilterD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZlsR11StringAccumPv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RatedUnqueue8run_taskEP4Task       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FullNoteQueueD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FullNoteQueueD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FullNoteQueueD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FullNoteQueueC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FullNoteQueueC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Unstrip9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressE3endEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10Suppressor9flow_codeEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SortedIPLookup12remove_routeERK7IPRoutePS0_P12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14PerfCountAccum12add_handlersEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIN7IPTable5EntryEE4sizeEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringE3endEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14LinearIPLookup10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16ICMPPingRewriter7MappingC2Eb       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Align10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PullSwitchD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    __rtti_si       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z13cp_unspacevecPK6StringS1_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckUDPHeader12read_handlerEP7ElementPv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV15BandwidthShaper   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriter10initializeEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetTimestamp9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11HandlerCall9call_readEP7ElementRK6StringP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11CiscyFilter10port_countEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11CheckLength10processingEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjE7reserveEi /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14InfiniteSource10initializeEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12EtherAddressC1EPKh /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK16RoundRobinSwitch10processingEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpByte  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSwitchD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSwitchD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSwitchD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSwitchC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSwitchC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK18IPAddrPairRewriter10port_countEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler14set_error_codeEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Element9port_flowEbiP9Bitvector    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Element17processing_vectorEPiS0_P12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8Truncate10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ShaperC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9PrioSched10port_countEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Master15register_routerEP6Router    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEE10push_frontERKS1_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z21cp_skip_comment_spacePKcS0_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Align10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14NotifierSignalpLERKS_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPFragmenter8fragmentEP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RFC2507c8encode32EiiPcRi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEE5eraseEPS1_S3_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPRewriterD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ClickIno27calculate_handler_conflictsEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14DropBroadcasts10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK18IPAddrPairRewriter11get_mappingEiRK8IPFlowID      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11ErrorVeneer7nerrorsEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEE8pop_backEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7IPPrint10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14FrontDropQueueD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler7messageEPKcz  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13CheckIPHeader14static_cleanupEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6RouterD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15RandomBitErrorsC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10FromDevice17static_initializeEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ARPQuerier9clear_mapEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ComparePackets9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV9TimedSink  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8MarkIPCE4pushEiP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13SetPacketType10port_countEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPAddrPairRewriter22dump_nmappings_handlerEP7ElementPv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    click_provide   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI6StringiE6bucketERKS0_     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorI6StringE5emptyEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6SwitchC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3RED4pullEi  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Master5pauseEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14StaticIPLookup12remove_routeERK7IPRoutePS0_P12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV10CheckCRC32        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13AlignmentInfo15configure_phaseEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10SuppressorC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11ErrorVeneer13decorate_textEN12ErrorHandler11SeriousnessERK6StringS4_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14AverageCounter10initializeEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11ThreadSched22initial_home_thread_idEP4Taskb        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPRewriter7cleanupEN7Element12CleanupStageE        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier8add_exprER6VectorIiEijj /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9Bitvector5or_atERKS_i       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10Suppressor10port_countEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Element6masterEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbEC2ERKbP20HashMap_ArenaFactory    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8Notifier21upstream_empty_signalEP7ElementiP4TaskPS_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8Notifier20add_dependent_signalEP14NotifierSignal    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ARPFakerD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ARPFakerD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ARPFakerD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ARPFakerC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ARPFakerC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriter9configureER6VectorI6StringEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriter22dump_nmappings_handlerEP7ElementPv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPRewriter14notify_patternEPN4IPRw7PatternEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8IPFilter10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDPvE7resize0Ej      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    click_lfree     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Element8landmarkEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15CycleCountAccum4pullEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14BandwidthMeter10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbE9set_arenaEP20HashMap_ArenaFactory       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SetTCPChecksum9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14LinearIPLookup11dump_routesEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13FastUDPSource10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Unqueue9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjEC2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16VariableExpanderD1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16VariableExpanderD0Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7IPEncap10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element23read_positional_handlerEPS_Pv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ARPPrint10initializeEP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12StaticSwitch9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ScriptC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV18KernelErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7RIPSend10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FastUDPSource7cleanupEN7Element12CleanupStageE     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11EnsureEther4pullEi /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7CounterD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7CounterD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7CounterD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String6appendEPKci  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12RatedUnqueue      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringE5clearEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11StringAccum14append_numericEyib    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11StringAccum14append_numericExib    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilter9Primitive8set_typeEiP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK16DevirtualizeInfo10class_nameEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiE4veltEPii  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetIPAddress13simple_actionEP6Packet       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13RatedSplitter12add_handlersEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer8yelementERib  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI8IPFlowIDbE4sizeEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8PaintTee13simple_actionEP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer8Compound4castEPKc     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN19_GLOBAL__N_cp_errno10CpVaHelper14develop_valuesEPcP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13CheckIPHeader4dropENS_6ReasonEP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSample10initializeEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Master12check_driverEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12IPInputCombo10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV4Idle       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8SortTest10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN23_HashMap_const_iteratorI8IPFlowIDbEC2EPK7HashMapIS0_bEb    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN23_HashMap_const_iteratorI8IPFlowIDbEC1EPK7HashMapIS0_bEb    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4Task15process_pendingEP12RouterThread       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Lexer8Compound9signatureEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer18set_remaining_textERK6String /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String12mutable_dataEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ActiveNotifier12add_listenerEP4Task        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11DelayShaper11write_paramERK6StringP7ElementPvP12ErrorHandler       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10PollDevice15configure_phaseEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    click_logged_errh       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriter12add_handlersEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12StrideSwitch4pushEiP6Packet        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14StoreIPAddress    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV10PollDevice        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI8IPFlowIDbE5emptyEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Handler9call_readEP7ElementRK6StringbP12ErrorHandler       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ClickIno10initializeEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpUDPPort       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpTCPPort       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpHandlerCallPtrWrite   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15UnstripIPHeaderC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorI6StringE4at_uEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12PokeHandlers9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEEC1ERKS2_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10BpfyFilter10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12CompareBlock19thresh_read_handlerEP7ElementPv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbEC2ERKS1_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Shaper12add_handlersEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PollDevice17static_initializeEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK4IPRw7Pattern15can_accept_fromERKS0_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ICMPPingSourceD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriter11tcp_gc_hookEP5TimerPv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIN7IPTable5EntryEE2atEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPReassembler10make_queueEP6PacketPP14WritablePacket       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14FrontDropQueue16live_reconfigureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler15default_handlerEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element20next_processing_codeERPKcP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13NotifierQueue4castEPKc     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPClassifier9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0xa6ad14ca    proclikefs_put_super    /d/click/click-1.6.0-27/linuxmodule/proclikefs  EXPORT_SYMBOL
++0x00000000    _ZNK6Packet11user_anno_uEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Packet11user_anno_cEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10CheckPaintD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEE7reserveEi  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14CheckTCPHeader10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Suppressor3setEib  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SpinlockInfo9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ElementFilter11check_matchEP7ElementiNS_8PortTypeE /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV8ToDevice   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbE5beginEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7PullTee9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPAddrPairRewriterD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    click_dmalloc_where     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler7warningEPKcz  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ShaperD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7Handler10call_writeERK6StringP7ElementbP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEED1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEEC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8Unqueue210initializeEP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10UDPIPEncap9configureER6VectorI6StringEP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPTableC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPTableC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    click_chatter   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11EnsureEther9configureER6VectorI6StringEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element20read_keyword_handlerEPS_Pv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEE6assignEiRKS1_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilter9Primitive10set_srcdstEiP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12CompareBlock24fwd_weight_write_handlerERK6StringP7ElementPvP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z19skbmgr_recycle_skbsP7sk_buff        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16SetRandIPAddressD2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16SetRandIPAddressD1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16SetRandIPAddressD0Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13ScheduleLinux     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7RRSched7cleanupEN7Element12CleanupStageE    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router10initializeEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13RadixIPLookup12lookup_routeE9IPAddressRS0_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14IPAddrRewriterD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14IPAddrRewriterC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z20cp_va_kparse_keywordRK6StringP7ElementP12ErrorHandlerz      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ToHost17static_initializeEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIjE5frontEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIiE5frontEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9SetIPDSCP9configureER6VectorI6StringEP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer11next_lexemeEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Router15unparse_classesER11StringAccumRK6String    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8IPFilter9Primitive10unparse_opEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK16BaseErrorHandler9nwarningsEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Print10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ClickIno5nlinkEm    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Shaper20can_live_reconfigureEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIjE4sizeEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIiE4sizeEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12StrideSwitch10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12RandomSwitch10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN12ARPResponder5EntryEE5eraseEPS1_S3_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8SortTestD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8SortTestD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8SortTestD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8SortTestC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8SortTestC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Strip10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14PerfCountAccumD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14PerfCountAccumC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbE5clearEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6SwitchD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11DelayShaperD2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11DelayShaperD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11DelayShaperD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    click_add_element_type  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14InfiniteSource5flagsEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11DelayShaper7cleanupEN7Element12CleanupStageE       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpTimestamp     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPRouteTable12add_handlersEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13CheckIPHeader9configureER6VectorI6StringEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13HashMap_ArenaD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13HashMap_ArenaD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13HashMap_ArenaC2Ej  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13HashMap_ArenaC1Ej  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11StringAccumD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK4IPRw7Pattern7unparseEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV10HashSwitch        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV10CheckPaint        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Lexer17expand_connectionERKN6Router6HookupEbR6VectorIS1_E  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z11click_qsortPvjjPFiPKvS1_S_ES_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV20LandmarkErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8CPUQueue7cleanupEN7Element12CleanupStageE   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12SetIPAddress20can_live_reconfigureEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV7MSQueue    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ScheduleInfoD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ScheduleInfoD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ScheduleInfoD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ScheduleInfoC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ScheduleInfoC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router19store_local_handlerEiRK7Handler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11RatedSource10read_paramEP7ElementPv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8IPFilter9Primitive9add_exprsEP10ClassifierR6VectorIiE      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16ICMPPingRewriter12add_handlersEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12GetIPAddressD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12GetIPAddressD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12GetIPAddressD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12GetIPAddressC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12GetIPAddressC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8Unqueue28run_taskEP4Task    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ScriptD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10MixedQueue4pushEiP6Packet  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element13notify_nportsEiiP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ARPQuerierC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12RandomSample      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckARPHeader12add_handlersEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ToDevice9configureER6VectorI6StringEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPAddrPairRewriter10initializeEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14SchedOrderTest    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11StrideSched10class_nameEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14IPAddrRewriter    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8FromHost10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV10ARPQuerier        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV8RTCycles   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router18set_econfigurationEiRK6String       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10Classifier18DominatorOptimizer17find_predecessorsEiR6VectorIiE    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjE4at_uEi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14SetUDPChecksum10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15CheckICMPHeaderD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN20HashMap_ArenaFactory14get_arena_funcEj     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV11TCPRewriter       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetTimestampD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetTimestampD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetTimestampD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetTimestampC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SetTimestampC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPAddrPairRewriter9run_timerEP5Timer       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10BpfyFilterC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10UDPIPEncap20can_live_reconfigureEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ToHostD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjE4veltEPji  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriterC2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriterC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4Task7cleanupEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11EnsureEther10port_countEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4Idle4castEPKc       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler14add_conversionERK6StringPFS0_iPPcE   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIPvE7reserveEi        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8IPMirror10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15UnstripIPHeader13simple_actionEP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18KernelErrorHandler8log_lineEPKcS1_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7IPEncap10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK16ICMPPingRewriter11get_mappingEbRK8IPFlowID        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10HashSwitchD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FastUDPSource12add_handlersEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Align8smactionEP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15RecycledSkbPool7recycleEP7sk_buff  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7RIPSend10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ActiveNotifierD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7GapRate8set_rateEjP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12SpinlockInfo      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPAddrPairRewriter4pushEiP6Packet  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5TimerC2EP7Element   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI6StringiE9find_pairERKS0_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV8SetCRC32   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPRouteTable12ctrl_handlerERK6StringP7ElementPvP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7IPPrint10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Timer8set_hookEP4Task       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11PaintSwitchD2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11PaintSwitchD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11PaintSwitchD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ActiveNotifierC1EN8Notifier8SearchOpE      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10EtherEncap4pullEi  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13CheckIPHeader12reason_textsE       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV21BandwidthRatedUnqueue     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12ErrorElement10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorI6StringE5beginEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN20StripToNetworkHeader13simple_actionEP6Packet       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14LinearIPLookupD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14LinearIPLookupC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer9TunnelEnd6expandEPKS_R6VectorIN6Router6HookupEE       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPRouteTable13table_handlerEP7ElementPv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8FromHost10new_deviceEPKc    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8FixIPSrc9configureER6VectorI6StringEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FastUDPSource10incr_portsEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11TimedSource10class_nameEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TimedSource10initializeEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Master14prepare_routerEP6Router     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14NotifierSignal6activeEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13RatedSplitterD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13RatedSplitterD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13RatedSplitterD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13RatedSplitterC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13RatedSplitterC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12PokeHandlers12PAUSE_MARKERE        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11StringAccum11append_fillEii        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9StoreDataD2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9StoreDataD1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9StoreDataD0Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9StoreDataC2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9StoreDataC1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9SetIPDSCP20can_live_reconfigureEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12StaticSwitch      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PullSwitch4pullEi  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12SetIPAddress10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13IPReassembler10port_countEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ARPPrint13simple_actionEP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SimpleQueue4yankIN33_GLOBAL__N__ZN13QueueYankTestC2Ev3FooEEEiT_R6VectorIP6PacketE  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8NameInfo5queryEjPK7ElementRK6StringPvi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8DRRSched9configureER6VectorI6StringEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13DriverManager     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Burster10initializeEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ARPQuerier14send_query_forE9IPAddress      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12StaticSwitchD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12StaticSwitchD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12StaticSwitchD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12StaticSwitchC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12StaticSwitchC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI7IPRouteEaSERKS1_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Shaper13configurationER6VectorI6StringE    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer6lerrorEPKcz   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7IPEncap20can_live_reconfigureEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9IPAddress12unparse_maskEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV11AddressInfo       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiE11findp_forceERKS0_RKi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV9StoreData  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RFC2507dD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RFC2507dD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RFC2507dD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RFC2507dC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RFC2507dC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16UpstreamNotifierC2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16UpstreamNotifierC1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SchedOrderTestD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SchedOrderTestC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x9ed782d6    proclikefs_unregister_filesystem        /d/click/click-1.6.0-27/linuxmodule/proclikefs  EXPORT_SYMBOL
++0x00000000    _ZN19ContextErrorHandlerC1EP12ErrorHandlerRK6StringS4_S4_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV8DRRSched   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8Truncate13simple_actionEP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPEncap9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK16ICMPPingRewriter7Mapping1sEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11NullElement10port_countEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV18IPRewriterPatterns        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN21LinuxModuleLexerExtraD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN21LinuxModuleLexerExtraD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEE9push_backERKS1_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10SuppressorD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13DiscardNoFree     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckTCPHeaderD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiE15find_pair_forceERKS0_RKi /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16StaticPullSwitch4pullEi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12GetIPAddress      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11EnsureEtherC2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11EnsureEtherC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8ARPFaker10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK20StripToNetworkHeader10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3Tee4pushEiP6Packet  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14SortedIPLookup    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13PerfCountInfo15configure_phaseEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TimedSource9configureER6VectorI6StringEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13AlignmentInfo     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSwitch4pushEiP6Packet        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN19ContextErrorHandlerD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11ErrorVeneer11handle_textEN12ErrorHandler11SeriousnessERK6String    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element8run_taskEP4Task     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element12PULL_TO_PUSHE      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router18check_hookup_rangeEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10IPRewriter10port_countEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10UDPIPEncap10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13RadixIPLookup10processingEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilter12parse_factorERK6VectorI6StringEiRS0_IiERNS_9PrimitiveEbP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV10Classifier        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV9AnyDevice  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12PokeHandlersD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12PokeHandlersD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12PokeHandlersD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12PokeHandlersC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12PokeHandlersC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16DevirtualizeInfo9configureER6VectorI6StringEP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router7handlerEPKS_i        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV8IPMapper   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8FromHost10initializeEP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element10initializeEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z13cp_seconds_asRK6StringiPj   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14BandwidthMeter4pushEiP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11PaintSwitch10processingEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10FromDevice4castEPKc        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10EtherEncap8smactionEP6Packet       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z9cp_real10RK6StringiiPjS2_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK3RED20can_live_reconfigureEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ToHost10initializeEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN25VerboseFilterErrorHandlerD1Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN25VerboseFilterErrorHandlerD0Ev      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ToHostSniffersD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ToHostSniffersC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15PushNullElement4pushEiP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPRewriterPatternsD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPRewriterPatternsC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPClassifierD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPClassifierD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPClassifierD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPClassifierC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPClassifierC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer8Compound9signatureERK6StringPK6VectorIS1_Eiii /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV8RFC2507d   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV8RFC2507c   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5PrintD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ClassifierD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ToDeviceD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ToDeviceD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ToDeviceD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ToDeviceC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ToDeviceC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK18IPAddrPairRewriter17IPAddrPairMapping7reverseEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14ICMPPingSource10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Discard12add_handlersEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PacketTestD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SpinlockInfoD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SpinlockInfoD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SpinlockInfoD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SpinlockInfoC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SpinlockInfoC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7IPPrint8udp_lineER11StringAccumPK6Packeti  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7IPPrint8tcp_lineER11StringAccumPK6Packeti  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z7cp_timeRK6StringP9Timestamp  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15CheckICMPHeader12read_handlerEP7ElementPv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11CheckPacket10class_nameEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TimedSource12add_handlersEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14NotifierSignal17static_initializeEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11SimpleQueue20can_live_reconfigureEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjE10initializeEP20HashMap_ArenaFactoryj   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16RoundRobinSwitch4pushEiP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11IPGWOptionsD2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11IPGWOptionsD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11IPGWOptionsD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16BaseErrorHandler12reset_countsEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z10cp_elementRK6StringP7ElementP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIiE2atEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11DelayShaper10processingEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8CPUQueue10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z27cp_va_parse_remove_keywordsR6VectorI6StringEiP7ElementP12ErrorHandlerz      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11DelayShaper9run_timerEP5Timer      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpUnsignedReal2 /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SchedOrderTest9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11QuitWatcherD2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11QuitWatcherD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11QuitWatcherD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10CrapFilter10port_countEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7MSQueue4pullEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8FromHost8run_taskEP4Task    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN19_GLOBAL__N_cp_errno10CpVaHelper20finish_keyword_errorEPKcS2_P12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV14CheckUDPHeader    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8ARPPrint10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String13mutable_c_strEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14SortedIPLookup5checkEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckARPHeaderD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckARPHeaderC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12SetPerfCount      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastUDPFlows9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z11cp_spacevecRK6StringR6VectorIS_E    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5LexerD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5LexerC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16ICMPPingRewriter7Mapping10initializeERK8IPFlowIDS3_bPS0_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11DelayShaper10read_paramEP7ElementPv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPPrint13simple_actionEP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element4castEPKc    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11AdaptiveRED10class_nameEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPReassembler10initializeEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjE10find_forceERKS0_RKj   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18RoundRobinIPMapperD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18RoundRobinIPMapperC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8ClickIno11name_searchERK6Stringiii /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14InfiniteSource12add_handlersEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8FixIPSrcD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8FixIPSrcD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8FixIPSrcD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8FixIPSrcC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8FixIPSrcC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK20StripToNetworkHeader10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z16click_init_schedP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV11LinkUnqueue       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilter10parse_exprERK6VectorI6StringEiRS0_IiERNS_9PrimitiveEP12ErrorHandler       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15CycleCountAccum10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10CheckPaint4pullEi  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15BandwidthShaperC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSample12read_handlerEP7ElementPv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13SetPacketType9configureER6VectorI6StringEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RFC2507c9make_fullEiP6Packet        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FastUDPSourceD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FastUDPSourceD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FastUDPSourceD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FastUDPSourceC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FastUDPSourceC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler5errorEPKcz    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z9cp_stringRK6StringPS_S2_     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ToDevice14static_cleanupEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer13yelementclassEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10LexerExtraD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11DirectEWMAXI19RateEWMAXParametersILj4ELj10EjiEE8update_nEjj        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ConfParseTestD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ConfParseTestD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ConfParseTestD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ConfParseTestC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ConfParseTestC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Packet5cloneEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z12cp_eat_spaceR6String        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV8Truncate   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5StripD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5StripC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RouterThread6driverEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6NameDB7revfindEPKvi /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEEaSERKS2_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18RoundRobinIPMapper9configureER6VectorI6StringEP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ICMPPingSource12read_handlerEP7ElementPv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIPvEC2ERKS1_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18SourceIPHashMapperD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18SourceIPHashMapperC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV18RoundRobinIPMapper        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSource4pullEi        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11NullElementD2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11NullElementD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11NullElementD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8DRRSchedD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8DRRSchedD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8DRRSchedD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8DRRSchedC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8DRRSchedC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9CPUSwitch9configureER6VectorI6StringEP12ErrorHandler        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12StrideSwitch10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SimpleQueue4pullEi /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String14garbage_stringEi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8Notifier12add_listenerEP4Task       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7IPEncap10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9ICMPError13simple_actionEP6Packet   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN25VerboseFilterErrorHandlerC2EP12ErrorHandleri       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN25VerboseFilterErrorHandlerC1EP12ErrorHandleri       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14DropBroadcastsD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14DropBroadcastsC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorI9IPAddressE3endEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPRewriter13apply_patternEPN4IPRw7PatternEiRK8IPFlowIDii   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ARPResponder13simple_actionEP6Packet       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SortedIPLookupD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7RIPSend10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10CheckCRC32C2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15SpinlockReleaseD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SimpleQueue10initializeEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPRouteTable14lookup_handlerEiR6StringP7ElementPK7HandlerP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPRouteTable11dump_routesEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14InfiniteSource12change_paramERK6StringP7ElementPvP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13CheckIPHeader12add_handlersEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14AverageCounter12add_handlersEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z12cp_ip_prefixRK6StringPhS2_bP7Element        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ARPQuerier12add_handlersEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIN6Router6HookupEE5emptyEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiE7resize0Ej /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEE4swapERS2_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String11append_fillEii      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18SourceIPHashMapper9configureER6VectorI6StringEP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10MixedQueueC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10EtherEncapC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ARPQuerierD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ToHost9configureER6VectorI6StringEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV5Print      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN19VariableEnvironment9parent_ofEi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7MSQueue10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Lexer18lexical_scoping_inEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV5Strip      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String4MemoC2Eii    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11IPGWOptions10processingEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11EtherMirror10class_nameEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15UnstripIPHeader10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorI6StringE3endEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringEC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14ActiveNotifier9listenersER6VectorIP4TaskE /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12ICMPRewriter10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV19ContextErrorHandler       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringED1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressE8pop_backEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15CycleCountAccumD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Paint18color_read_handlerEP7ElementPv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10BpfyFilterD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TimedSourceC2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TimedSourceC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV10FromDevice        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11CheckLength10class_nameEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14StoreIPAddress10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ARPResponder7add_mapE9IPAddressS0_12EtherAddress   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringEaSERKS1_     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router20store_global_handlerERK7Handler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13PerfCountUserD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13PerfCountUserD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13PerfCountUserD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13PerfCountUserC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13PerfCountUserC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14LinearIPLookup10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8IPFilter10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI7IPRouteE6resizeEiRKS0_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11RatedSource4pullEi /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PullSwitchC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPMapper15notify_rewriterEP4IPRwP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastUDPFlows5resetEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZlsR11StringAccum9IPAddress    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringE9pop_frontEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8FromHost5fl_txEP7sk_buffP10net_device       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV8SortTest   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14SetTCPChecksum10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9SetIPDSCPD2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9SetIPDSCPD1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9SetIPDSCPD0Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9SetIPDSCPC2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9SetIPDSCPC1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10PullSwitch10processingEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11RatedSource10initializeEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV10LexerExtra        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer8Compound11expand_intoEPS_iR19VariableEnvironment      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRw7Mapping10initializeEiRK8IPFlowIDS3_itPS0_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ScheduleLinux10initializeEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14StaticIPLookupD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7DiscardC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7DiscardC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorI6StringE5frontEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12ARPResponder      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SimpleQueue9configureER6VectorI6StringEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14InfiniteSource10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15BandwidthShaper4pullEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV18SourceIPHashMapper        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12IPRouteTable12lookup_routeE9IPAddressRS0_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11TCPRewriter10TCPMapping1sEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIN6Router6HookupEE4sizeEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPRewriterC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15RandomBitErrors20can_live_reconfigureEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16BaseErrorHandler11count_errorEN12ErrorHandler11SeriousnessERK6String       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14DropBroadcasts10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14ToHostSniffers10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjEixEi       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SetUDPChecksum13simple_actionEP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14SetTCPChecksum13simple_actionEP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEE3endEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastTCPFlows4pullEi        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI8IPFlowIDbE16dynamic_resizingEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12IPFragmenter10processingEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9ICMPError10class_nameEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpDesCblock     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI9IPAddressE10push_frontERKS0_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12IPClassifier      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12DelayUnqueue      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckUDPHeader12add_handlersEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK22BandwidthRatedSplitter10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Suppressor4pushEiP6Packet  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZThn60_N18RoundRobinIPMapperD0Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8MarkIPCE12add_handlersEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10FromDevice14static_cleanupEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer19remove_element_typeEiPi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPReassembler9configureER6VectorI6StringEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN19_GLOBAL__N_cp_errno10CpVaHelper15parse_argumentsEPKcP7ElementP12ErrorHandler       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN19VariableEnvironment6expandERK6StringiiR11StringAccum       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjE9push_backERKj     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3RED9configureER6VectorI6StringEP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15RandomBitErrorsD2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15RandomBitErrorsD0Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIN7IPTable5EntryEE4veltEi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRw7PatternC2ERK9IPAddressiS3_ibbj /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRw7PatternC1ERK9IPAddressiS3_ibbj /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7RIPSend9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SimpleQueue12add_handlersEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPRewriterPatterns7cleanupEN7Element12CleanupStageE        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11HandlerCall9call_readERK6StringP7ElementP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z20cp_process_backslashPKcS0_R11StringAccum    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14BandwidthMeter10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV11SimpleQueue       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpKeyword       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Switch20can_live_reconfigureEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6String8hashcodeEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8RFC2507c15make_compressedEiP6Packet /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13DynamicNameDB5queryERK6StringPvi   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11RatedSource9configureER6VectorI6StringEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ICMPPingSource10initializeEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18PrefixErrorHandlerC1EP12ErrorHandlerRK6String      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjE4backEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier8add_exprER6VectorIiERKNS_4ExprE /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Master17unregister_routerEP6Router  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Timer8set_hookEPFvPS_PvES1_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV10Suppressor        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13SetCycleCount4pushEiP6Packet       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11SetAnnoByte10port_countEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router5unuseEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16ICMPPingRewriter7Mapping9make_pairERK8IPFlowIDS3_PS0_S4_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpEtherAddress  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z12cp_ip_prefixRK6StringP9IPAddressS3_bP7Element       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12CompareBlock23rev_weight_read_handlerEP7ElementPv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17StaticThreadSched22initial_home_thread_idEP4Taskb  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15SpinlockRelease9configureER6VectorI6StringEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8MarkIPCE4pullEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK16SetRandIPAddress10port_countEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3RED16finish_configureEjjjjRK6StringP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12CompareBlock      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11QuitWatcher9run_timerEP5Timer      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15RandomBitErrors12add_handlersEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14SchedOrderTest10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13PerfCountInfo     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN4IPRw7Pattern14accept_mappingEPNS_7MappingE  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14IPAddrRewriter10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14InfiniteSourceD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14InfiniteSourceC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14AverageCounter5resetEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK3RED10queue_sizeEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12PokeHandlers      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV12FastTCPFlows      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12SetTimestamp10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10FromDeviceD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8Unqueue210class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12StaticSwitch4pushEiP6Packet        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15HostEtherFilterC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11AdaptiveRED4castEPKc       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjEC2ERKS1_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6StringC1Ey  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6StringC1Ex  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6StringC1Em  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6StringC1El  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6StringC1Ej  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6StringC1Ei  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FTPPortMapper13simple_actionEP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10Classifier18DominatorOptimizer13calculate_domEi    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjE5clearEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11HandlerCall5resetERPS_RK6StringiP7ElementP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler6ldebugERK6StringPKcz  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    click_public_packages   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11RatedSource12add_handlersEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11IPGWOptions13simple_actionEP6Packet        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastUDPFlowsD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastUDPFlowsD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastUDPFlowsD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastUDPFlowsC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12FastUDPFlowsC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z11cp_va_parseRK6StringP7ElementP12ErrorHandlerz       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0xb2f734c6    proclikefs_read_super   /d/click/click-1.6.0-27/linuxmodule/proclikefs  EXPORT_SYMBOL
++0x00000000    _ZN5TimerC2EPFvPS_PvES1_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSample9configureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringEC1EiRKS0_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String4MemoD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14StaticIPLookup10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer8Compound7resolveEPS_iiiR6VectorI6StringEP12ErrorHandlerRKS3_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15CycleCountAccum12read_handlerEP7ElementPv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckTCPHeader12read_handlerEP7ElementPv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10ARPQuerier13write_handlerERK6StringP7ElementPvP12ErrorHandler      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Unqueue12add_handlersEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PollDevice14static_cleanupEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10FromDevice7cleanupEN7Element12CleanupStageE        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEEixEi        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Script10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10CheckPaintC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15UnstripIPHeaderD1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11TCPRewriter10TCPMapping18update_seqno_deltaEji     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7MSQueue10port_countEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13FTPPortMapper10port_countEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6NameDBD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13CheckIPHeaderD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13CheckIPHeaderD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13CheckIPHeaderD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13CheckIPHeaderC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13CheckIPHeaderC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Unqueue10read_paramEP7ElementPv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Paint20can_live_reconfigureEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Paint12add_handlersEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer12ydeclarationERK6String       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8IPFlowID7unparseEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14AverageCounterD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14AverageCounterC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Counter13simple_actionEP6Packet     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13FastUDPSource8NO_LIMITE    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK4IPRw7Mapping7unparseEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7BursterD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7BursterD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7BursterD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ScheduleLinux9configureER6VectorI6StringEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEE6resizeEiRKS1_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6VectorIN6Router6HookupEE2atEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPReassembler7cleanupEN7Element12CleanupStageE     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10BpfyFilter10processingEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI8IPFlowIDbE9find_pairERKS0_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI8IPFlowIDiE9find_pairERKS0_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer15skip_slash_starEPKc  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10Classifier4Expr7impliesERKS0_     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK3RED10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPTable3delE9IPAddressS0_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14IPAddrRewriter13IPAddrMapping7reverseEv   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z15cp_pop_spacevecR6String     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17_HashMap_iteratorI6StringiEC2EP7HashMapIS0_iEb     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN17_HashMap_iteratorI6StringiEC1EP7HashMapIS0_iEb     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK8IPFilter9Primitive12unparse_typeEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpElement       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Packet19expensive_uniqueifyEiib     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15LookupIPRouteMP10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13DiscardNoFree10processingEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpKeywords      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDPvE10initializeEP20HashMap_ArenaFactoryj   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11HandlerCall10call_writeERK6StringP7ElementP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIPvE4swapERS1_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SimpleQueueC2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SimpleQueueC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z23cp_unparse_millisecondsj    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z23cp_unparse_microsecondsj    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14ComparePackets4pullEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Router5enameEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15RandomBitErrors9configureER6VectorI6StringEP12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PollDeviceD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11NullElement13simple_actionEP6Packet        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV15CheckICMPHeader   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15PushNullElement10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15PullNullElement10port_countEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpReal10        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN19VariableEnvironmentC1EPS_  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13ElementFilter     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router14add_module_refEP6module     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7UnstripC2Ej /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7UnstripC1Ej /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Switch13configurationER6VectorI6StringE    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11DelayShaper4pullEi /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z12cp_va_kparseRK6VectorI6StringEP7ElementP12ErrorHandlerz     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String12oom_string_pE       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN5Lexer11ElementTypeEE7reserveEi     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13NotifierQueue     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpConfirmKeywords       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ARPResponder13make_responseEPhS0_S0_S0_P6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12PokeHandlers11LOOP_MARKERE /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV15HostEtherFilter   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7ElementD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7ElementD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7ElementD0Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZThn60_N18SourceIPHashMapperD0Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PollDevice7cleanupEN7Element12CleanupStageE        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11HandlerCall7unparseEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11DelayShaper10initializeEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13DynamicNameDB7revfindEPKvi /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPAddrPairRewriter13apply_patternEPN4IPRw7PatternEiRK8IPFlowIDii   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10CheckCRC32D1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SetAnnoByteD2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SetAnnoByteD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11SetAnnoByteD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10BpfyFilter4pushEiP6Packet  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10RandomSeedD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjE9copy_fromERKS1_        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpTimeval       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9Timestamp7unparseEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbE4swapERS1_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDiED1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDiEC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13RadixIPLookup5Radix10make_radixEii /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13NotifierQueue4pullEi       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element16live_reconfigureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15RandomBitErrors10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10MixedQueueD0Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15HostEtherFilter13simple_actionEP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10EtherEncapD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ErrorHandler9OK_RESULTE    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckUDPHeaderD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckUDPHeaderC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router18set_hotswap_routerEPS_      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11RatedSourceC2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11RatedSourceC1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element30reconfigure_positional_handlerERK6StringPS_PvP12ErrorHandler       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9Bitvector13resize_to_maxEib /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14NotifierSignal7unparseEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14IPAddrRewriter4pushEiP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element4PUSHE       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z13cp_ip_addressRK6StringPhP7Element   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12StaticNameDB7revfindEPKvi  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12IPInputCombo12add_handlersEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6ToHost10processingEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK7HashMapI9IPAddressjE4sizeEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEEC2ERKS2_    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router8activateEbP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12ICMPRewriter10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13ICMPPingEncap     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN21BandwidthRatedUnqueueD2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN21BandwidthRatedUnqueueD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN21BandwidthRatedUnqueueD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN21BandwidthRatedUnqueueC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN21BandwidthRatedUnqueueC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8NameInfo8removedbEP6NameDB  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12ARPResponder16live_reconfigureER6VectorI6StringEP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10PullSwitchD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14PerfCountAccum4pushEiP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13DiscardNoFree10initializeEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14BandwidthMeterD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14BandwidthMeterC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13StripIPHeader13simple_actionEP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9ICMPError10port_countEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorI6StringE5frontEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Script8ExpanderD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN3RED10take_stateEP7ElementP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element9PORTS_1_1E  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element9PORTS_0_1E  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpIgnoreRest    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12SpinlockInfo7cleanupEN7Element12CleanupStageE      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN45_GLOBAL__N__ZN14NotifierSignal12static_valueE21NotifierElementFilterD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN45_GLOBAL__N__ZN14NotifierSignal12static_valueE21NotifierElementFilterD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7MSQueue4pushEiP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16DevirtualizeInfoD2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16DevirtualizeInfoD1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN16DevirtualizeInfoD0Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14AverageCounter10class_nameEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6String10find_rightEci      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15RandomBitErrors10class_nameEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV13IPOutputCombo     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11DelayShaper9configureER6VectorI6StringEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK14CheckUDPHeader10processingEv      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN21BandwidthRatedUnqueue8run_taskEP4Task      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDiE6resizeEj        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7UnqueueC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7UnqueueC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6ToHost4pushEiP6Packet       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Script12step_handlerEiR6StringP7ElementPK7HandlerP12ErrorHandler    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK18IPRewriterPatterns10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPAddrPairRewriterD2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18IPAddrPairRewriterC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    cpBandwidth     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIjE5eraseEPjS1_       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Print10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13NotifierQueue9configureER6VectorI6StringEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEED2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN7IPTable5EntryEEC2Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10IPRewriterD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7IPPrint7cleanupEN7Element12CleanupStageE    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8DecIPTTL13simple_actionEP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9CPUSwitchD2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9CPUSwitchD1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9CPUSwitchD0Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9CPUSwitchC2Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN9CPUSwitchC1Ev       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8ToDevice12reset_countsEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Strip10class_nameEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14LinearIPLookup12remove_routeERK7IPRoutePS0_P12ErrorHandler /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z12cp_uncommentRK6String       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12CompareBlock12add_handlersEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13RadixIPLookup10port_countEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN8IPFilter9Primitive20unparse_transp_protoEi  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV8CPUQueue   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11QuitWatcher10class_nameEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Lexer13create_routerEP6Master       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13ICMPPingEncap13simple_actionEP6Packet      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12AnyDeviceMap6removeEP9AnyDeviceb   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK13SetPacketType10class_nameEv       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13IPOutputCombo9configureER6VectorI6StringEP12ErrorHandler   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String15oom_string_dataE    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZTV8ARPPrint   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11TCPRewriter10processingEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Print10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN18SilentErrorHandlerD1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN10SuppressorC1Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11StringAccum18make_out_of_memoryEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK15SpinlockRelease10processingEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Lexer12element_nameEi      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK12IPFragmenter10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14CheckARPHeader4dropENS_6ReasonEP6Packet    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6VectorIN6Router6HookupEE5eraseEPS1_ /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK5Strip10port_countEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK6Script13find_variableERK6String    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11RatedSource8NO_LIMITE      /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element17add_task_handlersEP4TaskRK6String  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK9TimedSink10class_nameEv    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11LinkUnqueue8run_taskEP4Task        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSource11make_packetEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN15LookupIPRouteMPC1Ev        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11DelayShaper12add_handlersEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI6StringiE3endEv     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13RadixIPLookup7cleanupEN7Element12CleanupStageE     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z16cp_unparse_real2ji  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router20change_handler_flagsEPK7ElementRK6Stringjj  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK11PaintSwitch10class_nameEv /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZNK10MixedQueue10class_nameEv  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11LinkUnqueueD2Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11LinkUnqueueD1Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11LinkUnqueueD0Ev    /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13QueueYankTest10initializeEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6Router18make_hookup_gportsEv        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14MessageElementD1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14MessageElementC1Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11LinkUnqueue7cleanupEN7Element12CleanupStageE       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z17cp_va_space_parseRK6StringP7ElementP12ErrorHandlerz /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11CheckLength4pushEiP6Packet /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI8IPFlowIDbE15find_pair_forceERKS0_RKb       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN5Print13simple_actionEP6Packet       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z19cp_ethernet_addressRK6StringP12EtherAddressP7Element        /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _Z8cp_quoteRK6Stringb   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14BandwidthMeter9configureER6VectorI6StringEP12ErrorHandler  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13AnyTaskDeviceD1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13AnyTaskDeviceD0Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13AnyTaskDeviceC2Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN13AnyTaskDeviceC1Ev  /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjE6resizeEj       /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7HashMapI9IPAddressjE6removeERKS0_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN6String11InitializerC2Ev     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14StoreIPAddressD2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN14StoreIPAddressC2Ev /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSampleD2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSampleD1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSampleD0Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSampleC2Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN12RandomSampleC1Ev   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN11PaintSwitch9configureER6VectorI6StringEP12ErrorHandler     /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
++0x00000000    _ZN7Element11set_handlerERK6StringiPFiiRS0_PS_PK7HandlerP12ErrorHandlerEPvSC_   /d/click/click-1.6.0-27/linuxmodule/click       EXPORT_SYMBOL
+diff -Nurb click-1.6.0/linuxmodule/errlog click-1.6.0-27/linuxmodule/errlog
+--- click-1.6.0/linuxmodule/errlog     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/linuxmodule/errlog  2009-01-19 16:02:34.000000000 -0500
+@@ -0,0 +1,160 @@
++In file included from /d/kernels/linux-2.6.27.10-click/include/linux/module.h:21,
++                 from /d/kernels/linux-2.6.27.10-click/include/linux/textsearch.h:7,
++                 from /d/kernels/linux-2.6.27.10-click/include/linux/skbuff.h:26,
++                 from /d/click/click-1.6.0/linuxmodule/../include/click/glue.hh:26,
++                 from /d/click/click-1.6.0/linuxmodule/../include/click/atomic.hh:5,
++                 from /d/click/click-1.6.0/linuxmodule/../include/click/string.hh:8,
++                 from /d/click/click-1.6.0/linuxmodule/../lib/string.cc:21:
++/d/kernels/linux-2.6.27.10-click/include/asm/module.h:70:2: error: #error unknown processor family
++In file included from /d/kernels/linux-2.6.27.10-click/include/linux/ktime.h:25,
++                 from /d/kernels/linux-2.6.27.10-click/include/linux/hrtimer.h:19,
++                 from /d/kernels/linux-2.6.27.10-click/include/linux/skbuff.h:30,
++                 from /d/click/click-1.6.0/linuxmodule/../include/click/glue.hh:26,
++                 from /d/click/click-1.6.0/linuxmodule/../include/click/atomic.hh:5,
++                 from /d/click/click-1.6.0/linuxmodule/../include/click/string.hh:8,
++                 from /d/click/click-1.6.0/linuxmodule/../lib/string.cc:21:
++/d/kernels/linux-2.6.27.10-click/include/linux/jiffies.h:39:3: error: #error Invalid value of HZ.
++/d/kernels/linux-2.6.27.10-click/include/linux/jiffies.h:247:31: error: division by zero in #if
++/d/kernels/linux-2.6.27.10-click/include/linux/jiffies.h:247:31: error: division by zero in #if
++/d/kernels/linux-2.6.27.10-click/include/linux/jiffies.h:247:31: error: division by zero in #if
++/d/kernels/linux-2.6.27.10-click/include/linux/jiffies.h:247:31: error: division by zero in #if
++/d/kernels/linux-2.6.27.10-click/include/linux/jiffies.h:247:31: error: division by zero in #if
++/d/kernels/linux-2.6.27.10-click/include/linux/jiffies.h:247:31: error: division by zero in #if
++/d/kernels/linux-2.6.27.10-click/include/linux/jiffies.h:247:31: error: division by zero in #if
++/d/kernels/linux-2.6.27.10-click/include/linux/jiffies.h:247:31: error: division by zero in #if
++/d/kernels/linux-2.6.27.10-click/include/linux/jiffies.h:247:31: error: division by zero in #if
++/d/kernels/linux-2.6.27.10-click/include/linux/jiffies.h:247:31: error: division by zero in #if
++/d/kernels/linux-2.6.27.10-click/include/linux/jiffies.h:247:31: error: division by zero in #if
++/d/kernels/linux-2.6.27.10-click/include/linux/jiffies.h:247:31: error: division by zero in #if
++/d/kernels/linux-2.6.27.10-click/include/linux/jiffies.h:247:31: error: division by zero in #if
++/d/kernels/linux-2.6.27.10-click/include/linux/jiffies.h:247:31: error: division by zero in #if
++/d/kernels/linux-2.6.27.10-click/include/linux/jiffies.h:247:31: error: division by zero in #if
++/d/kernels/linux-2.6.27.10-click/include/linux/jiffies.h:247:31: error: division by zero in #if
++/d/kernels/linux-2.6.27.10-click/include/linux/types.h:33: error: expected initializer before 'bool'
++/d/click/click-1.6.0/linuxmodule/../include/click/config-linuxmodule.h:117: error: 'operator new' takes type 'size_t' ('unsigned int') as first parameter
++/d/click/click-1.6.0/linuxmodule/../include/click/config-linuxmodule.h:118: error: 'operator new' takes type 'size_t' ('unsigned int') as first parameter
++/d/click/click-1.6.0/linuxmodule/../include/click/config-linuxmodule.h:121: error: 'operator new' takes type 'size_t' ('unsigned int') as first parameter
++/d/kernels/linux-2.6.27.10-click/include/asm/bitops.h: In function 'void set_bit(unsigned int, volatile long unsigned int*)':
++/d/kernels/linux-2.6.27.10-click/include/asm/bitops.h:60: error: pointer of type 'void *' used in arithmetic
++/d/kernels/linux-2.6.27.10-click/include/asm/bitops.h: In function 'void clear_bit(int, volatile long unsigned int*)':
++/d/kernels/linux-2.6.27.10-click/include/asm/bitops.h:97: error: pointer of type 'void *' used in arithmetic
++/d/kernels/linux-2.6.27.10-click/include/linux/ratelimit.h: In function 'int ratelimit()':
++/d/kernels/linux-2.6.27.10-click/include/linux/ratelimit.h:23: error: 'CONFIG_HZ' was not declared in this scope
++/d/kernels/linux-2.6.27.10-click/include/linux/kernel.h: At global scope:
++/d/kernels/linux-2.6.27.10-click/include/linux/kernel.h:216: error: expected unqualified-id before string constant
++/d/kernels/linux-2.6.27.10-click/include/asm/page.h: In function 'pte_t native_make_pte(pteval_t)':
++/d/kernels/linux-2.6.27.10-click/include/asm/page.h:141: error: expected primary-expression before ')' token
++/d/kernels/linux-2.6.27.10-click/include/asm/page.h:141: error: expected ';' before '{' token
++/d/kernels/linux-2.6.27.10-click/include/asm/page.h:141: error: expected primary-expression before '.' token
++/d/kernels/linux-2.6.27.10-click/include/asm/page.h:141: error: expected `;' before '}' token
++/d/kernels/linux-2.6.27.10-click/include/asm/processor.h: At global scope:
++/d/kernels/linux-2.6.27.10-click/include/asm/processor.h:112: error: 'CONFIG_X86_L1_CACHE_SHIFT' was not declared in this scope
++/d/kernels/linux-2.6.27.10-click/include/asm/processor.h:112: error: requested alignment is not a constant
++/d/kernels/linux-2.6.27.10-click/include/asm/processor.h: In function 'void load_cr3(pgd_t*)':
++/d/kernels/linux-2.6.27.10-click/include/asm/processor.h:184: error: 'CONFIG_PAGE_OFFSETUL' was not declared in this scope
++/d/kernels/linux-2.6.27.10-click/include/asm/processor.h: At global scope:
++/d/kernels/linux-2.6.27.10-click/include/asm/processor.h:233: error: 'CONFIG_X86_L1_CACHE_SHIFT' was not declared in this scope
++/d/kernels/linux-2.6.27.10-click/include/asm/processor.h:233: error: requested alignment is not a constant
++/d/kernels/linux-2.6.27.10-click/include/asm/processor.h:270: error: 'CONFIG_X86_L1_CACHE_SHIFT' was not declared in this scope
++/d/kernels/linux-2.6.27.10-click/include/asm/processor.h:270: error: requested alignment is not a constant
++/d/kernels/linux-2.6.27.10-click/include/asm/processor.h: In function 'void wbinvd_halt()':
++/d/kernels/linux-2.6.27.10-click/include/asm/processor.h:751: error: 'halt' was not declared in this scope
++/d/kernels/linux-2.6.27.10-click/include/asm/thread_info.h: In function 'thread_info* current_thread_info()':
++/d/kernels/linux-2.6.27.10-click/include/asm/thread_info.h:206: error: invalid conversion from 'void*' to 'thread_info*'
++/d/kernels/linux-2.6.27.10-click/include/linux/list.h: In function 'void list_del(list_head*)':
++/d/kernels/linux-2.6.27.10-click/include/linux/list.h:106: error: invalid conversion from 'void*' to 'list_head*'
++/d/kernels/linux-2.6.27.10-click/include/linux/list.h:107: error: invalid conversion from 'void*' to 'list_head*'
++/d/kernels/linux-2.6.27.10-click/include/linux/list.h: In function 'void hlist_del(hlist_node*)':
++/d/kernels/linux-2.6.27.10-click/include/linux/list.h:579: error: invalid conversion from 'void*' to 'hlist_node*'
++/d/kernels/linux-2.6.27.10-click/include/linux/list.h:580: error: invalid conversion from 'void*' to 'hlist_node**'
++/d/kernels/linux-2.6.27.10-click/include/linux/wait.h: In function 'int wait_on_bit(void*, int, int (*)(void*), unsigned int)':
++/d/kernels/linux-2.6.27.10-click/include/linux/wait.h:488: error: invalid conversion from 'void*' to 'const volatile long unsigned int*'
++/d/kernels/linux-2.6.27.10-click/include/linux/wait.h:488: error:   initializing argument 2 of 'int constant_test_bit(int, const volatile long unsigned int*)'
++/d/kernels/linux-2.6.27.10-click/include/linux/wait.h:488: error: invalid conversion from 'void*' to 'const volatile long unsigned int*'
++/d/kernels/linux-2.6.27.10-click/include/linux/wait.h:488: error:   initializing argument 2 of 'int variable_test_bit(int, const volatile long unsigned int*)'
++/d/kernels/linux-2.6.27.10-click/include/linux/wait.h: In function 'int wait_on_bit_lock(void*, int, int (*)(void*), unsigned int)':
++/d/kernels/linux-2.6.27.10-click/include/linux/wait.h:512: error: invalid conversion from 'void*' to 'volatile long unsigned int*'
++/d/kernels/linux-2.6.27.10-click/include/linux/wait.h:512: error:   initializing argument 2 of 'int test_and_set_bit(int, volatile long unsigned int*)'
++/d/kernels/linux-2.6.27.10-click/include/linux/nodemask.h: In function 'int __first_node(const nodemask_t*)':
++/d/kernels/linux-2.6.27.10-click/include/linux/nodemask.h:233: error: 'find_first_bit' was not declared in this scope
++/d/kernels/linux-2.6.27.10-click/include/linux/nodemask.h: In function 'int __next_node(int, const nodemask_t*)':
++/d/kernels/linux-2.6.27.10-click/include/linux/nodemask.h:239: error: 'find_next_bit' was not declared in this scope
++/d/kernels/linux-2.6.27.10-click/include/linux/nodemask.h: In function 'int __first_unset_node(const nodemask_t*)':
++/d/kernels/linux-2.6.27.10-click/include/linux/nodemask.h:257: error: 'find_first_zero_bit' was not declared in this scope
++/d/kernels/linux-2.6.27.10-click/include/asm/vdso.h: At global scope:
++/d/kernels/linux-2.6.27.10-click/include/asm/vdso.h:36: error: variable or field '__kernel_sigreturn' declared void
++/d/kernels/linux-2.6.27.10-click/include/asm/vdso.h:37: error: variable or field '__kernel_rt_sigreturn' declared void
++/d/kernels/linux-2.6.27.10-click/include/asm/elf.h: In function 'void start_ia32_thread(pt_regs*, u32, u32)':
++/d/kernels/linux-2.6.27.10-click/include/asm/elf.h:153: error: 'load_gs_index' was not declared in this scope
++/d/kernels/linux-2.6.27.10-click/include/asm/elf.h: In function 'void elf_common_init(thread_struct*, pt_regs*, u16)':
++/d/kernels/linux-2.6.27.10-click/include/asm/elf.h:166: error: 'struct pt_regs' has no member named 'r8'
++/d/kernels/linux-2.6.27.10-click/include/asm/elf.h:166: error: 'struct pt_regs' has no member named 'r9'
++/d/kernels/linux-2.6.27.10-click/include/asm/elf.h:166: error: 'struct pt_regs' has no member named 'r10'
++/d/kernels/linux-2.6.27.10-click/include/asm/elf.h:166: error: 'struct pt_regs' has no member named 'r11'
++/d/kernels/linux-2.6.27.10-click/include/asm/elf.h:167: error: 'struct pt_regs' has no member named 'r12'
++/d/kernels/linux-2.6.27.10-click/include/asm/elf.h:167: error: 'struct pt_regs' has no member named 'r13'
++/d/kernels/linux-2.6.27.10-click/include/asm/elf.h:167: error: 'struct pt_regs' has no member named 'r14'
++/d/kernels/linux-2.6.27.10-click/include/asm/elf.h:167: error: 'struct pt_regs' has no member named 'r15'
++/d/kernels/linux-2.6.27.10-click/include/linux/textsearch.h: In function 'ts_config* alloc_ts_config(size_t, gfp_t)':
++/d/kernels/linux-2.6.27.10-click/include/linux/textsearch.h:165: error: invalid conversion from 'void*' to 'ts_config*'
++/d/kernels/linux-2.6.27.10-click/include/linux/textsearch.h:167: error: invalid conversion from 'void*' to 'ts_config*'
++/d/kernels/linux-2.6.27.10-click/include/linux/semaphore.h: In function 'void sema_init(semaphore*, int)':
++/d/kernels/linux-2.6.27.10-click/include/linux/semaphore.h:35: error: expected primary-expression before 'struct'
++/d/kernels/linux-2.6.27.10-click/include/linux/semaphore.h:35: error: expected `)' before 'struct'
++/d/kernels/linux-2.6.27.10-click/include/linux/dmaengine.h: In function 'void async_tx_ack(dma_async_tx_descriptor*)':
++/d/kernels/linux-2.6.27.10-click/include/linux/dmaengine.h:380: error: invalid conversion from 'int' to 'dma_ctrl_flags'
++/d/kernels/linux-2.6.27.10-click/include/linux/dmaengine.h: In function 'int __first_dma_cap(const dma_cap_mask_t*)':
++/d/kernels/linux-2.6.27.10-click/include/linux/dmaengine.h:391: error: 'find_first_bit' was not declared in this scope
++/d/kernels/linux-2.6.27.10-click/include/linux/dmaengine.h: In function 'int __next_dma_cap(int, const dma_cap_mask_t*)':
++/d/kernels/linux-2.6.27.10-click/include/linux/dmaengine.h:398: error: 'find_next_bit' was not declared in this scope
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h: In function 'ktime_t ktime_set(long int, long unsigned int)':
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h:85: error: expected primary-expression before ')' token
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h:85: error: expected ';' before '{' token
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h:85: error: expected primary-expression before '.' token
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h:85: error: expected `;' before '}' token
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h:87: error: expected primary-expression before ')' token
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h:87: error: expected ';' before '{' token
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h:87: error: expected primary-expression before '.' token
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h:87: error: expected `;' before '}' token
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h: In function 's64 ktime_us_delta(ktime_t, ktime_t)':
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h:300: error: expected primary-expression before ')' token
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h:300: error: expected `;' before '{' token
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h:300: error: invalid use of void expression
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h: In function 'ktime_t ktime_add_us(ktime_t, u64)':
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h:305: error: expected primary-expression before ')' token
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h:305: error: expected `;' before '{' token
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h:305: error: conversion from 'void' to non-scalar type 'ktime_t' requested
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h: In function 'ktime_t ktime_sub_us(ktime_t, u64)':
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h:310: error: expected primary-expression before ')' token
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h:310: error: expected `;' before '{' token
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h:310: error: conversion from 'void' to non-scalar type 'ktime_t' requested
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h: In function 'ktime_t ns_to_ktime(u64)':
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h:332: error: expected primary-expression before '.' token
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h:333: error: expected primary-expression before ')' token
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h:333: error: expected `;' before '{' token
++/d/kernels/linux-2.6.27.10-click/include/linux/ktime.h:333: error: conversion from 'void' to non-scalar type 'ktime_t' requested
++/d/kernels/linux-2.6.27.10-click/include/linux/skbuff.h: In function 'void skb_queue_head_init(sk_buff_head*)':
++/d/kernels/linux-2.6.27.10-click/include/linux/skbuff.h:659: error: expected primary-expression before ')' token
++/d/kernels/linux-2.6.27.10-click/include/linux/skbuff.h:659: error: expected `;' before '{' token
++/d/kernels/linux-2.6.27.10-click/include/linux/skbuff.h: In function 'ktime_t net_timedelta(ktime_t)':
++/d/kernels/linux-2.6.27.10-click/include/linux/skbuff.h:1548: error: expected primary-expression before ')' token
++/d/kernels/linux-2.6.27.10-click/include/linux/skbuff.h:1548: error: expected `;' before '{' token
++/d/kernels/linux-2.6.27.10-click/include/linux/skbuff.h:1548: error: conversion from 'void' to non-scalar type 'ktime_t' requested
++/d/kernels/linux-2.6.27.10-click/include/asm/hw_irq.h: At global scope:
++/d/kernels/linux-2.6.27.10-click/include/asm/hw_irq.h:87: error: expected unqualified-id before string constant
++/d/kernels/linux-2.6.27.10-click/include/asm/hw_irq.h:88: error: expected unqualified-id before string constant
++/d/kernels/linux-2.6.27.10-click/include/asm/hw_irq.h:89: error: expected unqualified-id before string constant
++/d/kernels/linux-2.6.27.10-click/include/asm/hw_irq.h:90: error: expected unqualified-id before string constant
++/d/kernels/linux-2.6.27.10-click/include/asm/hw_irq.h:91: error: expected unqualified-id before string constant
++/d/kernels/linux-2.6.27.10-click/include/asm/hw_irq.h:92: error: expected unqualified-id before string constant
++/d/kernels/linux-2.6.27.10-click/include/asm/hw_irq.h:93: error: expected unqualified-id before string constant
++/d/kernels/linux-2.6.27.10-click/include/asm/hw_irq.h:94: error: expected unqualified-id before string constant
++/d/click/click-1.6.0/linuxmodule/../include/click/atomic.hh: In member function 'atomic_uint32_t& atomic_uint32_t::operator|=(uint32_t)':
++/d/click/click-1.6.0/linuxmodule/../include/click/atomic.hh:159: error: 'local_irq_save' was not declared in this scope
++/d/click/click-1.6.0/linuxmodule/../include/click/atomic.hh:161: error: 'local_irq_restore' was not declared in this scope
++/d/click/click-1.6.0/linuxmodule/../include/click/atomic.hh: In member function 'atomic_uint32_t& atomic_uint32_t::operator&=(uint32_t)':
++/d/click/click-1.6.0/linuxmodule/../include/click/atomic.hh:181: error: 'local_irq_save' was not declared in this scope
++/d/click/click-1.6.0/linuxmodule/../include/click/atomic.hh:183: error: 'local_irq_restore' was not declared in this scope
++make[2]: *** [/d/click/click-1.6.0/linuxmodule/string.o] Error 1
++make[1]: *** [_module_/d/click/click-1.6.0/linuxmodule] Error 2
++make: *** [all] Error 2
+diff -Nurb click-1.6.0/linuxmodule/kernelversion.c click-1.6.0-27/linuxmodule/kernelversion.c
+--- click-1.6.0/linuxmodule/kernelversion.c    2007-07-16 19:47:50.000000000 -0400
++++ click-1.6.0-27/linuxmodule/kernelversion.c 2009-02-11 16:49:08.000000000 -0500
+@@ -26,6 +26,7 @@
+ #include <click/config.h>
+ #include <linux/version.h>
+ #include <linux/module.h>
++
+ #include "moduleparm.h"
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 52)
+diff -Nurb click-1.6.0/linuxmodule/kernelversion.c.orig click-1.6.0-27/linuxmodule/kernelversion.c.orig
+--- click-1.6.0/linuxmodule/kernelversion.c.orig       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/linuxmodule/kernelversion.c.orig    2007-07-16 19:47:50.000000000 -0400
+@@ -0,0 +1,91 @@
++/*
++ * kernelversion.c -- make sure we get a Linux module kernel version variable
++ * Robert Morris, Eddie Kohler
++ *
++ * Copyright (c) 1999 Massachusetts Institute of Technology
++ * Copyright (c) 2005 Regents of the University of California
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, subject to the conditions
++ * listed in the Click LICENSE file. These conditions include: you must
++ * preserve this copyright notice, and you cannot mention the copyright
++ * holders in advertising related to the Software without their permission.
++ * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++ * notice is a summary of the Click LICENSE file; the license in that file is
++ * legally binding.
++ */
++
++/*
++ * Use C, because g++ seems to ignore the version declaration, which
++ * ends up looking like
++ *  const char __module_kernel_version[] __attribute__((section(".modinfo"))) =
++ *  "kernel_version=" "2.2.6" ;
++ */
++
++#include <click/config.h>
++#include <linux/version.h>
++#include <linux/module.h>
++#include "moduleparm.h"
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 52)
++# define CLICK_INT_MODULE_PARAM(param)        MODULE_PARM(param, "i")
++#else
++# define CLICK_INT_MODULE_PARAM(param)        module_param(param, int, 0)
++#endif
++
++static int accessible = 1;
++CLICK_INT_MODULE_PARAM(accessible);
++MODULE_PARM_DESC(accessible, "make /click world-readable [1]");
++
++static int uid = 0;
++static int gid = 0;
++CLICK_INT_MODULE_PARAM(uid);
++CLICK_INT_MODULE_PARAM(gid);
++MODULE_PARM_DESC(uid, "UID owning /click [0]");
++MODULE_PARM_DESC(gid, "GID owning /click [0]");
++
++#if __MTCLICK__
++static int threads = 1;
++CLICK_INT_MODULE_PARAM(threads);
++MODULE_PARM_DESC(threads, "number of Click threads per router [1]");
++#endif
++
++#ifdef MODULE_LICENSE
++MODULE_LICENSE("Dual BSD/GPL");
++#endif
++
++static int greedy = 0;
++CLICK_INT_MODULE_PARAM(greedy);
++MODULE_PARM_DESC(greedy, "Click takes a whole CPU [0]");
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 21)
++static int cpu = -1;
++CLICK_INT_MODULE_PARAM(cpu);
++MODULE_PARM_DESC(cpu, "Click thread preferred CPU [-1=any]");
++#endif
++
++int
++click_parm(int which)
++{
++    switch (which) {
++    case CLICKPARM_ACCESSIBLE:
++      return accessible;
++    case CLICKPARM_UID:
++      return uid;
++    case CLICKPARM_GID:
++      return gid;
++    case CLICKPARM_GREEDY:
++      return greedy;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 21)
++    case CLICKPARM_CPU:
++      return cpu;
++#endif
++#if __MTCLICK__
++    case CLICKPARM_THREADS:
++      return threads;
++#endif
++    default:
++      return 0;
++    }
++}
+diff -Nurb click-1.6.0/linuxmodule/ksyms.c.orig click-1.6.0-27/linuxmodule/ksyms.c.orig
+--- click-1.6.0/linuxmodule/ksyms.c.orig       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/linuxmodule/ksyms.c.orig    2009-02-11 16:43:28.000000000 -0500
+@@ -0,0 +1,7403 @@
++// Created by 'click-buildtool ksyms' on Wed Feb 11 16:43:28 EST 2009
++#include <click/config.h>
++#include <linux/version.h>
++#include <linux/module.h>
++extern char _ZN11AdaptiveRED10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11AdaptiveRED10initializeEP12ErrorHandler);
++extern char _ZN11AdaptiveRED16live_reconfigureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11AdaptiveRED16live_reconfigureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN11AdaptiveRED4castEPKc[];
++EXPORT_SYMBOL(_ZN11AdaptiveRED4castEPKc);
++extern char _ZN11AdaptiveRED9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11AdaptiveRED9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN11AdaptiveRED9run_timerEP5Timer[];
++EXPORT_SYMBOL(_ZN11AdaptiveRED9run_timerEP5Timer);
++extern char _ZN11AdaptiveREDC1Ev[];
++EXPORT_SYMBOL(_ZN11AdaptiveREDC1Ev);
++extern char _ZN11AdaptiveREDC2Ev[];
++EXPORT_SYMBOL(_ZN11AdaptiveREDC2Ev);
++extern char _ZN11AdaptiveREDD0Ev[];
++EXPORT_SYMBOL(_ZN11AdaptiveREDD0Ev);
++extern char _ZN11AdaptiveREDD1Ev[];
++EXPORT_SYMBOL(_ZN11AdaptiveREDD1Ev);
++extern char _ZN11AdaptiveREDD2Ev[];
++EXPORT_SYMBOL(_ZN11AdaptiveREDD2Ev);
++extern char _ZNK11AdaptiveRED10class_nameEv[];
++EXPORT_SYMBOL(_ZNK11AdaptiveRED10class_nameEv);
++extern char _ZNK3RED10port_countEv[];
++EXPORT_SYMBOL(_ZNK3RED10port_countEv);
++extern char _ZNK3RED10processingEv[];
++EXPORT_SYMBOL(_ZNK3RED10processingEv);
++extern char _ZNK3RED20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK3RED20can_live_reconfigureEv);
++extern char _ZNK6String6lengthEv[];
++EXPORT_SYMBOL(_ZNK6String6lengthEv);
++extern char _ZTV11AdaptiveRED[];
++EXPORT_SYMBOL(_ZTV11AdaptiveRED);
++extern char _ZN11AddressInfo14query_ethernetE6StringPhP7Element[];
++EXPORT_SYMBOL(_ZN11AddressInfo14query_ethernetE6StringPhP7Element);
++extern char _ZN11AddressInfo15query_ip_prefixE6StringPhS1_P7Element[];
++EXPORT_SYMBOL(_ZN11AddressInfo15query_ip_prefixE6StringPhS1_P7Element);
++extern char _ZN11AddressInfo8query_ipE6StringPhP7Element[];
++EXPORT_SYMBOL(_ZN11AddressInfo8query_ipE6StringPhP7Element);
++extern char _ZN11AddressInfo9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11AddressInfo9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN11AddressInfoC1Ev[];
++EXPORT_SYMBOL(_ZN11AddressInfoC1Ev);
++extern char _ZN11AddressInfoC2Ev[];
++EXPORT_SYMBOL(_ZN11AddressInfoC2Ev);
++extern char _ZN11AddressInfoD0Ev[];
++EXPORT_SYMBOL(_ZN11AddressInfoD0Ev);
++extern char _ZN11AddressInfoD1Ev[];
++EXPORT_SYMBOL(_ZN11AddressInfoD1Ev);
++extern char _ZN11AddressInfoD2Ev[];
++EXPORT_SYMBOL(_ZN11AddressInfoD2Ev);
++extern char _ZN6VectorI6StringED1Ev[];
++EXPORT_SYMBOL(_ZN6VectorI6StringED1Ev);
++extern char _ZNK11AddressInfo10class_nameEv[];
++EXPORT_SYMBOL(_ZNK11AddressInfo10class_nameEv);
++extern char _ZNK11AddressInfo15configure_phaseEv[];
++EXPORT_SYMBOL(_ZNK11AddressInfo15configure_phaseEv);
++extern char _ZTV11AddressInfo[];
++EXPORT_SYMBOL(_ZTV11AddressInfo);
++extern char _ZN5Align4pullEi[];
++EXPORT_SYMBOL(_ZN5Align4pullEi);
++extern char _ZN5Align4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN5Align4pushEiP6Packet);
++extern char _ZN5Align8smactionEP6Packet[];
++EXPORT_SYMBOL(_ZN5Align8smactionEP6Packet);
++extern char _ZN5Align9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN5Align9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN5AlignC1Ev[];
++EXPORT_SYMBOL(_ZN5AlignC1Ev);
++extern char _ZN5AlignC2Ev[];
++EXPORT_SYMBOL(_ZN5AlignC2Ev);
++extern char _ZN5AlignD0Ev[];
++EXPORT_SYMBOL(_ZN5AlignD0Ev);
++extern char _ZN5AlignD1Ev[];
++EXPORT_SYMBOL(_ZN5AlignD1Ev);
++extern char _ZN5AlignD2Ev[];
++EXPORT_SYMBOL(_ZN5AlignD2Ev);
++extern char _ZNK5Align10class_nameEv[];
++EXPORT_SYMBOL(_ZNK5Align10class_nameEv);
++extern char _ZNK5Align10port_countEv[];
++EXPORT_SYMBOL(_ZNK5Align10port_countEv);
++extern char _ZNK5Align10processingEv[];
++EXPORT_SYMBOL(_ZNK5Align10processingEv);
++extern char _ZTV5Align[];
++EXPORT_SYMBOL(_ZTV5Align);
++extern char _ZN13AlignmentInfo5queryEP7ElementiRiS2_[];
++EXPORT_SYMBOL(_ZN13AlignmentInfo5queryEP7ElementiRiS2_);
++extern char _ZN13AlignmentInfo9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13AlignmentInfo9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN13AlignmentInfoC1Ev[];
++EXPORT_SYMBOL(_ZN13AlignmentInfoC1Ev);
++extern char _ZN13AlignmentInfoC2Ev[];
++EXPORT_SYMBOL(_ZN13AlignmentInfoC2Ev);
++extern char _ZN13AlignmentInfoD0Ev[];
++EXPORT_SYMBOL(_ZN13AlignmentInfoD0Ev);
++extern char _ZN13AlignmentInfoD1Ev[];
++EXPORT_SYMBOL(_ZN13AlignmentInfoD1Ev);
++extern char _ZN13AlignmentInfoD2Ev[];
++EXPORT_SYMBOL(_ZN13AlignmentInfoD2Ev);
++extern char _ZNK13AlignmentInfo10class_nameEv[];
++EXPORT_SYMBOL(_ZNK13AlignmentInfo10class_nameEv);
++extern char _ZNK13AlignmentInfo15configure_phaseEv[];
++EXPORT_SYMBOL(_ZNK13AlignmentInfo15configure_phaseEv);
++extern char _ZNK13AlignmentInfo6query1EP7ElementiRiS2_[];
++EXPORT_SYMBOL(_ZNK13AlignmentInfo6query1EP7ElementiRiS2_);
++extern char _ZTV13AlignmentInfo[];
++EXPORT_SYMBOL(_ZTV13AlignmentInfo);
++extern char _Z24dev_get_by_ether_addressRK6StringP7Element[];
++EXPORT_SYMBOL(_Z24dev_get_by_ether_addressRK6StringP7Element);
++extern char _ZN12AnyDeviceMap10initializeEv[];
++EXPORT_SYMBOL(_ZN12AnyDeviceMap10initializeEv);
++extern char _ZN12AnyDeviceMap6insertEP9AnyDeviceb[];
++EXPORT_SYMBOL(_ZN12AnyDeviceMap6insertEP9AnyDeviceb);
++extern char _ZN12AnyDeviceMap6removeEP9AnyDeviceb[];
++EXPORT_SYMBOL(_ZN12AnyDeviceMap6removeEP9AnyDeviceb);
++extern char _ZN13AnyTaskDeviceC1Ev[];
++EXPORT_SYMBOL(_ZN13AnyTaskDeviceC1Ev);
++extern char _ZN13AnyTaskDeviceC2Ev[];
++EXPORT_SYMBOL(_ZN13AnyTaskDeviceC2Ev);
++extern char _ZN13AnyTaskDeviceD0Ev[];
++EXPORT_SYMBOL(_ZN13AnyTaskDeviceD0Ev);
++extern char _ZN13AnyTaskDeviceD1Ev[];
++EXPORT_SYMBOL(_ZN13AnyTaskDeviceD1Ev);
++extern char _ZN9AnyDevice10set_deviceEP10net_deviceP12AnyDeviceMapb[];
++EXPORT_SYMBOL(_ZN9AnyDevice10set_deviceEP10net_deviceP12AnyDeviceMapb);
++extern char _ZN9AnyDevice11find_deviceEP12AnyDeviceMapP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN9AnyDevice11find_deviceEP12AnyDeviceMapP12ErrorHandler);
++extern char _ZN9AnyDevice12clear_deviceEP12AnyDeviceMap[];
++EXPORT_SYMBOL(_ZN9AnyDevice12clear_deviceEP12AnyDeviceMap);
++extern char _ZN9AnyDeviceC1Ev[];
++EXPORT_SYMBOL(_ZN9AnyDeviceC1Ev);
++extern char _ZN9AnyDeviceC2Ev[];
++EXPORT_SYMBOL(_ZN9AnyDeviceC2Ev);
++extern char _ZN9AnyDeviceD0Ev[];
++EXPORT_SYMBOL(_ZN9AnyDeviceD0Ev);
++extern char _ZN9AnyDeviceD1Ev[];
++EXPORT_SYMBOL(_ZN9AnyDeviceD1Ev);
++extern char _ZN9AnyDeviceD2Ev[];
++EXPORT_SYMBOL(_ZN9AnyDeviceD2Ev);
++extern char _ZNK12AnyDeviceMap10lookup_allEP10net_devicebR6VectorIP9AnyDeviceE[];
++EXPORT_SYMBOL(_ZNK12AnyDeviceMap10lookup_allEP10net_devicebR6VectorIP9AnyDeviceE);
++extern char _ZNK12AnyDeviceMap14lookup_unknownEP10net_deviceP9AnyDevice[];
++EXPORT_SYMBOL(_ZNK12AnyDeviceMap14lookup_unknownEP10net_deviceP9AnyDevice);
++extern char _ZTV13AnyTaskDevice[];
++EXPORT_SYMBOL(_ZTV13AnyTaskDevice);
++extern char _ZTV9AnyDevice[];
++EXPORT_SYMBOL(_ZTV9AnyDevice);
++extern char _ZN8ARPFaker10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8ARPFaker10initializeEP12ErrorHandler);
++extern char _ZN8ARPFaker13make_responseEPhS0_S0_S0_[];
++EXPORT_SYMBOL(_ZN8ARPFaker13make_responseEPhS0_S0_S0_);
++extern char _ZN8ARPFaker9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8ARPFaker9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN8ARPFaker9run_timerEP5Timer[];
++EXPORT_SYMBOL(_ZN8ARPFaker9run_timerEP5Timer);
++extern char _ZN8ARPFakerC1Ev[];
++EXPORT_SYMBOL(_ZN8ARPFakerC1Ev);
++extern char _ZN8ARPFakerC2Ev[];
++EXPORT_SYMBOL(_ZN8ARPFakerC2Ev);
++extern char _ZN8ARPFakerD0Ev[];
++EXPORT_SYMBOL(_ZN8ARPFakerD0Ev);
++extern char _ZN8ARPFakerD1Ev[];
++EXPORT_SYMBOL(_ZN8ARPFakerD1Ev);
++extern char _ZN8ARPFakerD2Ev[];
++EXPORT_SYMBOL(_ZN8ARPFakerD2Ev);
++extern char _ZNK8ARPFaker10class_nameEv[];
++EXPORT_SYMBOL(_ZNK8ARPFaker10class_nameEv);
++extern char _ZNK8ARPFaker10port_countEv[];
++EXPORT_SYMBOL(_ZNK8ARPFaker10port_countEv);
++extern char _ZNK8ARPFaker10processingEv[];
++EXPORT_SYMBOL(_ZNK8ARPFaker10processingEv);
++extern char _ZTV8ARPFaker[];
++EXPORT_SYMBOL(_ZTV8ARPFaker);
++extern char _ZN11StringAccumC1Ev[];
++EXPORT_SYMBOL(_ZN11StringAccumC1Ev);
++extern char _ZN11StringAccumD1Ev[];
++EXPORT_SYMBOL(_ZN11StringAccumD1Ev);
++extern char _ZN12EtherAddressC1EPKh[];
++EXPORT_SYMBOL(_ZN12EtherAddressC1EPKh);
++extern char _ZN8ARPPrint10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8ARPPrint10initializeEP12ErrorHandler);
++extern char _ZN8ARPPrint13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN8ARPPrint13simple_actionEP6Packet);
++extern char _ZN8ARPPrint7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN8ARPPrint7cleanupEN7Element12CleanupStageE);
++extern char _ZN8ARPPrint9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8ARPPrint9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN8ARPPrintC1Ev[];
++EXPORT_SYMBOL(_ZN8ARPPrintC1Ev);
++extern char _ZN8ARPPrintC2Ev[];
++EXPORT_SYMBOL(_ZN8ARPPrintC2Ev);
++extern char _ZN8ARPPrintD0Ev[];
++EXPORT_SYMBOL(_ZN8ARPPrintD0Ev);
++extern char _ZN8ARPPrintD1Ev[];
++EXPORT_SYMBOL(_ZN8ARPPrintD1Ev);
++extern char _ZN8ARPPrintD2Ev[];
++EXPORT_SYMBOL(_ZN8ARPPrintD2Ev);
++extern char _ZNK8ARPPrint10class_nameEv[];
++EXPORT_SYMBOL(_ZNK8ARPPrint10class_nameEv);
++extern char _ZNK8ARPPrint10port_countEv[];
++EXPORT_SYMBOL(_ZNK8ARPPrint10port_countEv);
++extern char _ZNK8ARPPrint10processingEv[];
++EXPORT_SYMBOL(_ZNK8ARPPrint10processingEv);
++extern char _ZTV8ARPPrint[];
++EXPORT_SYMBOL(_ZTV8ARPPrint);
++extern char _ZN10ARPQuerier10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10ARPQuerier10initializeEP12ErrorHandler);
++extern char _ZN10ARPQuerier10read_statsEP7ElementPv[];
++EXPORT_SYMBOL(_ZN10ARPQuerier10read_statsEP7ElementPv);
++extern char _ZN10ARPQuerier10read_tableEP7ElementPv[];
++EXPORT_SYMBOL(_ZN10ARPQuerier10read_tableEP7ElementPv);
++extern char _ZN10ARPQuerier10take_stateEP7ElementP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10ARPQuerier10take_stateEP7ElementP12ErrorHandler);
++extern char _ZN10ARPQuerier11expire_hookEP5TimerPv[];
++EXPORT_SYMBOL(_ZN10ARPQuerier11expire_hookEP5TimerPv);
++extern char _ZN10ARPQuerier12add_handlersEv[];
++EXPORT_SYMBOL(_ZN10ARPQuerier12add_handlersEv);
++extern char _ZN10ARPQuerier13write_handlerERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10ARPQuerier13write_handlerERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN10ARPQuerier14send_query_forE9IPAddress[];
++EXPORT_SYMBOL(_ZN10ARPQuerier14send_query_forE9IPAddress);
++extern char _ZN10ARPQuerier15handle_responseEP6Packet[];
++EXPORT_SYMBOL(_ZN10ARPQuerier15handle_responseEP6Packet);
++extern char _ZN10ARPQuerier16live_reconfigureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10ARPQuerier16live_reconfigureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN10ARPQuerier4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN10ARPQuerier4pushEiP6Packet);
++extern char _ZN10ARPQuerier7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN10ARPQuerier7cleanupEN7Element12CleanupStageE);
++extern char _ZN10ARPQuerier9clear_mapEv[];
++EXPORT_SYMBOL(_ZN10ARPQuerier9clear_mapEv);
++extern char _ZN10ARPQuerier9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10ARPQuerier9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN10ARPQuerier9handle_ipEP6Packet[];
++EXPORT_SYMBOL(_ZN10ARPQuerier9handle_ipEP6Packet);
++extern char _ZN10ARPQuerierC1Ev[];
++EXPORT_SYMBOL(_ZN10ARPQuerierC1Ev);
++extern char _ZN10ARPQuerierC2Ev[];
++EXPORT_SYMBOL(_ZN10ARPQuerierC2Ev);
++extern char _ZN10ARPQuerierD0Ev[];
++EXPORT_SYMBOL(_ZN10ARPQuerierD0Ev);
++extern char _ZN10ARPQuerierD1Ev[];
++EXPORT_SYMBOL(_ZN10ARPQuerierD1Ev);
++extern char _ZN10ARPQuerierD2Ev[];
++EXPORT_SYMBOL(_ZN10ARPQuerierD2Ev);
++extern char _ZNK10ARPQuerier10class_nameEv[];
++EXPORT_SYMBOL(_ZNK10ARPQuerier10class_nameEv);
++extern char _ZNK10ARPQuerier10port_countEv[];
++EXPORT_SYMBOL(_ZNK10ARPQuerier10port_countEv);
++extern char _ZNK10ARPQuerier10processingEv[];
++EXPORT_SYMBOL(_ZNK10ARPQuerier10processingEv);
++extern char _ZNK10ARPQuerier20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK10ARPQuerier20can_live_reconfigureEv);
++extern char _ZNK10ARPQuerier9flow_codeEv[];
++EXPORT_SYMBOL(_ZNK10ARPQuerier9flow_codeEv);
++extern char _ZTV10ARPQuerier[];
++EXPORT_SYMBOL(_ZTV10ARPQuerier);
++extern char _ZN12ARPResponder12add_handlersEv[];
++EXPORT_SYMBOL(_ZN12ARPResponder12add_handlersEv);
++extern char _ZN12ARPResponder12read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN12ARPResponder12read_handlerEP7ElementPv);
++extern char _ZN12ARPResponder13make_responseEPhS0_S0_S0_P6Packet[];
++EXPORT_SYMBOL(_ZN12ARPResponder13make_responseEPhS0_S0_S0_P6Packet);
++extern char _ZN12ARPResponder13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN12ARPResponder13simple_actionEP6Packet);
++extern char _ZN12ARPResponder16live_reconfigureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12ARPResponder16live_reconfigureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12ARPResponder7add_mapE9IPAddressS0_12EtherAddress[];
++EXPORT_SYMBOL(_ZN12ARPResponder7add_mapE9IPAddressS0_12EtherAddress);
++extern char _ZN12ARPResponder9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12ARPResponder9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12ARPResponderC1Ev[];
++EXPORT_SYMBOL(_ZN12ARPResponderC1Ev);
++extern char _ZN12ARPResponderC2Ev[];
++EXPORT_SYMBOL(_ZN12ARPResponderC2Ev);
++extern char _ZN12ARPResponderD0Ev[];
++EXPORT_SYMBOL(_ZN12ARPResponderD0Ev);
++extern char _ZN12ARPResponderD1Ev[];
++EXPORT_SYMBOL(_ZN12ARPResponderD1Ev);
++extern char _ZN12ARPResponderD2Ev[];
++EXPORT_SYMBOL(_ZN12ARPResponderD2Ev);
++extern char _ZN6VectorIN12ARPResponder5EntryEE5eraseEPS1_S3_[];
++EXPORT_SYMBOL(_ZN6VectorIN12ARPResponder5EntryEE5eraseEPS1_S3_);
++extern char _ZN6VectorIN12ARPResponder5EntryEE7reserveEi[];
++EXPORT_SYMBOL(_ZN6VectorIN12ARPResponder5EntryEE7reserveEi);
++extern char _ZN6VectorIN12ARPResponder5EntryEEC1ERKS2_[];
++EXPORT_SYMBOL(_ZN6VectorIN12ARPResponder5EntryEEC1ERKS2_);
++extern char _ZN6VectorIN12ARPResponder5EntryEED1Ev[];
++EXPORT_SYMBOL(_ZN6VectorIN12ARPResponder5EntryEED1Ev);
++extern char _ZN6VectorIN12ARPResponder5EntryEEaSERKS2_[];
++EXPORT_SYMBOL(_ZN6VectorIN12ARPResponder5EntryEEaSERKS2_);
++extern char _ZNK12ARPResponder10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12ARPResponder10class_nameEv);
++extern char _ZNK12ARPResponder10port_countEv[];
++EXPORT_SYMBOL(_ZNK12ARPResponder10port_countEv);
++extern char _ZNK12ARPResponder10processingEv[];
++EXPORT_SYMBOL(_ZNK12ARPResponder10processingEv);
++extern char _ZNK12ARPResponder20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK12ARPResponder20can_live_reconfigureEv);
++extern char _ZNK12ARPResponder6lookupE9IPAddressR12EtherAddress[];
++EXPORT_SYMBOL(_ZNK12ARPResponder6lookupE9IPAddressR12EtherAddress);
++extern char _ZTV12ARPResponder[];
++EXPORT_SYMBOL(_ZTV12ARPResponder);
++extern char _ZN14AverageCounter10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14AverageCounter10initializeEP12ErrorHandler);
++extern char _ZN14AverageCounter12add_handlersEv[];
++EXPORT_SYMBOL(_ZN14AverageCounter12add_handlersEv);
++extern char _ZN14AverageCounter13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN14AverageCounter13simple_actionEP6Packet);
++extern char _ZN14AverageCounter5resetEv[];
++EXPORT_SYMBOL(_ZN14AverageCounter5resetEv);
++extern char _ZN14AverageCounter9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14AverageCounter9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN14AverageCounterC1Ev[];
++EXPORT_SYMBOL(_ZN14AverageCounterC1Ev);
++extern char _ZN14AverageCounterC2Ev[];
++EXPORT_SYMBOL(_ZN14AverageCounterC2Ev);
++extern char _ZN14AverageCounterD0Ev[];
++EXPORT_SYMBOL(_ZN14AverageCounterD0Ev);
++extern char _ZN14AverageCounterD1Ev[];
++EXPORT_SYMBOL(_ZN14AverageCounterD1Ev);
++extern char _ZN14AverageCounterD2Ev[];
++EXPORT_SYMBOL(_ZN14AverageCounterD2Ev);
++extern char _ZNK14AverageCounter10class_nameEv[];
++EXPORT_SYMBOL(_ZNK14AverageCounter10class_nameEv);
++extern char _ZNK14AverageCounter10port_countEv[];
++EXPORT_SYMBOL(_ZNK14AverageCounter10port_countEv);
++extern char _ZNK14AverageCounter10processingEv[];
++EXPORT_SYMBOL(_ZNK14AverageCounter10processingEv);
++extern char _ZTV14AverageCounter[];
++EXPORT_SYMBOL(_ZTV14AverageCounter);
++extern char _ZN11DirectEWMAXI19RateEWMAXParametersILj4ELj10EjiEE8update_nEjj[];
++EXPORT_SYMBOL(_ZN11DirectEWMAXI19RateEWMAXParametersILj4ELj10EjiEE8update_nEjj);
++extern char _ZN14BandwidthMeter10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14BandwidthMeter10initializeEP12ErrorHandler);
++extern char _ZN14BandwidthMeter12add_handlersEv[];
++EXPORT_SYMBOL(_ZN14BandwidthMeter12add_handlersEv);
++extern char _ZN14BandwidthMeter17read_rate_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN14BandwidthMeter17read_rate_handlerEP7ElementPv);
++extern char _ZN14BandwidthMeter19meters_read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN14BandwidthMeter19meters_read_handlerEP7ElementPv);
++extern char _ZN14BandwidthMeter4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN14BandwidthMeter4pushEiP6Packet);
++extern char _ZN14BandwidthMeter9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14BandwidthMeter9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN14BandwidthMeterC1Ev[];
++EXPORT_SYMBOL(_ZN14BandwidthMeterC1Ev);
++extern char _ZN14BandwidthMeterC2Ev[];
++EXPORT_SYMBOL(_ZN14BandwidthMeterC2Ev);
++extern char _ZN14BandwidthMeterD0Ev[];
++EXPORT_SYMBOL(_ZN14BandwidthMeterD0Ev);
++extern char _ZN14BandwidthMeterD1Ev[];
++EXPORT_SYMBOL(_ZN14BandwidthMeterD1Ev);
++extern char _ZN14BandwidthMeterD2Ev[];
++EXPORT_SYMBOL(_ZN14BandwidthMeterD2Ev);
++extern char _ZNK14BandwidthMeter10class_nameEv[];
++EXPORT_SYMBOL(_ZNK14BandwidthMeter10class_nameEv);
++extern char _ZNK14BandwidthMeter10port_countEv[];
++EXPORT_SYMBOL(_ZNK14BandwidthMeter10port_countEv);
++extern char _ZNK14BandwidthMeter10processingEv[];
++EXPORT_SYMBOL(_ZNK14BandwidthMeter10processingEv);
++extern char _ZTV14BandwidthMeter[];
++EXPORT_SYMBOL(_ZTV14BandwidthMeter);
++extern char _ZN15BandwidthShaper4pullEi[];
++EXPORT_SYMBOL(_ZN15BandwidthShaper4pullEi);
++extern char _ZN15BandwidthShaperC1Ev[];
++EXPORT_SYMBOL(_ZN15BandwidthShaperC1Ev);
++extern char _ZN15BandwidthShaperC2Ev[];
++EXPORT_SYMBOL(_ZN15BandwidthShaperC2Ev);
++extern char _ZN15BandwidthShaperD0Ev[];
++EXPORT_SYMBOL(_ZN15BandwidthShaperD0Ev);
++extern char _ZN15BandwidthShaperD1Ev[];
++EXPORT_SYMBOL(_ZN15BandwidthShaperD1Ev);
++extern char _ZN15BandwidthShaperD2Ev[];
++EXPORT_SYMBOL(_ZN15BandwidthShaperD2Ev);
++extern char _ZNK15BandwidthShaper10class_nameEv[];
++EXPORT_SYMBOL(_ZNK15BandwidthShaper10class_nameEv);
++extern char _ZNK6Shaper10port_countEv[];
++EXPORT_SYMBOL(_ZNK6Shaper10port_countEv);
++extern char _ZNK6Shaper10processingEv[];
++EXPORT_SYMBOL(_ZNK6Shaper10processingEv);
++extern char _ZNK6Shaper20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK6Shaper20can_live_reconfigureEv);
++extern char _ZTV15BandwidthShaper[];
++EXPORT_SYMBOL(_ZTV15BandwidthShaper);
++extern char _ZN13HashMap_Arena10hard_allocEv[];
++EXPORT_SYMBOL(_ZN13HashMap_Arena10hard_allocEv);
++extern char _ZN13HashMap_ArenaC1Ej[];
++EXPORT_SYMBOL(_ZN13HashMap_ArenaC1Ej);
++extern char _ZN13HashMap_ArenaC2Ej[];
++EXPORT_SYMBOL(_ZN13HashMap_ArenaC2Ej);
++extern char _ZN13HashMap_ArenaD1Ev[];
++EXPORT_SYMBOL(_ZN13HashMap_ArenaD1Ev);
++extern char _ZN13HashMap_ArenaD2Ev[];
++EXPORT_SYMBOL(_ZN13HashMap_ArenaD2Ev);
++extern char _ZN20HashMap_ArenaFactory11the_factoryE[];
++EXPORT_SYMBOL(_ZN20HashMap_ArenaFactory11the_factoryE);
++extern char _ZN20HashMap_ArenaFactory14get_arena_funcEj[];
++EXPORT_SYMBOL(_ZN20HashMap_ArenaFactory14get_arena_funcEj);
++extern char _ZN20HashMap_ArenaFactory14static_cleanupEv[];
++EXPORT_SYMBOL(_ZN20HashMap_ArenaFactory14static_cleanupEv);
++extern char _ZN20HashMap_ArenaFactory17static_initializeEv[];
++EXPORT_SYMBOL(_ZN20HashMap_ArenaFactory17static_initializeEv);
++extern char _ZN20HashMap_ArenaFactory9get_arenaEjPS_[];
++EXPORT_SYMBOL(_ZN20HashMap_ArenaFactory9get_arenaEjPS_);
++extern char _ZN20HashMap_ArenaFactoryC1Ev[];
++EXPORT_SYMBOL(_ZN20HashMap_ArenaFactoryC1Ev);
++extern char _ZN20HashMap_ArenaFactoryC2Ev[];
++EXPORT_SYMBOL(_ZN20HashMap_ArenaFactoryC2Ev);
++extern char _ZN20HashMap_ArenaFactoryD0Ev[];
++EXPORT_SYMBOL(_ZN20HashMap_ArenaFactoryD0Ev);
++extern char _ZN20HashMap_ArenaFactoryD1Ev[];
++EXPORT_SYMBOL(_ZN20HashMap_ArenaFactoryD1Ev);
++extern char _ZN20HashMap_ArenaFactoryD2Ev[];
++EXPORT_SYMBOL(_ZN20HashMap_ArenaFactoryD2Ev);
++extern char _ZTV20HashMap_ArenaFactory[];
++EXPORT_SYMBOL(_ZTV20HashMap_ArenaFactory);
++extern char _ZN9Bitvector10clear_lastEv[];
++EXPORT_SYMBOL(_ZN9Bitvector10clear_lastEv);
++extern char _ZN9Bitvector13resize_to_maxEib[];
++EXPORT_SYMBOL(_ZN9Bitvector13resize_to_maxEib);
++extern char _ZN9Bitvector18or_with_differenceERKS_RS_[];
++EXPORT_SYMBOL(_ZN9Bitvector18or_with_differenceERKS_RS_);
++extern char _ZN9Bitvector23finish_copy_constructorERKS_[];
++EXPORT_SYMBOL(_ZN9Bitvector23finish_copy_constructorERKS_);
++extern char _ZN9Bitvector5clearEv[];
++EXPORT_SYMBOL(_ZN9Bitvector5clearEv);
++extern char _ZN9Bitvector5or_atERKS_i[];
++EXPORT_SYMBOL(_ZN9Bitvector5or_atERKS_i);
++extern char _ZN9Bitvector6assignEib[];
++EXPORT_SYMBOL(_ZN9Bitvector6assignEib);
++extern char _ZN9Bitvector6negateEv[];
++EXPORT_SYMBOL(_ZN9Bitvector6negateEv);
++extern char _ZN9BitvectoraNERKS_[];
++EXPORT_SYMBOL(_ZN9BitvectoraNERKS_);
++extern char _ZN9BitvectoraSERKS_[];
++EXPORT_SYMBOL(_ZN9BitvectoraSERKS_);
++extern char _ZN9BitvectoreOERKS_[];
++EXPORT_SYMBOL(_ZN9BitvectoreOERKS_);
++extern char _ZN9BitvectoroRERKS_[];
++EXPORT_SYMBOL(_ZN9BitvectoroRERKS_);
++extern char _ZNK9Bitvector20nonzero_intersectionERKS_[];
++EXPORT_SYMBOL(_ZNK9Bitvector20nonzero_intersectionERKS_);
++extern char _ZNK9Bitvector4zeroEv[];
++EXPORT_SYMBOL(_ZNK9Bitvector4zeroEv);
++extern char _ZN7Burster10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7Burster10initializeEP12ErrorHandler);
++extern char _ZN7Burster9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7Burster9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN7Burster9run_timerEP5Timer[];
++EXPORT_SYMBOL(_ZN7Burster9run_timerEP5Timer);
++extern char _ZN7BursterC1Ev[];
++EXPORT_SYMBOL(_ZN7BursterC1Ev);
++extern char _ZN7BursterC2Ev[];
++EXPORT_SYMBOL(_ZN7BursterC2Ev);
++extern char _ZN7BursterD0Ev[];
++EXPORT_SYMBOL(_ZN7BursterD0Ev);
++extern char _ZN7BursterD1Ev[];
++EXPORT_SYMBOL(_ZN7BursterD1Ev);
++extern char _ZN7BursterD2Ev[];
++EXPORT_SYMBOL(_ZN7BursterD2Ev);
++extern char _ZNK7Burster10class_nameEv[];
++EXPORT_SYMBOL(_ZNK7Burster10class_nameEv);
++extern char _ZNK7Burster10port_countEv[];
++EXPORT_SYMBOL(_ZNK7Burster10port_countEv);
++extern char _ZNK7Burster10processingEv[];
++EXPORT_SYMBOL(_ZNK7Burster10processingEv);
++extern char _ZTV7Burster[];
++EXPORT_SYMBOL(_ZTV7Burster);
++extern char _ZN22BandwidthRatedSplitter4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN22BandwidthRatedSplitter4pushEiP6Packet);
++extern char _ZN22BandwidthRatedSplitterC1Ev[];
++EXPORT_SYMBOL(_ZN22BandwidthRatedSplitterC1Ev);
++extern char _ZN22BandwidthRatedSplitterC2Ev[];
++EXPORT_SYMBOL(_ZN22BandwidthRatedSplitterC2Ev);
++extern char _ZN22BandwidthRatedSplitterD0Ev[];
++EXPORT_SYMBOL(_ZN22BandwidthRatedSplitterD0Ev);
++extern char _ZN22BandwidthRatedSplitterD1Ev[];
++EXPORT_SYMBOL(_ZN22BandwidthRatedSplitterD1Ev);
++extern char _ZN22BandwidthRatedSplitterD2Ev[];
++EXPORT_SYMBOL(_ZN22BandwidthRatedSplitterD2Ev);
++extern char _ZNK13RatedSplitter10port_countEv[];
++EXPORT_SYMBOL(_ZNK13RatedSplitter10port_countEv);
++extern char _ZNK13RatedSplitter10processingEv[];
++EXPORT_SYMBOL(_ZNK13RatedSplitter10processingEv);
++extern char _ZNK13RatedSplitter20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK13RatedSplitter20can_live_reconfigureEv);
++extern char _ZNK22BandwidthRatedSplitter10class_nameEv[];
++EXPORT_SYMBOL(_ZNK22BandwidthRatedSplitter10class_nameEv);
++extern char _ZTV22BandwidthRatedSplitter[];
++EXPORT_SYMBOL(_ZTV22BandwidthRatedSplitter);
++extern char _ZN21BandwidthRatedUnqueue8run_taskEP4Task[];
++EXPORT_SYMBOL(_ZN21BandwidthRatedUnqueue8run_taskEP4Task);
++extern char _ZN21BandwidthRatedUnqueueC1Ev[];
++EXPORT_SYMBOL(_ZN21BandwidthRatedUnqueueC1Ev);
++extern char _ZN21BandwidthRatedUnqueueC2Ev[];
++EXPORT_SYMBOL(_ZN21BandwidthRatedUnqueueC2Ev);
++extern char _ZN21BandwidthRatedUnqueueD0Ev[];
++EXPORT_SYMBOL(_ZN21BandwidthRatedUnqueueD0Ev);
++extern char _ZN21BandwidthRatedUnqueueD1Ev[];
++EXPORT_SYMBOL(_ZN21BandwidthRatedUnqueueD1Ev);
++extern char _ZN21BandwidthRatedUnqueueD2Ev[];
++EXPORT_SYMBOL(_ZN21BandwidthRatedUnqueueD2Ev);
++extern char _ZNK12RatedUnqueue10port_countEv[];
++EXPORT_SYMBOL(_ZNK12RatedUnqueue10port_countEv);
++extern char _ZNK12RatedUnqueue10processingEv[];
++EXPORT_SYMBOL(_ZNK12RatedUnqueue10processingEv);
++extern char _ZNK12RatedUnqueue20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK12RatedUnqueue20can_live_reconfigureEv);
++extern char _ZNK14NotifierSignal6activeEv[];
++EXPORT_SYMBOL(_ZNK14NotifierSignal6activeEv);
++extern char _ZNK21BandwidthRatedUnqueue10class_nameEv[];
++EXPORT_SYMBOL(_ZNK21BandwidthRatedUnqueue10class_nameEv);
++extern char _ZTV21BandwidthRatedUnqueue[];
++EXPORT_SYMBOL(_ZTV21BandwidthRatedUnqueue);
++extern char _ZN14CheckARPHeader12add_handlersEv[];
++EXPORT_SYMBOL(_ZN14CheckARPHeader12add_handlersEv);
++extern char _ZN14CheckARPHeader12read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN14CheckARPHeader12read_handlerEP7ElementPv);
++extern char _ZN14CheckARPHeader12reason_textsE[];
++EXPORT_SYMBOL(_ZN14CheckARPHeader12reason_textsE);
++extern char _ZN14CheckARPHeader13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN14CheckARPHeader13simple_actionEP6Packet);
++extern char _ZN14CheckARPHeader4dropENS_6ReasonEP6Packet[];
++EXPORT_SYMBOL(_ZN14CheckARPHeader4dropENS_6ReasonEP6Packet);
++extern char _ZN14CheckARPHeader9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14CheckARPHeader9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN14CheckARPHeaderC1Ev[];
++EXPORT_SYMBOL(_ZN14CheckARPHeaderC1Ev);
++extern char _ZN14CheckARPHeaderC2Ev[];
++EXPORT_SYMBOL(_ZN14CheckARPHeaderC2Ev);
++extern char _ZN14CheckARPHeaderD0Ev[];
++EXPORT_SYMBOL(_ZN14CheckARPHeaderD0Ev);
++extern char _ZN14CheckARPHeaderD1Ev[];
++EXPORT_SYMBOL(_ZN14CheckARPHeaderD1Ev);
++extern char _ZN14CheckARPHeaderD2Ev[];
++EXPORT_SYMBOL(_ZN14CheckARPHeaderD2Ev);
++extern char _ZNK14CheckARPHeader10class_nameEv[];
++EXPORT_SYMBOL(_ZNK14CheckARPHeader10class_nameEv);
++extern char _ZNK14CheckARPHeader10port_countEv[];
++EXPORT_SYMBOL(_ZNK14CheckARPHeader10port_countEv);
++extern char _ZNK14CheckARPHeader10processingEv[];
++EXPORT_SYMBOL(_ZNK14CheckARPHeader10processingEv);
++extern char _ZTV14CheckARPHeader[];
++EXPORT_SYMBOL(_ZTV14CheckARPHeader);
++extern char _ZN10CheckCRC3213simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN10CheckCRC3213simple_actionEP6Packet);
++extern char _ZN10CheckCRC32C1Ev[];
++EXPORT_SYMBOL(_ZN10CheckCRC32C1Ev);
++extern char _ZN10CheckCRC32C2Ev[];
++EXPORT_SYMBOL(_ZN10CheckCRC32C2Ev);
++extern char _ZN10CheckCRC32D0Ev[];
++EXPORT_SYMBOL(_ZN10CheckCRC32D0Ev);
++extern char _ZN10CheckCRC32D1Ev[];
++EXPORT_SYMBOL(_ZN10CheckCRC32D1Ev);
++extern char _ZN10CheckCRC32D2Ev[];
++EXPORT_SYMBOL(_ZN10CheckCRC32D2Ev);
++extern char _ZNK10CheckCRC3210class_nameEv[];
++EXPORT_SYMBOL(_ZNK10CheckCRC3210class_nameEv);
++extern char _ZNK10CheckCRC3210port_countEv[];
++EXPORT_SYMBOL(_ZNK10CheckCRC3210port_countEv);
++extern char _ZNK10CheckCRC3210processingEv[];
++EXPORT_SYMBOL(_ZNK10CheckCRC3210processingEv);
++extern char _ZTV10CheckCRC32[];
++EXPORT_SYMBOL(_ZTV10CheckCRC32);
++extern char _ZN15CheckICMPHeader12add_handlersEv[];
++EXPORT_SYMBOL(_ZN15CheckICMPHeader12add_handlersEv);
++extern char _ZN15CheckICMPHeader12read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN15CheckICMPHeader12read_handlerEP7ElementPv);
++extern char _ZN15CheckICMPHeader12reason_textsE[];
++EXPORT_SYMBOL(_ZN15CheckICMPHeader12reason_textsE);
++extern char _ZN15CheckICMPHeader13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN15CheckICMPHeader13simple_actionEP6Packet);
++extern char _ZN15CheckICMPHeader4dropENS_6ReasonEP6Packet[];
++EXPORT_SYMBOL(_ZN15CheckICMPHeader4dropENS_6ReasonEP6Packet);
++extern char _ZN15CheckICMPHeader9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN15CheckICMPHeader9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN15CheckICMPHeaderC1Ev[];
++EXPORT_SYMBOL(_ZN15CheckICMPHeaderC1Ev);
++extern char _ZN15CheckICMPHeaderC2Ev[];
++EXPORT_SYMBOL(_ZN15CheckICMPHeaderC2Ev);
++extern char _ZN15CheckICMPHeaderD0Ev[];
++EXPORT_SYMBOL(_ZN15CheckICMPHeaderD0Ev);
++extern char _ZN15CheckICMPHeaderD1Ev[];
++EXPORT_SYMBOL(_ZN15CheckICMPHeaderD1Ev);
++extern char _ZN15CheckICMPHeaderD2Ev[];
++EXPORT_SYMBOL(_ZN15CheckICMPHeaderD2Ev);
++extern char _ZNK15CheckICMPHeader10class_nameEv[];
++EXPORT_SYMBOL(_ZNK15CheckICMPHeader10class_nameEv);
++extern char _ZNK15CheckICMPHeader10port_countEv[];
++EXPORT_SYMBOL(_ZNK15CheckICMPHeader10port_countEv);
++extern char _ZNK15CheckICMPHeader10processingEv[];
++EXPORT_SYMBOL(_ZNK15CheckICMPHeader10processingEv);
++extern char _ZTV15CheckICMPHeader[];
++EXPORT_SYMBOL(_ZTV15CheckICMPHeader);
++extern char _ZN13CheckIPHeader12add_handlersEv[];
++EXPORT_SYMBOL(_ZN13CheckIPHeader12add_handlersEv);
++extern char _ZN13CheckIPHeader12read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN13CheckIPHeader12read_handlerEP7ElementPv);
++extern char _ZN13CheckIPHeader12reason_textsE[];
++EXPORT_SYMBOL(_ZN13CheckIPHeader12reason_textsE);
++extern char _ZN13CheckIPHeader13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN13CheckIPHeader13simple_actionEP6Packet);
++extern char _ZN13CheckIPHeader14static_cleanupEv[];
++EXPORT_SYMBOL(_ZN13CheckIPHeader14static_cleanupEv);
++extern char _ZN13CheckIPHeader17static_initializeEv[];
++EXPORT_SYMBOL(_ZN13CheckIPHeader17static_initializeEv);
++extern char _ZN13CheckIPHeader4dropENS_6ReasonEP6Packet[];
++EXPORT_SYMBOL(_ZN13CheckIPHeader4dropENS_6ReasonEP6Packet);
++extern char _ZN13CheckIPHeader9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13CheckIPHeader9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN13CheckIPHeaderC1Ev[];
++EXPORT_SYMBOL(_ZN13CheckIPHeaderC1Ev);
++extern char _ZN13CheckIPHeaderC2Ev[];
++EXPORT_SYMBOL(_ZN13CheckIPHeaderC2Ev);
++extern char _ZN13CheckIPHeaderD0Ev[];
++EXPORT_SYMBOL(_ZN13CheckIPHeaderD0Ev);
++extern char _ZN13CheckIPHeaderD1Ev[];
++EXPORT_SYMBOL(_ZN13CheckIPHeaderD1Ev);
++extern char _ZN13CheckIPHeaderD2Ev[];
++EXPORT_SYMBOL(_ZN13CheckIPHeaderD2Ev);
++extern char _ZNK13CheckIPHeader10class_nameEv[];
++EXPORT_SYMBOL(_ZNK13CheckIPHeader10class_nameEv);
++extern char _ZNK13CheckIPHeader10port_countEv[];
++EXPORT_SYMBOL(_ZNK13CheckIPHeader10port_countEv);
++extern char _ZNK13CheckIPHeader10processingEv[];
++EXPORT_SYMBOL(_ZNK13CheckIPHeader10processingEv);
++extern char _ZNK13CheckIPHeader5flagsEv[];
++EXPORT_SYMBOL(_ZNK13CheckIPHeader5flagsEv);
++extern char _ZTV13CheckIPHeader[];
++EXPORT_SYMBOL(_ZTV13CheckIPHeader);
++extern char _ZN14CheckIPHeader2C1Ev[];
++EXPORT_SYMBOL(_ZN14CheckIPHeader2C1Ev);
++extern char _ZN14CheckIPHeader2C2Ev[];
++EXPORT_SYMBOL(_ZN14CheckIPHeader2C2Ev);
++extern char _ZN14CheckIPHeader2D0Ev[];
++EXPORT_SYMBOL(_ZN14CheckIPHeader2D0Ev);
++extern char _ZN14CheckIPHeader2D1Ev[];
++EXPORT_SYMBOL(_ZN14CheckIPHeader2D1Ev);
++extern char _ZN14CheckIPHeader2D2Ev[];
++EXPORT_SYMBOL(_ZN14CheckIPHeader2D2Ev);
++extern char _ZNK14CheckIPHeader210class_nameEv[];
++EXPORT_SYMBOL(_ZNK14CheckIPHeader210class_nameEv);
++extern char _ZTV14CheckIPHeader2[];
++EXPORT_SYMBOL(_ZTV14CheckIPHeader2);
++extern char _ZN11CheckLength4pullEi[];
++EXPORT_SYMBOL(_ZN11CheckLength4pullEi);
++extern char _ZN11CheckLength4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN11CheckLength4pushEiP6Packet);
++extern char _ZN11CheckLength9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11CheckLength9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN11CheckLengthC1Ev[];
++EXPORT_SYMBOL(_ZN11CheckLengthC1Ev);
++extern char _ZN11CheckLengthC2Ev[];
++EXPORT_SYMBOL(_ZN11CheckLengthC2Ev);
++extern char _ZN11CheckLengthD0Ev[];
++EXPORT_SYMBOL(_ZN11CheckLengthD0Ev);
++extern char _ZN11CheckLengthD1Ev[];
++EXPORT_SYMBOL(_ZN11CheckLengthD1Ev);
++extern char _ZN11CheckLengthD2Ev[];
++EXPORT_SYMBOL(_ZN11CheckLengthD2Ev);
++extern char _ZNK11CheckLength10class_nameEv[];
++EXPORT_SYMBOL(_ZNK11CheckLength10class_nameEv);
++extern char _ZNK11CheckLength10port_countEv[];
++EXPORT_SYMBOL(_ZNK11CheckLength10port_countEv);
++extern char _ZNK11CheckLength10processingEv[];
++EXPORT_SYMBOL(_ZNK11CheckLength10processingEv);
++extern char _ZTV11CheckLength[];
++EXPORT_SYMBOL(_ZTV11CheckLength);
++extern char _ZN10CheckPaint4pullEi[];
++EXPORT_SYMBOL(_ZN10CheckPaint4pullEi);
++extern char _ZN10CheckPaint4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN10CheckPaint4pushEiP6Packet);
++extern char _ZN10CheckPaint9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10CheckPaint9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN10CheckPaintC1Ev[];
++EXPORT_SYMBOL(_ZN10CheckPaintC1Ev);
++extern char _ZN10CheckPaintC2Ev[];
++EXPORT_SYMBOL(_ZN10CheckPaintC2Ev);
++extern char _ZN10CheckPaintD0Ev[];
++EXPORT_SYMBOL(_ZN10CheckPaintD0Ev);
++extern char _ZN10CheckPaintD1Ev[];
++EXPORT_SYMBOL(_ZN10CheckPaintD1Ev);
++extern char _ZN10CheckPaintD2Ev[];
++EXPORT_SYMBOL(_ZN10CheckPaintD2Ev);
++extern char _ZNK10CheckPaint10class_nameEv[];
++EXPORT_SYMBOL(_ZNK10CheckPaint10class_nameEv);
++extern char _ZNK10CheckPaint10port_countEv[];
++EXPORT_SYMBOL(_ZNK10CheckPaint10port_countEv);
++extern char _ZNK10CheckPaint10processingEv[];
++EXPORT_SYMBOL(_ZNK10CheckPaint10processingEv);
++extern char _ZTV10CheckPaint[];
++EXPORT_SYMBOL(_ZTV10CheckPaint);
++extern char _ZN14CheckTCPHeader12add_handlersEv[];
++EXPORT_SYMBOL(_ZN14CheckTCPHeader12add_handlersEv);
++extern char _ZN14CheckTCPHeader12read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN14CheckTCPHeader12read_handlerEP7ElementPv);
++extern char _ZN14CheckTCPHeader12reason_textsE[];
++EXPORT_SYMBOL(_ZN14CheckTCPHeader12reason_textsE);
++extern char _ZN14CheckTCPHeader13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN14CheckTCPHeader13simple_actionEP6Packet);
++extern char _ZN14CheckTCPHeader4dropENS_6ReasonEP6Packet[];
++EXPORT_SYMBOL(_ZN14CheckTCPHeader4dropENS_6ReasonEP6Packet);
++extern char _ZN14CheckTCPHeader9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14CheckTCPHeader9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN14CheckTCPHeaderC1Ev[];
++EXPORT_SYMBOL(_ZN14CheckTCPHeaderC1Ev);
++extern char _ZN14CheckTCPHeaderC2Ev[];
++EXPORT_SYMBOL(_ZN14CheckTCPHeaderC2Ev);
++extern char _ZN14CheckTCPHeaderD0Ev[];
++EXPORT_SYMBOL(_ZN14CheckTCPHeaderD0Ev);
++extern char _ZN14CheckTCPHeaderD1Ev[];
++EXPORT_SYMBOL(_ZN14CheckTCPHeaderD1Ev);
++extern char _ZN14CheckTCPHeaderD2Ev[];
++EXPORT_SYMBOL(_ZN14CheckTCPHeaderD2Ev);
++extern char _ZNK14CheckTCPHeader10class_nameEv[];
++EXPORT_SYMBOL(_ZNK14CheckTCPHeader10class_nameEv);
++extern char _ZNK14CheckTCPHeader10port_countEv[];
++EXPORT_SYMBOL(_ZNK14CheckTCPHeader10port_countEv);
++extern char _ZNK14CheckTCPHeader10processingEv[];
++EXPORT_SYMBOL(_ZNK14CheckTCPHeader10processingEv);
++extern char _ZTV14CheckTCPHeader[];
++EXPORT_SYMBOL(_ZTV14CheckTCPHeader);
++extern char _ZN14CheckUDPHeader12add_handlersEv[];
++EXPORT_SYMBOL(_ZN14CheckUDPHeader12add_handlersEv);
++extern char _ZN14CheckUDPHeader12read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN14CheckUDPHeader12read_handlerEP7ElementPv);
++extern char _ZN14CheckUDPHeader12reason_textsE[];
++EXPORT_SYMBOL(_ZN14CheckUDPHeader12reason_textsE);
++extern char _ZN14CheckUDPHeader13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN14CheckUDPHeader13simple_actionEP6Packet);
++extern char _ZN14CheckUDPHeader4dropENS_6ReasonEP6Packet[];
++EXPORT_SYMBOL(_ZN14CheckUDPHeader4dropENS_6ReasonEP6Packet);
++extern char _ZN14CheckUDPHeader9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14CheckUDPHeader9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN14CheckUDPHeaderC1Ev[];
++EXPORT_SYMBOL(_ZN14CheckUDPHeaderC1Ev);
++extern char _ZN14CheckUDPHeaderC2Ev[];
++EXPORT_SYMBOL(_ZN14CheckUDPHeaderC2Ev);
++extern char _ZN14CheckUDPHeaderD0Ev[];
++EXPORT_SYMBOL(_ZN14CheckUDPHeaderD0Ev);
++extern char _ZN14CheckUDPHeaderD1Ev[];
++EXPORT_SYMBOL(_ZN14CheckUDPHeaderD1Ev);
++extern char _ZN14CheckUDPHeaderD2Ev[];
++EXPORT_SYMBOL(_ZN14CheckUDPHeaderD2Ev);
++extern char _ZNK14CheckUDPHeader10class_nameEv[];
++EXPORT_SYMBOL(_ZNK14CheckUDPHeader10class_nameEv);
++extern char _ZNK14CheckUDPHeader10port_countEv[];
++EXPORT_SYMBOL(_ZNK14CheckUDPHeader10port_countEv);
++extern char _ZNK14CheckUDPHeader10processingEv[];
++EXPORT_SYMBOL(_ZNK14CheckUDPHeader10processingEv);
++extern char _ZTV14CheckUDPHeader[];
++EXPORT_SYMBOL(_ZTV14CheckUDPHeader);
++extern char _ZN10Classifier12add_handlersEv[];
++EXPORT_SYMBOL(_ZN10Classifier12add_handlersEv);
++extern char _ZN10Classifier14optimize_exprsEP12ErrorHandleri[];
++EXPORT_SYMBOL(_ZN10Classifier14optimize_exprsEP12ErrorHandleri);
++extern char _ZN10Classifier14program_stringEP7ElementPv[];
++EXPORT_SYMBOL(_ZN10Classifier14program_stringEP7ElementPv);
++extern char _ZN10Classifier17init_expr_subtreeER6VectorIiE[];
++EXPORT_SYMBOL(_ZN10Classifier17init_expr_subtreeER6VectorIiE);
++extern char _ZN10Classifier18DominatorOptimizer12shift_branchEi[];
++EXPORT_SYMBOL(_ZN10Classifier18DominatorOptimizer12shift_branchEi);
++extern char _ZN10Classifier18DominatorOptimizer13calculate_domEi[];
++EXPORT_SYMBOL(_ZN10Classifier18DominatorOptimizer13calculate_domEi);
++extern char _ZN10Classifier18DominatorOptimizer15intersect_listsERK6VectorIiES4_S4_iiRS2_[];
++EXPORT_SYMBOL(_ZN10Classifier18DominatorOptimizer15intersect_listsERK6VectorIiES4_S4_iiRS2_);
++extern char _ZN10Classifier18DominatorOptimizer16dom_shift_branchEiiiiP6VectorIiE[];
++EXPORT_SYMBOL(_ZN10Classifier18DominatorOptimizer16dom_shift_branchEiiiiP6VectorIiE);
++extern char _ZN10Classifier18DominatorOptimizer26last_common_state_in_listsERK6VectorIiES4_S4_[];
++EXPORT_SYMBOL(_ZN10Classifier18DominatorOptimizer26last_common_state_in_listsERK6VectorIiES4_S4_);
++extern char _ZN10Classifier18DominatorOptimizer3runEi[];
++EXPORT_SYMBOL(_ZN10Classifier18DominatorOptimizer3runEi);
++extern char _ZN10Classifier18DominatorOptimizerC1EPS_[];
++EXPORT_SYMBOL(_ZN10Classifier18DominatorOptimizerC1EPS_);
++extern char _ZN10Classifier18DominatorOptimizerC2EPS_[];
++EXPORT_SYMBOL(_ZN10Classifier18DominatorOptimizerC2EPS_);
++extern char _ZN10Classifier18start_expr_subtreeER6VectorIiE[];
++EXPORT_SYMBOL(_ZN10Classifier18start_expr_subtreeER6VectorIiE);
++extern char _ZN10Classifier19finish_expr_subtreeER6VectorIiENS_8CombinerEii[];
++EXPORT_SYMBOL(_ZN10Classifier19finish_expr_subtreeER6VectorIiENS_8CombinerEii);
++extern char _ZN10Classifier19length_checked_pushEP6Packet[];
++EXPORT_SYMBOL(_ZN10Classifier19length_checked_pushEP6Packet);
++extern char _ZN10Classifier19negate_expr_subtreeER6VectorIiE[];
++EXPORT_SYMBOL(_ZN10Classifier19negate_expr_subtreeER6VectorIiE);
++extern char _ZN10Classifier20remove_unused_statesEv[];
++EXPORT_SYMBOL(_ZN10Classifier20remove_unused_statesEv);
++extern char _ZN10Classifier21bubble_sort_and_exprsEi[];
++EXPORT_SYMBOL(_ZN10Classifier21bubble_sort_and_exprsEi);
++extern char _ZN10Classifier21redirect_expr_subtreeEiiii[];
++EXPORT_SYMBOL(_ZN10Classifier21redirect_expr_subtreeEiiii);
++extern char _ZN10Classifier25combine_compatible_statesEv[];
++EXPORT_SYMBOL(_ZN10Classifier25combine_compatible_statesEv);
++extern char _ZN10Classifier4Expr4flipEv[];
++EXPORT_SYMBOL(_ZN10Classifier4Expr4flipEv);
++extern char _ZN10Classifier4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN10Classifier4pushEiP6Packet);
++extern char _ZN10Classifier8add_exprER6VectorIiERKNS_4ExprE[];
++EXPORT_SYMBOL(_ZN10Classifier8add_exprER6VectorIiERKNS_4ExprE);
++extern char _ZN10Classifier8add_exprER6VectorIiEijj[];
++EXPORT_SYMBOL(_ZN10Classifier8add_exprER6VectorIiEijj);
++extern char _ZN10Classifier9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10Classifier9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN10ClassifierC1Ev[];
++EXPORT_SYMBOL(_ZN10ClassifierC1Ev);
++extern char _ZN10ClassifierC2Ev[];
++EXPORT_SYMBOL(_ZN10ClassifierC2Ev);
++extern char _ZN10ClassifierD0Ev[];
++EXPORT_SYMBOL(_ZN10ClassifierD0Ev);
++extern char _ZN10ClassifierD1Ev[];
++EXPORT_SYMBOL(_ZN10ClassifierD1Ev);
++extern char _ZN10ClassifierD2Ev[];
++EXPORT_SYMBOL(_ZN10ClassifierD2Ev);
++extern char _ZN6VectorIN10Classifier4ExprEE5eraseEPS1_S3_[];
++EXPORT_SYMBOL(_ZN6VectorIN10Classifier4ExprEE5eraseEPS1_S3_);
++extern char _ZN6VectorIN10Classifier4ExprEE7reserveEi[];
++EXPORT_SYMBOL(_ZN6VectorIN10Classifier4ExprEE7reserveEi);
++extern char _ZN6VectorIN10Classifier4ExprEED1Ev[];
++EXPORT_SYMBOL(_ZN6VectorIN10Classifier4ExprEED1Ev);
++extern char _ZN6VectorIiE6assignEiRKi[];
++EXPORT_SYMBOL(_ZN6VectorIiE6assignEiRKi);
++extern char _ZN6VectorIiE6resizeEiRKi[];
++EXPORT_SYMBOL(_ZN6VectorIiE6resizeEiRKi);
++extern char _ZN6VectorIiE7reserveEi[];
++EXPORT_SYMBOL(_ZN6VectorIiE7reserveEi);
++extern char _ZN6VectorIiEC1ERKS0_[];
++EXPORT_SYMBOL(_ZN6VectorIiEC1ERKS0_);
++extern char _ZN6VectorIiED1Ev[];
++EXPORT_SYMBOL(_ZN6VectorIiED1Ev);
++extern char _ZN6VectorIiEaSERKS0_[];
++EXPORT_SYMBOL(_ZN6VectorIiEaSERKS0_);
++extern char _ZNK10Classifier10class_nameEv[];
++EXPORT_SYMBOL(_ZNK10Classifier10class_nameEv);
++extern char _ZNK10Classifier10port_countEv[];
++EXPORT_SYMBOL(_ZNK10Classifier10port_countEv);
++extern char _ZNK10Classifier10processingEv[];
++EXPORT_SYMBOL(_ZNK10Classifier10processingEv);
++extern char _ZNK10Classifier16count_inbranchesER6VectorIiE[];
++EXPORT_SYMBOL(_ZNK10Classifier16count_inbranchesER6VectorIiE);
++extern char _ZNK10Classifier18DominatorOptimizer17find_predecessorsEiR6VectorIiE[];
++EXPORT_SYMBOL(_ZNK10Classifier18DominatorOptimizer17find_predecessorsEiR6VectorIiE);
++extern char _ZNK10Classifier4Expr10compatibleERKS0_[];
++EXPORT_SYMBOL(_ZNK10Classifier4Expr10compatibleERKS0_);
++extern char _ZNK10Classifier4Expr11implies_notERKS0_[];
++EXPORT_SYMBOL(_ZNK10Classifier4Expr11implies_notERKS0_);
++extern char _ZNK10Classifier4Expr11not_impliesERKS0_[];
++EXPORT_SYMBOL(_ZNK10Classifier4Expr11not_impliesERKS0_);
++extern char _ZNK10Classifier4Expr15not_implies_notERKS0_[];
++EXPORT_SYMBOL(_ZNK10Classifier4Expr15not_implies_notERKS0_);
++extern char _ZNK10Classifier4Expr1sEv[];
++EXPORT_SYMBOL(_ZNK10Classifier4Expr1sEv);
++extern char _ZNK10Classifier4Expr7impliesERKS0_[];
++EXPORT_SYMBOL(_ZNK10Classifier4Expr7impliesERKS0_);
++extern char _ZNK10Classifier4Expr9flippableEv[];
++EXPORT_SYMBOL(_ZNK10Classifier4Expr9flippableEv);
++extern char _ZNK10Classifier5flagsEv[];
++EXPORT_SYMBOL(_ZNK10Classifier5flagsEv);
++extern char _ZTV10Classifier[];
++EXPORT_SYMBOL(_ZTV10Classifier);
++extern char _ZlsR11StringAccumRKN10Classifier4ExprE[];
++EXPORT_SYMBOL(_ZlsR11StringAccumRKN10Classifier4ExprE);
++extern char _Z12init_clickfsv[];
++EXPORT_SYMBOL(_Z12init_clickfsv);
++extern char _Z15cleanup_clickfsv[];
++EXPORT_SYMBOL(_Z15cleanup_clickfsv);
++extern char _Z25click_new_file_operationsv[];
++EXPORT_SYMBOL(_Z25click_new_file_operationsv);
++extern char _ZN12CompareBlock12add_handlersEv[];
++EXPORT_SYMBOL(_ZN12CompareBlock12add_handlersEv);
++extern char _ZN12CompareBlock19thresh_read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN12CompareBlock19thresh_read_handlerEP7ElementPv);
++extern char _ZN12CompareBlock20thresh_write_handlerERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12CompareBlock20thresh_write_handlerERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN12CompareBlock23fwd_weight_read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN12CompareBlock23fwd_weight_read_handlerEP7ElementPv);
++extern char _ZN12CompareBlock23rev_weight_read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN12CompareBlock23rev_weight_read_handlerEP7ElementPv);
++extern char _ZN12CompareBlock24fwd_weight_write_handlerERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12CompareBlock24fwd_weight_write_handlerERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN12CompareBlock24rev_weight_write_handlerERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12CompareBlock24rev_weight_write_handlerERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN12CompareBlock4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN12CompareBlock4pushEiP6Packet);
++extern char _ZN12CompareBlock9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12CompareBlock9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12CompareBlockC1Ev[];
++EXPORT_SYMBOL(_ZN12CompareBlockC1Ev);
++extern char _ZN12CompareBlockC2Ev[];
++EXPORT_SYMBOL(_ZN12CompareBlockC2Ev);
++extern char _ZN12CompareBlockD0Ev[];
++EXPORT_SYMBOL(_ZN12CompareBlockD0Ev);
++extern char _ZN12CompareBlockD1Ev[];
++EXPORT_SYMBOL(_ZN12CompareBlockD1Ev);
++extern char _ZN12CompareBlockD2Ev[];
++EXPORT_SYMBOL(_ZN12CompareBlockD2Ev);
++extern char _ZNK12CompareBlock10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12CompareBlock10class_nameEv);
++extern char _ZNK12CompareBlock10port_countEv[];
++EXPORT_SYMBOL(_ZNK12CompareBlock10port_countEv);
++extern char _ZNK12CompareBlock10processingEv[];
++EXPORT_SYMBOL(_ZNK12CompareBlock10processingEv);
++extern char _ZTV12CompareBlock[];
++EXPORT_SYMBOL(_ZTV12CompareBlock);
++extern char _Z17click_init_configv[];
++EXPORT_SYMBOL(_Z17click_init_configv);
++extern char _Z20click_cleanup_configv[];
++EXPORT_SYMBOL(_Z20click_cleanup_configv);
++extern char _ZN21LinuxModuleLexerExtra7requireE6StringP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN21LinuxModuleLexerExtra7requireE6StringP12ErrorHandler);
++extern char _ZN21LinuxModuleLexerExtraD0Ev[];
++EXPORT_SYMBOL(_ZN21LinuxModuleLexerExtraD0Ev);
++extern char _ZN21LinuxModuleLexerExtraD1Ev[];
++EXPORT_SYMBOL(_ZN21LinuxModuleLexerExtraD1Ev);
++extern char _ZTV21LinuxModuleLexerExtra[];
++EXPORT_SYMBOL(_ZTV21LinuxModuleLexerExtra);
++extern char click_add_element_type[];
++EXPORT_SYMBOL(click_add_element_type);
++extern char click_config_generation[];
++EXPORT_SYMBOL(click_config_generation);
++extern char click_remove_element_type[];
++EXPORT_SYMBOL(click_remove_element_type);
++extern char _Z10cp_elementRK6StringP6RouterP12ErrorHandler[];
++EXPORT_SYMBOL(_Z10cp_elementRK6StringP6RouterP12ErrorHandler);
++extern char _Z10cp_elementRK6StringP7ElementP12ErrorHandler[];
++EXPORT_SYMBOL(_Z10cp_elementRK6StringP7ElementP12ErrorHandler);
++extern char _Z10cp_handlerRK6StringiPP7ElementPPK7HandlerS3_P12ErrorHandler[];
++EXPORT_SYMBOL(_Z10cp_handlerRK6StringiPP7ElementPPK7HandlerS3_P12ErrorHandler);
++extern char _Z10cp_integerPKcS0_iPi[];
++EXPORT_SYMBOL(_Z10cp_integerPKcS0_iPi);
++extern char _Z10cp_integerPKcS0_iPj[];
++EXPORT_SYMBOL(_Z10cp_integerPKcS0_iPj);
++extern char _Z10cp_integerPKcS0_iPx[];
++EXPORT_SYMBOL(_Z10cp_integerPKcS0_iPx);
++extern char _Z10cp_integerPKcS0_iPy[];
++EXPORT_SYMBOL(_Z10cp_integerPKcS0_iPy);
++extern char _Z10cp_integerRK6StringiPi[];
++EXPORT_SYMBOL(_Z10cp_integerRK6StringiPi);
++extern char _Z10cp_integerRK6StringiPj[];
++EXPORT_SYMBOL(_Z10cp_integerRK6StringiPj);
++extern char _Z10cp_integerRK6StringiPx[];
++EXPORT_SYMBOL(_Z10cp_integerRK6StringiPx);
++extern char _Z10cp_integerRK6StringiPy[];
++EXPORT_SYMBOL(_Z10cp_integerRK6StringiPy);
++extern char _Z10cp_is_wordRK6String[];
++EXPORT_SYMBOL(_Z10cp_is_wordRK6String);
++extern char _Z10cp_keywordRK6StringPS_S2_[];
++EXPORT_SYMBOL(_Z10cp_keywordRK6StringPS_S2_);
++extern char _Z10cp_unquoteRK6String[];
++EXPORT_SYMBOL(_Z10cp_unquoteRK6String);
++extern char _Z11cp_spacevecRK6StringR6VectorIS_E[];
++EXPORT_SYMBOL(_Z11cp_spacevecRK6StringR6VectorIS_E);
++extern char _Z11cp_unargvecRK6VectorI6StringE[];
++EXPORT_SYMBOL(_Z11cp_unargvecRK6VectorI6StringE);
++extern char _Z11cp_va_parseRK6StringP7ElementP12ErrorHandlerz[];
++EXPORT_SYMBOL(_Z11cp_va_parseRK6StringP7ElementP12ErrorHandlerz);
++extern char _Z11cp_va_parseRK6VectorI6StringEP7ElementP12ErrorHandlerz[];
++EXPORT_SYMBOL(_Z11cp_va_parseRK6VectorI6StringEP7ElementP12ErrorHandlerz);
++extern char _Z12cp_bandwidthRK6StringPj[];
++EXPORT_SYMBOL(_Z12cp_bandwidthRK6StringPj);
++extern char _Z12cp_eat_spaceR6String[];
++EXPORT_SYMBOL(_Z12cp_eat_spaceR6String);
++extern char _Z12cp_ip_prefixRK6StringP9IPAddressS3_P7Element[];
++EXPORT_SYMBOL(_Z12cp_ip_prefixRK6StringP9IPAddressS3_P7Element);
++extern char _Z12cp_ip_prefixRK6StringP9IPAddressS3_bP7Element[];
++EXPORT_SYMBOL(_Z12cp_ip_prefixRK6StringP9IPAddressS3_bP7Element);
++extern char _Z12cp_ip_prefixRK6StringPhS2_P7Element[];
++EXPORT_SYMBOL(_Z12cp_ip_prefixRK6StringPhS2_P7Element);
++extern char _Z12cp_ip_prefixRK6StringPhS2_bP7Element[];
++EXPORT_SYMBOL(_Z12cp_ip_prefixRK6StringPhS2_bP7Element);
++extern char _Z12cp_uncommentRK6String[];
++EXPORT_SYMBOL(_Z12cp_uncommentRK6String);
++extern char _Z12cp_va_kparseRK6StringP7ElementP12ErrorHandlerz[];
++EXPORT_SYMBOL(_Z12cp_va_kparseRK6StringP7ElementP12ErrorHandlerz);
++extern char _Z12cp_va_kparseRK6VectorI6StringEP7ElementP12ErrorHandlerz[];
++EXPORT_SYMBOL(_Z12cp_va_kparseRK6VectorI6StringEP7ElementP12ErrorHandlerz);
++extern char _Z13cp_ip_addressRK6StringP9IPAddressP7Element[];
++EXPORT_SYMBOL(_Z13cp_ip_addressRK6StringP9IPAddressP7Element);
++extern char _Z13cp_ip_addressRK6StringPhP7Element[];
++EXPORT_SYMBOL(_Z13cp_ip_addressRK6StringPhP7Element);
++extern char _Z13cp_seconds_asRK6StringiPj[];
++EXPORT_SYMBOL(_Z13cp_seconds_asRK6StringiPj);
++extern char _Z13cp_skip_spacePKcS0_[];
++EXPORT_SYMBOL(_Z13cp_skip_spacePKcS0_);
++extern char _Z13cp_unspacevecPK6StringS1_[];
++EXPORT_SYMBOL(_Z13cp_unspacevecPK6StringS1_);
++extern char _Z14cp_is_click_idRK6String[];
++EXPORT_SYMBOL(_Z14cp_is_click_idRK6String);
++extern char _Z14cp_tcpudp_portRK6StringiPtP7Element[];
++EXPORT_SYMBOL(_Z14cp_tcpudp_portRK6StringiPtP7Element);
++extern char _Z15cp_handler_nameRK6StringPP7ElementPS_S3_P12ErrorHandler[];
++EXPORT_SYMBOL(_Z15cp_handler_nameRK6StringPP7ElementPS_S3_P12ErrorHandler);
++extern char _Z15cp_pop_spacevecR6String[];
++EXPORT_SYMBOL(_Z15cp_pop_spacevecR6String);
++extern char _Z15cp_unparse_boolb[];
++EXPORT_SYMBOL(_Z15cp_unparse_boolb);
++extern char _Z16cp_unparse_real2ii[];
++EXPORT_SYMBOL(_Z16cp_unparse_real2ii);
++extern char _Z16cp_unparse_real2ji[];
++EXPORT_SYMBOL(_Z16cp_unparse_real2ji);
++extern char _Z16cp_unparse_real2xi[];
++EXPORT_SYMBOL(_Z16cp_unparse_real2xi);
++extern char _Z16cp_unparse_real2yi[];
++EXPORT_SYMBOL(_Z16cp_unparse_real2yi);
++extern char _Z17cp_unparse_real10ii[];
++EXPORT_SYMBOL(_Z17cp_unparse_real10ii);
++extern char _Z17cp_unparse_real10ji[];
++EXPORT_SYMBOL(_Z17cp_unparse_real10ji);
++extern char _Z17cp_va_space_parseRK6StringP7ElementP12ErrorHandlerz[];
++EXPORT_SYMBOL(_Z17cp_va_space_parseRK6StringP7ElementP12ErrorHandlerz);
++extern char _Z18cp_ip_address_listRK6StringP6VectorI9IPAddressEP7Element[];
++EXPORT_SYMBOL(_Z18cp_ip_address_listRK6StringP6VectorI9IPAddressEP7Element);
++extern char _Z18cp_va_space_kparseRK6StringP7ElementP12ErrorHandlerz[];
++EXPORT_SYMBOL(_Z18cp_va_space_kparseRK6StringP7ElementP12ErrorHandlerz);
++extern char _Z19cp_assign_argumentsRK6VectorI6StringEPKS0_S5_PS1_[];
++EXPORT_SYMBOL(_Z19cp_assign_argumentsRK6VectorI6StringEPKS0_S5_PS1_);
++extern char _Z19cp_ethernet_addressRK6StringP12EtherAddressP7Element[];
++EXPORT_SYMBOL(_Z19cp_ethernet_addressRK6StringP12EtherAddressP7Element);
++extern char _Z19cp_ethernet_addressRK6StringPhP7Element[];
++EXPORT_SYMBOL(_Z19cp_ethernet_addressRK6StringPhP7Element);
++extern char _Z19cp_register_argtypePKcS0_iPFvP8cp_valueRK6StringP12ErrorHandlerS0_P7ElementEPFvS2_S9_EPv[];
++EXPORT_SYMBOL(_Z19cp_register_argtypePKcS0_iPFvP8cp_valueRK6StringP12ErrorHandlerS0_P7ElementEPFvS2_S9_EPv);
++extern char _Z19cp_seconds_as_microRK6StringPj[];
++EXPORT_SYMBOL(_Z19cp_seconds_as_microRK6StringPj);
++extern char _Z19cp_seconds_as_milliRK6StringPj[];
++EXPORT_SYMBOL(_Z19cp_seconds_as_milliRK6StringPj);
++extern char _Z19cp_unparse_intervalRK7timeval[];
++EXPORT_SYMBOL(_Z19cp_unparse_intervalRK7timeval);
++extern char _Z19cp_unparse_intervalRK9Timestamp[];
++EXPORT_SYMBOL(_Z19cp_unparse_intervalRK9Timestamp);
++extern char _Z19cp_va_parse_keywordRK6StringP7ElementP12ErrorHandlerz[];
++EXPORT_SYMBOL(_Z19cp_va_parse_keywordRK6StringP7ElementP12ErrorHandlerz);
++extern char _Z20cp_process_backslashPKcS0_R11StringAccum[];
++EXPORT_SYMBOL(_Z20cp_process_backslashPKcS0_R11StringAccum);
++extern char _Z20cp_unparse_bandwidthj[];
++EXPORT_SYMBOL(_Z20cp_unparse_bandwidthj);
++extern char _Z20cp_va_kparse_keywordRK6StringP7ElementP12ErrorHandlerz[];
++EXPORT_SYMBOL(_Z20cp_va_kparse_keywordRK6StringP7ElementP12ErrorHandlerz);
++extern char _Z20cp_va_static_cleanupv[];
++EXPORT_SYMBOL(_Z20cp_va_static_cleanupv);
++extern char _Z21cp_skip_comment_spacePKcS0_[];
++EXPORT_SYMBOL(_Z21cp_skip_comment_spacePKcS0_);
++extern char _Z21cp_unregister_argtypePKc[];
++EXPORT_SYMBOL(_Z21cp_unregister_argtypePKc);
++extern char _Z23cp_unparse_microsecondsj[];
++EXPORT_SYMBOL(_Z23cp_unparse_microsecondsj);
++extern char _Z23cp_unparse_millisecondsj[];
++EXPORT_SYMBOL(_Z23cp_unparse_millisecondsj);
++extern char _Z23cp_va_static_initializev[];
++EXPORT_SYMBOL(_Z23cp_va_static_initializev);
++extern char _Z27cp_va_parse_remove_keywordsR6VectorI6StringEiP7ElementP12ErrorHandlerz[];
++EXPORT_SYMBOL(_Z27cp_va_parse_remove_keywordsR6VectorI6StringEiP7ElementP12ErrorHandlerz);
++extern char _Z28cp_extend_stringlist_argtypePKcz[];
++EXPORT_SYMBOL(_Z28cp_extend_stringlist_argtypePKcz);
++extern char _Z28cp_va_kparse_remove_keywordsR6VectorI6StringEP7ElementP12ErrorHandlerz[];
++EXPORT_SYMBOL(_Z28cp_va_kparse_remove_keywordsR6VectorI6StringEP7ElementP12ErrorHandlerz);
++extern char _Z30cp_register_stringlist_argtypePKcS0_i[];
++EXPORT_SYMBOL(_Z30cp_register_stringlist_argtypePKcS0_i);
++extern char _Z7cp_boolRK6StringPb[];
++EXPORT_SYMBOL(_Z7cp_boolRK6StringPb);
++extern char _Z7cp_timeRK6StringP7timeval[];
++EXPORT_SYMBOL(_Z7cp_timeRK6StringP7timeval);
++extern char _Z7cp_timeRK6StringP9Timestamp[];
++EXPORT_SYMBOL(_Z7cp_timeRK6StringP9Timestamp);
++extern char _Z7cp_wordRK6StringPS_S2_[];
++EXPORT_SYMBOL(_Z7cp_wordRK6StringPS_S2_);
++extern char _Z8cp_quoteRK6Stringb[];
++EXPORT_SYMBOL(_Z8cp_quoteRK6Stringb);
++extern char _Z8cp_real2RK6StringiPi[];
++EXPORT_SYMBOL(_Z8cp_real2RK6StringiPi);
++extern char _Z8cp_real2RK6StringiPj[];
++EXPORT_SYMBOL(_Z8cp_real2RK6StringiPj);
++extern char _Z9cp_argvecRK6StringR6VectorIS_E[];
++EXPORT_SYMBOL(_Z9cp_argvecRK6StringR6VectorIS_E);
++extern char _Z9cp_real10RK6StringiPi[];
++EXPORT_SYMBOL(_Z9cp_real10RK6StringiPi);
++extern char _Z9cp_real10RK6StringiPj[];
++EXPORT_SYMBOL(_Z9cp_real10RK6StringiPj);
++extern char _Z9cp_real10RK6StringiPjS2_[];
++EXPORT_SYMBOL(_Z9cp_real10RK6StringiPjS2_);
++extern char _Z9cp_real10RK6StringiiPj[];
++EXPORT_SYMBOL(_Z9cp_real10RK6StringiiPj);
++extern char _Z9cp_real10RK6StringiiPjS2_[];
++EXPORT_SYMBOL(_Z9cp_real10RK6StringiiPjS2_);
++extern char _Z9cp_stringRK6StringPS_S2_[];
++EXPORT_SYMBOL(_Z9cp_stringRK6StringPS_S2_);
++extern char _ZN19_GLOBAL__N_cp_errno10CpVaHelper14develop_valuesEPcP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN19_GLOBAL__N_cp_errno10CpVaHelper14develop_valuesEPcP12ErrorHandler);
++extern char _ZN19_GLOBAL__N_cp_errno10CpVaHelper15develop_kvaluesEPcP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN19_GLOBAL__N_cp_errno10CpVaHelper15develop_kvaluesEPcP12ErrorHandler);
++extern char _ZN19_GLOBAL__N_cp_errno10CpVaHelper15parse_argumentsEPKcP7ElementP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN19_GLOBAL__N_cp_errno10CpVaHelper15parse_argumentsEPKcP7ElementP12ErrorHandler);
++extern char _ZN19_GLOBAL__N_cp_errno10CpVaHelper16assign_argumentsERK6VectorI6StringEPKcP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN19_GLOBAL__N_cp_errno10CpVaHelper16assign_argumentsERK6VectorI6StringEPKcP12ErrorHandler);
++extern char _ZN19_GLOBAL__N_cp_errno10CpVaHelper17add_keyword_errorER11StringAccumiRK6StringPKci[];
++EXPORT_SYMBOL(_ZN19_GLOBAL__N_cp_errno10CpVaHelper17add_keyword_errorER11StringAccumiRK6StringPKci);
++extern char _ZN19_GLOBAL__N_cp_errno10CpVaHelper20finish_keyword_errorEPKcS2_P12ErrorHandler[];
++EXPORT_SYMBOL(_ZN19_GLOBAL__N_cp_errno10CpVaHelper20finish_keyword_errorEPKcS2_P12ErrorHandler);
++extern char _ZN19_GLOBAL__N_cp_errno10CpVaHelper23assign_keyword_argumentERK6String[];
++EXPORT_SYMBOL(_ZN19_GLOBAL__N_cp_errno10CpVaHelper23assign_keyword_argumentERK6String);
++extern char _ZN19_GLOBAL__N_cp_errno10CpVaHelperC1EP8cp_valueib[];
++EXPORT_SYMBOL(_ZN19_GLOBAL__N_cp_errno10CpVaHelperC1EP8cp_valueib);
++extern char _ZN19_GLOBAL__N_cp_errno10CpVaHelperC2EP8cp_valueib[];
++EXPORT_SYMBOL(_ZN19_GLOBAL__N_cp_errno10CpVaHelperC2EP8cp_valueib);
++extern char cpArgument[];
++EXPORT_SYMBOL(cpArgument);
++extern char cpArguments[];
++EXPORT_SYMBOL(cpArguments);
++extern char cpBandwidth[];
++EXPORT_SYMBOL(cpBandwidth);
++extern char cpBool[];
++EXPORT_SYMBOL(cpBool);
++extern char cpByte[];
++EXPORT_SYMBOL(cpByte);
++extern char cpConfirmKeywords[];
++EXPORT_SYMBOL(cpConfirmKeywords);
++extern char cpDesCblock[];
++EXPORT_SYMBOL(cpDesCblock);
++extern char cpElement[];
++EXPORT_SYMBOL(cpElement);
++extern char cpEnd[];
++EXPORT_SYMBOL(cpEnd);
++extern char cpEtherAddress[];
++EXPORT_SYMBOL(cpEtherAddress);
++extern char cpEthernetAddress[];
++EXPORT_SYMBOL(cpEthernetAddress);
++extern char cpFilename[];
++EXPORT_SYMBOL(cpFilename);
++extern char cpHandlerCallPtrRead[];
++EXPORT_SYMBOL(cpHandlerCallPtrRead);
++extern char cpHandlerCallPtrWrite[];
++EXPORT_SYMBOL(cpHandlerCallPtrWrite);
++extern char cpHandlerCallRead[];
++EXPORT_SYMBOL(cpHandlerCallRead);
++extern char cpHandlerCallWrite[];
++EXPORT_SYMBOL(cpHandlerCallWrite);
++extern char cpHandlerName[];
++EXPORT_SYMBOL(cpHandlerName);
++extern char cpIP6Address[];
++EXPORT_SYMBOL(cpIP6Address);
++extern char cpIP6AddressOrPrefix[];
++EXPORT_SYMBOL(cpIP6AddressOrPrefix);
++extern char cpIP6Prefix[];
++EXPORT_SYMBOL(cpIP6Prefix);
++extern char cpIPAddress[];
++EXPORT_SYMBOL(cpIPAddress);
++extern char cpIPAddressList[];
++EXPORT_SYMBOL(cpIPAddressList);
++extern char cpIPAddressOrPrefix[];
++EXPORT_SYMBOL(cpIPAddressOrPrefix);
++extern char cpIPPrefix[];
++EXPORT_SYMBOL(cpIPPrefix);
++extern char cpIgnore[];
++EXPORT_SYMBOL(cpIgnore);
++extern char cpIgnoreRest[];
++EXPORT_SYMBOL(cpIgnoreRest);
++extern char cpInteger[];
++EXPORT_SYMBOL(cpInteger);
++extern char cpInteger64[];
++EXPORT_SYMBOL(cpInteger64);
++extern char cpInterval[];
++EXPORT_SYMBOL(cpInterval);
++extern char cpKeyword[];
++EXPORT_SYMBOL(cpKeyword);
++extern char cpKeywords[];
++EXPORT_SYMBOL(cpKeywords);
++extern char cpMandatoryKeywords[];
++EXPORT_SYMBOL(cpMandatoryKeywords);
++extern char cpNamedInteger[];
++EXPORT_SYMBOL(cpNamedInteger);
++extern char cpOptional[];
++EXPORT_SYMBOL(cpOptional);
++extern char cpReadHandlerCall[];
++EXPORT_SYMBOL(cpReadHandlerCall);
++extern char cpReal10[];
++EXPORT_SYMBOL(cpReal10);
++extern char cpSeconds[];
++EXPORT_SYMBOL(cpSeconds);
++extern char cpSecondsAsMicro[];
++EXPORT_SYMBOL(cpSecondsAsMicro);
++extern char cpSecondsAsMilli[];
++EXPORT_SYMBOL(cpSecondsAsMilli);
++extern char cpShort[];
++EXPORT_SYMBOL(cpShort);
++extern char cpString[];
++EXPORT_SYMBOL(cpString);
++extern char cpTCPPort[];
++EXPORT_SYMBOL(cpTCPPort);
++extern char cpTimestamp[];
++EXPORT_SYMBOL(cpTimestamp);
++extern char cpTimeval[];
++EXPORT_SYMBOL(cpTimeval);
++extern char cpUDPPort[];
++EXPORT_SYMBOL(cpUDPPort);
++extern char cpUnsigned[];
++EXPORT_SYMBOL(cpUnsigned);
++extern char cpUnsigned64[];
++EXPORT_SYMBOL(cpUnsigned64);
++extern char cpUnsignedReal10[];
++EXPORT_SYMBOL(cpUnsignedReal10);
++extern char cpUnsignedReal2[];
++EXPORT_SYMBOL(cpUnsignedReal2);
++extern char cpUnsignedShort[];
++EXPORT_SYMBOL(cpUnsignedShort);
++extern char cpWord[];
++EXPORT_SYMBOL(cpWord);
++extern char cpWriteHandlerCall[];
++EXPORT_SYMBOL(cpWriteHandlerCall);
++extern char cp_errno[];
++EXPORT_SYMBOL(cp_errno);
++extern char _ZN7Counter10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7Counter10initializeEP12ErrorHandler);
++extern char _ZN7Counter12add_handlersEv[];
++EXPORT_SYMBOL(_ZN7Counter12add_handlersEv);
++extern char _ZN7Counter12read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN7Counter12read_handlerEP7ElementPv);
++extern char _ZN7Counter13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN7Counter13simple_actionEP6Packet);
++extern char _ZN7Counter13write_handlerERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7Counter13write_handlerERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN7Counter5llrpcEjPv[];
++EXPORT_SYMBOL(_ZN7Counter5llrpcEjPv);
++extern char _ZN7Counter5resetEv[];
++EXPORT_SYMBOL(_ZN7Counter5resetEv);
++extern char _ZN7Counter9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7Counter9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN7CounterC1Ev[];
++EXPORT_SYMBOL(_ZN7CounterC1Ev);
++extern char _ZN7CounterC2Ev[];
++EXPORT_SYMBOL(_ZN7CounterC2Ev);
++extern char _ZN7CounterD0Ev[];
++EXPORT_SYMBOL(_ZN7CounterD0Ev);
++extern char _ZN7CounterD1Ev[];
++EXPORT_SYMBOL(_ZN7CounterD1Ev);
++extern char _ZN7CounterD2Ev[];
++EXPORT_SYMBOL(_ZN7CounterD2Ev);
++extern char _ZNK7Counter10class_nameEv[];
++EXPORT_SYMBOL(_ZNK7Counter10class_nameEv);
++extern char _ZNK7Counter10port_countEv[];
++EXPORT_SYMBOL(_ZNK7Counter10port_countEv);
++extern char _ZNK7Counter10processingEv[];
++EXPORT_SYMBOL(_ZNK7Counter10processingEv);
++extern char _ZTV7Counter[];
++EXPORT_SYMBOL(_ZTV7Counter);
++extern char _ZN8CPUQueue10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8CPUQueue10initializeEP12ErrorHandler);
++extern char _ZN8CPUQueue12add_handlersEv[];
++EXPORT_SYMBOL(_ZN8CPUQueue12add_handlersEv);
++extern char _ZN8CPUQueue12read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN8CPUQueue12read_handlerEP7ElementPv);
++extern char _ZN8CPUQueue4pullEi[];
++EXPORT_SYMBOL(_ZN8CPUQueue4pullEi);
++extern char _ZN8CPUQueue4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN8CPUQueue4pushEiP6Packet);
++extern char _ZN8CPUQueue7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN8CPUQueue7cleanupEN7Element12CleanupStageE);
++extern char _ZN8CPUQueue9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8CPUQueue9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN8CPUQueueC1Ev[];
++EXPORT_SYMBOL(_ZN8CPUQueueC1Ev);
++extern char _ZN8CPUQueueC2Ev[];
++EXPORT_SYMBOL(_ZN8CPUQueueC2Ev);
++extern char _ZN8CPUQueueD0Ev[];
++EXPORT_SYMBOL(_ZN8CPUQueueD0Ev);
++extern char _ZN8CPUQueueD1Ev[];
++EXPORT_SYMBOL(_ZN8CPUQueueD1Ev);
++extern char _ZN8CPUQueueD2Ev[];
++EXPORT_SYMBOL(_ZN8CPUQueueD2Ev);
++extern char _ZNK8CPUQueue10class_nameEv[];
++EXPORT_SYMBOL(_ZNK8CPUQueue10class_nameEv);
++extern char _ZNK8CPUQueue10port_countEv[];
++EXPORT_SYMBOL(_ZNK8CPUQueue10port_countEv);
++extern char _ZNK8CPUQueue10processingEv[];
++EXPORT_SYMBOL(_ZNK8CPUQueue10processingEv);
++extern char _ZTV8CPUQueue[];
++EXPORT_SYMBOL(_ZTV8CPUQueue);
++extern char _ZN9CPUSwitch4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN9CPUSwitch4pushEiP6Packet);
++extern char _ZN9CPUSwitch9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN9CPUSwitch9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN9CPUSwitchC1Ev[];
++EXPORT_SYMBOL(_ZN9CPUSwitchC1Ev);
++extern char _ZN9CPUSwitchC2Ev[];
++EXPORT_SYMBOL(_ZN9CPUSwitchC2Ev);
++extern char _ZN9CPUSwitchD0Ev[];
++EXPORT_SYMBOL(_ZN9CPUSwitchD0Ev);
++extern char _ZN9CPUSwitchD1Ev[];
++EXPORT_SYMBOL(_ZN9CPUSwitchD1Ev);
++extern char _ZN9CPUSwitchD2Ev[];
++EXPORT_SYMBOL(_ZN9CPUSwitchD2Ev);
++extern char _ZNK9CPUSwitch10class_nameEv[];
++EXPORT_SYMBOL(_ZNK9CPUSwitch10class_nameEv);
++extern char _ZNK9CPUSwitch10port_countEv[];
++EXPORT_SYMBOL(_ZNK9CPUSwitch10port_countEv);
++extern char _ZNK9CPUSwitch10processingEv[];
++EXPORT_SYMBOL(_ZNK9CPUSwitch10processingEv);
++extern char _ZTV9CPUSwitch[];
++EXPORT_SYMBOL(_ZTV9CPUSwitch);
++extern char _ZN10CrapFilter4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN10CrapFilter4pushEiP6Packet);
++extern char _ZN10CrapFilterC1Ev[];
++EXPORT_SYMBOL(_ZN10CrapFilterC1Ev);
++extern char _ZN10CrapFilterC2Ev[];
++EXPORT_SYMBOL(_ZN10CrapFilterC2Ev);
++extern char _ZN10CrapFilterD0Ev[];
++EXPORT_SYMBOL(_ZN10CrapFilterD0Ev);
++extern char _ZN10CrapFilterD1Ev[];
++EXPORT_SYMBOL(_ZN10CrapFilterD1Ev);
++extern char _ZN10CrapFilterD2Ev[];
++EXPORT_SYMBOL(_ZN10CrapFilterD2Ev);
++extern char _ZNK10CrapFilter10class_nameEv[];
++EXPORT_SYMBOL(_ZNK10CrapFilter10class_nameEv);
++extern char _ZNK10CrapFilter10port_countEv[];
++EXPORT_SYMBOL(_ZNK10CrapFilter10port_countEv);
++extern char _ZNK10CrapFilter10processingEv[];
++EXPORT_SYMBOL(_ZNK10CrapFilter10processingEv);
++extern char _ZTV10CrapFilter[];
++EXPORT_SYMBOL(_ZTV10CrapFilter);
++extern char _ZN11CiscyFilter10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11CiscyFilter10initializeEP12ErrorHandler);
++extern char _ZN11CiscyFilter4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN11CiscyFilter4pushEiP6Packet);
++extern char _ZN11CiscyFilterC1Ev[];
++EXPORT_SYMBOL(_ZN11CiscyFilterC1Ev);
++extern char _ZN11CiscyFilterC2Ev[];
++EXPORT_SYMBOL(_ZN11CiscyFilterC2Ev);
++extern char _ZN11CiscyFilterD0Ev[];
++EXPORT_SYMBOL(_ZN11CiscyFilterD0Ev);
++extern char _ZN11CiscyFilterD1Ev[];
++EXPORT_SYMBOL(_ZN11CiscyFilterD1Ev);
++extern char _ZN11CiscyFilterD2Ev[];
++EXPORT_SYMBOL(_ZN11CiscyFilterD2Ev);
++extern char _ZN6VectorIN11CiscyFilter4InsnEE7reserveEi[];
++EXPORT_SYMBOL(_ZN6VectorIN11CiscyFilter4InsnEE7reserveEi);
++extern char _ZN6VectorIN11CiscyFilter4InsnEED1Ev[];
++EXPORT_SYMBOL(_ZN6VectorIN11CiscyFilter4InsnEED1Ev);
++extern char _ZNK11CiscyFilter10class_nameEv[];
++EXPORT_SYMBOL(_ZNK11CiscyFilter10class_nameEv);
++extern char _ZNK11CiscyFilter10port_countEv[];
++EXPORT_SYMBOL(_ZNK11CiscyFilter10port_countEv);
++extern char _ZNK11CiscyFilter10processingEv[];
++EXPORT_SYMBOL(_ZNK11CiscyFilter10processingEv);
++extern char _ZTV11CiscyFilter[];
++EXPORT_SYMBOL(_ZTV11CiscyFilter);
++extern char _ZN10BpfyFilter10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10BpfyFilter10initializeEP12ErrorHandler);
++extern char _ZN10BpfyFilter4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN10BpfyFilter4pushEiP6Packet);
++extern char _ZN10BpfyFilterC1Ev[];
++EXPORT_SYMBOL(_ZN10BpfyFilterC1Ev);
++extern char _ZN10BpfyFilterC2Ev[];
++EXPORT_SYMBOL(_ZN10BpfyFilterC2Ev);
++extern char _ZN10BpfyFilterD0Ev[];
++EXPORT_SYMBOL(_ZN10BpfyFilterD0Ev);
++extern char _ZN10BpfyFilterD1Ev[];
++EXPORT_SYMBOL(_ZN10BpfyFilterD1Ev);
++extern char _ZN10BpfyFilterD2Ev[];
++EXPORT_SYMBOL(_ZN10BpfyFilterD2Ev);
++extern char _ZN6VectorIN10BpfyFilter4InsnEE7reserveEi[];
++EXPORT_SYMBOL(_ZN6VectorIN10BpfyFilter4InsnEE7reserveEi);
++extern char _ZN6VectorIN10BpfyFilter4InsnEED1Ev[];
++EXPORT_SYMBOL(_ZN6VectorIN10BpfyFilter4InsnEED1Ev);
++extern char _ZNK10BpfyFilter10class_nameEv[];
++EXPORT_SYMBOL(_ZNK10BpfyFilter10class_nameEv);
++extern char _ZNK10BpfyFilter10port_countEv[];
++EXPORT_SYMBOL(_ZNK10BpfyFilter10port_countEv);
++extern char _ZNK10BpfyFilter10processingEv[];
++EXPORT_SYMBOL(_ZNK10BpfyFilter10processingEv);
++extern char _ZTV10BpfyFilter[];
++EXPORT_SYMBOL(_ZTV10BpfyFilter);
++extern char update_crc[];
++EXPORT_SYMBOL(update_crc);
++extern char _ZN15CycleCountAccum12add_handlersEv[];
++EXPORT_SYMBOL(_ZN15CycleCountAccum12add_handlersEv);
++extern char _ZN15CycleCountAccum12read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN15CycleCountAccum12read_handlerEP7ElementPv);
++extern char _ZN15CycleCountAccum13reset_handlerERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN15CycleCountAccum13reset_handlerERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN15CycleCountAccum4pullEi[];
++EXPORT_SYMBOL(_ZN15CycleCountAccum4pullEi);
++extern char _ZN15CycleCountAccum4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN15CycleCountAccum4pushEiP6Packet);
++extern char _ZN15CycleCountAccumC1Ev[];
++EXPORT_SYMBOL(_ZN15CycleCountAccumC1Ev);
++extern char _ZN15CycleCountAccumC2Ev[];
++EXPORT_SYMBOL(_ZN15CycleCountAccumC2Ev);
++extern char _ZN15CycleCountAccumD0Ev[];
++EXPORT_SYMBOL(_ZN15CycleCountAccumD0Ev);
++extern char _ZN15CycleCountAccumD1Ev[];
++EXPORT_SYMBOL(_ZN15CycleCountAccumD1Ev);
++extern char _ZN15CycleCountAccumD2Ev[];
++EXPORT_SYMBOL(_ZN15CycleCountAccumD2Ev);
++extern char _ZNK15CycleCountAccum10class_nameEv[];
++EXPORT_SYMBOL(_ZNK15CycleCountAccum10class_nameEv);
++extern char _ZNK15CycleCountAccum10port_countEv[];
++EXPORT_SYMBOL(_ZNK15CycleCountAccum10port_countEv);
++extern char _ZNK15CycleCountAccum10processingEv[];
++EXPORT_SYMBOL(_ZNK15CycleCountAccum10processingEv);
++extern char _ZTV15CycleCountAccum[];
++EXPORT_SYMBOL(_ZTV15CycleCountAccum);
++extern char _ZN8DecIPTTL12add_handlersEv[];
++EXPORT_SYMBOL(_ZN8DecIPTTL12add_handlersEv);
++extern char _ZN8DecIPTTL13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN8DecIPTTL13simple_actionEP6Packet);
++extern char _ZN8DecIPTTL7drop_itEP6Packet[];
++EXPORT_SYMBOL(_ZN8DecIPTTL7drop_itEP6Packet);
++extern char _ZN8DecIPTTLC1Ev[];
++EXPORT_SYMBOL(_ZN8DecIPTTLC1Ev);
++extern char _ZN8DecIPTTLC2Ev[];
++EXPORT_SYMBOL(_ZN8DecIPTTLC2Ev);
++extern char _ZN8DecIPTTLD0Ev[];
++EXPORT_SYMBOL(_ZN8DecIPTTLD0Ev);
++extern char _ZN8DecIPTTLD1Ev[];
++EXPORT_SYMBOL(_ZN8DecIPTTLD1Ev);
++extern char _ZN8DecIPTTLD2Ev[];
++EXPORT_SYMBOL(_ZN8DecIPTTLD2Ev);
++extern char _ZNK8DecIPTTL10class_nameEv[];
++EXPORT_SYMBOL(_ZNK8DecIPTTL10class_nameEv);
++extern char _ZNK8DecIPTTL10port_countEv[];
++EXPORT_SYMBOL(_ZNK8DecIPTTL10port_countEv);
++extern char _ZNK8DecIPTTL10processingEv[];
++EXPORT_SYMBOL(_ZNK8DecIPTTL10processingEv);
++extern char _ZTV8DecIPTTL[];
++EXPORT_SYMBOL(_ZTV8DecIPTTL);
++extern char _ZN11DelayShaper10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11DelayShaper10initializeEP12ErrorHandler);
++extern char _ZN11DelayShaper10read_paramEP7ElementPv[];
++EXPORT_SYMBOL(_ZN11DelayShaper10read_paramEP7ElementPv);
++extern char _ZN11DelayShaper11write_paramERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11DelayShaper11write_paramERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN11DelayShaper12add_handlersEv[];
++EXPORT_SYMBOL(_ZN11DelayShaper12add_handlersEv);
++extern char _ZN11DelayShaper4castEPKc[];
++EXPORT_SYMBOL(_ZN11DelayShaper4castEPKc);
++extern char _ZN11DelayShaper4pullEi[];
++EXPORT_SYMBOL(_ZN11DelayShaper4pullEi);
++extern char _ZN11DelayShaper7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN11DelayShaper7cleanupEN7Element12CleanupStageE);
++extern char _ZN11DelayShaper9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11DelayShaper9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN11DelayShaper9run_timerEP5Timer[];
++EXPORT_SYMBOL(_ZN11DelayShaper9run_timerEP5Timer);
++extern char _ZN11DelayShaperC1Ev[];
++EXPORT_SYMBOL(_ZN11DelayShaperC1Ev);
++extern char _ZN11DelayShaperC2Ev[];
++EXPORT_SYMBOL(_ZN11DelayShaperC2Ev);
++extern char _ZN11DelayShaperD0Ev[];
++EXPORT_SYMBOL(_ZN11DelayShaperD0Ev);
++extern char _ZN11DelayShaperD1Ev[];
++EXPORT_SYMBOL(_ZN11DelayShaperD1Ev);
++extern char _ZN11DelayShaperD2Ev[];
++EXPORT_SYMBOL(_ZN11DelayShaperD2Ev);
++extern char _ZNK11DelayShaper10class_nameEv[];
++EXPORT_SYMBOL(_ZNK11DelayShaper10class_nameEv);
++extern char _ZNK11DelayShaper10port_countEv[];
++EXPORT_SYMBOL(_ZNK11DelayShaper10port_countEv);
++extern char _ZNK11DelayShaper10processingEv[];
++EXPORT_SYMBOL(_ZNK11DelayShaper10processingEv);
++extern char _ZNK9Timestamp3secEv[];
++EXPORT_SYMBOL(_ZNK9Timestamp3secEv);
++extern char _ZTV11DelayShaper[];
++EXPORT_SYMBOL(_ZTV11DelayShaper);
++extern char _ZThn60_N11DelayShaperD0Ev[];
++EXPORT_SYMBOL(_ZThn60_N11DelayShaperD0Ev);
++extern char _ZThn60_N11DelayShaperD1Ev[];
++EXPORT_SYMBOL(_ZThn60_N11DelayShaperD1Ev);
++extern char _ZN12DelayUnqueue10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12DelayUnqueue10initializeEP12ErrorHandler);
++extern char _ZN12DelayUnqueue10read_paramEP7ElementPv[];
++EXPORT_SYMBOL(_ZN12DelayUnqueue10read_paramEP7ElementPv);
++extern char _ZN12DelayUnqueue12add_handlersEv[];
++EXPORT_SYMBOL(_ZN12DelayUnqueue12add_handlersEv);
++extern char _ZN12DelayUnqueue7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN12DelayUnqueue7cleanupEN7Element12CleanupStageE);
++extern char _ZN12DelayUnqueue8run_taskEP4Task[];
++EXPORT_SYMBOL(_ZN12DelayUnqueue8run_taskEP4Task);
++extern char _ZN12DelayUnqueue9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12DelayUnqueue9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12DelayUnqueueC1Ev[];
++EXPORT_SYMBOL(_ZN12DelayUnqueueC1Ev);
++extern char _ZN12DelayUnqueueC2Ev[];
++EXPORT_SYMBOL(_ZN12DelayUnqueueC2Ev);
++extern char _ZN12DelayUnqueueD0Ev[];
++EXPORT_SYMBOL(_ZN12DelayUnqueueD0Ev);
++extern char _ZN12DelayUnqueueD1Ev[];
++EXPORT_SYMBOL(_ZN12DelayUnqueueD1Ev);
++extern char _ZN12DelayUnqueueD2Ev[];
++EXPORT_SYMBOL(_ZN12DelayUnqueueD2Ev);
++extern char _ZNK12DelayUnqueue10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12DelayUnqueue10class_nameEv);
++extern char _ZNK12DelayUnqueue10port_countEv[];
++EXPORT_SYMBOL(_ZNK12DelayUnqueue10port_countEv);
++extern char _ZNK12DelayUnqueue10processingEv[];
++EXPORT_SYMBOL(_ZNK12DelayUnqueue10processingEv);
++extern char _ZTV12DelayUnqueue[];
++EXPORT_SYMBOL(_ZTV12DelayUnqueue);
++extern char _ZN16DevirtualizeInfo9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN16DevirtualizeInfo9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN16DevirtualizeInfoC1Ev[];
++EXPORT_SYMBOL(_ZN16DevirtualizeInfoC1Ev);
++extern char _ZN16DevirtualizeInfoC2Ev[];
++EXPORT_SYMBOL(_ZN16DevirtualizeInfoC2Ev);
++extern char _ZN16DevirtualizeInfoD0Ev[];
++EXPORT_SYMBOL(_ZN16DevirtualizeInfoD0Ev);
++extern char _ZN16DevirtualizeInfoD1Ev[];
++EXPORT_SYMBOL(_ZN16DevirtualizeInfoD1Ev);
++extern char _ZN16DevirtualizeInfoD2Ev[];
++EXPORT_SYMBOL(_ZN16DevirtualizeInfoD2Ev);
++extern char _ZNK16DevirtualizeInfo10class_nameEv[];
++EXPORT_SYMBOL(_ZNK16DevirtualizeInfo10class_nameEv);
++extern char _ZTV16DevirtualizeInfo[];
++EXPORT_SYMBOL(_ZTV16DevirtualizeInfo);
++extern char _ZN7Discard10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7Discard10initializeEP12ErrorHandler);
++extern char _ZN7Discard12add_handlersEv[];
++EXPORT_SYMBOL(_ZN7Discard12add_handlersEv);
++extern char _ZN7Discard12read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN7Discard12read_handlerEP7ElementPv);
++extern char _ZN7Discard13write_handlerERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7Discard13write_handlerERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN7Discard4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN7Discard4pushEiP6Packet);
++extern char _ZN7Discard8run_taskEP4Task[];
++EXPORT_SYMBOL(_ZN7Discard8run_taskEP4Task);
++extern char _ZN7DiscardC1Ev[];
++EXPORT_SYMBOL(_ZN7DiscardC1Ev);
++extern char _ZN7DiscardC2Ev[];
++EXPORT_SYMBOL(_ZN7DiscardC2Ev);
++extern char _ZN7DiscardD0Ev[];
++EXPORT_SYMBOL(_ZN7DiscardD0Ev);
++extern char _ZN7DiscardD1Ev[];
++EXPORT_SYMBOL(_ZN7DiscardD1Ev);
++extern char _ZN7DiscardD2Ev[];
++EXPORT_SYMBOL(_ZN7DiscardD2Ev);
++extern char _ZNK7Discard10class_nameEv[];
++EXPORT_SYMBOL(_ZNK7Discard10class_nameEv);
++extern char _ZNK7Discard10port_countEv[];
++EXPORT_SYMBOL(_ZNK7Discard10port_countEv);
++extern char _ZNK7Discard10processingEv[];
++EXPORT_SYMBOL(_ZNK7Discard10processingEv);
++extern char _ZTV7Discard[];
++EXPORT_SYMBOL(_ZTV7Discard);
++extern char _ZN13DiscardNoFree10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13DiscardNoFree10initializeEP12ErrorHandler);
++extern char _ZN13DiscardNoFree12add_handlersEv[];
++EXPORT_SYMBOL(_ZN13DiscardNoFree12add_handlersEv);
++extern char _ZN13DiscardNoFree4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN13DiscardNoFree4pushEiP6Packet);
++extern char _ZN13DiscardNoFree8run_taskEP4Task[];
++EXPORT_SYMBOL(_ZN13DiscardNoFree8run_taskEP4Task);
++extern char _ZN13DiscardNoFreeC1Ev[];
++EXPORT_SYMBOL(_ZN13DiscardNoFreeC1Ev);
++extern char _ZN13DiscardNoFreeC2Ev[];
++EXPORT_SYMBOL(_ZN13DiscardNoFreeC2Ev);
++extern char _ZN13DiscardNoFreeD0Ev[];
++EXPORT_SYMBOL(_ZN13DiscardNoFreeD0Ev);
++extern char _ZN13DiscardNoFreeD1Ev[];
++EXPORT_SYMBOL(_ZN13DiscardNoFreeD1Ev);
++extern char _ZN13DiscardNoFreeD2Ev[];
++EXPORT_SYMBOL(_ZN13DiscardNoFreeD2Ev);
++extern char _ZNK13DiscardNoFree10class_nameEv[];
++EXPORT_SYMBOL(_ZNK13DiscardNoFree10class_nameEv);
++extern char _ZNK13DiscardNoFree10port_countEv[];
++EXPORT_SYMBOL(_ZNK13DiscardNoFree10port_countEv);
++extern char _ZNK13DiscardNoFree10processingEv[];
++EXPORT_SYMBOL(_ZNK13DiscardNoFree10processingEv);
++extern char _ZTV13DiscardNoFree[];
++EXPORT_SYMBOL(_ZTV13DiscardNoFree);
++extern char click_cleanup_packages[];
++EXPORT_SYMBOL(click_cleanup_packages);
++extern char click_has_provision[];
++EXPORT_SYMBOL(click_has_provision);
++extern char click_provide[];
++EXPORT_SYMBOL(click_provide);
++extern char click_public_packages[];
++EXPORT_SYMBOL(click_public_packages);
++extern char click_unprovide[];
++EXPORT_SYMBOL(click_unprovide);
++extern char _ZN13DriverManagerC1Ev[];
++EXPORT_SYMBOL(_ZN13DriverManagerC1Ev);
++extern char _ZN13DriverManagerC2Ev[];
++EXPORT_SYMBOL(_ZN13DriverManagerC2Ev);
++extern char _ZN13DriverManagerD0Ev[];
++EXPORT_SYMBOL(_ZN13DriverManagerD0Ev);
++extern char _ZN13DriverManagerD1Ev[];
++EXPORT_SYMBOL(_ZN13DriverManagerD1Ev);
++extern char _ZNK13DriverManager10class_nameEv[];
++EXPORT_SYMBOL(_ZNK13DriverManager10class_nameEv);
++extern char _ZTV13DriverManager[];
++EXPORT_SYMBOL(_ZTV13DriverManager);
++extern char _ZN14DropBroadcasts12add_handlersEv[];
++EXPORT_SYMBOL(_ZN14DropBroadcasts12add_handlersEv);
++extern char _ZN14DropBroadcasts13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN14DropBroadcasts13simple_actionEP6Packet);
++extern char _ZN14DropBroadcasts7drop_itEP6Packet[];
++EXPORT_SYMBOL(_ZN14DropBroadcasts7drop_itEP6Packet);
++extern char _ZN14DropBroadcastsC1Ev[];
++EXPORT_SYMBOL(_ZN14DropBroadcastsC1Ev);
++extern char _ZN14DropBroadcastsC2Ev[];
++EXPORT_SYMBOL(_ZN14DropBroadcastsC2Ev);
++extern char _ZN14DropBroadcastsD0Ev[];
++EXPORT_SYMBOL(_ZN14DropBroadcastsD0Ev);
++extern char _ZN14DropBroadcastsD1Ev[];
++EXPORT_SYMBOL(_ZN14DropBroadcastsD1Ev);
++extern char _ZN14DropBroadcastsD2Ev[];
++EXPORT_SYMBOL(_ZN14DropBroadcastsD2Ev);
++extern char _ZNK14DropBroadcasts10class_nameEv[];
++EXPORT_SYMBOL(_ZNK14DropBroadcasts10class_nameEv);
++extern char _ZNK14DropBroadcasts10port_countEv[];
++EXPORT_SYMBOL(_ZNK14DropBroadcasts10port_countEv);
++extern char _ZNK14DropBroadcasts10processingEv[];
++EXPORT_SYMBOL(_ZNK14DropBroadcasts10processingEv);
++extern char _ZTV14DropBroadcasts[];
++EXPORT_SYMBOL(_ZTV14DropBroadcasts);
++extern char _ZN8DRRSched10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8DRRSched10initializeEP12ErrorHandler);
++extern char _ZN8DRRSched4castEPKc[];
++EXPORT_SYMBOL(_ZN8DRRSched4castEPKc);
++extern char _ZN8DRRSched4pullEi[];
++EXPORT_SYMBOL(_ZN8DRRSched4pullEi);
++extern char _ZN8DRRSched7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN8DRRSched7cleanupEN7Element12CleanupStageE);
++extern char _ZN8DRRSched9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8DRRSched9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN8DRRSchedC1Ev[];
++EXPORT_SYMBOL(_ZN8DRRSchedC1Ev);
++extern char _ZN8DRRSchedC2Ev[];
++EXPORT_SYMBOL(_ZN8DRRSchedC2Ev);
++extern char _ZN8DRRSchedD0Ev[];
++EXPORT_SYMBOL(_ZN8DRRSchedD0Ev);
++extern char _ZN8DRRSchedD1Ev[];
++EXPORT_SYMBOL(_ZN8DRRSchedD1Ev);
++extern char _ZN8DRRSchedD2Ev[];
++EXPORT_SYMBOL(_ZN8DRRSchedD2Ev);
++extern char _ZNK8DRRSched10class_nameEv[];
++EXPORT_SYMBOL(_ZNK8DRRSched10class_nameEv);
++extern char _ZNK8DRRSched10port_countEv[];
++EXPORT_SYMBOL(_ZNK8DRRSched10port_countEv);
++extern char _ZNK8DRRSched10processingEv[];
++EXPORT_SYMBOL(_ZNK8DRRSched10processingEv);
++extern char _ZTV8DRRSched[];
++EXPORT_SYMBOL(_ZTV8DRRSched);
++extern char _ZN17DynamicUDPIPEncap13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN17DynamicUDPIPEncap13simple_actionEP6Packet);
++extern char _ZN17DynamicUDPIPEncap9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN17DynamicUDPIPEncap9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN17DynamicUDPIPEncapC1Ev[];
++EXPORT_SYMBOL(_ZN17DynamicUDPIPEncapC1Ev);
++extern char _ZN17DynamicUDPIPEncapC2Ev[];
++EXPORT_SYMBOL(_ZN17DynamicUDPIPEncapC2Ev);
++extern char _ZN17DynamicUDPIPEncapD0Ev[];
++EXPORT_SYMBOL(_ZN17DynamicUDPIPEncapD0Ev);
++extern char _ZN17DynamicUDPIPEncapD1Ev[];
++EXPORT_SYMBOL(_ZN17DynamicUDPIPEncapD1Ev);
++extern char _ZN17DynamicUDPIPEncapD2Ev[];
++EXPORT_SYMBOL(_ZN17DynamicUDPIPEncapD2Ev);
++extern char _ZNK17DynamicUDPIPEncap10class_nameEv[];
++EXPORT_SYMBOL(_ZNK17DynamicUDPIPEncap10class_nameEv);
++extern char _ZNK17DynamicUDPIPEncap10port_countEv[];
++EXPORT_SYMBOL(_ZNK17DynamicUDPIPEncap10port_countEv);
++extern char _ZNK17DynamicUDPIPEncap10processingEv[];
++EXPORT_SYMBOL(_ZNK17DynamicUDPIPEncap10processingEv);
++extern char _ZNK17DynamicUDPIPEncap5flagsEv[];
++EXPORT_SYMBOL(_ZNK17DynamicUDPIPEncap5flagsEv);
++extern char _ZTV17DynamicUDPIPEncap[];
++EXPORT_SYMBOL(_ZTV17DynamicUDPIPEncap);
++extern char _ZN7Element10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7Element10initializeEP12ErrorHandler);
++extern char _ZN7Element10set_nportsEii[];
++EXPORT_SYMBOL(_ZN7Element10set_nportsEii);
++extern char _ZN7Element10take_stateEPS_P12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7Element10take_stateEPS_P12ErrorHandler);
++extern char _ZN7Element11local_llrpcEjPv[];
++EXPORT_SYMBOL(_ZN7Element11local_llrpcEjPv);
++extern char _ZN7Element11set_handlerERK6StringiPFiiRS0_PS_PK7HandlerP12ErrorHandlerEPvSC_[];
++EXPORT_SYMBOL(_ZN7Element11set_handlerERK6StringiPFiiRS0_PS_PK7HandlerP12ErrorHandlerEPvSC_);
++extern char _ZN7Element12PULL_TO_PUSHE[];
++EXPORT_SYMBOL(_ZN7Element12PULL_TO_PUSHE);
++extern char _ZN7Element12PUSH_TO_PULLE[];
++EXPORT_SYMBOL(_ZN7Element12PUSH_TO_PULLE);
++extern char _ZN7Element12add_handlersEv[];
++EXPORT_SYMBOL(_ZN7Element12add_handlersEv);
++extern char _ZN7Element12connect_portEbiPS_i[];
++EXPORT_SYMBOL(_ZN7Element12connect_portEbiPS_i);
++extern char _ZN7Element13COMPLETE_FLOWE[];
++EXPORT_SYMBOL(_ZN7Element13COMPLETE_FLOWE);
++extern char _ZN7Element13notify_nportsEiiP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7Element13notify_nportsEiiP12ErrorHandler);
++extern char _ZN7Element13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN7Element13simple_actionEP6Packet);
++extern char _ZN7Element16add_read_handlerERK6StringPFS0_PS_PvES4_[];
++EXPORT_SYMBOL(_ZN7Element16add_read_handlerERK6StringPFS0_PS_PvES4_);
++extern char _ZN7Element16initialize_portsEPKiS1_[];
++EXPORT_SYMBOL(_ZN7Element16initialize_portsEPKiS1_);
++extern char _ZN7Element16live_reconfigureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7Element16live_reconfigureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN7Element17add_task_handlersEP4TaskRK6String[];
++EXPORT_SYMBOL(_ZN7Element17add_task_handlersEP4TaskRK6String);
++extern char _ZN7Element17add_write_handlerERK6StringPFiS2_PS_PvP12ErrorHandlerES4_[];
++EXPORT_SYMBOL(_ZN7Element17add_write_handlerERK6StringPFiS2_PS_PvP12ErrorHandlerES4_);
++extern char _ZN7Element17set_handler_flagsERK6Stringi[];
++EXPORT_SYMBOL(_ZN7Element17set_handler_flagsERK6Stringi);
++extern char _ZN7Element19nelements_allocatedE[];
++EXPORT_SYMBOL(_ZN7Element19nelements_allocatedE);
++extern char _ZN7Element20add_default_handlersEb[];
++EXPORT_SYMBOL(_ZN7Element20add_default_handlersEb);
++extern char _ZN7Element20next_processing_codeERPKcP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7Element20next_processing_codeERPKcP12ErrorHandler);
++extern char _ZN7Element20read_keyword_handlerEPS_Pv[];
++EXPORT_SYMBOL(_ZN7Element20read_keyword_handlerEPS_Pv);
++extern char _ZN7Element23read_positional_handlerEPS_Pv[];
++EXPORT_SYMBOL(_ZN7Element23read_positional_handlerEPS_Pv);
++extern char _ZN7Element27reconfigure_keyword_handlerERK6StringPS_PvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7Element27reconfigure_keyword_handlerERK6StringPS_PvP12ErrorHandler);
++extern char _ZN7Element30reconfigure_positional_handlerERK6StringPS_PvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7Element30reconfigure_positional_handlerERK6StringPS_PvP12ErrorHandler);
++extern char _ZN7Element4PULLE[];
++EXPORT_SYMBOL(_ZN7Element4PULLE);
++extern char _ZN7Element4PUSHE[];
++EXPORT_SYMBOL(_ZN7Element4PUSHE);
++extern char _ZN7Element4castEPKc[];
++EXPORT_SYMBOL(_ZN7Element4castEPKc);
++extern char _ZN7Element4pullEi[];
++EXPORT_SYMBOL(_ZN7Element4pullEi);
++extern char _ZN7Element4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN7Element4pushEiP6Packet);
++extern char _ZN7Element5llrpcEjPv[];
++EXPORT_SYMBOL(_ZN7Element5llrpcEjPv);
++extern char _ZN7Element7cleanupENS_12CleanupStageE[];
++EXPORT_SYMBOL(_ZN7Element7cleanupENS_12CleanupStageE);
++extern char _ZN7Element8AGNOSTICE[];
++EXPORT_SYMBOL(_ZN7Element8AGNOSTICE);
++extern char _ZN7Element8run_taskEP4Task[];
++EXPORT_SYMBOL(_ZN7Element8run_taskEP4Task);
++extern char _ZN7Element8run_taskEv[];
++EXPORT_SYMBOL(_ZN7Element8run_taskEv);
++extern char _ZN7Element9PORTS_0_0E[];
++EXPORT_SYMBOL(_ZN7Element9PORTS_0_0E);
++extern char _ZN7Element9PORTS_0_1E[];
++EXPORT_SYMBOL(_ZN7Element9PORTS_0_1E);
++extern char _ZN7Element9PORTS_1_0E[];
++EXPORT_SYMBOL(_ZN7Element9PORTS_1_0E);
++extern char _ZN7Element9PORTS_1_1E[];
++EXPORT_SYMBOL(_ZN7Element9PORTS_1_1E);
++extern char _ZN7Element9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7Element9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN7Element9run_timerEP5Timer[];
++EXPORT_SYMBOL(_ZN7Element9run_timerEP5Timer);
++extern char _ZN7Element9run_timerEv[];
++EXPORT_SYMBOL(_ZN7Element9run_timerEv);
++extern char _ZN7ElementC1Ev[];
++EXPORT_SYMBOL(_ZN7ElementC1Ev);
++extern char _ZN7ElementC2Ev[];
++EXPORT_SYMBOL(_ZN7ElementC2Ev);
++extern char _ZN7ElementD0Ev[];
++EXPORT_SYMBOL(_ZN7ElementD0Ev);
++extern char _ZN7ElementD1Ev[];
++EXPORT_SYMBOL(_ZN7ElementD1Ev);
++extern char _ZN7ElementD2Ev[];
++EXPORT_SYMBOL(_ZN7ElementD2Ev);
++extern char _ZNK7Element10port_countEv[];
++EXPORT_SYMBOL(_ZNK7Element10port_countEv);
++extern char _ZNK7Element10processingEv[];
++EXPORT_SYMBOL(_ZNK7Element10processingEv);
++extern char _ZNK7Element11declarationEv[];
++EXPORT_SYMBOL(_ZNK7Element11declarationEv);
++extern char _ZNK7Element13configurationER6VectorI6StringE[];
++EXPORT_SYMBOL(_ZNK7Element13configurationER6VectorI6StringE);
++extern char _ZNK7Element13configurationEv[];
++EXPORT_SYMBOL(_ZNK7Element13configurationEv);
++extern char _ZNK7Element15configure_phaseEv[];
++EXPORT_SYMBOL(_ZNK7Element15configure_phaseEv);
++extern char _ZNK7Element15hotswap_elementEv[];
++EXPORT_SYMBOL(_ZNK7Element15hotswap_elementEv);
++extern char _ZNK7Element17processing_vectorEPiS0_P12ErrorHandler[];
++EXPORT_SYMBOL(_ZNK7Element17processing_vectorEPiS0_P12ErrorHandler);
++extern char _ZNK7Element20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK7Element20can_live_reconfigureEv);
++extern char _ZNK7Element2idEv[];
++EXPORT_SYMBOL(_ZNK7Element2idEv);
++extern char _ZNK7Element4nameEv[];
++EXPORT_SYMBOL(_ZNK7Element4nameEv);
++extern char _ZNK7Element5flagsEv[];
++EXPORT_SYMBOL(_ZNK7Element5flagsEv);
++extern char _ZNK7Element6masterEv[];
++EXPORT_SYMBOL(_ZNK7Element6masterEv);
++extern char _ZNK7Element8landmarkEv[];
++EXPORT_SYMBOL(_ZNK7Element8landmarkEv);
++extern char _ZNK7Element9flow_codeEv[];
++EXPORT_SYMBOL(_ZNK7Element9flow_codeEv);
++extern char _ZNK7Element9port_flowEbiP9Bitvector[];
++EXPORT_SYMBOL(_ZNK7Element9port_flowEbiP9Bitvector);
++extern char _ZTV7Element[];
++EXPORT_SYMBOL(_ZTV7Element);
++extern char _ZN13ElementFilter11check_matchEP7ElementiNS_8PortTypeE[];
++EXPORT_SYMBOL(_ZN13ElementFilter11check_matchEP7ElementiNS_8PortTypeE);
++extern char _ZN13ElementFilter6filterER6VectorIP7ElementE[];
++EXPORT_SYMBOL(_ZN13ElementFilter6filterER6VectorIP7ElementE);
++extern char _ZN13ElementFilterD0Ev[];
++EXPORT_SYMBOL(_ZN13ElementFilterD0Ev);
++extern char _ZN13ElementFilterD1Ev[];
++EXPORT_SYMBOL(_ZN13ElementFilterD1Ev);
++extern char _ZN17CastElementFilter11check_matchEP7ElementiN13ElementFilter8PortTypeE[];
++EXPORT_SYMBOL(_ZN17CastElementFilter11check_matchEP7ElementiN13ElementFilter8PortTypeE);
++extern char _ZN17CastElementFilterC1ERK6String[];
++EXPORT_SYMBOL(_ZN17CastElementFilterC1ERK6String);
++extern char _ZN17CastElementFilterC2ERK6String[];
++EXPORT_SYMBOL(_ZN17CastElementFilterC2ERK6String);
++extern char _ZN17CastElementFilterD0Ev[];
++EXPORT_SYMBOL(_ZN17CastElementFilterD0Ev);
++extern char _ZN17CastElementFilterD1Ev[];
++EXPORT_SYMBOL(_ZN17CastElementFilterD1Ev);
++extern char _ZTV13ElementFilter[];
++EXPORT_SYMBOL(_ZTV13ElementFilter);
++extern char _ZTV17CastElementFilter[];
++EXPORT_SYMBOL(_ZTV17CastElementFilter);
++extern char _ZN11EnsureEther4pullEi[];
++EXPORT_SYMBOL(_ZN11EnsureEther4pullEi);
++extern char _ZN11EnsureEther4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN11EnsureEther4pushEiP6Packet);
++extern char _ZN11EnsureEther8smactionEP6Packet[];
++EXPORT_SYMBOL(_ZN11EnsureEther8smactionEP6Packet);
++extern char _ZN11EnsureEther9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11EnsureEther9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN11EnsureEtherC1Ev[];
++EXPORT_SYMBOL(_ZN11EnsureEtherC1Ev);
++extern char _ZN11EnsureEtherC2Ev[];
++EXPORT_SYMBOL(_ZN11EnsureEtherC2Ev);
++extern char _ZN11EnsureEtherD0Ev[];
++EXPORT_SYMBOL(_ZN11EnsureEtherD0Ev);
++extern char _ZN11EnsureEtherD1Ev[];
++EXPORT_SYMBOL(_ZN11EnsureEtherD1Ev);
++extern char _ZN11EnsureEtherD2Ev[];
++EXPORT_SYMBOL(_ZN11EnsureEtherD2Ev);
++extern char _ZNK11EnsureEther10class_nameEv[];
++EXPORT_SYMBOL(_ZNK11EnsureEther10class_nameEv);
++extern char _ZNK11EnsureEther10port_countEv[];
++EXPORT_SYMBOL(_ZNK11EnsureEther10port_countEv);
++extern char _ZNK11EnsureEther10processingEv[];
++EXPORT_SYMBOL(_ZNK11EnsureEther10processingEv);
++extern char _ZTV11EnsureEther[];
++EXPORT_SYMBOL(_ZTV11EnsureEther);
++extern char _ZN11ErrorVeneer11count_errorEN12ErrorHandler11SeriousnessERK6String[];
++EXPORT_SYMBOL(_ZN11ErrorVeneer11count_errorEN12ErrorHandler11SeriousnessERK6String);
++extern char _ZN11ErrorVeneer11handle_textEN12ErrorHandler11SeriousnessERK6String[];
++EXPORT_SYMBOL(_ZN11ErrorVeneer11handle_textEN12ErrorHandler11SeriousnessERK6String);
++extern char _ZN11ErrorVeneer12reset_countsEv[];
++EXPORT_SYMBOL(_ZN11ErrorVeneer12reset_countsEv);
++extern char _ZN11ErrorVeneer13decorate_textEN12ErrorHandler11SeriousnessERK6StringS4_[];
++EXPORT_SYMBOL(_ZN11ErrorVeneer13decorate_textEN12ErrorHandler11SeriousnessERK6StringS4_);
++extern char _ZN11ErrorVeneer9make_textEN12ErrorHandler11SeriousnessEPKcPc[];
++EXPORT_SYMBOL(_ZN11ErrorVeneer9make_textEN12ErrorHandler11SeriousnessEPKcPc);
++extern char _ZN11ErrorVeneerD0Ev[];
++EXPORT_SYMBOL(_ZN11ErrorVeneerD0Ev);
++extern char _ZN11ErrorVeneerD1Ev[];
++EXPORT_SYMBOL(_ZN11ErrorVeneerD1Ev);
++extern char _ZN12ErrorHandler11verror_textENS_11SeriousnessERK6StringS3_[];
++EXPORT_SYMBOL(_ZN12ErrorHandler11verror_textENS_11SeriousnessERK6StringS3_);
++extern char _ZN12ErrorHandler12ERROR_RESULTE[];
++EXPORT_SYMBOL(_ZN12ErrorHandler12ERROR_RESULTE);
++extern char _ZN12ErrorHandler13decorate_textENS_11SeriousnessERK6StringS3_[];
++EXPORT_SYMBOL(_ZN12ErrorHandler13decorate_textENS_11SeriousnessERK6StringS3_);
++extern char _ZN12ErrorHandler13prepend_linesERK6StringS2_[];
++EXPORT_SYMBOL(_ZN12ErrorHandler13prepend_linesERK6StringS2_);
++extern char _ZN12ErrorHandler14add_conversionERK6StringPFS0_iPPcE[];
++EXPORT_SYMBOL(_ZN12ErrorHandler14add_conversionERK6StringPFS0_iPPcE);
++extern char _ZN12ErrorHandler14set_error_codeEi[];
++EXPORT_SYMBOL(_ZN12ErrorHandler14set_error_codeEi);
++extern char _ZN12ErrorHandler14silent_handlerEv[];
++EXPORT_SYMBOL(_ZN12ErrorHandler14silent_handlerEv);
++extern char _ZN12ErrorHandler14static_cleanupEv[];
++EXPORT_SYMBOL(_ZN12ErrorHandler14static_cleanupEv);
++extern char _ZN12ErrorHandler15default_handlerEv[];
++EXPORT_SYMBOL(_ZN12ErrorHandler15default_handlerEv);
++extern char _ZN12ErrorHandler17remove_conversionEPNS_10ConversionE[];
++EXPORT_SYMBOL(_ZN12ErrorHandler17remove_conversionEPNS_10ConversionE);
++extern char _ZN12ErrorHandler17static_initializeEPS_[];
++EXPORT_SYMBOL(_ZN12ErrorHandler17static_initializeEPS_);
++extern char _ZN12ErrorHandler19has_default_handlerEv[];
++EXPORT_SYMBOL(_ZN12ErrorHandler19has_default_handlerEv);
++extern char _ZN12ErrorHandler19set_default_handlerEPS_[];
++EXPORT_SYMBOL(_ZN12ErrorHandler19set_default_handlerEPS_);
++extern char _ZN12ErrorHandler5debugEPKcz[];
++EXPORT_SYMBOL(_ZN12ErrorHandler5debugEPKcz);
++extern char _ZN12ErrorHandler5errorEPKcz[];
++EXPORT_SYMBOL(_ZN12ErrorHandler5errorEPKcz);
++extern char _ZN12ErrorHandler5fatalEPKcz[];
++EXPORT_SYMBOL(_ZN12ErrorHandler5fatalEPKcz);
++extern char _ZN12ErrorHandler6ldebugERK6StringPKcz[];
++EXPORT_SYMBOL(_ZN12ErrorHandler6ldebugERK6StringPKcz);
++extern char _ZN12ErrorHandler6lerrorERK6StringPKcz[];
++EXPORT_SYMBOL(_ZN12ErrorHandler6lerrorERK6StringPKcz);
++extern char _ZN12ErrorHandler6lfatalERK6StringPKcz[];
++EXPORT_SYMBOL(_ZN12ErrorHandler6lfatalERK6StringPKcz);
++extern char _ZN12ErrorHandler6verrorENS_11SeriousnessERK6StringPKcPc[];
++EXPORT_SYMBOL(_ZN12ErrorHandler6verrorENS_11SeriousnessERK6StringPKcPc);
++extern char _ZN12ErrorHandler7messageEPKcz[];
++EXPORT_SYMBOL(_ZN12ErrorHandler7messageEPKcz);
++extern char _ZN12ErrorHandler7warningEPKcz[];
++EXPORT_SYMBOL(_ZN12ErrorHandler7warningEPKcz);
++extern char _ZN12ErrorHandler8lmessageERK6StringPKcz[];
++EXPORT_SYMBOL(_ZN12ErrorHandler8lmessageERK6StringPKcz);
++extern char _ZN12ErrorHandler8lwarningERK6StringPKcz[];
++EXPORT_SYMBOL(_ZN12ErrorHandler8lwarningERK6StringPKcz);
++extern char _ZN12ErrorHandler9OK_RESULTE[];
++EXPORT_SYMBOL(_ZN12ErrorHandler9OK_RESULTE);
++extern char _ZN12ErrorHandler9make_textENS_11SeriousnessEPKcPc[];
++EXPORT_SYMBOL(_ZN12ErrorHandler9make_textENS_11SeriousnessEPKcPc);
++extern char _ZN12ErrorHandler9make_textENS_11SeriousnessEPKcz[];
++EXPORT_SYMBOL(_ZN12ErrorHandler9make_textENS_11SeriousnessEPKcz);
++extern char _ZN12ErrorHandlerD0Ev[];
++EXPORT_SYMBOL(_ZN12ErrorHandlerD0Ev);
++extern char _ZN12ErrorHandlerD1Ev[];
++EXPORT_SYMBOL(_ZN12ErrorHandlerD1Ev);
++extern char _ZN16BaseErrorHandler11count_errorEN12ErrorHandler11SeriousnessERK6String[];
++EXPORT_SYMBOL(_ZN16BaseErrorHandler11count_errorEN12ErrorHandler11SeriousnessERK6String);
++extern char _ZN16BaseErrorHandler12reset_countsEv[];
++EXPORT_SYMBOL(_ZN16BaseErrorHandler12reset_countsEv);
++extern char _ZN16BaseErrorHandlerD0Ev[];
++EXPORT_SYMBOL(_ZN16BaseErrorHandlerD0Ev);
++extern char _ZN16BaseErrorHandlerD1Ev[];
++EXPORT_SYMBOL(_ZN16BaseErrorHandlerD1Ev);
++extern char _ZN18PrefixErrorHandler13decorate_textEN12ErrorHandler11SeriousnessERK6StringS4_[];
++EXPORT_SYMBOL(_ZN18PrefixErrorHandler13decorate_textEN12ErrorHandler11SeriousnessERK6StringS4_);
++extern char _ZN18PrefixErrorHandlerC1EP12ErrorHandlerRK6String[];
++EXPORT_SYMBOL(_ZN18PrefixErrorHandlerC1EP12ErrorHandlerRK6String);
++extern char _ZN18PrefixErrorHandlerC2EP12ErrorHandlerRK6String[];
++EXPORT_SYMBOL(_ZN18PrefixErrorHandlerC2EP12ErrorHandlerRK6String);
++extern char _ZN18PrefixErrorHandlerD0Ev[];
++EXPORT_SYMBOL(_ZN18PrefixErrorHandlerD0Ev);
++extern char _ZN18PrefixErrorHandlerD1Ev[];
++EXPORT_SYMBOL(_ZN18PrefixErrorHandlerD1Ev);
++extern char _ZN18SilentErrorHandler11handle_textEN12ErrorHandler11SeriousnessERK6String[];
++EXPORT_SYMBOL(_ZN18SilentErrorHandler11handle_textEN12ErrorHandler11SeriousnessERK6String);
++extern char _ZN18SilentErrorHandlerD0Ev[];
++EXPORT_SYMBOL(_ZN18SilentErrorHandlerD0Ev);
++extern char _ZN18SilentErrorHandlerD1Ev[];
++EXPORT_SYMBOL(_ZN18SilentErrorHandlerD1Ev);
++extern char _ZN19ContextErrorHandler13decorate_textEN12ErrorHandler11SeriousnessERK6StringS4_[];
++EXPORT_SYMBOL(_ZN19ContextErrorHandler13decorate_textEN12ErrorHandler11SeriousnessERK6StringS4_);
++extern char _ZN19ContextErrorHandlerC1EP12ErrorHandlerRK6StringS4_S4_[];
++EXPORT_SYMBOL(_ZN19ContextErrorHandlerC1EP12ErrorHandlerRK6StringS4_S4_);
++extern char _ZN19ContextErrorHandlerC2EP12ErrorHandlerRK6StringS4_S4_[];
++EXPORT_SYMBOL(_ZN19ContextErrorHandlerC2EP12ErrorHandlerRK6StringS4_S4_);
++extern char _ZN19ContextErrorHandlerD0Ev[];
++EXPORT_SYMBOL(_ZN19ContextErrorHandlerD0Ev);
++extern char _ZN19ContextErrorHandlerD1Ev[];
++EXPORT_SYMBOL(_ZN19ContextErrorHandlerD1Ev);
++extern char _ZN20LandmarkErrorHandler13decorate_textEN12ErrorHandler11SeriousnessERK6StringS4_[];
++EXPORT_SYMBOL(_ZN20LandmarkErrorHandler13decorate_textEN12ErrorHandler11SeriousnessERK6StringS4_);
++extern char _ZN20LandmarkErrorHandlerC1EP12ErrorHandlerRK6String[];
++EXPORT_SYMBOL(_ZN20LandmarkErrorHandlerC1EP12ErrorHandlerRK6String);
++extern char _ZN20LandmarkErrorHandlerC2EP12ErrorHandlerRK6String[];
++EXPORT_SYMBOL(_ZN20LandmarkErrorHandlerC2EP12ErrorHandlerRK6String);
++extern char _ZN20LandmarkErrorHandlerD0Ev[];
++EXPORT_SYMBOL(_ZN20LandmarkErrorHandlerD0Ev);
++extern char _ZN20LandmarkErrorHandlerD1Ev[];
++EXPORT_SYMBOL(_ZN20LandmarkErrorHandlerD1Ev);
++extern char _ZN25VerboseFilterErrorHandler11handle_textEN12ErrorHandler11SeriousnessERK6String[];
++EXPORT_SYMBOL(_ZN25VerboseFilterErrorHandler11handle_textEN12ErrorHandler11SeriousnessERK6String);
++extern char _ZN25VerboseFilterErrorHandlerC1EP12ErrorHandleri[];
++EXPORT_SYMBOL(_ZN25VerboseFilterErrorHandlerC1EP12ErrorHandleri);
++extern char _ZN25VerboseFilterErrorHandlerC2EP12ErrorHandleri[];
++EXPORT_SYMBOL(_ZN25VerboseFilterErrorHandlerC2EP12ErrorHandleri);
++extern char _ZN25VerboseFilterErrorHandlerD0Ev[];
++EXPORT_SYMBOL(_ZN25VerboseFilterErrorHandlerD0Ev);
++extern char _ZN25VerboseFilterErrorHandlerD1Ev[];
++EXPORT_SYMBOL(_ZN25VerboseFilterErrorHandlerD1Ev);
++extern char _ZNK11ErrorVeneer7nerrorsEv[];
++EXPORT_SYMBOL(_ZNK11ErrorVeneer7nerrorsEv);
++extern char _ZNK11ErrorVeneer9nwarningsEv[];
++EXPORT_SYMBOL(_ZNK11ErrorVeneer9nwarningsEv);
++extern char _ZNK12ErrorHandler13min_verbosityEv[];
++EXPORT_SYMBOL(_ZNK12ErrorHandler13min_verbosityEv);
++extern char _ZNK16BaseErrorHandler7nerrorsEv[];
++EXPORT_SYMBOL(_ZNK16BaseErrorHandler7nerrorsEv);
++extern char _ZNK16BaseErrorHandler9nwarningsEv[];
++EXPORT_SYMBOL(_ZNK16BaseErrorHandler9nwarningsEv);
++extern char _ZNK25VerboseFilterErrorHandler13min_verbosityEv[];
++EXPORT_SYMBOL(_ZNK25VerboseFilterErrorHandler13min_verbosityEv);
++extern char _ZTV11ErrorVeneer[];
++EXPORT_SYMBOL(_ZTV11ErrorVeneer);
++extern char _ZTV12ErrorHandler[];
++EXPORT_SYMBOL(_ZTV12ErrorHandler);
++extern char _ZTV16BaseErrorHandler[];
++EXPORT_SYMBOL(_ZTV16BaseErrorHandler);
++extern char _ZTV18PrefixErrorHandler[];
++EXPORT_SYMBOL(_ZTV18PrefixErrorHandler);
++extern char _ZTV18SilentErrorHandler[];
++EXPORT_SYMBOL(_ZTV18SilentErrorHandler);
++extern char _ZTV19ContextErrorHandler[];
++EXPORT_SYMBOL(_ZTV19ContextErrorHandler);
++extern char _ZTV20LandmarkErrorHandler[];
++EXPORT_SYMBOL(_ZTV20LandmarkErrorHandler);
++extern char _ZTV25VerboseFilterErrorHandler[];
++EXPORT_SYMBOL(_ZTV25VerboseFilterErrorHandler);
++extern char _ZN12ErrorElement10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12ErrorElement10initializeEP12ErrorHandler);
++extern char _ZN12ErrorElement9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12ErrorElement9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12ErrorElementC1Ev[];
++EXPORT_SYMBOL(_ZN12ErrorElementC1Ev);
++extern char _ZN12ErrorElementC2Ev[];
++EXPORT_SYMBOL(_ZN12ErrorElementC2Ev);
++extern char _ZN12ErrorElementD0Ev[];
++EXPORT_SYMBOL(_ZN12ErrorElementD0Ev);
++extern char _ZN12ErrorElementD1Ev[];
++EXPORT_SYMBOL(_ZN12ErrorElementD1Ev);
++extern char _ZN12ErrorElementD2Ev[];
++EXPORT_SYMBOL(_ZN12ErrorElementD2Ev);
++extern char _ZNK12ErrorElement10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12ErrorElement10class_nameEv);
++extern char _ZNK12ErrorElement10port_countEv[];
++EXPORT_SYMBOL(_ZNK12ErrorElement10port_countEv);
++extern char _ZNK12ErrorElement10processingEv[];
++EXPORT_SYMBOL(_ZNK12ErrorElement10processingEv);
++extern char _ZNK12ErrorElement9flow_codeEv[];
++EXPORT_SYMBOL(_ZNK12ErrorElement9flow_codeEv);
++extern char _ZTV12ErrorElement[];
++EXPORT_SYMBOL(_ZTV12ErrorElement);
++extern char _ZNK12EtherAddress7unparseEv[];
++EXPORT_SYMBOL(_ZNK12EtherAddress7unparseEv);
++extern char _ZlsR11StringAccumRK12EtherAddress[];
++EXPORT_SYMBOL(_ZlsR11StringAccumRK12EtherAddress);
++extern char _ZN10EtherEncap12add_handlersEv[];
++EXPORT_SYMBOL(_ZN10EtherEncap12add_handlersEv);
++extern char _ZN10EtherEncap12read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN10EtherEncap12read_handlerEP7ElementPv);
++extern char _ZN10EtherEncap4pullEi[];
++EXPORT_SYMBOL(_ZN10EtherEncap4pullEi);
++extern char _ZN10EtherEncap4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN10EtherEncap4pushEiP6Packet);
++extern char _ZN10EtherEncap8smactionEP6Packet[];
++EXPORT_SYMBOL(_ZN10EtherEncap8smactionEP6Packet);
++extern char _ZN10EtherEncap9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10EtherEncap9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN10EtherEncapC1Ev[];
++EXPORT_SYMBOL(_ZN10EtherEncapC1Ev);
++extern char _ZN10EtherEncapC2Ev[];
++EXPORT_SYMBOL(_ZN10EtherEncapC2Ev);
++extern char _ZN10EtherEncapD0Ev[];
++EXPORT_SYMBOL(_ZN10EtherEncapD0Ev);
++extern char _ZN10EtherEncapD1Ev[];
++EXPORT_SYMBOL(_ZN10EtherEncapD1Ev);
++extern char _ZN10EtherEncapD2Ev[];
++EXPORT_SYMBOL(_ZN10EtherEncapD2Ev);
++extern char _ZNK10EtherEncap10class_nameEv[];
++EXPORT_SYMBOL(_ZNK10EtherEncap10class_nameEv);
++extern char _ZNK10EtherEncap10port_countEv[];
++EXPORT_SYMBOL(_ZNK10EtherEncap10port_countEv);
++extern char _ZNK10EtherEncap10processingEv[];
++EXPORT_SYMBOL(_ZNK10EtherEncap10processingEv);
++extern char _ZNK10EtherEncap20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK10EtherEncap20can_live_reconfigureEv);
++extern char _ZTV10EtherEncap[];
++EXPORT_SYMBOL(_ZTV10EtherEncap);
++extern char _ZN11EtherMirror13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN11EtherMirror13simple_actionEP6Packet);
++extern char _ZN11EtherMirrorC1Ev[];
++EXPORT_SYMBOL(_ZN11EtherMirrorC1Ev);
++extern char _ZN11EtherMirrorC2Ev[];
++EXPORT_SYMBOL(_ZN11EtherMirrorC2Ev);
++extern char _ZN11EtherMirrorD0Ev[];
++EXPORT_SYMBOL(_ZN11EtherMirrorD0Ev);
++extern char _ZN11EtherMirrorD1Ev[];
++EXPORT_SYMBOL(_ZN11EtherMirrorD1Ev);
++extern char _ZN11EtherMirrorD2Ev[];
++EXPORT_SYMBOL(_ZN11EtherMirrorD2Ev);
++extern char _ZNK11EtherMirror10class_nameEv[];
++EXPORT_SYMBOL(_ZNK11EtherMirror10class_nameEv);
++extern char _ZNK11EtherMirror10port_countEv[];
++EXPORT_SYMBOL(_ZNK11EtherMirror10port_countEv);
++extern char _ZTV11EtherMirror[];
++EXPORT_SYMBOL(_ZTV11EtherMirror);
++extern char _ZN12FastTCPFlows10get_packetEv[];
++EXPORT_SYMBOL(_ZN12FastTCPFlows10get_packetEv);
++extern char _ZN12FastTCPFlows10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12FastTCPFlows10initializeEP12ErrorHandler);
++extern char _ZN12FastTCPFlows12add_handlersEv[];
++EXPORT_SYMBOL(_ZN12FastTCPFlows12add_handlersEv);
++extern char _ZN12FastTCPFlows12change_portsEi[];
++EXPORT_SYMBOL(_ZN12FastTCPFlows12change_portsEi);
++extern char _ZN12FastTCPFlows4pullEi[];
++EXPORT_SYMBOL(_ZN12FastTCPFlows4pullEi);
++extern char _ZN12FastTCPFlows5resetEv[];
++EXPORT_SYMBOL(_ZN12FastTCPFlows5resetEv);
++extern char _ZN12FastTCPFlows7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN12FastTCPFlows7cleanupEN7Element12CleanupStageE);
++extern char _ZN12FastTCPFlows8NO_LIMITE[];
++EXPORT_SYMBOL(_ZN12FastTCPFlows8NO_LIMITE);
++extern char _ZN12FastTCPFlows9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12FastTCPFlows9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12FastTCPFlowsC1Ev[];
++EXPORT_SYMBOL(_ZN12FastTCPFlowsC1Ev);
++extern char _ZN12FastTCPFlowsC2Ev[];
++EXPORT_SYMBOL(_ZN12FastTCPFlowsC2Ev);
++extern char _ZN12FastTCPFlowsD0Ev[];
++EXPORT_SYMBOL(_ZN12FastTCPFlowsD0Ev);
++extern char _ZN12FastTCPFlowsD1Ev[];
++EXPORT_SYMBOL(_ZN12FastTCPFlowsD1Ev);
++extern char _ZN12FastTCPFlowsD2Ev[];
++EXPORT_SYMBOL(_ZN12FastTCPFlowsD2Ev);
++extern char _ZNK12FastTCPFlows10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12FastTCPFlows10class_nameEv);
++extern char _ZNK12FastTCPFlows10port_countEv[];
++EXPORT_SYMBOL(_ZNK12FastTCPFlows10port_countEv);
++extern char _ZNK12FastTCPFlows10processingEv[];
++EXPORT_SYMBOL(_ZNK12FastTCPFlows10processingEv);
++extern char _ZTV12FastTCPFlows[];
++EXPORT_SYMBOL(_ZTV12FastTCPFlows);
++extern char _ZN12FastUDPFlows10get_packetEv[];
++EXPORT_SYMBOL(_ZN12FastUDPFlows10get_packetEv);
++extern char _ZN12FastUDPFlows10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12FastUDPFlows10initializeEP12ErrorHandler);
++extern char _ZN12FastUDPFlows12add_handlersEv[];
++EXPORT_SYMBOL(_ZN12FastUDPFlows12add_handlersEv);
++extern char _ZN12FastUDPFlows12change_portsEi[];
++EXPORT_SYMBOL(_ZN12FastUDPFlows12change_portsEi);
++extern char _ZN12FastUDPFlows4pullEi[];
++EXPORT_SYMBOL(_ZN12FastUDPFlows4pullEi);
++extern char _ZN12FastUDPFlows5resetEv[];
++EXPORT_SYMBOL(_ZN12FastUDPFlows5resetEv);
++extern char _ZN12FastUDPFlows7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN12FastUDPFlows7cleanupEN7Element12CleanupStageE);
++extern char _ZN12FastUDPFlows8NO_LIMITE[];
++EXPORT_SYMBOL(_ZN12FastUDPFlows8NO_LIMITE);
++extern char _ZN12FastUDPFlows9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12FastUDPFlows9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12FastUDPFlowsC1Ev[];
++EXPORT_SYMBOL(_ZN12FastUDPFlowsC1Ev);
++extern char _ZN12FastUDPFlowsC2Ev[];
++EXPORT_SYMBOL(_ZN12FastUDPFlowsC2Ev);
++extern char _ZN12FastUDPFlowsD0Ev[];
++EXPORT_SYMBOL(_ZN12FastUDPFlowsD0Ev);
++extern char _ZN12FastUDPFlowsD1Ev[];
++EXPORT_SYMBOL(_ZN12FastUDPFlowsD1Ev);
++extern char _ZN12FastUDPFlowsD2Ev[];
++EXPORT_SYMBOL(_ZN12FastUDPFlowsD2Ev);
++extern char _ZNK12FastUDPFlows10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12FastUDPFlows10class_nameEv);
++extern char _ZNK12FastUDPFlows10port_countEv[];
++EXPORT_SYMBOL(_ZNK12FastUDPFlows10port_countEv);
++extern char _ZNK12FastUDPFlows10processingEv[];
++EXPORT_SYMBOL(_ZNK12FastUDPFlows10processingEv);
++extern char _ZTV12FastUDPFlows[];
++EXPORT_SYMBOL(_ZTV12FastUDPFlows);
++extern char _ZN13FastUDPSource10incr_portsEv[];
++EXPORT_SYMBOL(_ZN13FastUDPSource10incr_portsEv);
++extern char _ZN13FastUDPSource10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13FastUDPSource10initializeEP12ErrorHandler);
++extern char _ZN13FastUDPSource12add_handlersEv[];
++EXPORT_SYMBOL(_ZN13FastUDPSource12add_handlersEv);
++extern char _ZN13FastUDPSource4pullEi[];
++EXPORT_SYMBOL(_ZN13FastUDPSource4pullEi);
++extern char _ZN13FastUDPSource5resetEv[];
++EXPORT_SYMBOL(_ZN13FastUDPSource5resetEv);
++extern char _ZN13FastUDPSource7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN13FastUDPSource7cleanupEN7Element12CleanupStageE);
++extern char _ZN13FastUDPSource8NO_LIMITE[];
++EXPORT_SYMBOL(_ZN13FastUDPSource8NO_LIMITE);
++extern char _ZN13FastUDPSource9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13FastUDPSource9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN13FastUDPSourceC1Ev[];
++EXPORT_SYMBOL(_ZN13FastUDPSourceC1Ev);
++extern char _ZN13FastUDPSourceC2Ev[];
++EXPORT_SYMBOL(_ZN13FastUDPSourceC2Ev);
++extern char _ZN13FastUDPSourceD0Ev[];
++EXPORT_SYMBOL(_ZN13FastUDPSourceD0Ev);
++extern char _ZN13FastUDPSourceD1Ev[];
++EXPORT_SYMBOL(_ZN13FastUDPSourceD1Ev);
++extern char _ZN13FastUDPSourceD2Ev[];
++EXPORT_SYMBOL(_ZN13FastUDPSourceD2Ev);
++extern char _ZNK13FastUDPSource10class_nameEv[];
++EXPORT_SYMBOL(_ZNK13FastUDPSource10class_nameEv);
++extern char _ZNK13FastUDPSource10port_countEv[];
++EXPORT_SYMBOL(_ZNK13FastUDPSource10port_countEv);
++extern char _ZNK13FastUDPSource10processingEv[];
++EXPORT_SYMBOL(_ZNK13FastUDPSource10processingEv);
++extern char _ZTV13FastUDPSource[];
++EXPORT_SYMBOL(_ZTV13FastUDPSource);
++extern char _ZN8FixIPSrc13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN8FixIPSrc13simple_actionEP6Packet);
++extern char _ZN8FixIPSrc6fix_itEP6Packet[];
++EXPORT_SYMBOL(_ZN8FixIPSrc6fix_itEP6Packet);
++extern char _ZN8FixIPSrc9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8FixIPSrc9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN8FixIPSrcC1Ev[];
++EXPORT_SYMBOL(_ZN8FixIPSrcC1Ev);
++extern char _ZN8FixIPSrcC2Ev[];
++EXPORT_SYMBOL(_ZN8FixIPSrcC2Ev);
++extern char _ZN8FixIPSrcD0Ev[];
++EXPORT_SYMBOL(_ZN8FixIPSrcD0Ev);
++extern char _ZN8FixIPSrcD1Ev[];
++EXPORT_SYMBOL(_ZN8FixIPSrcD1Ev);
++extern char _ZN8FixIPSrcD2Ev[];
++EXPORT_SYMBOL(_ZN8FixIPSrcD2Ev);
++extern char _ZNK8FixIPSrc10class_nameEv[];
++EXPORT_SYMBOL(_ZNK8FixIPSrc10class_nameEv);
++extern char _ZNK8FixIPSrc10port_countEv[];
++EXPORT_SYMBOL(_ZNK8FixIPSrc10port_countEv);
++extern char _ZNK8FixIPSrc10processingEv[];
++EXPORT_SYMBOL(_ZNK8FixIPSrc10processingEv);
++extern char _ZTV8FixIPSrc[];
++EXPORT_SYMBOL(_ZTV8FixIPSrc);
++extern char _ZN10FromDevice10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10FromDevice10initializeEP12ErrorHandler);
++extern char _ZN10FromDevice10take_stateEP7ElementP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10FromDevice10take_stateEP7ElementP12ErrorHandler);
++extern char _ZN10FromDevice12add_handlersEv[];
++EXPORT_SYMBOL(_ZN10FromDevice12add_handlersEv);
++extern char _ZN10FromDevice12reset_countsEv[];
++EXPORT_SYMBOL(_ZN10FromDevice12reset_countsEv);
++extern char _ZN10FromDevice14static_cleanupEv[];
++EXPORT_SYMBOL(_ZN10FromDevice14static_cleanupEv);
++extern char _ZN10FromDevice17static_initializeEv[];
++EXPORT_SYMBOL(_ZN10FromDevice17static_initializeEv);
++extern char _ZN10FromDevice4castEPKc[];
++EXPORT_SYMBOL(_ZN10FromDevice4castEPKc);
++extern char _ZN10FromDevice7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN10FromDevice7cleanupEN7Element12CleanupStageE);
++extern char _ZN10FromDevice7got_skbEP7sk_buff[];
++EXPORT_SYMBOL(_ZN10FromDevice7got_skbEP7sk_buff);
++extern char _ZN10FromDevice8run_taskEP4Task[];
++EXPORT_SYMBOL(_ZN10FromDevice8run_taskEP4Task);
++extern char _ZN10FromDevice9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10FromDevice9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN10FromDeviceC1Ev[];
++EXPORT_SYMBOL(_ZN10FromDeviceC1Ev);
++extern char _ZN10FromDeviceC2Ev[];
++EXPORT_SYMBOL(_ZN10FromDeviceC2Ev);
++extern char _ZN10FromDeviceD0Ev[];
++EXPORT_SYMBOL(_ZN10FromDeviceD0Ev);
++extern char _ZN10FromDeviceD1Ev[];
++EXPORT_SYMBOL(_ZN10FromDeviceD1Ev);
++extern char _ZN10FromDeviceD2Ev[];
++EXPORT_SYMBOL(_ZN10FromDeviceD2Ev);
++extern char _ZNK10FromDevice10class_nameEv[];
++EXPORT_SYMBOL(_ZNK10FromDevice10class_nameEv);
++extern char _ZNK10FromDevice10port_countEv[];
++EXPORT_SYMBOL(_ZNK10FromDevice10port_countEv);
++extern char _ZNK10FromDevice10processingEv[];
++EXPORT_SYMBOL(_ZNK10FromDevice10processingEv);
++extern char _ZTV10FromDevice[];
++EXPORT_SYMBOL(_ZTV10FromDevice);
++extern char _ZN8FromHost10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8FromHost10initializeEP12ErrorHandler);
++extern char _ZN8FromHost10new_deviceEPKc[];
++EXPORT_SYMBOL(_ZN8FromHost10new_deviceEPKc);
++extern char _ZN8FromHost17static_initializeEv[];
++EXPORT_SYMBOL(_ZN8FromHost17static_initializeEv);
++extern char _ZN8FromHost20set_device_addressesEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8FromHost20set_device_addressesEP12ErrorHandler);
++extern char _ZN8FromHost5fl_txEP7sk_buffP10net_device[];
++EXPORT_SYMBOL(_ZN8FromHost5fl_txEP7sk_buffP10net_device);
++extern char _ZN8FromHost7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN8FromHost7cleanupEN7Element12CleanupStageE);
++extern char _ZN8FromHost8run_taskEP4Task[];
++EXPORT_SYMBOL(_ZN8FromHost8run_taskEP4Task);
++extern char _ZN8FromHost9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8FromHost9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN8FromHostC1Ev[];
++EXPORT_SYMBOL(_ZN8FromHostC1Ev);
++extern char _ZN8FromHostC2Ev[];
++EXPORT_SYMBOL(_ZN8FromHostC2Ev);
++extern char _ZN8FromHostD0Ev[];
++EXPORT_SYMBOL(_ZN8FromHostD0Ev);
++extern char _ZN8FromHostD1Ev[];
++EXPORT_SYMBOL(_ZN8FromHostD1Ev);
++extern char _ZN8FromHostD2Ev[];
++EXPORT_SYMBOL(_ZN8FromHostD2Ev);
++extern char _ZNK8FromHost10class_nameEv[];
++EXPORT_SYMBOL(_ZNK8FromHost10class_nameEv);
++extern char _ZNK8FromHost10port_countEv[];
++EXPORT_SYMBOL(_ZNK8FromHost10port_countEv);
++extern char _ZNK8FromHost10processingEv[];
++EXPORT_SYMBOL(_ZNK8FromHost10processingEv);
++extern char _ZNK8FromHost15configure_phaseEv[];
++EXPORT_SYMBOL(_ZNK8FromHost15configure_phaseEv);
++extern char _ZTV8FromHost[];
++EXPORT_SYMBOL(_ZTV8FromHost);
++extern char _ZN14FrontDropQueue10take_stateEP7ElementP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14FrontDropQueue10take_stateEP7ElementP12ErrorHandler);
++extern char _ZN14FrontDropQueue16live_reconfigureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14FrontDropQueue16live_reconfigureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN14FrontDropQueue4castEPKc[];
++EXPORT_SYMBOL(_ZN14FrontDropQueue4castEPKc);
++extern char _ZN14FrontDropQueue4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN14FrontDropQueue4pushEiP6Packet);
++extern char _ZN14FrontDropQueueC1Ev[];
++EXPORT_SYMBOL(_ZN14FrontDropQueueC1Ev);
++extern char _ZN14FrontDropQueueC2Ev[];
++EXPORT_SYMBOL(_ZN14FrontDropQueueC2Ev);
++extern char _ZN14FrontDropQueueD0Ev[];
++EXPORT_SYMBOL(_ZN14FrontDropQueueD0Ev);
++extern char _ZN14FrontDropQueueD1Ev[];
++EXPORT_SYMBOL(_ZN14FrontDropQueueD1Ev);
++extern char _ZN14FrontDropQueueD2Ev[];
++EXPORT_SYMBOL(_ZN14FrontDropQueueD2Ev);
++extern char _ZNK11SimpleQueue10port_countEv[];
++EXPORT_SYMBOL(_ZNK11SimpleQueue10port_countEv);
++extern char _ZNK11SimpleQueue10processingEv[];
++EXPORT_SYMBOL(_ZNK11SimpleQueue10processingEv);
++extern char _ZNK11SimpleQueue20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK11SimpleQueue20can_live_reconfigureEv);
++extern char _ZNK14FrontDropQueue10class_nameEv[];
++EXPORT_SYMBOL(_ZNK14FrontDropQueue10class_nameEv);
++extern char _ZTV14FrontDropQueue[];
++EXPORT_SYMBOL(_ZTV14FrontDropQueue);
++extern char _ZN13FTPPortMapper10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13FTPPortMapper10initializeEP12ErrorHandler);
++extern char _ZN13FTPPortMapper13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN13FTPPortMapper13simple_actionEP6Packet);
++extern char _ZN13FTPPortMapper7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN13FTPPortMapper7cleanupEN7Element12CleanupStageE);
++extern char _ZN13FTPPortMapper9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13FTPPortMapper9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN13FTPPortMapperC1Ev[];
++EXPORT_SYMBOL(_ZN13FTPPortMapperC1Ev);
++extern char _ZN13FTPPortMapperC2Ev[];
++EXPORT_SYMBOL(_ZN13FTPPortMapperC2Ev);
++extern char _ZN13FTPPortMapperD0Ev[];
++EXPORT_SYMBOL(_ZN13FTPPortMapperD0Ev);
++extern char _ZN13FTPPortMapperD1Ev[];
++EXPORT_SYMBOL(_ZN13FTPPortMapperD1Ev);
++extern char _ZN13FTPPortMapperD2Ev[];
++EXPORT_SYMBOL(_ZN13FTPPortMapperD2Ev);
++extern char _ZNK13FTPPortMapper10class_nameEv[];
++EXPORT_SYMBOL(_ZNK13FTPPortMapper10class_nameEv);
++extern char _ZNK13FTPPortMapper10port_countEv[];
++EXPORT_SYMBOL(_ZNK13FTPPortMapper10port_countEv);
++extern char _ZTV13FTPPortMapper[];
++EXPORT_SYMBOL(_ZTV13FTPPortMapper);
++extern char _ZN13FullNoteQueue4castEPKc[];
++EXPORT_SYMBOL(_ZN13FullNoteQueue4castEPKc);
++extern char _ZN13FullNoteQueue4pullEi[];
++EXPORT_SYMBOL(_ZN13FullNoteQueue4pullEi);
++extern char _ZN13FullNoteQueue4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN13FullNoteQueue4pushEiP6Packet);
++extern char _ZN13FullNoteQueue9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13FullNoteQueue9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN13FullNoteQueueC1Ev[];
++EXPORT_SYMBOL(_ZN13FullNoteQueueC1Ev);
++extern char _ZN13FullNoteQueueC2Ev[];
++EXPORT_SYMBOL(_ZN13FullNoteQueueC2Ev);
++extern char _ZN13FullNoteQueueD0Ev[];
++EXPORT_SYMBOL(_ZN13FullNoteQueueD0Ev);
++extern char _ZN13FullNoteQueueD1Ev[];
++EXPORT_SYMBOL(_ZN13FullNoteQueueD1Ev);
++extern char _ZN13FullNoteQueueD2Ev[];
++EXPORT_SYMBOL(_ZN13FullNoteQueueD2Ev);
++extern char _ZNK13FullNoteQueue10class_nameEv[];
++EXPORT_SYMBOL(_ZNK13FullNoteQueue10class_nameEv);
++extern char _ZTV13FullNoteQueue[];
++EXPORT_SYMBOL(_ZTV13FullNoteQueue);
++extern char _ZN7GapRate8set_rateEjP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7GapRate8set_rateEjP12ErrorHandler);
++extern char _ZN12GetIPAddress13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN12GetIPAddress13simple_actionEP6Packet);
++extern char _ZN12GetIPAddress9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12GetIPAddress9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12GetIPAddressC1Ev[];
++EXPORT_SYMBOL(_ZN12GetIPAddressC1Ev);
++extern char _ZN12GetIPAddressC2Ev[];
++EXPORT_SYMBOL(_ZN12GetIPAddressC2Ev);
++extern char _ZN12GetIPAddressD0Ev[];
++EXPORT_SYMBOL(_ZN12GetIPAddressD0Ev);
++extern char _ZN12GetIPAddressD1Ev[];
++EXPORT_SYMBOL(_ZN12GetIPAddressD1Ev);
++extern char _ZN12GetIPAddressD2Ev[];
++EXPORT_SYMBOL(_ZN12GetIPAddressD2Ev);
++extern char _ZNK12GetIPAddress10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12GetIPAddress10class_nameEv);
++extern char _ZNK12GetIPAddress10port_countEv[];
++EXPORT_SYMBOL(_ZNK12GetIPAddress10port_countEv);
++extern char _ZNK12GetIPAddress10processingEv[];
++EXPORT_SYMBOL(_ZNK12GetIPAddress10processingEv);
++extern char _ZTV12GetIPAddress[];
++EXPORT_SYMBOL(_ZTV12GetIPAddress);
++extern char _Z11click_qsortPvjjPFiPKvS1_E[];
++EXPORT_SYMBOL(_Z11click_qsortPvjjPFiPKvS1_E);
++extern char _Z11click_qsortPvjjPFiPKvS1_S_ES_[];
++EXPORT_SYMBOL(_Z11click_qsortPvjjPFiPKvS1_S_ES_);
++extern char _Z20click_random_srandomv[];
++EXPORT_SYMBOL(_Z20click_random_srandomv);
++extern char _Z21click_dmalloc_cleanupv[];
++EXPORT_SYMBOL(_Z21click_dmalloc_cleanupv);
++extern char _Z24click_check_header_sizesv[];
++EXPORT_SYMBOL(_Z24click_check_header_sizesv);
++extern char _ZdaPv[];
++EXPORT_SYMBOL(_ZdaPv);
++extern char _ZdlPv[];
++EXPORT_SYMBOL(_ZdlPv);
++extern char _Znaj[];
++EXPORT_SYMBOL(_Znaj);
++extern char _Znwj[];
++EXPORT_SYMBOL(_Znwj);
++extern char __assert_fail[];
++EXPORT_SYMBOL(__assert_fail);
++extern char __cxa_pure_virtual[];
++EXPORT_SYMBOL(__cxa_pure_virtual);
++extern char __rtti_si[];
++EXPORT_SYMBOL(__rtti_si);
++extern char __rtti_user[];
++EXPORT_SYMBOL(__rtti_user);
++extern char click_chatter[];
++EXPORT_SYMBOL(click_chatter);
++extern char click_dmalloc_curnew[];
++EXPORT_SYMBOL(click_dmalloc_curnew);
++extern char click_dmalloc_totalnew[];
++EXPORT_SYMBOL(click_dmalloc_totalnew);
++extern char click_dmalloc_where[];
++EXPORT_SYMBOL(click_dmalloc_where);
++extern char click_lalloc[];
++EXPORT_SYMBOL(click_lalloc);
++extern char click_lfree[];
++EXPORT_SYMBOL(click_lfree);
++extern char click_random_seed[];
++EXPORT_SYMBOL(click_random_seed);
++extern char srandom[];
++EXPORT_SYMBOL(srandom);
++extern char strtol[];
++EXPORT_SYMBOL(strtol);
++extern char _ZN11HandlerCall10call_writeEP7ElementRK6StringS4_P12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11HandlerCall10call_writeEP7ElementRK6StringS4_P12ErrorHandler);
++extern char _ZN11HandlerCall10call_writeERK6StringP7ElementP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11HandlerCall10call_writeERK6StringP7ElementP12ErrorHandler);
++extern char _ZN11HandlerCall10call_writeERK6StringS2_P7ElementP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11HandlerCall10call_writeERK6StringS2_P7ElementP12ErrorHandler);
++extern char _ZN11HandlerCall10initializeEiP7ElementP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11HandlerCall10initializeEiP7ElementP12ErrorHandler);
++extern char _ZN11HandlerCall5resetERPS_P7ElementRK6StringS6_iP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11HandlerCall5resetERPS_P7ElementRK6StringS6_iP12ErrorHandler);
++extern char _ZN11HandlerCall5resetERPS_RK6StringiP7ElementP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11HandlerCall5resetERPS_RK6StringiP7ElementP12ErrorHandler);
++extern char _ZN11HandlerCall6assignEP7ElementRK6StringS4_iP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11HandlerCall6assignEP7ElementRK6StringS4_iP12ErrorHandler);
++extern char _ZN11HandlerCall9call_readEP7ElementRK6StringP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11HandlerCall9call_readEP7ElementRK6StringP12ErrorHandler);
++extern char _ZN11HandlerCall9call_readERK6StringP7ElementP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11HandlerCall9call_readERK6StringP7ElementP12ErrorHandler);
++extern char _ZNK11HandlerCall7unparseEv[];
++EXPORT_SYMBOL(_ZNK11HandlerCall7unparseEv);
++extern char _ZN10HashSwitch4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN10HashSwitch4pushEiP6Packet);
++extern char _ZN10HashSwitch9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10HashSwitch9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN10HashSwitchC1Ev[];
++EXPORT_SYMBOL(_ZN10HashSwitchC1Ev);
++extern char _ZN10HashSwitchC2Ev[];
++EXPORT_SYMBOL(_ZN10HashSwitchC2Ev);
++extern char _ZN10HashSwitchD0Ev[];
++EXPORT_SYMBOL(_ZN10HashSwitchD0Ev);
++extern char _ZN10HashSwitchD1Ev[];
++EXPORT_SYMBOL(_ZN10HashSwitchD1Ev);
++extern char _ZN10HashSwitchD2Ev[];
++EXPORT_SYMBOL(_ZN10HashSwitchD2Ev);
++extern char _ZNK10HashSwitch10class_nameEv[];
++EXPORT_SYMBOL(_ZNK10HashSwitch10class_nameEv);
++extern char _ZNK10HashSwitch10port_countEv[];
++EXPORT_SYMBOL(_ZNK10HashSwitch10port_countEv);
++extern char _ZNK10HashSwitch10processingEv[];
++EXPORT_SYMBOL(_ZNK10HashSwitch10processingEv);
++extern char _ZTV10HashSwitch[];
++EXPORT_SYMBOL(_ZTV10HashSwitch);
++extern char _ZN15HostEtherFilter13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN15HostEtherFilter13simple_actionEP6Packet);
++extern char _ZN15HostEtherFilter9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN15HostEtherFilter9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN15HostEtherFilterC1Ev[];
++EXPORT_SYMBOL(_ZN15HostEtherFilterC1Ev);
++extern char _ZN15HostEtherFilterC2Ev[];
++EXPORT_SYMBOL(_ZN15HostEtherFilterC2Ev);
++extern char _ZN15HostEtherFilterD0Ev[];
++EXPORT_SYMBOL(_ZN15HostEtherFilterD0Ev);
++extern char _ZN15HostEtherFilterD1Ev[];
++EXPORT_SYMBOL(_ZN15HostEtherFilterD1Ev);
++extern char _ZN15HostEtherFilterD2Ev[];
++EXPORT_SYMBOL(_ZN15HostEtherFilterD2Ev);
++extern char _ZNK15HostEtherFilter10class_nameEv[];
++EXPORT_SYMBOL(_ZNK15HostEtherFilter10class_nameEv);
++extern char _ZNK15HostEtherFilter10port_countEv[];
++EXPORT_SYMBOL(_ZNK15HostEtherFilter10port_countEv);
++extern char _ZNK15HostEtherFilter10processingEv[];
++EXPORT_SYMBOL(_ZNK15HostEtherFilter10processingEv);
++extern char _ZTV15HostEtherFilter[];
++EXPORT_SYMBOL(_ZTV15HostEtherFilter);
++extern char _ZN9ICMPError13is_error_typeEi[];
++EXPORT_SYMBOL(_ZN9ICMPError13is_error_typeEi);
++extern char _ZN9ICMPError13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN9ICMPError13simple_actionEP6Packet);
++extern char _ZN9ICMPError18valid_source_routeEPK8click_ip[];
++EXPORT_SYMBOL(_ZN9ICMPError18valid_source_routeEPK8click_ip);
++extern char _ZN9ICMPError9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN9ICMPError9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN9ICMPErrorC1Ev[];
++EXPORT_SYMBOL(_ZN9ICMPErrorC1Ev);
++extern char _ZN9ICMPErrorC2Ev[];
++EXPORT_SYMBOL(_ZN9ICMPErrorC2Ev);
++extern char _ZN9ICMPErrorD0Ev[];
++EXPORT_SYMBOL(_ZN9ICMPErrorD0Ev);
++extern char _ZN9ICMPErrorD1Ev[];
++EXPORT_SYMBOL(_ZN9ICMPErrorD1Ev);
++extern char _ZN9ICMPErrorD2Ev[];
++EXPORT_SYMBOL(_ZN9ICMPErrorD2Ev);
++extern char _ZNK9ICMPError10class_nameEv[];
++EXPORT_SYMBOL(_ZNK9ICMPError10class_nameEv);
++extern char _ZNK9ICMPError10port_countEv[];
++EXPORT_SYMBOL(_ZNK9ICMPError10port_countEv);
++extern char _ZNK9ICMPError10processingEv[];
++EXPORT_SYMBOL(_ZNK9ICMPError10processingEv);
++extern char _ZNK9ICMPError12valid_sourceE7in_addr[];
++EXPORT_SYMBOL(_ZNK9ICMPError12valid_sourceE7in_addr);
++extern char _ZNK9ICMPError7unicastE7in_addr[];
++EXPORT_SYMBOL(_ZNK9ICMPError7unicastE7in_addr);
++extern char _ZTV9ICMPError[];
++EXPORT_SYMBOL(_ZTV9ICMPError);
++extern char _ZN13ICMPPingEncap12add_handlersEv[];
++EXPORT_SYMBOL(_ZN13ICMPPingEncap12add_handlersEv);
++extern char _ZN13ICMPPingEncap12read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN13ICMPPingEncap12read_handlerEP7ElementPv);
++extern char _ZN13ICMPPingEncap13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN13ICMPPingEncap13simple_actionEP6Packet);
++extern char _ZN13ICMPPingEncap13write_handlerERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13ICMPPingEncap13write_handlerERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN13ICMPPingEncap9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13ICMPPingEncap9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN13ICMPPingEncapC1Ev[];
++EXPORT_SYMBOL(_ZN13ICMPPingEncapC1Ev);
++extern char _ZN13ICMPPingEncapC2Ev[];
++EXPORT_SYMBOL(_ZN13ICMPPingEncapC2Ev);
++extern char _ZN13ICMPPingEncapD0Ev[];
++EXPORT_SYMBOL(_ZN13ICMPPingEncapD0Ev);
++extern char _ZN13ICMPPingEncapD1Ev[];
++EXPORT_SYMBOL(_ZN13ICMPPingEncapD1Ev);
++extern char _ZN13ICMPPingEncapD2Ev[];
++EXPORT_SYMBOL(_ZN13ICMPPingEncapD2Ev);
++extern char _ZNK13ICMPPingEncap10class_nameEv[];
++EXPORT_SYMBOL(_ZNK13ICMPPingEncap10class_nameEv);
++extern char _ZNK13ICMPPingEncap10port_countEv[];
++EXPORT_SYMBOL(_ZNK13ICMPPingEncap10port_countEv);
++extern char _ZNK13ICMPPingEncap10processingEv[];
++EXPORT_SYMBOL(_ZNK13ICMPPingEncap10processingEv);
++extern char _ZNK13ICMPPingEncap5flagsEv[];
++EXPORT_SYMBOL(_ZNK13ICMPPingEncap5flagsEv);
++extern char _ZTV13ICMPPingEncap[];
++EXPORT_SYMBOL(_ZTV13ICMPPingEncap);
++extern char _ZN17ICMPPingResponder13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN17ICMPPingResponder13simple_actionEP6Packet);
++extern char _ZN17ICMPPingResponderC1Ev[];
++EXPORT_SYMBOL(_ZN17ICMPPingResponderC1Ev);
++extern char _ZN17ICMPPingResponderC2Ev[];
++EXPORT_SYMBOL(_ZN17ICMPPingResponderC2Ev);
++extern char _ZN17ICMPPingResponderD0Ev[];
++EXPORT_SYMBOL(_ZN17ICMPPingResponderD0Ev);
++extern char _ZN17ICMPPingResponderD1Ev[];
++EXPORT_SYMBOL(_ZN17ICMPPingResponderD1Ev);
++extern char _ZN17ICMPPingResponderD2Ev[];
++EXPORT_SYMBOL(_ZN17ICMPPingResponderD2Ev);
++extern char _ZNK17ICMPPingResponder10class_nameEv[];
++EXPORT_SYMBOL(_ZNK17ICMPPingResponder10class_nameEv);
++extern char _ZNK17ICMPPingResponder10port_countEv[];
++EXPORT_SYMBOL(_ZNK17ICMPPingResponder10port_countEv);
++extern char _ZNK17ICMPPingResponder10processingEv[];
++EXPORT_SYMBOL(_ZNK17ICMPPingResponder10processingEv);
++extern char _ZTV17ICMPPingResponder[];
++EXPORT_SYMBOL(_ZTV17ICMPPingResponder);
++extern char _ZN16ICMPPingRewriter10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN16ICMPPingRewriter10initializeEP12ErrorHandler);
++extern char _ZN16ICMPPingRewriter12add_handlersEv[];
++EXPORT_SYMBOL(_ZN16ICMPPingRewriter12add_handlersEv);
++extern char _ZN16ICMPPingRewriter13apply_patternERK8IPFlowID[];
++EXPORT_SYMBOL(_ZN16ICMPPingRewriter13apply_patternERK8IPFlowID);
++extern char _ZN16ICMPPingRewriter21dump_mappings_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN16ICMPPingRewriter21dump_mappings_handlerEP7ElementPv);
++extern char _ZN16ICMPPingRewriter4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN16ICMPPingRewriter4pushEiP6Packet);
++extern char _ZN16ICMPPingRewriter7Mapping10initializeERK8IPFlowIDS3_bPS0_[];
++EXPORT_SYMBOL(_ZN16ICMPPingRewriter7Mapping10initializeERK8IPFlowIDS3_bPS0_);
++extern char _ZN16ICMPPingRewriter7Mapping5applyEP14WritablePacket[];
++EXPORT_SYMBOL(_ZN16ICMPPingRewriter7Mapping5applyEP14WritablePacket);
++extern char _ZN16ICMPPingRewriter7Mapping9make_pairERK8IPFlowIDS3_PS0_S4_[];
++EXPORT_SYMBOL(_ZN16ICMPPingRewriter7Mapping9make_pairERK8IPFlowIDS3_PS0_S4_);
++extern char _ZN16ICMPPingRewriter7MappingC1Eb[];
++EXPORT_SYMBOL(_ZN16ICMPPingRewriter7MappingC1Eb);
++extern char _ZN16ICMPPingRewriter7MappingC2Eb[];
++EXPORT_SYMBOL(_ZN16ICMPPingRewriter7MappingC2Eb);
++extern char _ZN16ICMPPingRewriter7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN16ICMPPingRewriter7cleanupEN7Element12CleanupStageE);
++extern char _ZN16ICMPPingRewriter9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN16ICMPPingRewriter9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN16ICMPPingRewriter9run_timerEP5Timer[];
++EXPORT_SYMBOL(_ZN16ICMPPingRewriter9run_timerEP5Timer);
++extern char _ZN16ICMPPingRewriterC1Ev[];
++EXPORT_SYMBOL(_ZN16ICMPPingRewriterC1Ev);
++extern char _ZN16ICMPPingRewriterC2Ev[];
++EXPORT_SYMBOL(_ZN16ICMPPingRewriterC2Ev);
++extern char _ZN16ICMPPingRewriterD0Ev[];
++EXPORT_SYMBOL(_ZN16ICMPPingRewriterD0Ev);
++extern char _ZN16ICMPPingRewriterD1Ev[];
++EXPORT_SYMBOL(_ZN16ICMPPingRewriterD1Ev);
++extern char _ZN16ICMPPingRewriterD2Ev[];
++EXPORT_SYMBOL(_ZN16ICMPPingRewriterD2Ev);
++extern char _ZN23_HashMap_const_iteratorI8IPFlowIDPvEC1EPK7HashMapIS0_S1_Eb[];
++EXPORT_SYMBOL(_ZN23_HashMap_const_iteratorI8IPFlowIDPvEC1EPK7HashMapIS0_S1_Eb);
++extern char _ZN23_HashMap_const_iteratorI8IPFlowIDPvEppEi[];
++EXPORT_SYMBOL(_ZN23_HashMap_const_iteratorI8IPFlowIDPvEppEi);
++extern char _ZN7HashMapI8IPFlowIDPvE10initializeEP20HashMap_ArenaFactoryj[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDPvE10initializeEP20HashMap_ArenaFactoryj);
++extern char _ZN7HashMapI8IPFlowIDPvE20set_dynamic_resizingEb[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDPvE20set_dynamic_resizingEb);
++extern char _ZN7HashMapI8IPFlowIDPvE5clearEv[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDPvE5clearEv);
++extern char _ZN7HashMapI8IPFlowIDPvE6insertERKS0_S1_[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDPvE6insertERKS0_S1_);
++extern char _ZN7HashMapI8IPFlowIDPvE6removeERKS0_[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDPvE6removeERKS0_);
++extern char _ZN7HashMapI8IPFlowIDPvE6resizeEj[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDPvE6resizeEj);
++extern char _ZN7HashMapI8IPFlowIDPvE7resize0Ej[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDPvE7resize0Ej);
++extern char _ZN7HashMapI8IPFlowIDPvE9set_arenaEP20HashMap_ArenaFactory[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDPvE9set_arenaEP20HashMap_ArenaFactory);
++extern char _ZN7HashMapI8IPFlowIDPvEC2ES1_P20HashMap_ArenaFactory[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDPvEC2ES1_P20HashMap_ArenaFactory);
++extern char _ZN7HashMapI8IPFlowIDPvED2Ev[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDPvED2Ev);
++extern char _ZNK16ICMPPingRewriter10class_nameEv[];
++EXPORT_SYMBOL(_ZNK16ICMPPingRewriter10class_nameEv);
++extern char _ZNK16ICMPPingRewriter10port_countEv[];
++EXPORT_SYMBOL(_ZNK16ICMPPingRewriter10port_countEv);
++extern char _ZNK16ICMPPingRewriter10processingEv[];
++EXPORT_SYMBOL(_ZNK16ICMPPingRewriter10processingEv);
++extern char _ZNK16ICMPPingRewriter11get_mappingEbRK8IPFlowID[];
++EXPORT_SYMBOL(_ZNK16ICMPPingRewriter11get_mappingEbRK8IPFlowID);
++extern char _ZNK16ICMPPingRewriter7Mapping1sEv[];
++EXPORT_SYMBOL(_ZNK16ICMPPingRewriter7Mapping1sEv);
++extern char _ZNK7HashMapI8IPFlowIDPvE9find_pairERKS0_[];
++EXPORT_SYMBOL(_ZNK7HashMapI8IPFlowIDPvE9find_pairERKS0_);
++extern char _ZTV16ICMPPingRewriter[];
++EXPORT_SYMBOL(_ZTV16ICMPPingRewriter);
++extern char _ZN12ICMPRewriter13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN12ICMPRewriter13simple_actionEP6Packet);
++extern char _ZN12ICMPRewriter14rewrite_packetEP14WritablePacketP8click_ipP9click_udpRK8IPFlowIDPN4IPRw7MappingE[];
++EXPORT_SYMBOL(_ZN12ICMPRewriter14rewrite_packetEP14WritablePacketP8click_ipP9click_udpRK8IPFlowIDPN4IPRw7MappingE);
++extern char _ZN12ICMPRewriter19rewrite_ping_packetEP14WritablePacketP8click_ipP20click_icmp_sequencedRK8IPFlowIDPN16ICMPPingRewriter7MappingE[];
++EXPORT_SYMBOL(_ZN12ICMPRewriter19rewrite_ping_packetEP14WritablePacketP8click_ipP20click_icmp_sequencedRK8IPFlowIDPN16ICMPPingRewriter7MappingE);
++extern char _ZN12ICMPRewriter9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12ICMPRewriter9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12ICMPRewriterC1Ev[];
++EXPORT_SYMBOL(_ZN12ICMPRewriterC1Ev);
++extern char _ZN12ICMPRewriterC2Ev[];
++EXPORT_SYMBOL(_ZN12ICMPRewriterC2Ev);
++extern char _ZN12ICMPRewriterD0Ev[];
++EXPORT_SYMBOL(_ZN12ICMPRewriterD0Ev);
++extern char _ZN12ICMPRewriterD1Ev[];
++EXPORT_SYMBOL(_ZN12ICMPRewriterD1Ev);
++extern char _ZN12ICMPRewriterD2Ev[];
++EXPORT_SYMBOL(_ZN12ICMPRewriterD2Ev);
++extern char _ZNK12ICMPRewriter10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12ICMPRewriter10class_nameEv);
++extern char _ZNK12ICMPRewriter10port_countEv[];
++EXPORT_SYMBOL(_ZNK12ICMPRewriter10port_countEv);
++extern char _ZNK12ICMPRewriter10processingEv[];
++EXPORT_SYMBOL(_ZNK12ICMPRewriter10processingEv);
++extern char _ZTV12ICMPRewriter[];
++EXPORT_SYMBOL(_ZTV12ICMPRewriter);
++extern char _ZN14ICMPPingSource10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14ICMPPingSource10initializeEP12ErrorHandler);
++extern char _ZN14ICMPPingSource11make_packetEv[];
++EXPORT_SYMBOL(_ZN14ICMPPingSource11make_packetEv);
++extern char _ZN14ICMPPingSource12add_handlersEv[];
++EXPORT_SYMBOL(_ZN14ICMPPingSource12add_handlersEv);
++extern char _ZN14ICMPPingSource12read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN14ICMPPingSource12read_handlerEP7ElementPv);
++extern char _ZN14ICMPPingSource13write_handlerERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14ICMPPingSource13write_handlerERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN14ICMPPingSource4pullEi[];
++EXPORT_SYMBOL(_ZN14ICMPPingSource4pullEi);
++extern char _ZN14ICMPPingSource4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN14ICMPPingSource4pushEiP6Packet);
++extern char _ZN14ICMPPingSource7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN14ICMPPingSource7cleanupEN7Element12CleanupStageE);
++extern char _ZN14ICMPPingSource9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14ICMPPingSource9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN14ICMPPingSource9run_timerEP5Timer[];
++EXPORT_SYMBOL(_ZN14ICMPPingSource9run_timerEP5Timer);
++extern char _ZN14ICMPPingSourceC1Ev[];
++EXPORT_SYMBOL(_ZN14ICMPPingSourceC1Ev);
++extern char _ZN14ICMPPingSourceC2Ev[];
++EXPORT_SYMBOL(_ZN14ICMPPingSourceC2Ev);
++extern char _ZN14ICMPPingSourceD0Ev[];
++EXPORT_SYMBOL(_ZN14ICMPPingSourceD0Ev);
++extern char _ZN14ICMPPingSourceD1Ev[];
++EXPORT_SYMBOL(_ZN14ICMPPingSourceD1Ev);
++extern char _ZN14ICMPPingSourceD2Ev[];
++EXPORT_SYMBOL(_ZN14ICMPPingSourceD2Ev);
++extern char _ZNK14ICMPPingSource10class_nameEv[];
++EXPORT_SYMBOL(_ZNK14ICMPPingSource10class_nameEv);
++extern char _ZNK14ICMPPingSource10port_countEv[];
++EXPORT_SYMBOL(_ZNK14ICMPPingSource10port_countEv);
++extern char _ZNK14ICMPPingSource10processingEv[];
++EXPORT_SYMBOL(_ZNK14ICMPPingSource10processingEv);
++extern char _ZTV14ICMPPingSource[];
++EXPORT_SYMBOL(_ZTV14ICMPPingSource);
++extern char _ZN4Idle4castEPKc[];
++EXPORT_SYMBOL(_ZN4Idle4castEPKc);
++extern char _ZN4Idle4pullEi[];
++EXPORT_SYMBOL(_ZN4Idle4pullEi);
++extern char _ZN4Idle4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN4Idle4pushEiP6Packet);
++extern char _ZN4IdleC1Ev[];
++EXPORT_SYMBOL(_ZN4IdleC1Ev);
++extern char _ZN4IdleC2Ev[];
++EXPORT_SYMBOL(_ZN4IdleC2Ev);
++extern char _ZN4IdleD0Ev[];
++EXPORT_SYMBOL(_ZN4IdleD0Ev);
++extern char _ZN4IdleD1Ev[];
++EXPORT_SYMBOL(_ZN4IdleD1Ev);
++extern char _ZN4IdleD2Ev[];
++EXPORT_SYMBOL(_ZN4IdleD2Ev);
++extern char _ZNK4Idle10class_nameEv[];
++EXPORT_SYMBOL(_ZNK4Idle10class_nameEv);
++extern char _ZNK4Idle10port_countEv[];
++EXPORT_SYMBOL(_ZNK4Idle10port_countEv);
++extern char _ZNK4Idle10processingEv[];
++EXPORT_SYMBOL(_ZNK4Idle10processingEv);
++extern char _ZNK4Idle5flagsEv[];
++EXPORT_SYMBOL(_ZNK4Idle5flagsEv);
++extern char _ZNK4Idle9flow_codeEv[];
++EXPORT_SYMBOL(_ZNK4Idle9flow_codeEv);
++extern char _ZTV4Idle[];
++EXPORT_SYMBOL(_ZTV4Idle);
++extern char click_in_cksum_pseudohdr_hard[];
++EXPORT_SYMBOL(click_in_cksum_pseudohdr_hard);
++extern char _ZN14InfiniteSource10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14InfiniteSource10initializeEP12ErrorHandler);
++extern char _ZN14InfiniteSource10read_paramEP7ElementPv[];
++EXPORT_SYMBOL(_ZN14InfiniteSource10read_paramEP7ElementPv);
++extern char _ZN14InfiniteSource12add_handlersEv[];
++EXPORT_SYMBOL(_ZN14InfiniteSource12add_handlersEv);
++extern char _ZN14InfiniteSource12change_paramERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14InfiniteSource12change_paramERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN14InfiniteSource12setup_packetEv[];
++EXPORT_SYMBOL(_ZN14InfiniteSource12setup_packetEv);
++extern char _ZN14InfiniteSource4castEPKc[];
++EXPORT_SYMBOL(_ZN14InfiniteSource4castEPKc);
++extern char _ZN14InfiniteSource4pullEi[];
++EXPORT_SYMBOL(_ZN14InfiniteSource4pullEi);
++extern char _ZN14InfiniteSource7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN14InfiniteSource7cleanupEN7Element12CleanupStageE);
++extern char _ZN14InfiniteSource8run_taskEP4Task[];
++EXPORT_SYMBOL(_ZN14InfiniteSource8run_taskEP4Task);
++extern char _ZN14InfiniteSource9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14InfiniteSource9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN14InfiniteSourceC1Ev[];
++EXPORT_SYMBOL(_ZN14InfiniteSourceC1Ev);
++extern char _ZN14InfiniteSourceC2Ev[];
++EXPORT_SYMBOL(_ZN14InfiniteSourceC2Ev);
++extern char _ZN14InfiniteSourceD0Ev[];
++EXPORT_SYMBOL(_ZN14InfiniteSourceD0Ev);
++extern char _ZN14InfiniteSourceD1Ev[];
++EXPORT_SYMBOL(_ZN14InfiniteSourceD1Ev);
++extern char _ZN14InfiniteSourceD2Ev[];
++EXPORT_SYMBOL(_ZN14InfiniteSourceD2Ev);
++extern char _ZNK14InfiniteSource10class_nameEv[];
++EXPORT_SYMBOL(_ZNK14InfiniteSource10class_nameEv);
++extern char _ZNK14InfiniteSource10port_countEv[];
++EXPORT_SYMBOL(_ZNK14InfiniteSource10port_countEv);
++extern char _ZNK14InfiniteSource10processingEv[];
++EXPORT_SYMBOL(_ZNK14InfiniteSource10processingEv);
++extern char _ZNK14InfiniteSource20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK14InfiniteSource20can_live_reconfigureEv);
++extern char _ZNK14InfiniteSource5flagsEv[];
++EXPORT_SYMBOL(_ZNK14InfiniteSource5flagsEv);
++extern char _ZTV14InfiniteSource[];
++EXPORT_SYMBOL(_ZTV14InfiniteSource);
++extern char _ZThn60_N14InfiniteSourceD0Ev[];
++EXPORT_SYMBOL(_ZThn60_N14InfiniteSourceD0Ev);
++extern char _ZThn60_N14InfiniteSourceD1Ev[];
++EXPORT_SYMBOL(_ZThn60_N14InfiniteSourceD1Ev);
++extern char _ZN8ClickIno10initializeEv[];
++EXPORT_SYMBOL(_ZN8ClickIno10initializeEv);
++extern char _ZN8ClickIno12true_prepareEP6Routerj[];
++EXPORT_SYMBOL(_ZN8ClickIno12true_prepareEP6Routerj);
++extern char _ZN8ClickIno27calculate_handler_conflictsEi[];
++EXPORT_SYMBOL(_ZN8ClickIno27calculate_handler_conflictsEi);
++extern char _ZN8ClickIno4growEi[];
++EXPORT_SYMBOL(_ZN8ClickIno4growEi);
++extern char _ZN8ClickIno5nlinkEm[];
++EXPORT_SYMBOL(_ZN8ClickIno5nlinkEm);
++extern char _ZN8ClickIno6lookupEmRK6String[];
++EXPORT_SYMBOL(_ZN8ClickIno6lookupEmRK6String);
++extern char _ZN8ClickIno7cleanupEv[];
++EXPORT_SYMBOL(_ZN8ClickIno7cleanupEv);
++extern char _ZN8ClickIno7readdirEmRjPFbPKcimijPvES3_[];
++EXPORT_SYMBOL(_ZN8ClickIno7readdirEmRjPFbPKcimijPvES3_);
++extern char _ZNK8ClickIno11name_searchERK6Stringiii[];
++EXPORT_SYMBOL(_ZNK8ClickIno11name_searchERK6Stringiii);
++extern char _Z8int_sqrtj[];
++EXPORT_SYMBOL(_Z8int_sqrtj);
++extern char _ZN9IPAddress11make_prefixEi[];
++EXPORT_SYMBOL(_ZN9IPAddress11make_prefixEi);
++extern char _ZN9IPAddressC1EPKh[];
++EXPORT_SYMBOL(_ZN9IPAddressC1EPKh);
++extern char _ZN9IPAddressC1ERK6String[];
++EXPORT_SYMBOL(_ZN9IPAddressC1ERK6String);
++extern char _ZN9IPAddressC2EPKh[];
++EXPORT_SYMBOL(_ZN9IPAddressC2EPKh);
++extern char _ZN9IPAddressC2ERK6String[];
++EXPORT_SYMBOL(_ZN9IPAddressC2ERK6String);
++extern char _ZNK9IPAddress12unparse_maskEv[];
++EXPORT_SYMBOL(_ZNK9IPAddress12unparse_maskEv);
++extern char _ZNK9IPAddress17unparse_with_maskES_[];
++EXPORT_SYMBOL(_ZNK9IPAddress17unparse_with_maskES_);
++extern char _ZNK9IPAddress18mask_to_prefix_lenEv[];
++EXPORT_SYMBOL(_ZNK9IPAddress18mask_to_prefix_lenEv);
++extern char _ZNK9IPAddress7unparseEv[];
++EXPORT_SYMBOL(_ZNK9IPAddress7unparseEv);
++extern char _ZlsR11StringAccum9IPAddress[];
++EXPORT_SYMBOL(_ZlsR11StringAccum9IPAddress);
++extern char _ZN18IPAddrPairRewriter10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN18IPAddrPairRewriter10initializeEP12ErrorHandler);
++extern char _ZN18IPAddrPairRewriter12add_handlersEv[];
++EXPORT_SYMBOL(_ZN18IPAddrPairRewriter12add_handlersEv);
++extern char _ZN18IPAddrPairRewriter13apply_patternEPN4IPRw7PatternEiRK8IPFlowIDii[];
++EXPORT_SYMBOL(_ZN18IPAddrPairRewriter13apply_patternEPN4IPRw7PatternEiRK8IPFlowIDii);
++extern char _ZN18IPAddrPairRewriter14notify_patternEPN4IPRw7PatternEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN18IPAddrPairRewriter14notify_patternEPN4IPRw7PatternEP12ErrorHandler);
++extern char _ZN18IPAddrPairRewriter17IPAddrPairMapping5applyEP14WritablePacket[];
++EXPORT_SYMBOL(_ZN18IPAddrPairRewriter17IPAddrPairMapping5applyEP14WritablePacket);
++extern char _ZN18IPAddrPairRewriter21dump_mappings_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN18IPAddrPairRewriter21dump_mappings_handlerEP7ElementPv);
++extern char _ZN18IPAddrPairRewriter21dump_patterns_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN18IPAddrPairRewriter21dump_patterns_handlerEP7ElementPv);
++extern char _ZN18IPAddrPairRewriter22dump_nmappings_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN18IPAddrPairRewriter22dump_nmappings_handlerEP7ElementPv);
++extern char _ZN18IPAddrPairRewriter4castEPKc[];
++EXPORT_SYMBOL(_ZN18IPAddrPairRewriter4castEPKc);
++extern char _ZN18IPAddrPairRewriter4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN18IPAddrPairRewriter4pushEiP6Packet);
++extern char _ZN18IPAddrPairRewriter7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN18IPAddrPairRewriter7cleanupEN7Element12CleanupStageE);
++extern char _ZN18IPAddrPairRewriter9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN18IPAddrPairRewriter9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN18IPAddrPairRewriter9run_timerEP5Timer[];
++EXPORT_SYMBOL(_ZN18IPAddrPairRewriter9run_timerEP5Timer);
++extern char _ZN18IPAddrPairRewriterC1Ev[];
++EXPORT_SYMBOL(_ZN18IPAddrPairRewriterC1Ev);
++extern char _ZN18IPAddrPairRewriterC2Ev[];
++EXPORT_SYMBOL(_ZN18IPAddrPairRewriterC2Ev);
++extern char _ZN18IPAddrPairRewriterD0Ev[];
++EXPORT_SYMBOL(_ZN18IPAddrPairRewriterD0Ev);
++extern char _ZN18IPAddrPairRewriterD1Ev[];
++EXPORT_SYMBOL(_ZN18IPAddrPairRewriterD1Ev);
++extern char _ZN18IPAddrPairRewriterD2Ev[];
++EXPORT_SYMBOL(_ZN18IPAddrPairRewriterD2Ev);
++extern char _ZN6VectorIN4IPRw9InputSpecEE5eraseEPS1_S3_[];
++EXPORT_SYMBOL(_ZN6VectorIN4IPRw9InputSpecEE5eraseEPS1_S3_);
++extern char _ZN6VectorIN4IPRw9InputSpecEE7reserveEi[];
++EXPORT_SYMBOL(_ZN6VectorIN4IPRw9InputSpecEE7reserveEi);
++extern char _ZN6VectorIN4IPRw9InputSpecEED1Ev[];
++EXPORT_SYMBOL(_ZN6VectorIN4IPRw9InputSpecEED1Ev);
++extern char _ZNK18IPAddrPairRewriter10class_nameEv[];
++EXPORT_SYMBOL(_ZNK18IPAddrPairRewriter10class_nameEv);
++extern char _ZNK18IPAddrPairRewriter10port_countEv[];
++EXPORT_SYMBOL(_ZNK18IPAddrPairRewriter10port_countEv);
++extern char _ZNK18IPAddrPairRewriter10processingEv[];
++EXPORT_SYMBOL(_ZNK18IPAddrPairRewriter10processingEv);
++extern char _ZNK18IPAddrPairRewriter11get_mappingEiRK8IPFlowID[];
++EXPORT_SYMBOL(_ZNK18IPAddrPairRewriter11get_mappingEiRK8IPFlowID);
++extern char _ZNK18IPAddrPairRewriter17IPAddrPairMapping7reverseEv[];
++EXPORT_SYMBOL(_ZNK18IPAddrPairRewriter17IPAddrPairMapping7reverseEv);
++extern char _ZNK18IPAddrPairRewriter17IPAddrPairMapping7unparseEv[];
++EXPORT_SYMBOL(_ZNK18IPAddrPairRewriter17IPAddrPairMapping7unparseEv);
++extern char _ZNK4IPRw15configure_phaseEv[];
++EXPORT_SYMBOL(_ZNK4IPRw15configure_phaseEv);
++extern char _ZTV18IPAddrPairRewriter[];
++EXPORT_SYMBOL(_ZTV18IPAddrPairRewriter);
++extern char _ZN14IPAddrRewriter10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14IPAddrRewriter10initializeEP12ErrorHandler);
++extern char _ZN14IPAddrRewriter12add_handlersEv[];
++EXPORT_SYMBOL(_ZN14IPAddrRewriter12add_handlersEv);
++extern char _ZN14IPAddrRewriter13IPAddrMapping5applyEP14WritablePacket[];
++EXPORT_SYMBOL(_ZN14IPAddrRewriter13IPAddrMapping5applyEP14WritablePacket);
++extern char _ZN14IPAddrRewriter13apply_patternEPN4IPRw7PatternEiRK8IPFlowIDii[];
++EXPORT_SYMBOL(_ZN14IPAddrRewriter13apply_patternEPN4IPRw7PatternEiRK8IPFlowIDii);
++extern char _ZN14IPAddrRewriter14notify_patternEPN4IPRw7PatternEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14IPAddrRewriter14notify_patternEPN4IPRw7PatternEP12ErrorHandler);
++extern char _ZN14IPAddrRewriter21dump_mappings_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN14IPAddrRewriter21dump_mappings_handlerEP7ElementPv);
++extern char _ZN14IPAddrRewriter21dump_patterns_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN14IPAddrRewriter21dump_patterns_handlerEP7ElementPv);
++extern char _ZN14IPAddrRewriter22dump_nmappings_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN14IPAddrRewriter22dump_nmappings_handlerEP7ElementPv);
++extern char _ZN14IPAddrRewriter4castEPKc[];
++EXPORT_SYMBOL(_ZN14IPAddrRewriter4castEPKc);
++extern char _ZN14IPAddrRewriter4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN14IPAddrRewriter4pushEiP6Packet);
++extern char _ZN14IPAddrRewriter7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN14IPAddrRewriter7cleanupEN7Element12CleanupStageE);
++extern char _ZN14IPAddrRewriter9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14IPAddrRewriter9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN14IPAddrRewriter9run_timerEP5Timer[];
++EXPORT_SYMBOL(_ZN14IPAddrRewriter9run_timerEP5Timer);
++extern char _ZN14IPAddrRewriterC1Ev[];
++EXPORT_SYMBOL(_ZN14IPAddrRewriterC1Ev);
++extern char _ZN14IPAddrRewriterC2Ev[];
++EXPORT_SYMBOL(_ZN14IPAddrRewriterC2Ev);
++extern char _ZN14IPAddrRewriterD0Ev[];
++EXPORT_SYMBOL(_ZN14IPAddrRewriterD0Ev);
++extern char _ZN14IPAddrRewriterD1Ev[];
++EXPORT_SYMBOL(_ZN14IPAddrRewriterD1Ev);
++extern char _ZN14IPAddrRewriterD2Ev[];
++EXPORT_SYMBOL(_ZN14IPAddrRewriterD2Ev);
++extern char _ZNK14IPAddrRewriter10class_nameEv[];
++EXPORT_SYMBOL(_ZNK14IPAddrRewriter10class_nameEv);
++extern char _ZNK14IPAddrRewriter10port_countEv[];
++EXPORT_SYMBOL(_ZNK14IPAddrRewriter10port_countEv);
++extern char _ZNK14IPAddrRewriter10processingEv[];
++EXPORT_SYMBOL(_ZNK14IPAddrRewriter10processingEv);
++extern char _ZNK14IPAddrRewriter11get_mappingEiRK8IPFlowID[];
++EXPORT_SYMBOL(_ZNK14IPAddrRewriter11get_mappingEiRK8IPFlowID);
++extern char _ZNK14IPAddrRewriter13IPAddrMapping7reverseEv[];
++EXPORT_SYMBOL(_ZNK14IPAddrRewriter13IPAddrMapping7reverseEv);
++extern char _ZNK14IPAddrRewriter13IPAddrMapping7unparseEv[];
++EXPORT_SYMBOL(_ZNK14IPAddrRewriter13IPAddrMapping7unparseEv);
++extern char _ZTV14IPAddrRewriter[];
++EXPORT_SYMBOL(_ZTV14IPAddrRewriter);
++extern char _ZN12IPClassifier9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12IPClassifier9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12IPClassifierC1Ev[];
++EXPORT_SYMBOL(_ZN12IPClassifierC1Ev);
++extern char _ZN12IPClassifierC2Ev[];
++EXPORT_SYMBOL(_ZN12IPClassifierC2Ev);
++extern char _ZN12IPClassifierD0Ev[];
++EXPORT_SYMBOL(_ZN12IPClassifierD0Ev);
++extern char _ZN12IPClassifierD1Ev[];
++EXPORT_SYMBOL(_ZN12IPClassifierD1Ev);
++extern char _ZN12IPClassifierD2Ev[];
++EXPORT_SYMBOL(_ZN12IPClassifierD2Ev);
++extern char _ZNK12IPClassifier10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12IPClassifier10class_nameEv);
++extern char _ZNK12IPClassifier10processingEv[];
++EXPORT_SYMBOL(_ZNK12IPClassifier10processingEv);
++extern char _ZNK8IPFilter10port_countEv[];
++EXPORT_SYMBOL(_ZNK8IPFilter10port_countEv);
++extern char _ZNK8IPFilter5flagsEv[];
++EXPORT_SYMBOL(_ZNK8IPFilter5flagsEv);
++extern char _ZTV12IPClassifier[];
++EXPORT_SYMBOL(_ZTV12IPClassifier);
++extern char _ZN7IPEncap10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7IPEncap10initializeEP12ErrorHandler);
++extern char _ZN7IPEncap12add_handlersEv[];
++EXPORT_SYMBOL(_ZN7IPEncap12add_handlersEv);
++extern char _ZN7IPEncap12read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN7IPEncap12read_handlerEP7ElementPv);
++extern char _ZN7IPEncap13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN7IPEncap13simple_actionEP6Packet);
++extern char _ZN7IPEncap9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7IPEncap9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN7IPEncapC1Ev[];
++EXPORT_SYMBOL(_ZN7IPEncapC1Ev);
++extern char _ZN7IPEncapC2Ev[];
++EXPORT_SYMBOL(_ZN7IPEncapC2Ev);
++extern char _ZN7IPEncapD0Ev[];
++EXPORT_SYMBOL(_ZN7IPEncapD0Ev);
++extern char _ZN7IPEncapD1Ev[];
++EXPORT_SYMBOL(_ZN7IPEncapD1Ev);
++extern char _ZN7IPEncapD2Ev[];
++EXPORT_SYMBOL(_ZN7IPEncapD2Ev);
++extern char _ZNK7IPEncap10class_nameEv[];
++EXPORT_SYMBOL(_ZNK7IPEncap10class_nameEv);
++extern char _ZNK7IPEncap10port_countEv[];
++EXPORT_SYMBOL(_ZNK7IPEncap10port_countEv);
++extern char _ZNK7IPEncap10processingEv[];
++EXPORT_SYMBOL(_ZNK7IPEncap10processingEv);
++extern char _ZNK7IPEncap20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK7IPEncap20can_live_reconfigureEv);
++extern char _ZTV7IPEncap[];
++EXPORT_SYMBOL(_ZTV7IPEncap);
++extern char _Z8cp_scanfPKcS0_S0_z[];
++EXPORT_SYMBOL(_Z8cp_scanfPKcS0_S0_z);
++extern char _ZN11IPFieldInfo14static_cleanupEv[];
++EXPORT_SYMBOL(_ZN11IPFieldInfo14static_cleanupEv);
++extern char _ZN11IPFieldInfo17static_initializeEv[];
++EXPORT_SYMBOL(_ZN11IPFieldInfo17static_initializeEv);
++extern char _ZN7IPField5parseEPKcS1_iPS_P12ErrorHandlerP7Element[];
++EXPORT_SYMBOL(_ZN7IPField5parseEPKcS1_iPS_P12ErrorHandlerP7Element);
++extern char _ZN7IPField7unparseEP7Elementb[];
++EXPORT_SYMBOL(_ZN7IPField7unparseEP7Elementb);
++extern char _ZN7IPFieldC1Eiii[];
++EXPORT_SYMBOL(_ZN7IPFieldC1Eiii);
++extern char _ZN7IPFieldC2Eiii[];
++EXPORT_SYMBOL(_ZN7IPFieldC2Eiii);
++extern char _ZN8IPFilter10parse_exprERK6VectorI6StringEiRS0_IiERNS_9PrimitiveEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8IPFilter10parse_exprERK6VectorI6StringEiRS0_IiERNS_9PrimitiveEP12ErrorHandler);
++extern char _ZN8IPFilter10parse_termERK6VectorI6StringEiRS0_IiERNS_9PrimitiveEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8IPFilter10parse_termERK6VectorI6StringEiRS0_IiERNS_9PrimitiveEP12ErrorHandler);
++extern char _ZN8IPFilter12parse_factorERK6VectorI6StringEiRS0_IiERNS_9PrimitiveEbP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8IPFilter12parse_factorERK6VectorI6StringEiRS0_IiERNS_9PrimitiveEbP12ErrorHandler);
++extern char _ZN8IPFilter12parse_orexprERK6VectorI6StringEiRS0_IiERNS_9PrimitiveEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8IPFilter12parse_orexprERK6VectorI6StringEiRS0_IiERNS_9PrimitiveEP12ErrorHandler);
++extern char _ZN8IPFilter14static_cleanupEv[];
++EXPORT_SYMBOL(_ZN8IPFilter14static_cleanupEv);
++extern char _ZN8IPFilter17static_initializeEv[];
++EXPORT_SYMBOL(_ZN8IPFilter17static_initializeEv);
++extern char _ZN8IPFilter19length_checked_pushEP6Packet[];
++EXPORT_SYMBOL(_ZN8IPFilter19length_checked_pushEP6Packet);
++extern char _ZN8IPFilter4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN8IPFilter4pushEiP6Packet);
++extern char _ZN8IPFilter9Primitive10set_srcdstEiP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8IPFilter9Primitive10set_srcdstEiP12ErrorHandler);
++extern char _ZN8IPFilter9Primitive12unparse_typeEii[];
++EXPORT_SYMBOL(_ZN8IPFilter9Primitive12unparse_typeEii);
++extern char _ZN8IPFilter9Primitive13simple_negateEv[];
++EXPORT_SYMBOL(_ZN8IPFilter9Primitive13simple_negateEv);
++extern char _ZN8IPFilter9Primitive16set_transp_protoEiP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8IPFilter9Primitive16set_transp_protoEiP12ErrorHandler);
++extern char _ZN8IPFilter9Primitive20unparse_transp_protoEi[];
++EXPORT_SYMBOL(_ZN8IPFilter9Primitive20unparse_transp_protoEi);
++extern char _ZN8IPFilter9Primitive5checkERKS0_jP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8IPFilter9Primitive5checkERKS0_jP12ErrorHandler);
++extern char _ZN8IPFilter9Primitive5clearEv[];
++EXPORT_SYMBOL(_ZN8IPFilter9Primitive5clearEv);
++extern char _ZN8IPFilter9Primitive8set_maskEjijP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8IPFilter9Primitive8set_maskEjijP12ErrorHandler);
++extern char _ZN8IPFilter9Primitive8set_typeEiP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8IPFilter9Primitive8set_typeEiP12ErrorHandler);
++extern char _ZN8IPFilter9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8IPFilter9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN8IPFilterC1Ev[];
++EXPORT_SYMBOL(_ZN8IPFilterC1Ev);
++extern char _ZN8IPFilterC2Ev[];
++EXPORT_SYMBOL(_ZN8IPFilterC2Ev);
++extern char _ZN8IPFilterD0Ev[];
++EXPORT_SYMBOL(_ZN8IPFilterD0Ev);
++extern char _ZN8IPFilterD1Ev[];
++EXPORT_SYMBOL(_ZN8IPFilterD1Ev);
++extern char _ZN8IPFilterD2Ev[];
++EXPORT_SYMBOL(_ZN8IPFilterD2Ev);
++extern char _ZNK11StringAccum8capacityEv[];
++EXPORT_SYMBOL(_ZNK11StringAccum8capacityEv);
++extern char _ZNK8IPFilter10class_nameEv[];
++EXPORT_SYMBOL(_ZNK8IPFilter10class_nameEv);
++extern char _ZNK8IPFilter10processingEv[];
++EXPORT_SYMBOL(_ZNK8IPFilter10processingEv);
++extern char _ZNK8IPFilter6lookupE6StringiiRjP12ErrorHandler[];
++EXPORT_SYMBOL(_ZNK8IPFilter6lookupE6StringiiRjP12ErrorHandler);
++extern char _ZNK8IPFilter9Primitive10unparse_opEv[];
++EXPORT_SYMBOL(_ZNK8IPFilter9Primitive10unparse_opEv);
++extern char _ZNK8IPFilter9Primitive12unparse_typeEv[];
++EXPORT_SYMBOL(_ZNK8IPFilter9Primitive12unparse_typeEv);
++extern char _ZNK8IPFilter9Primitive20add_comparison_exprsEP10ClassifierR6VectorIiEiibb[];
++EXPORT_SYMBOL(_ZNK8IPFilter9Primitive20add_comparison_exprsEP10ClassifierR6VectorIiEiibb);
++extern char _ZNK8IPFilter9Primitive9add_exprsEP10ClassifierR6VectorIiE[];
++EXPORT_SYMBOL(_ZNK8IPFilter9Primitive9add_exprsEP10ClassifierR6VectorIiE);
++extern char _ZTV8IPFilter[];
++EXPORT_SYMBOL(_ZTV8IPFilter);
++extern char _ZN8IPFlowIDC1EPK6Packet[];
++EXPORT_SYMBOL(_ZN8IPFlowIDC1EPK6Packet);
++extern char _ZN8IPFlowIDC1EPK8click_ip[];
++EXPORT_SYMBOL(_ZN8IPFlowIDC1EPK8click_ip);
++extern char _ZN8IPFlowIDC2EPK6Packet[];
++EXPORT_SYMBOL(_ZN8IPFlowIDC2EPK6Packet);
++extern char _ZN8IPFlowIDC2EPK8click_ip[];
++EXPORT_SYMBOL(_ZN8IPFlowIDC2EPK8click_ip);
++extern char _ZNK8IPFlowID7unparseEv[];
++EXPORT_SYMBOL(_ZNK8IPFlowID7unparseEv);
++extern char _ZlsR11StringAccumRK8IPFlowID[];
++EXPORT_SYMBOL(_ZlsR11StringAccumRK8IPFlowID);
++extern char _ZN12IPFragmenter12add_handlersEv[];
++EXPORT_SYMBOL(_ZN12IPFragmenter12add_handlersEv);
++extern char _ZN12IPFragmenter4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN12IPFragmenter4pushEiP6Packet);
++extern char _ZN12IPFragmenter7optcopyEPK8click_ipPS0_[];
++EXPORT_SYMBOL(_ZN12IPFragmenter7optcopyEPK8click_ipPS0_);
++extern char _ZN12IPFragmenter8fragmentEP6Packet[];
++EXPORT_SYMBOL(_ZN12IPFragmenter8fragmentEP6Packet);
++extern char _ZN12IPFragmenter9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12IPFragmenter9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12IPFragmenterC1Ev[];
++EXPORT_SYMBOL(_ZN12IPFragmenterC1Ev);
++extern char _ZN12IPFragmenterC2Ev[];
++EXPORT_SYMBOL(_ZN12IPFragmenterC2Ev);
++extern char _ZN12IPFragmenterD0Ev[];
++EXPORT_SYMBOL(_ZN12IPFragmenterD0Ev);
++extern char _ZN12IPFragmenterD1Ev[];
++EXPORT_SYMBOL(_ZN12IPFragmenterD1Ev);
++extern char _ZN12IPFragmenterD2Ev[];
++EXPORT_SYMBOL(_ZN12IPFragmenterD2Ev);
++extern char _ZNK12IPFragmenter10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12IPFragmenter10class_nameEv);
++extern char _ZNK12IPFragmenter10port_countEv[];
++EXPORT_SYMBOL(_ZNK12IPFragmenter10port_countEv);
++extern char _ZNK12IPFragmenter10processingEv[];
++EXPORT_SYMBOL(_ZNK12IPFragmenter10processingEv);
++extern char _ZTV12IPFragmenter[];
++EXPORT_SYMBOL(_ZTV12IPFragmenter);
++extern char _ZN11IPGWOptions12add_handlersEv[];
++EXPORT_SYMBOL(_ZN11IPGWOptions12add_handlersEv);
++extern char _ZN11IPGWOptions13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN11IPGWOptions13simple_actionEP6Packet);
++extern char _ZN11IPGWOptions14handle_optionsEP6Packet[];
++EXPORT_SYMBOL(_ZN11IPGWOptions14handle_optionsEP6Packet);
++extern char _ZN11IPGWOptions9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11IPGWOptions9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN11IPGWOptionsC1Ev[];
++EXPORT_SYMBOL(_ZN11IPGWOptionsC1Ev);
++extern char _ZN11IPGWOptionsC2Ev[];
++EXPORT_SYMBOL(_ZN11IPGWOptionsC2Ev);
++extern char _ZN11IPGWOptionsD0Ev[];
++EXPORT_SYMBOL(_ZN11IPGWOptionsD0Ev);
++extern char _ZN11IPGWOptionsD1Ev[];
++EXPORT_SYMBOL(_ZN11IPGWOptionsD1Ev);
++extern char _ZN11IPGWOptionsD2Ev[];
++EXPORT_SYMBOL(_ZN11IPGWOptionsD2Ev);
++extern char _ZNK11IPGWOptions10class_nameEv[];
++EXPORT_SYMBOL(_ZNK11IPGWOptions10class_nameEv);
++extern char _ZNK11IPGWOptions10port_countEv[];
++EXPORT_SYMBOL(_ZNK11IPGWOptions10port_countEv);
++extern char _ZNK11IPGWOptions10processingEv[];
++EXPORT_SYMBOL(_ZNK11IPGWOptions10processingEv);
++extern char _ZTV11IPGWOptions[];
++EXPORT_SYMBOL(_ZTV11IPGWOptions);
++extern char _ZN12IPInputCombo12add_handlersEv[];
++EXPORT_SYMBOL(_ZN12IPInputCombo12add_handlersEv);
++extern char _ZN12IPInputCombo4pullEi[];
++EXPORT_SYMBOL(_ZN12IPInputCombo4pullEi);
++extern char _ZN12IPInputCombo4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN12IPInputCombo4pushEiP6Packet);
++extern char _ZN12IPInputCombo9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12IPInputCombo9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12IPInputComboC1Ev[];
++EXPORT_SYMBOL(_ZN12IPInputComboC1Ev);
++extern char _ZN12IPInputComboC2Ev[];
++EXPORT_SYMBOL(_ZN12IPInputComboC2Ev);
++extern char _ZN12IPInputComboD0Ev[];
++EXPORT_SYMBOL(_ZN12IPInputComboD0Ev);
++extern char _ZN12IPInputComboD1Ev[];
++EXPORT_SYMBOL(_ZN12IPInputComboD1Ev);
++extern char _ZN12IPInputComboD2Ev[];
++EXPORT_SYMBOL(_ZN12IPInputComboD2Ev);
++extern char _ZNK12IPInputCombo10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12IPInputCombo10class_nameEv);
++extern char _ZNK12IPInputCombo10port_countEv[];
++EXPORT_SYMBOL(_ZNK12IPInputCombo10port_countEv);
++extern char _ZNK12IPInputCombo10processingEv[];
++EXPORT_SYMBOL(_ZNK12IPInputCombo10processingEv);
++extern char _ZNK12IPInputCombo5flagsEv[];
++EXPORT_SYMBOL(_ZNK12IPInputCombo5flagsEv);
++extern char _ZTV12IPInputCombo[];
++EXPORT_SYMBOL(_ZTV12IPInputCombo);
++extern char _ZN8IPMirror13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN8IPMirror13simple_actionEP6Packet);
++extern char _ZN8IPMirrorC1Ev[];
++EXPORT_SYMBOL(_ZN8IPMirrorC1Ev);
++extern char _ZN8IPMirrorC2Ev[];
++EXPORT_SYMBOL(_ZN8IPMirrorC2Ev);
++extern char _ZN8IPMirrorD0Ev[];
++EXPORT_SYMBOL(_ZN8IPMirrorD0Ev);
++extern char _ZN8IPMirrorD1Ev[];
++EXPORT_SYMBOL(_ZN8IPMirrorD1Ev);
++extern char _ZN8IPMirrorD2Ev[];
++EXPORT_SYMBOL(_ZN8IPMirrorD2Ev);
++extern char _ZNK8IPMirror10class_nameEv[];
++EXPORT_SYMBOL(_ZNK8IPMirror10class_nameEv);
++extern char _ZNK8IPMirror10port_countEv[];
++EXPORT_SYMBOL(_ZNK8IPMirror10port_countEv);
++extern char _ZNK8IPMirror10processingEv[];
++EXPORT_SYMBOL(_ZNK8IPMirror10processingEv);
++extern char _ZTV8IPMirror[];
++EXPORT_SYMBOL(_ZTV8IPMirror);
++extern char _ZN10IPNameInfo14static_cleanupEv[];
++EXPORT_SYMBOL(_ZN10IPNameInfo14static_cleanupEv);
++extern char _ZN10IPNameInfo17static_initializeEv[];
++EXPORT_SYMBOL(_ZN10IPNameInfo17static_initializeEv);
++extern char _ZN13IPOutputCombo4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN13IPOutputCombo4pushEiP6Packet);
++extern char _ZN13IPOutputCombo9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13IPOutputCombo9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN13IPOutputComboC1Ev[];
++EXPORT_SYMBOL(_ZN13IPOutputComboC1Ev);
++extern char _ZN13IPOutputComboC2Ev[];
++EXPORT_SYMBOL(_ZN13IPOutputComboC2Ev);
++extern char _ZN13IPOutputComboD0Ev[];
++EXPORT_SYMBOL(_ZN13IPOutputComboD0Ev);
++extern char _ZN13IPOutputComboD1Ev[];
++EXPORT_SYMBOL(_ZN13IPOutputComboD1Ev);
++extern char _ZN13IPOutputComboD2Ev[];
++EXPORT_SYMBOL(_ZN13IPOutputComboD2Ev);
++extern char _ZNK13IPOutputCombo10class_nameEv[];
++EXPORT_SYMBOL(_ZNK13IPOutputCombo10class_nameEv);
++extern char _ZNK13IPOutputCombo10port_countEv[];
++EXPORT_SYMBOL(_ZNK13IPOutputCombo10port_countEv);
++extern char _ZNK13IPOutputCombo10processingEv[];
++EXPORT_SYMBOL(_ZNK13IPOutputCombo10processingEv);
++extern char _ZTV13IPOutputCombo[];
++EXPORT_SYMBOL(_ZTV13IPOutputCombo);
++extern char _ZN7IPPrint10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7IPPrint10initializeEP12ErrorHandler);
++extern char _ZN7IPPrint13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN7IPPrint13simple_actionEP6Packet);
++extern char _ZN7IPPrint7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN7IPPrint7cleanupEN7Element12CleanupStageE);
++extern char _ZN7IPPrint9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7IPPrint9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN7IPPrintC1Ev[];
++EXPORT_SYMBOL(_ZN7IPPrintC1Ev);
++extern char _ZN7IPPrintC2Ev[];
++EXPORT_SYMBOL(_ZN7IPPrintC2Ev);
++extern char _ZN7IPPrintD0Ev[];
++EXPORT_SYMBOL(_ZN7IPPrintD0Ev);
++extern char _ZN7IPPrintD1Ev[];
++EXPORT_SYMBOL(_ZN7IPPrintD1Ev);
++extern char _ZN7IPPrintD2Ev[];
++EXPORT_SYMBOL(_ZN7IPPrintD2Ev);
++extern char _ZNK6Packet11user_anno_cEi[];
++EXPORT_SYMBOL(_ZNK6Packet11user_anno_cEi);
++extern char _ZNK6Packet11user_anno_uEi[];
++EXPORT_SYMBOL(_ZNK6Packet11user_anno_uEi);
++extern char _ZNK7IPPrint10class_nameEv[];
++EXPORT_SYMBOL(_ZNK7IPPrint10class_nameEv);
++extern char _ZNK7IPPrint10port_countEv[];
++EXPORT_SYMBOL(_ZNK7IPPrint10port_countEv);
++extern char _ZNK7IPPrint10processingEv[];
++EXPORT_SYMBOL(_ZNK7IPPrint10processingEv);
++extern char _ZNK7IPPrint8tcp_lineER11StringAccumPK6Packeti[];
++EXPORT_SYMBOL(_ZNK7IPPrint8tcp_lineER11StringAccumPK6Packeti);
++extern char _ZNK7IPPrint8udp_lineER11StringAccumPK6Packeti[];
++EXPORT_SYMBOL(_ZNK7IPPrint8udp_lineER11StringAccumPK6Packeti);
++extern char _ZNK7IPPrint9icmp_lineER11StringAccumPK6Packeti[];
++EXPORT_SYMBOL(_ZNK7IPPrint9icmp_lineER11StringAccumPK6Packeti);
++extern char _ZTV7IPPrint[];
++EXPORT_SYMBOL(_ZTV7IPPrint);
++extern char _ZN13IPReassembler10find_queueEP6PacketPPP14WritablePacket[];
++EXPORT_SYMBOL(_ZN13IPReassembler10find_queueEP6PacketPPP14WritablePacket);
++extern char _ZN13IPReassembler10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13IPReassembler10initializeEP12ErrorHandler);
++extern char _ZN13IPReassembler10make_queueEP6PacketPP14WritablePacket[];
++EXPORT_SYMBOL(_ZN13IPReassembler10make_queueEP6PacketPP14WritablePacket);
++extern char _ZN13IPReassembler10next_chunkEP14WritablePacketPNS_9ChunkLinkE[];
++EXPORT_SYMBOL(_ZN13IPReassembler10next_chunkEP14WritablePacketPNS_9ChunkLinkE);
++extern char _ZN13IPReassembler11check_errorEP12ErrorHandleriPK6PacketPKcz[];
++EXPORT_SYMBOL(_ZN13IPReassembler11check_errorEP12ErrorHandleriPK6PacketPKcz);
++extern char _ZN13IPReassembler13reap_overfullEi[];
++EXPORT_SYMBOL(_ZN13IPReassembler13reap_overfullEi);
++extern char _ZN13IPReassembler13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN13IPReassembler13simple_actionEP6Packet);
++extern char _ZN13IPReassembler17emit_whole_packetEP14WritablePacketPS1_P6Packet[];
++EXPORT_SYMBOL(_ZN13IPReassembler17emit_whole_packetEP14WritablePacketPS1_P6Packet);
++extern char _ZN13IPReassembler4reapEi[];
++EXPORT_SYMBOL(_ZN13IPReassembler4reapEi);
++extern char _ZN13IPReassembler5checkEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13IPReassembler5checkEP12ErrorHandler);
++extern char _ZN13IPReassembler7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN13IPReassembler7cleanupEN7Element12CleanupStageE);
++extern char _ZN13IPReassembler9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13IPReassembler9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN13IPReassemblerC1Ev[];
++EXPORT_SYMBOL(_ZN13IPReassemblerC1Ev);
++extern char _ZN13IPReassemblerC2Ev[];
++EXPORT_SYMBOL(_ZN13IPReassemblerC2Ev);
++extern char _ZN13IPReassemblerD0Ev[];
++EXPORT_SYMBOL(_ZN13IPReassemblerD0Ev);
++extern char _ZN13IPReassemblerD1Ev[];
++EXPORT_SYMBOL(_ZN13IPReassemblerD1Ev);
++extern char _ZN13IPReassemblerD2Ev[];
++EXPORT_SYMBOL(_ZN13IPReassemblerD2Ev);
++extern char _ZNK13IPReassembler10class_nameEv[];
++EXPORT_SYMBOL(_ZNK13IPReassembler10class_nameEv);
++extern char _ZNK13IPReassembler10port_countEv[];
++EXPORT_SYMBOL(_ZNK13IPReassembler10port_countEv);
++extern char _ZNK13IPReassembler10processingEv[];
++EXPORT_SYMBOL(_ZNK13IPReassembler10processingEv);
++extern char _ZTV13IPReassembler[];
++EXPORT_SYMBOL(_ZTV13IPReassembler);
++extern char _ZN10IPRewriter10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10IPRewriter10initializeEP12ErrorHandler);
++extern char _ZN10IPRewriter10take_stateEP7ElementP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10IPRewriter10take_stateEP7ElementP12ErrorHandler);
++extern char _ZN10IPRewriter11tcp_gc_hookEP5TimerPv[];
++EXPORT_SYMBOL(_ZN10IPRewriter11tcp_gc_hookEP5TimerPv);
++extern char _ZN10IPRewriter11udp_gc_hookEP5TimerPv[];
++EXPORT_SYMBOL(_ZN10IPRewriter11udp_gc_hookEP5TimerPv);
++extern char _ZN10IPRewriter12add_handlersEv[];
++EXPORT_SYMBOL(_ZN10IPRewriter12add_handlersEv);
++extern char _ZN10IPRewriter13apply_patternEPN4IPRw7PatternEiRK8IPFlowIDii[];
++EXPORT_SYMBOL(_ZN10IPRewriter13apply_patternEPN4IPRw7PatternEiRK8IPFlowIDii);
++extern char _ZN10IPRewriter14notify_patternEPN4IPRw7PatternEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10IPRewriter14notify_patternEPN4IPRw7PatternEP12ErrorHandler);
++extern char _ZN10IPRewriter16tcp_done_gc_hookEP5TimerPv[];
++EXPORT_SYMBOL(_ZN10IPRewriter16tcp_done_gc_hookEP5TimerPv);
++extern char _ZN10IPRewriter21dump_mappings_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN10IPRewriter21dump_mappings_handlerEP7ElementPv);
++extern char _ZN10IPRewriter21dump_patterns_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN10IPRewriter21dump_patterns_handlerEP7ElementPv);
++extern char _ZN10IPRewriter22dump_nmappings_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN10IPRewriter22dump_nmappings_handlerEP7ElementPv);
++extern char _ZN10IPRewriter30dump_tcp_done_mappings_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN10IPRewriter30dump_tcp_done_mappings_handlerEP7ElementPv);
++extern char _ZN10IPRewriter4castEPKc[];
++EXPORT_SYMBOL(_ZN10IPRewriter4castEPKc);
++extern char _ZN10IPRewriter4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN10IPRewriter4pushEiP6Packet);
++extern char _ZN10IPRewriter5llrpcEjPv[];
++EXPORT_SYMBOL(_ZN10IPRewriter5llrpcEjPv);
++extern char _ZN10IPRewriter7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN10IPRewriter7cleanupEN7Element12CleanupStageE);
++extern char _ZN10IPRewriter9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10IPRewriter9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN10IPRewriterC1Ev[];
++EXPORT_SYMBOL(_ZN10IPRewriterC1Ev);
++extern char _ZN10IPRewriterC2Ev[];
++EXPORT_SYMBOL(_ZN10IPRewriterC2Ev);
++extern char _ZN10IPRewriterD0Ev[];
++EXPORT_SYMBOL(_ZN10IPRewriterD0Ev);
++extern char _ZN10IPRewriterD1Ev[];
++EXPORT_SYMBOL(_ZN10IPRewriterD1Ev);
++extern char _ZN10IPRewriterD2Ev[];
++EXPORT_SYMBOL(_ZN10IPRewriterD2Ev);
++extern char _ZN7HashMapI8IPFlowIDPvE4swapERS2_[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDPvE4swapERS2_);
++extern char _ZNK10IPRewriter10class_nameEv[];
++EXPORT_SYMBOL(_ZNK10IPRewriter10class_nameEv);
++extern char _ZNK10IPRewriter10port_countEv[];
++EXPORT_SYMBOL(_ZNK10IPRewriter10port_countEv);
++extern char _ZNK10IPRewriter10processingEv[];
++EXPORT_SYMBOL(_ZNK10IPRewriter10processingEv);
++extern char _ZNK10IPRewriter11get_mappingEiRK8IPFlowID[];
++EXPORT_SYMBOL(_ZNK10IPRewriter11get_mappingEiRK8IPFlowID);
++extern char _ZTV10IPRewriter[];
++EXPORT_SYMBOL(_ZTV10IPRewriter);
++extern char _Z11cp_ip_route6StringP7IPRoutebP7Element[];
++EXPORT_SYMBOL(_Z11cp_ip_route6StringP7IPRoutebP7Element);
++extern char _ZN12IPRouteTable11dump_routesEv[];
++EXPORT_SYMBOL(_ZN12IPRouteTable11dump_routesEv);
++extern char _ZN12IPRouteTable11run_commandEiRK6StringP6VectorI7IPRouteEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12IPRouteTable11run_commandEiRK6StringP6VectorI7IPRouteEP12ErrorHandler);
++extern char _ZN12IPRouteTable12add_handlersEv[];
++EXPORT_SYMBOL(_ZN12IPRouteTable12add_handlersEv);
++extern char _ZN12IPRouteTable12ctrl_handlerERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12IPRouteTable12ctrl_handlerERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN12IPRouteTable12remove_routeERK7IPRoutePS0_P12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12IPRouteTable12remove_routeERK7IPRoutePS0_P12ErrorHandler);
++extern char _ZN12IPRouteTable13table_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN12IPRouteTable13table_handlerEP7ElementPv);
++extern char _ZN12IPRouteTable14lookup_handlerEiR6StringP7ElementPK7HandlerP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12IPRouteTable14lookup_handlerEiR6StringP7ElementPK7HandlerP12ErrorHandler);
++extern char _ZN12IPRouteTable17add_route_handlerERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12IPRouteTable17add_route_handlerERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN12IPRouteTable20remove_route_handlerERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12IPRouteTable20remove_route_handlerERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN12IPRouteTable4castEPKc[];
++EXPORT_SYMBOL(_ZN12IPRouteTable4castEPKc);
++extern char _ZN12IPRouteTable4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN12IPRouteTable4pushEiP6Packet);
++extern char _ZN12IPRouteTable9add_routeERK7IPRoutebPS0_P12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12IPRouteTable9add_routeERK7IPRoutebPS0_P12ErrorHandler);
++extern char _ZN12IPRouteTable9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12IPRouteTable9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12IPRouteTableD0Ev[];
++EXPORT_SYMBOL(_ZN12IPRouteTableD0Ev);
++extern char _ZN12IPRouteTableD1Ev[];
++EXPORT_SYMBOL(_ZN12IPRouteTableD1Ev);
++extern char _ZNK12IPRouteTable12lookup_routeE9IPAddressRS0_[];
++EXPORT_SYMBOL(_ZNK12IPRouteTable12lookup_routeE9IPAddressRS0_);
++extern char _ZNK7IPRoute7unparseER11StringAccumb[];
++EXPORT_SYMBOL(_ZNK7IPRoute7unparseER11StringAccumb);
++extern char _ZNK7IPRoute7unparseEv[];
++EXPORT_SYMBOL(_ZNK7IPRoute7unparseEv);
++extern char _ZTV12IPRouteTable[];
++EXPORT_SYMBOL(_ZTV12IPRouteTable);
++extern char _ZN4IPRw14notify_patternEPNS_7PatternEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN4IPRw14notify_patternEPNS_7PatternEP12ErrorHandler);
++extern char _ZN4IPRw14take_state_mapER7HashMapI8IPFlowIDPNS_7MappingEEPS3_S6_RK6VectorIPNS_7PatternEESC_[];
++EXPORT_SYMBOL(_ZN4IPRw14take_state_mapER7HashMapI8IPFlowIDPNS_7MappingEEPS3_S6_RK6VectorIPNS_7PatternEESC_);
++extern char _ZN4IPRw16parse_input_specERK6StringRNS_9InputSpecES0_P12ErrorHandler[];
++EXPORT_SYMBOL(_ZN4IPRw16parse_input_specERK6StringRNS_9InputSpecES0_P12ErrorHandler);
++extern char _ZN4IPRw22clean_map_free_trackedER7HashMapI8IPFlowIDPNS_7MappingEERS3_S6_j[];
++EXPORT_SYMBOL(_ZN4IPRw22clean_map_free_trackedER7HashMapI8IPFlowIDPNS_7MappingEERS3_S6_j);
++extern char _ZN4IPRw27incr_clean_map_free_trackedER7HashMapI8IPFlowIDPNS_7MappingEERS3_S6_j[];
++EXPORT_SYMBOL(_ZN4IPRw27incr_clean_map_free_trackedER7HashMapI8IPFlowIDPNS_7MappingEERS3_S6_j);
++extern char _ZN4IPRw7Mapping10initializeEiRK8IPFlowIDS3_itPS0_[];
++EXPORT_SYMBOL(_ZN4IPRw7Mapping10initializeEiRK8IPFlowIDS3_itPS0_);
++extern char _ZN4IPRw7Mapping5applyEP14WritablePacket[];
++EXPORT_SYMBOL(_ZN4IPRw7Mapping5applyEP14WritablePacket);
++extern char _ZN4IPRw7Mapping9make_pairEiRK8IPFlowIDS3_iiPS0_S4_[];
++EXPORT_SYMBOL(_ZN4IPRw7Mapping9make_pairEiRK8IPFlowIDS3_iiPS0_S4_);
++extern char _ZN4IPRw7MappingC1Eb[];
++EXPORT_SYMBOL(_ZN4IPRw7MappingC1Eb);
++extern char _ZN4IPRw7MappingC2Eb[];
++EXPORT_SYMBOL(_ZN4IPRw7MappingC2Eb);
++extern char _ZN4IPRw7Pattern10parse_naptER6VectorI6StringEPPS0_P7ElementP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN4IPRw7Pattern10parse_naptER6VectorI6StringEPPS0_P7ElementP12ErrorHandler);
++extern char _ZN4IPRw7Pattern14accept_mappingEPNS_7MappingE[];
++EXPORT_SYMBOL(_ZN4IPRw7Pattern14accept_mappingEPNS_7MappingE);
++extern char _ZN4IPRw7Pattern14create_mappingEiRK8IPFlowIDiiPNS_7MappingES5_RK7HashMapIS1_S5_E[];
++EXPORT_SYMBOL(_ZN4IPRw7Pattern14create_mappingEiRK8IPFlowIDiiPNS_7MappingES5_RK7HashMapIS1_S5_E);
++extern char _ZN4IPRw7Pattern16parse_with_portsERK6StringPPS0_PiS6_P7ElementP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN4IPRw7Pattern16parse_with_portsERK6StringPPS0_PiS6_P7ElementP12ErrorHandler);
++extern char _ZN4IPRw7Pattern5parseERK6StringPPS0_P7ElementP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN4IPRw7Pattern5parseERK6StringPPS0_P7ElementP12ErrorHandler);
++extern char _ZN4IPRw7Pattern9parse_natER6VectorI6StringEPPS0_P7ElementP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN4IPRw7Pattern9parse_natER6VectorI6StringEPPS0_P7ElementP12ErrorHandler);
++extern char _ZN4IPRw7PatternC1ERK9IPAddressiS3_ibbj[];
++EXPORT_SYMBOL(_ZN4IPRw7PatternC1ERK9IPAddressiS3_ibbj);
++extern char _ZN4IPRw7PatternC2ERK9IPAddressiS3_ibbj[];
++EXPORT_SYMBOL(_ZN4IPRw7PatternC2ERK9IPAddressiS3_ibbj);
++extern char _ZN4IPRw9clean_mapER7HashMapI8IPFlowIDPNS_7MappingEEj[];
++EXPORT_SYMBOL(_ZN4IPRw9clean_mapER7HashMapI8IPFlowIDPNS_7MappingEEj);
++extern char _ZN4IPRw9clear_mapER7HashMapI8IPFlowIDPNS_7MappingEE[];
++EXPORT_SYMBOL(_ZN4IPRw9clear_mapER7HashMapI8IPFlowIDPNS_7MappingEE);
++extern char _ZN4IPRwC1Ev[];
++EXPORT_SYMBOL(_ZN4IPRwC1Ev);
++extern char _ZN4IPRwC2Ev[];
++EXPORT_SYMBOL(_ZN4IPRwC2Ev);
++extern char _ZN4IPRwD0Ev[];
++EXPORT_SYMBOL(_ZN4IPRwD0Ev);
++extern char _ZN4IPRwD1Ev[];
++EXPORT_SYMBOL(_ZN4IPRwD1Ev);
++extern char _ZN4IPRwD2Ev[];
++EXPORT_SYMBOL(_ZN4IPRwD2Ev);
++extern char _ZN6VectorI6StringE6resizeEiRKS0_[];
++EXPORT_SYMBOL(_ZN6VectorI6StringE6resizeEiRKS0_);
++extern char _ZN6VectorI6StringE7reserveEi[];
++EXPORT_SYMBOL(_ZN6VectorI6StringE7reserveEi);
++extern char _ZN8IPMapper15notify_rewriterEP4IPRwP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8IPMapper15notify_rewriterEP4IPRwP12ErrorHandler);
++extern char _ZN8IPMapper7get_mapEP4IPRwiRK8IPFlowIDP6Packet[];
++EXPORT_SYMBOL(_ZN8IPMapper7get_mapEP4IPRwiRK8IPFlowIDP6Packet);
++extern char _ZN8IPMapperD0Ev[];
++EXPORT_SYMBOL(_ZN8IPMapperD0Ev);
++extern char _ZN8IPMapperD1Ev[];
++EXPORT_SYMBOL(_ZN8IPMapperD1Ev);
++extern char _ZNK4IPRw7Mapping7unparseEv[];
++EXPORT_SYMBOL(_ZNK4IPRw7Mapping7unparseEv);
++extern char _ZNK4IPRw7Pattern15can_accept_fromERKS0_[];
++EXPORT_SYMBOL(_ZNK4IPRw7Pattern15can_accept_fromERKS0_);
++extern char _ZNK4IPRw7Pattern7unparseEv[];
++EXPORT_SYMBOL(_ZNK4IPRw7Pattern7unparseEv);
++extern char _ZTV4IPRw[];
++EXPORT_SYMBOL(_ZTV4IPRw);
++extern char _ZTV8IPMapper[];
++EXPORT_SYMBOL(_ZTV8IPMapper);
++extern char _ZN18IPRewriterPatterns4findEP7ElementRK6StringP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN18IPRewriterPatterns4findEP7ElementRK6StringP12ErrorHandler);
++extern char _ZN18IPRewriterPatterns7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN18IPRewriterPatterns7cleanupEN7Element12CleanupStageE);
++extern char _ZN18IPRewriterPatterns9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN18IPRewriterPatterns9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN18IPRewriterPatternsC1Ev[];
++EXPORT_SYMBOL(_ZN18IPRewriterPatternsC1Ev);
++extern char _ZN18IPRewriterPatternsC2Ev[];
++EXPORT_SYMBOL(_ZN18IPRewriterPatternsC2Ev);
++extern char _ZN18IPRewriterPatternsD0Ev[];
++EXPORT_SYMBOL(_ZN18IPRewriterPatternsD0Ev);
++extern char _ZN18IPRewriterPatternsD1Ev[];
++EXPORT_SYMBOL(_ZN18IPRewriterPatternsD1Ev);
++extern char _ZN18IPRewriterPatternsD2Ev[];
++EXPORT_SYMBOL(_ZN18IPRewriterPatternsD2Ev);
++extern char _ZNK18IPRewriterPatterns10class_nameEv[];
++EXPORT_SYMBOL(_ZNK18IPRewriterPatterns10class_nameEv);
++extern char _ZNK18IPRewriterPatterns15configure_phaseEv[];
++EXPORT_SYMBOL(_ZNK18IPRewriterPatterns15configure_phaseEv);
++extern char _ZTV18IPRewriterPatterns[];
++EXPORT_SYMBOL(_ZTV18IPRewriterPatterns);
++extern char _ZN6VectorIN7IPTable5EntryEE10push_frontERKS1_[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEE10push_frontERKS1_);
++extern char _ZN6VectorIN7IPTable5EntryEE2atEi[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEE2atEi);
++extern char _ZN6VectorIN7IPTable5EntryEE3endEv[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEE3endEv);
++extern char _ZN6VectorIN7IPTable5EntryEE4at_uEi[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEE4at_uEi);
++extern char _ZN6VectorIN7IPTable5EntryEE4backEv[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEE4backEv);
++extern char _ZN6VectorIN7IPTable5EntryEE4swapERS2_[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEE4swapERS2_);
++extern char _ZN6VectorIN7IPTable5EntryEE4veltEPS1_i[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEE4veltEPS1_i);
++extern char _ZN6VectorIN7IPTable5EntryEE5beginEv[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEE5beginEv);
++extern char _ZN6VectorIN7IPTable5EntryEE5clearEv[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEE5clearEv);
++extern char _ZN6VectorIN7IPTable5EntryEE5eraseEPS1_[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEE5eraseEPS1_);
++extern char _ZN6VectorIN7IPTable5EntryEE5eraseEPS1_S3_[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEE5eraseEPS1_S3_);
++extern char _ZN6VectorIN7IPTable5EntryEE5frontEv[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEE5frontEv);
++extern char _ZN6VectorIN7IPTable5EntryEE6assignEiRKS1_[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEE6assignEiRKS1_);
++extern char _ZN6VectorIN7IPTable5EntryEE6insertEPS1_RKS1_[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEE6insertEPS1_RKS1_);
++extern char _ZN6VectorIN7IPTable5EntryEE6resizeEiRKS1_[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEE6resizeEiRKS1_);
++extern char _ZN6VectorIN7IPTable5EntryEE7reserveEi[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEE7reserveEi);
++extern char _ZN6VectorIN7IPTable5EntryEE8pop_backEv[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEE8pop_backEv);
++extern char _ZN6VectorIN7IPTable5EntryEE9pop_frontEv[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEE9pop_frontEv);
++extern char _ZN6VectorIN7IPTable5EntryEE9push_backERKS1_[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEE9push_backERKS1_);
++extern char _ZN6VectorIN7IPTable5EntryEEC1ERKS2_[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEEC1ERKS2_);
++extern char _ZN6VectorIN7IPTable5EntryEEC1EiRKS1_[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEEC1EiRKS1_);
++extern char _ZN6VectorIN7IPTable5EntryEEC1Ev[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEEC1Ev);
++extern char _ZN6VectorIN7IPTable5EntryEEC2ERKS2_[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEEC2ERKS2_);
++extern char _ZN6VectorIN7IPTable5EntryEEC2EiRKS1_[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEEC2EiRKS1_);
++extern char _ZN6VectorIN7IPTable5EntryEEC2Ev[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEEC2Ev);
++extern char _ZN6VectorIN7IPTable5EntryEED1Ev[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEED1Ev);
++extern char _ZN6VectorIN7IPTable5EntryEED2Ev[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEED2Ev);
++extern char _ZN6VectorIN7IPTable5EntryEEaSERKS2_[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEEaSERKS2_);
++extern char _ZN6VectorIN7IPTable5EntryEEixEi[];
++EXPORT_SYMBOL(_ZN6VectorIN7IPTable5EntryEEixEi);
++extern char _ZN7IPTable3addE9IPAddressS0_S0_i[];
++EXPORT_SYMBOL(_ZN7IPTable3addE9IPAddressS0_S0_i);
++extern char _ZN7IPTable3delE9IPAddressS0_[];
++EXPORT_SYMBOL(_ZN7IPTable3delE9IPAddressS0_);
++extern char _ZN7IPTableC1Ev[];
++EXPORT_SYMBOL(_ZN7IPTableC1Ev);
++extern char _ZN7IPTableC2Ev[];
++EXPORT_SYMBOL(_ZN7IPTableC2Ev);
++extern char _ZN7IPTableD1Ev[];
++EXPORT_SYMBOL(_ZN7IPTableD1Ev);
++extern char _ZN7IPTableD2Ev[];
++EXPORT_SYMBOL(_ZN7IPTableD2Ev);
++extern char _ZNK6VectorIN7IPTable5EntryEE2atEi[];
++EXPORT_SYMBOL(_ZNK6VectorIN7IPTable5EntryEE2atEi);
++extern char _ZNK6VectorIN7IPTable5EntryEE3endEv[];
++EXPORT_SYMBOL(_ZNK6VectorIN7IPTable5EntryEE3endEv);
++extern char _ZNK6VectorIN7IPTable5EntryEE4at_uEi[];
++EXPORT_SYMBOL(_ZNK6VectorIN7IPTable5EntryEE4at_uEi);
++extern char _ZNK6VectorIN7IPTable5EntryEE4backEv[];
++EXPORT_SYMBOL(_ZNK6VectorIN7IPTable5EntryEE4backEv);
++extern char _ZNK6VectorIN7IPTable5EntryEE4sizeEv[];
++EXPORT_SYMBOL(_ZNK6VectorIN7IPTable5EntryEE4sizeEv);
++extern char _ZNK6VectorIN7IPTable5EntryEE4veltEi[];
++EXPORT_SYMBOL(_ZNK6VectorIN7IPTable5EntryEE4veltEi);
++extern char _ZNK6VectorIN7IPTable5EntryEE5beginEv[];
++EXPORT_SYMBOL(_ZNK6VectorIN7IPTable5EntryEE5beginEv);
++extern char _ZNK6VectorIN7IPTable5EntryEE5emptyEv[];
++EXPORT_SYMBOL(_ZNK6VectorIN7IPTable5EntryEE5emptyEv);
++extern char _ZNK6VectorIN7IPTable5EntryEE5frontEv[];
++EXPORT_SYMBOL(_ZNK6VectorIN7IPTable5EntryEE5frontEv);
++extern char _ZNK6VectorIN7IPTable5EntryEE8capacityEv[];
++EXPORT_SYMBOL(_ZNK6VectorIN7IPTable5EntryEE8capacityEv);
++extern char _ZNK6VectorIN7IPTable5EntryEEixEi[];
++EXPORT_SYMBOL(_ZNK6VectorIN7IPTable5EntryEEixEi);
++extern char _ZNK7IPTable6lookupE9IPAddressRS0_Ri[];
++EXPORT_SYMBOL(_ZNK7IPTable6lookupE9IPAddressRS0_Ri);
++extern char _ZN10LexerExtra7requireE6StringP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10LexerExtra7requireE6StringP12ErrorHandler);
++extern char _ZN10LexerExtraD0Ev[];
++EXPORT_SYMBOL(_ZN10LexerExtraD0Ev);
++extern char _ZN10LexerExtraD1Ev[];
++EXPORT_SYMBOL(_ZN10LexerExtraD1Ev);
++extern char _ZN16VariableExpanderD0Ev[];
++EXPORT_SYMBOL(_ZN16VariableExpanderD0Ev);
++extern char _ZN16VariableExpanderD1Ev[];
++EXPORT_SYMBOL(_ZN16VariableExpanderD1Ev);
++extern char _ZN5Lexer10add_tunnelE6StringS0_[];
++EXPORT_SYMBOL(_ZN5Lexer10add_tunnelE6StringS0_);
++extern char _ZN5Lexer10lex_configEv[];
++EXPORT_SYMBOL(_ZN5Lexer10lex_configEv);
++extern char _ZN5Lexer10skip_quoteEPKcc[];
++EXPORT_SYMBOL(_ZN5Lexer10skip_quoteEPKcc);
++extern char _ZN5Lexer10ystatementEb[];
++EXPORT_SYMBOL(_ZN5Lexer10ystatementEb);
++extern char _ZN5Lexer11begin_parseERK6StringS2_P10LexerExtraP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN5Lexer11begin_parseERK6StringS2_P10LexerExtraP12ErrorHandler);
++extern char _ZN5Lexer11get_elementE6StringiRKS0_S2_[];
++EXPORT_SYMBOL(_ZN5Lexer11get_elementE6StringiRKS0_S2_);
++extern char _ZN5Lexer11next_lexemeEv[];
++EXPORT_SYMBOL(_ZN5Lexer11next_lexemeEv);
++extern char _ZN5Lexer11yconnectionEv[];
++EXPORT_SYMBOL(_ZN5Lexer11yconnectionEv);
++extern char _ZN5Lexer12ydeclarationERK6String[];
++EXPORT_SYMBOL(_ZN5Lexer12ydeclarationERK6String);
++extern char _ZN5Lexer13create_routerEP6Master[];
++EXPORT_SYMBOL(_ZN5Lexer13create_routerEP6Master);
++extern char _ZN5Lexer13lexeme_stringEi[];
++EXPORT_SYMBOL(_ZN5Lexer13lexeme_stringEi);
++extern char _ZN5Lexer13yelementclassEv[];
++EXPORT_SYMBOL(_ZN5Lexer13yelementclassEv);
++extern char _ZN5Lexer15skip_slash_starEPKc[];
++EXPORT_SYMBOL(_ZN5Lexer15skip_slash_starEPKc);
++extern char _ZN5Lexer16add_element_typeERK6StringPFP7ElementmEmP6moduleb[];
++EXPORT_SYMBOL(_ZN5Lexer16add_element_typeERK6StringPFP7ElementmEmP6moduleb);
++extern char _ZN5Lexer18force_element_typeE6String[];
++EXPORT_SYMBOL(_ZN5Lexer18force_element_typeE6String);
++extern char _ZN5Lexer18set_remaining_textERK6String[];
++EXPORT_SYMBOL(_ZN5Lexer18set_remaining_textERK6String);
++extern char _ZN5Lexer19lexical_scoping_outEi[];
++EXPORT_SYMBOL(_ZN5Lexer19lexical_scoping_outEi);
++extern char _ZN5Lexer19remove_element_typeEiPi[];
++EXPORT_SYMBOL(_ZN5Lexer19remove_element_typeEiPi);
++extern char _ZN5Lexer19ycompound_argumentsEPNS_8CompoundE[];
++EXPORT_SYMBOL(_ZN5Lexer19ycompound_argumentsEPNS_8CompoundE);
++extern char _ZN5Lexer20skip_backslash_angleEPKc[];
++EXPORT_SYMBOL(_ZN5Lexer20skip_backslash_angleEPKc);
++extern char _ZN5Lexer22add_router_connectionsEiRK6VectorIiEP6Router[];
++EXPORT_SYMBOL(_ZN5Lexer22add_router_connectionsEiRK6VectorIiEP6Router);
++extern char _ZN5Lexer22process_line_directiveEPKc[];
++EXPORT_SYMBOL(_ZN5Lexer22process_line_directiveEPKc);
++extern char _ZN5Lexer23expand_compound_elementEiR19VariableEnvironment[];
++EXPORT_SYMBOL(_ZN5Lexer23expand_compound_elementEiR19VariableEnvironment);
++extern char _ZN5Lexer24deanonymize_element_nameERK6Stringi[];
++EXPORT_SYMBOL(_ZN5Lexer24deanonymize_element_nameERK6Stringi);
++extern char _ZN5Lexer3lexEv[];
++EXPORT_SYMBOL(_ZN5Lexer3lexEv);
++extern char _ZN5Lexer4yvarEv[];
++EXPORT_SYMBOL(_ZN5Lexer4yvarEv);
++extern char _ZN5Lexer5unlexERK6Lexeme[];
++EXPORT_SYMBOL(_ZN5Lexer5unlexERK6Lexeme);
++extern char _ZN5Lexer5yportERi[];
++EXPORT_SYMBOL(_ZN5Lexer5yportERi);
++extern char _ZN5Lexer6expectEib[];
++EXPORT_SYMBOL(_ZN5Lexer6expectEib);
++extern char _ZN5Lexer6lerrorEPKcz[];
++EXPORT_SYMBOL(_ZN5Lexer6lerrorEPKcz);
++extern char _ZN5Lexer7connectEiiii[];
++EXPORT_SYMBOL(_ZN5Lexer7connectEiiii);
++extern char _ZN5Lexer7ytunnelEv[];
++EXPORT_SYMBOL(_ZN5Lexer7ytunnelEv);
++extern char _ZN5Lexer8Compound11expand_intoEPS_iR19VariableEnvironment[];
++EXPORT_SYMBOL(_ZN5Lexer8Compound11expand_intoEPS_iR19VariableEnvironment);
++extern char _ZN5Lexer8Compound20printable_name_c_strEv[];
++EXPORT_SYMBOL(_ZN5Lexer8Compound20printable_name_c_strEv);
++extern char _ZN5Lexer8Compound4castEPKc[];
++EXPORT_SYMBOL(_ZN5Lexer8Compound4castEPKc);
++extern char _ZN5Lexer8Compound6finishEPS_P12ErrorHandler[];
++EXPORT_SYMBOL(_ZN5Lexer8Compound6finishEPS_P12ErrorHandler);
++extern char _ZN5Lexer8Compound7resolveEPS_iiiR6VectorI6StringEP12ErrorHandlerRKS3_[];
++EXPORT_SYMBOL(_ZN5Lexer8Compound7resolveEPS_iiiR6VectorI6StringEP12ErrorHandlerRKS3_);
++extern char _ZN5Lexer8Compound9signatureERK6StringPK6VectorIS1_Eiii[];
++EXPORT_SYMBOL(_ZN5Lexer8Compound9signatureERK6StringPK6VectorIS1_Eiii);
++extern char _ZN5Lexer8CompoundC1ERK6StringS3_P19VariableEnvironment[];
++EXPORT_SYMBOL(_ZN5Lexer8CompoundC1ERK6StringS3_P19VariableEnvironment);
++extern char _ZN5Lexer8CompoundC2ERK6StringS3_P19VariableEnvironment[];
++EXPORT_SYMBOL(_ZN5Lexer8CompoundC2ERK6StringS3_P19VariableEnvironment);
++extern char _ZN5Lexer8CompoundD0Ev[];
++EXPORT_SYMBOL(_ZN5Lexer8CompoundD0Ev);
++extern char _ZN5Lexer8CompoundD1Ev[];
++EXPORT_SYMBOL(_ZN5Lexer8CompoundD1Ev);
++extern char _ZN5Lexer8yelementERib[];
++EXPORT_SYMBOL(_ZN5Lexer8yelementERib);
++extern char _ZN5Lexer8yrequireEv[];
++EXPORT_SYMBOL(_ZN5Lexer8yrequireEv);
++extern char _ZN5Lexer9TunnelEnd4findERKN6Router6HookupE[];
++EXPORT_SYMBOL(_ZN5Lexer9TunnelEnd4findERKN6Router6HookupE);
++extern char _ZN5Lexer9TunnelEnd6expandEPKS_R6VectorIN6Router6HookupEE[];
++EXPORT_SYMBOL(_ZN5Lexer9TunnelEnd6expandEPKS_R6VectorIN6Router6HookupEE);
++extern char _ZN5Lexer9TunnelEndC1ERKN6Router6HookupEbPS0_[];
++EXPORT_SYMBOL(_ZN5Lexer9TunnelEndC1ERKN6Router6HookupEbPS0_);
++extern char _ZN5Lexer9TunnelEndC2ERKN6Router6HookupEbPS0_[];
++EXPORT_SYMBOL(_ZN5Lexer9TunnelEndC2ERKN6Router6HookupEbPS0_);
++extern char _ZN5Lexer9end_parseEi[];
++EXPORT_SYMBOL(_ZN5Lexer9end_parseEi);
++extern char _ZN5Lexer9skip_lineEPKc[];
++EXPORT_SYMBOL(_ZN5Lexer9skip_lineEPKc);
++extern char _ZN5Lexer9ycompoundE6String[];
++EXPORT_SYMBOL(_ZN5Lexer9ycompoundE6String);
++extern char _ZN5LexerC1Ev[];
++EXPORT_SYMBOL(_ZN5LexerC1Ev);
++extern char _ZN5LexerC2Ev[];
++EXPORT_SYMBOL(_ZN5LexerC2Ev);
++extern char _ZN5LexerD0Ev[];
++EXPORT_SYMBOL(_ZN5LexerD0Ev);
++extern char _ZN5LexerD1Ev[];
++EXPORT_SYMBOL(_ZN5LexerD1Ev);
++extern char _ZN5LexerD2Ev[];
++EXPORT_SYMBOL(_ZN5LexerD2Ev);
++extern char _ZN6VectorI6StringE5eraseEPS0_S2_[];
++EXPORT_SYMBOL(_ZN6VectorI6StringE5eraseEPS0_S2_);
++extern char _ZN6VectorIN5Lexer11ElementTypeEE7reserveEi[];
++EXPORT_SYMBOL(_ZN6VectorIN5Lexer11ElementTypeEE7reserveEi);
++extern char _ZN6VectorIN5Lexer11ElementTypeEED1Ev[];
++EXPORT_SYMBOL(_ZN6VectorIN5Lexer11ElementTypeEED1Ev);
++extern char _ZN6VectorIN6Router6HookupEE7reserveEi[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEE7reserveEi);
++extern char _ZN6VectorIN6Router6HookupEED1Ev[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEED1Ev);
++extern char _ZNK5Lexer12element_nameEi[];
++EXPORT_SYMBOL(_ZNK5Lexer12element_nameEi);
++extern char _ZNK5Lexer12element_typeERK6String[];
++EXPORT_SYMBOL(_ZNK5Lexer12element_typeERK6String);
++extern char _ZNK5Lexer14remaining_textEv[];
++EXPORT_SYMBOL(_ZNK5Lexer14remaining_textEv);
++extern char _ZNK5Lexer16element_landmarkEi[];
++EXPORT_SYMBOL(_ZNK5Lexer16element_landmarkEi);
++extern char _ZNK5Lexer16find_connectionsERKN6Router6HookupEbR6VectorIS1_E[];
++EXPORT_SYMBOL(_ZNK5Lexer16find_connectionsERKN6Router6HookupEbR6VectorIS1_E);
++extern char _ZNK5Lexer17anon_element_nameERK6String[];
++EXPORT_SYMBOL(_ZNK5Lexer17anon_element_nameERK6String);
++extern char _ZNK5Lexer17expand_connectionERKN6Router6HookupEbR6VectorIS1_E[];
++EXPORT_SYMBOL(_ZNK5Lexer17expand_connectionERKN6Router6HookupEbR6VectorIS1_E);
++extern char _ZNK5Lexer18element_type_namesER6VectorI6StringE[];
++EXPORT_SYMBOL(_ZNK5Lexer18element_type_namesER6VectorI6StringE);
++extern char _ZNK5Lexer18lexical_scoping_inEv[];
++EXPORT_SYMBOL(_ZNK5Lexer18lexical_scoping_inEv);
++extern char _ZNK5Lexer8Compound10class_nameEv[];
++EXPORT_SYMBOL(_ZNK5Lexer8Compound10class_nameEv);
++extern char _ZNK5Lexer8Compound9signatureEv[];
++EXPORT_SYMBOL(_ZNK5Lexer8Compound9signatureEv);
++extern char _ZNK5Lexer8landmarkEv[];
++EXPORT_SYMBOL(_ZNK5Lexer8landmarkEv);
++extern char _ZTV10LexerExtra[];
++EXPORT_SYMBOL(_ZTV10LexerExtra);
++extern char _ZTV16VariableExpander[];
++EXPORT_SYMBOL(_ZTV16VariableExpander);
++extern char _ZTV5Lexer[];
++EXPORT_SYMBOL(_ZTV5Lexer);
++extern char _ZTVN5Lexer8CompoundE[];
++EXPORT_SYMBOL(_ZTVN5Lexer8CompoundE);
++extern char _ZN14LinearIPLookup10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14LinearIPLookup10initializeEP12ErrorHandler);
++extern char _ZN14LinearIPLookup11dump_routesEv[];
++EXPORT_SYMBOL(_ZN14LinearIPLookup11dump_routesEv);
++extern char _ZN14LinearIPLookup12remove_routeERK7IPRoutePS0_P12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14LinearIPLookup12remove_routeERK7IPRoutePS0_P12ErrorHandler);
++extern char _ZN14LinearIPLookup4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN14LinearIPLookup4pushEiP6Packet);
++extern char _ZN14LinearIPLookup9add_routeERK7IPRoutebPS0_P12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14LinearIPLookup9add_routeERK7IPRoutebPS0_P12ErrorHandler);
++extern char _ZN14LinearIPLookupC1Ev[];
++EXPORT_SYMBOL(_ZN14LinearIPLookupC1Ev);
++extern char _ZN14LinearIPLookupC2Ev[];
++EXPORT_SYMBOL(_ZN14LinearIPLookupC2Ev);
++extern char _ZN14LinearIPLookupD0Ev[];
++EXPORT_SYMBOL(_ZN14LinearIPLookupD0Ev);
++extern char _ZN14LinearIPLookupD1Ev[];
++EXPORT_SYMBOL(_ZN14LinearIPLookupD1Ev);
++extern char _ZN14LinearIPLookupD2Ev[];
++EXPORT_SYMBOL(_ZN14LinearIPLookupD2Ev);
++extern char _ZN6VectorI7IPRouteE7reserveEi[];
++EXPORT_SYMBOL(_ZN6VectorI7IPRouteE7reserveEi);
++extern char _ZN6VectorI7IPRouteED1Ev[];
++EXPORT_SYMBOL(_ZN6VectorI7IPRouteED1Ev);
++extern char _ZNK14LinearIPLookup10class_nameEv[];
++EXPORT_SYMBOL(_ZNK14LinearIPLookup10class_nameEv);
++extern char _ZNK14LinearIPLookup10port_countEv[];
++EXPORT_SYMBOL(_ZNK14LinearIPLookup10port_countEv);
++extern char _ZNK14LinearIPLookup10processingEv[];
++EXPORT_SYMBOL(_ZNK14LinearIPLookup10processingEv);
++extern char _ZNK14LinearIPLookup12lookup_entryE9IPAddress[];
++EXPORT_SYMBOL(_ZNK14LinearIPLookup12lookup_entryE9IPAddress);
++extern char _ZNK14LinearIPLookup12lookup_routeE9IPAddressRS0_[];
++EXPORT_SYMBOL(_ZNK14LinearIPLookup12lookup_routeE9IPAddressRS0_);
++extern char _ZNK14LinearIPLookup5checkEv[];
++EXPORT_SYMBOL(_ZNK14LinearIPLookup5checkEv);
++extern char _ZTV14LinearIPLookup[];
++EXPORT_SYMBOL(_ZTV14LinearIPLookup);
++extern char _ZN11LinkUnqueue10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11LinkUnqueue10initializeEP12ErrorHandler);
++extern char _ZN11LinkUnqueue10read_paramEP7ElementPv[];
++EXPORT_SYMBOL(_ZN11LinkUnqueue10read_paramEP7ElementPv);
++extern char _ZN11LinkUnqueue12add_handlersEv[];
++EXPORT_SYMBOL(_ZN11LinkUnqueue12add_handlersEv);
++extern char _ZN11LinkUnqueue13write_handlerERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11LinkUnqueue13write_handlerERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN11LinkUnqueue4castEPKc[];
++EXPORT_SYMBOL(_ZN11LinkUnqueue4castEPKc);
++extern char _ZN11LinkUnqueue7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN11LinkUnqueue7cleanupEN7Element12CleanupStageE);
++extern char _ZN11LinkUnqueue8run_taskEP4Task[];
++EXPORT_SYMBOL(_ZN11LinkUnqueue8run_taskEP4Task);
++extern char _ZN11LinkUnqueue9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11LinkUnqueue9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN11LinkUnqueueC1Ev[];
++EXPORT_SYMBOL(_ZN11LinkUnqueueC1Ev);
++extern char _ZN11LinkUnqueueC2Ev[];
++EXPORT_SYMBOL(_ZN11LinkUnqueueC2Ev);
++extern char _ZN11LinkUnqueueD0Ev[];
++EXPORT_SYMBOL(_ZN11LinkUnqueueD0Ev);
++extern char _ZN11LinkUnqueueD1Ev[];
++EXPORT_SYMBOL(_ZN11LinkUnqueueD1Ev);
++extern char _ZN11LinkUnqueueD2Ev[];
++EXPORT_SYMBOL(_ZN11LinkUnqueueD2Ev);
++extern char _ZNK11LinkUnqueue10class_nameEv[];
++EXPORT_SYMBOL(_ZNK11LinkUnqueue10class_nameEv);
++extern char _ZNK11LinkUnqueue10port_countEv[];
++EXPORT_SYMBOL(_ZNK11LinkUnqueue10port_countEv);
++extern char _ZNK11LinkUnqueue10processingEv[];
++EXPORT_SYMBOL(_ZNK11LinkUnqueue10processingEv);
++extern char _ZNK11LinkUnqueue18delay_by_bandwidthEP6PacketRK9Timestamp[];
++EXPORT_SYMBOL(_ZNK11LinkUnqueue18delay_by_bandwidthEP6PacketRK9Timestamp);
++extern char _ZTV11LinkUnqueue[];
++EXPORT_SYMBOL(_ZTV11LinkUnqueue);
++extern char _ZN14StaticIPLookup12add_handlersEv[];
++EXPORT_SYMBOL(_ZN14StaticIPLookup12add_handlersEv);
++extern char _ZN14StaticIPLookup12remove_routeERK7IPRoutePS0_P12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14StaticIPLookup12remove_routeERK7IPRoutePS0_P12ErrorHandler);
++extern char _ZN14StaticIPLookup9add_routeERK7IPRoutebPS0_P12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14StaticIPLookup9add_routeERK7IPRoutebPS0_P12ErrorHandler);
++extern char _ZN14StaticIPLookupC1Ev[];
++EXPORT_SYMBOL(_ZN14StaticIPLookupC1Ev);
++extern char _ZN14StaticIPLookupC2Ev[];
++EXPORT_SYMBOL(_ZN14StaticIPLookupC2Ev);
++extern char _ZN14StaticIPLookupD0Ev[];
++EXPORT_SYMBOL(_ZN14StaticIPLookupD0Ev);
++extern char _ZN14StaticIPLookupD1Ev[];
++EXPORT_SYMBOL(_ZN14StaticIPLookupD1Ev);
++extern char _ZN14StaticIPLookupD2Ev[];
++EXPORT_SYMBOL(_ZN14StaticIPLookupD2Ev);
++extern char _ZNK14StaticIPLookup10class_nameEv[];
++EXPORT_SYMBOL(_ZNK14StaticIPLookup10class_nameEv);
++extern char _ZTV14StaticIPLookup[];
++EXPORT_SYMBOL(_ZTV14StaticIPLookup);
++extern char _ZN15LookupIPRouteMP10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN15LookupIPRouteMP10initializeEP12ErrorHandler);
++extern char _ZN15LookupIPRouteMP4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN15LookupIPRouteMP4pushEiP6Packet);
++extern char _ZN15LookupIPRouteMP9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN15LookupIPRouteMP9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN15LookupIPRouteMPC1Ev[];
++EXPORT_SYMBOL(_ZN15LookupIPRouteMPC1Ev);
++extern char _ZN15LookupIPRouteMPC2Ev[];
++EXPORT_SYMBOL(_ZN15LookupIPRouteMPC2Ev);
++extern char _ZN15LookupIPRouteMPD0Ev[];
++EXPORT_SYMBOL(_ZN15LookupIPRouteMPD0Ev);
++extern char _ZN15LookupIPRouteMPD1Ev[];
++EXPORT_SYMBOL(_ZN15LookupIPRouteMPD1Ev);
++extern char _ZN15LookupIPRouteMPD2Ev[];
++EXPORT_SYMBOL(_ZN15LookupIPRouteMPD2Ev);
++extern char _ZNK15LookupIPRouteMP10class_nameEv[];
++EXPORT_SYMBOL(_ZNK15LookupIPRouteMP10class_nameEv);
++extern char _ZNK15LookupIPRouteMP10port_countEv[];
++EXPORT_SYMBOL(_ZNK15LookupIPRouteMP10port_countEv);
++extern char _ZNK15LookupIPRouteMP10processingEv[];
++EXPORT_SYMBOL(_ZNK15LookupIPRouteMP10processingEv);
++extern char _ZTV15LookupIPRouteMP[];
++EXPORT_SYMBOL(_ZTV15LookupIPRouteMP);
++extern char _ZN8MarkIPCE10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8MarkIPCE10initializeEP12ErrorHandler);
++extern char _ZN8MarkIPCE12add_handlersEv[];
++EXPORT_SYMBOL(_ZN8MarkIPCE12add_handlersEv);
++extern char _ZN8MarkIPCE12read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN8MarkIPCE12read_handlerEP7ElementPv);
++extern char _ZN8MarkIPCE4pullEi[];
++EXPORT_SYMBOL(_ZN8MarkIPCE4pullEi);
++extern char _ZN8MarkIPCE4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN8MarkIPCE4pushEiP6Packet);
++extern char _ZN8MarkIPCEC1Ev[];
++EXPORT_SYMBOL(_ZN8MarkIPCEC1Ev);
++extern char _ZN8MarkIPCEC2Ev[];
++EXPORT_SYMBOL(_ZN8MarkIPCEC2Ev);
++extern char _ZN8MarkIPCED0Ev[];
++EXPORT_SYMBOL(_ZN8MarkIPCED0Ev);
++extern char _ZN8MarkIPCED1Ev[];
++EXPORT_SYMBOL(_ZN8MarkIPCED1Ev);
++extern char _ZN8MarkIPCED2Ev[];
++EXPORT_SYMBOL(_ZN8MarkIPCED2Ev);
++extern char _ZNK8MarkIPCE10class_nameEv[];
++EXPORT_SYMBOL(_ZNK8MarkIPCE10class_nameEv);
++extern char _ZNK8MarkIPCE10port_countEv[];
++EXPORT_SYMBOL(_ZNK8MarkIPCE10port_countEv);
++extern char _ZNK8MarkIPCE10processingEv[];
++EXPORT_SYMBOL(_ZNK8MarkIPCE10processingEv);
++extern char _ZTV8MarkIPCE[];
++EXPORT_SYMBOL(_ZTV8MarkIPCE);
++extern char _ZN12MarkIPHeader13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN12MarkIPHeader13simple_actionEP6Packet);
++extern char _ZN12MarkIPHeader9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12MarkIPHeader9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12MarkIPHeaderC1Ev[];
++EXPORT_SYMBOL(_ZN12MarkIPHeaderC1Ev);
++extern char _ZN12MarkIPHeaderC2Ev[];
++EXPORT_SYMBOL(_ZN12MarkIPHeaderC2Ev);
++extern char _ZN12MarkIPHeaderD0Ev[];
++EXPORT_SYMBOL(_ZN12MarkIPHeaderD0Ev);
++extern char _ZN12MarkIPHeaderD1Ev[];
++EXPORT_SYMBOL(_ZN12MarkIPHeaderD1Ev);
++extern char _ZN12MarkIPHeaderD2Ev[];
++EXPORT_SYMBOL(_ZN12MarkIPHeaderD2Ev);
++extern char _ZNK12MarkIPHeader10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12MarkIPHeader10class_nameEv);
++extern char _ZNK12MarkIPHeader10port_countEv[];
++EXPORT_SYMBOL(_ZNK12MarkIPHeader10port_countEv);
++extern char _ZTV12MarkIPHeader[];
++EXPORT_SYMBOL(_ZTV12MarkIPHeader);
++extern char _ZN6Master10run_routerEP6Routerb[];
++EXPORT_SYMBOL(_ZN6Master10run_routerEP6Routerb);
++extern char _ZN6Master10run_timersEv[];
++EXPORT_SYMBOL(_ZN6Master10run_timersEv);
++extern char _ZN6Master11kill_routerEP6Router[];
++EXPORT_SYMBOL(_ZN6Master11kill_routerEP6Router);
++extern char _ZN6Master12check_driverEv[];
++EXPORT_SYMBOL(_ZN6Master12check_driverEv);
++extern char _ZN6Master14prepare_routerEP6Router[];
++EXPORT_SYMBOL(_ZN6Master14prepare_routerEP6Router);
++extern char _ZN6Master15process_pendingEP12RouterThread[];
++EXPORT_SYMBOL(_ZN6Master15process_pendingEP12RouterThread);
++extern char _ZN6Master15register_routerEP6Router[];
++EXPORT_SYMBOL(_ZN6Master15register_routerEP6Router);
++extern char _ZN6Master17unregister_routerEP6Router[];
++EXPORT_SYMBOL(_ZN6Master17unregister_routerEP6Router);
++extern char _ZN6Master20timer_reheapify_fromEiP5Timerb[];
++EXPORT_SYMBOL(_ZN6Master20timer_reheapify_fromEiP5Timerb);
++extern char _ZN6Master3useEv[];
++EXPORT_SYMBOL(_ZN6Master3useEv);
++extern char _ZN6Master5pauseEv[];
++EXPORT_SYMBOL(_ZN6Master5pauseEv);
++extern char _ZN6Master5unuseEv[];
++EXPORT_SYMBOL(_ZN6Master5unuseEv);
++extern char _ZN6MasterC1Ei[];
++EXPORT_SYMBOL(_ZN6MasterC1Ei);
++extern char _ZN6MasterC2Ei[];
++EXPORT_SYMBOL(_ZN6MasterC2Ei);
++extern char _ZN6MasterD1Ev[];
++EXPORT_SYMBOL(_ZN6MasterD1Ev);
++extern char _ZN6MasterD2Ev[];
++EXPORT_SYMBOL(_ZN6MasterD2Ev);
++extern char _ZN14MessageElement9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14MessageElement9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN14MessageElementC1Ev[];
++EXPORT_SYMBOL(_ZN14MessageElementC1Ev);
++extern char _ZN14MessageElementC2Ev[];
++EXPORT_SYMBOL(_ZN14MessageElementC2Ev);
++extern char _ZN14MessageElementD0Ev[];
++EXPORT_SYMBOL(_ZN14MessageElementD0Ev);
++extern char _ZN14MessageElementD1Ev[];
++EXPORT_SYMBOL(_ZN14MessageElementD1Ev);
++extern char _ZN14MessageElementD2Ev[];
++EXPORT_SYMBOL(_ZN14MessageElementD2Ev);
++extern char _ZNK14MessageElement10class_nameEv[];
++EXPORT_SYMBOL(_ZNK14MessageElement10class_nameEv);
++extern char _ZTV14MessageElement[];
++EXPORT_SYMBOL(_ZTV14MessageElement);
++extern char _ZN5Meter4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN5Meter4pushEiP6Packet);
++extern char _ZN5MeterC1Ev[];
++EXPORT_SYMBOL(_ZN5MeterC1Ev);
++extern char _ZN5MeterC2Ev[];
++EXPORT_SYMBOL(_ZN5MeterC2Ev);
++extern char _ZN5MeterD0Ev[];
++EXPORT_SYMBOL(_ZN5MeterD0Ev);
++extern char _ZN5MeterD1Ev[];
++EXPORT_SYMBOL(_ZN5MeterD1Ev);
++extern char _ZN5MeterD2Ev[];
++EXPORT_SYMBOL(_ZN5MeterD2Ev);
++extern char _ZNK5Meter10class_nameEv[];
++EXPORT_SYMBOL(_ZNK5Meter10class_nameEv);
++extern char _ZTV5Meter[];
++EXPORT_SYMBOL(_ZTV5Meter);
++extern char _ZN10MixedQueue4castEPKc[];
++EXPORT_SYMBOL(_ZN10MixedQueue4castEPKc);
++extern char _ZN10MixedQueue4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN10MixedQueue4pushEiP6Packet);
++extern char _ZN10MixedQueueC1Ev[];
++EXPORT_SYMBOL(_ZN10MixedQueueC1Ev);
++extern char _ZN10MixedQueueC2Ev[];
++EXPORT_SYMBOL(_ZN10MixedQueueC2Ev);
++extern char _ZN10MixedQueueD0Ev[];
++EXPORT_SYMBOL(_ZN10MixedQueueD0Ev);
++extern char _ZN10MixedQueueD1Ev[];
++EXPORT_SYMBOL(_ZN10MixedQueueD1Ev);
++extern char _ZN10MixedQueueD2Ev[];
++EXPORT_SYMBOL(_ZN10MixedQueueD2Ev);
++extern char _ZNK10MixedQueue10class_nameEv[];
++EXPORT_SYMBOL(_ZNK10MixedQueue10class_nameEv);
++extern char _ZNK10MixedQueue10port_countEv[];
++EXPORT_SYMBOL(_ZNK10MixedQueue10port_countEv);
++extern char _ZTV10MixedQueue[];
++EXPORT_SYMBOL(_ZTV10MixedQueue);
++extern char _Z21click_clear_error_logv[];
++EXPORT_SYMBOL(_Z21click_clear_error_logv);
++extern char _ZN18KernelErrorHandler11handle_textEN12ErrorHandler11SeriousnessERK6String[];
++EXPORT_SYMBOL(_ZN18KernelErrorHandler11handle_textEN12ErrorHandler11SeriousnessERK6String);
++extern char _ZN18KernelErrorHandler8log_lineEPKcS1_[];
++EXPORT_SYMBOL(_ZN18KernelErrorHandler8log_lineEPKcS1_);
++extern char _ZN18KernelErrorHandlerD0Ev[];
++EXPORT_SYMBOL(_ZN18KernelErrorHandlerD0Ev);
++extern char _ZN18KernelErrorHandlerD1Ev[];
++EXPORT_SYMBOL(_ZN18KernelErrorHandlerD1Ev);
++extern char _ZTV18KernelErrorHandler[];
++EXPORT_SYMBOL(_ZTV18KernelErrorHandler);
++EXPORT_SYMBOL(click_assert_failed);
++extern char click_fsmode[];
++EXPORT_SYMBOL(click_fsmode);
++extern char click_logged_errh[];
++EXPORT_SYMBOL(click_logged_errh);
++extern char click_master[];
++EXPORT_SYMBOL(click_master);
++extern char click_router[];
++EXPORT_SYMBOL(click_router);
++extern char _ZN7MSQueue10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7MSQueue10initializeEP12ErrorHandler);
++extern char _ZN7MSQueue12add_handlersEv[];
++EXPORT_SYMBOL(_ZN7MSQueue12add_handlersEv);
++extern char _ZN7MSQueue12read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN7MSQueue12read_handlerEP7ElementPv);
++extern char _ZN7MSQueue4castEPKc[];
++EXPORT_SYMBOL(_ZN7MSQueue4castEPKc);
++extern char _ZN7MSQueue4pullEi[];
++EXPORT_SYMBOL(_ZN7MSQueue4pullEi);
++extern char _ZN7MSQueue4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN7MSQueue4pushEiP6Packet);
++extern char _ZN7MSQueue7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN7MSQueue7cleanupEN7Element12CleanupStageE);
++extern char _ZN7MSQueue9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7MSQueue9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN7MSQueueC1Ev[];
++EXPORT_SYMBOL(_ZN7MSQueueC1Ev);
++extern char _ZN7MSQueueC2Ev[];
++EXPORT_SYMBOL(_ZN7MSQueueC2Ev);
++extern char _ZN7MSQueueD0Ev[];
++EXPORT_SYMBOL(_ZN7MSQueueD0Ev);
++extern char _ZN7MSQueueD1Ev[];
++EXPORT_SYMBOL(_ZN7MSQueueD1Ev);
++extern char _ZN7MSQueueD2Ev[];
++EXPORT_SYMBOL(_ZN7MSQueueD2Ev);
++extern char _ZNK7MSQueue10class_nameEv[];
++EXPORT_SYMBOL(_ZNK7MSQueue10class_nameEv);
++extern char _ZNK7MSQueue10port_countEv[];
++EXPORT_SYMBOL(_ZNK7MSQueue10port_countEv);
++extern char _ZNK7MSQueue10processingEv[];
++EXPORT_SYMBOL(_ZNK7MSQueue10processingEv);
++extern char _ZTV7MSQueue[];
++EXPORT_SYMBOL(_ZTV7MSQueue);
++extern char _ZN12StaticNameDB5queryERK6StringPvi[];
++EXPORT_SYMBOL(_ZN12StaticNameDB5queryERK6StringPvi);
++extern char _ZN12StaticNameDB7revfindEPKvi[];
++EXPORT_SYMBOL(_ZN12StaticNameDB7revfindEPKvi);
++extern char _ZN12StaticNameDBD0Ev[];
++EXPORT_SYMBOL(_ZN12StaticNameDBD0Ev);
++extern char _ZN12StaticNameDBD1Ev[];
++EXPORT_SYMBOL(_ZN12StaticNameDBD1Ev);
++extern char _ZN13DynamicNameDB4findERK6Stringb[];
++EXPORT_SYMBOL(_ZN13DynamicNameDB4findERK6Stringb);
++extern char _ZN13DynamicNameDB4sortEv[];
++EXPORT_SYMBOL(_ZN13DynamicNameDB4sortEv);
++extern char _ZN13DynamicNameDB5queryERK6StringPvi[];
++EXPORT_SYMBOL(_ZN13DynamicNameDB5queryERK6StringPvi);
++extern char _ZN13DynamicNameDB6defineERK6StringPKvi[];
++EXPORT_SYMBOL(_ZN13DynamicNameDB6defineERK6StringPKvi);
++extern char _ZN13DynamicNameDB7revfindEPKvi[];
++EXPORT_SYMBOL(_ZN13DynamicNameDB7revfindEPKvi);
++extern char _ZN13DynamicNameDBD0Ev[];
++EXPORT_SYMBOL(_ZN13DynamicNameDBD0Ev);
++extern char _ZN13DynamicNameDBD1Ev[];
++EXPORT_SYMBOL(_ZN13DynamicNameDBD1Ev);
++extern char _ZN6NameDB6defineERK6StringPKvi[];
++EXPORT_SYMBOL(_ZN6NameDB6defineERK6StringPKvi);
++extern char _ZN6NameDB7revfindEPKvi[];
++EXPORT_SYMBOL(_ZN6NameDB7revfindEPKvi);
++extern char _ZN6NameDBD0Ev[];
++EXPORT_SYMBOL(_ZN6NameDBD0Ev);
++extern char _ZN6NameDBD1Ev[];
++EXPORT_SYMBOL(_ZN6NameDBD1Ev);
++extern char _ZN8NameInfo14static_cleanupEv[];
++EXPORT_SYMBOL(_ZN8NameInfo14static_cleanupEv);
++extern char _ZN8NameInfo17static_initializeEv[];
++EXPORT_SYMBOL(_ZN8NameInfo17static_initializeEv);
++extern char _ZN8NameInfo5getdbEjPK7Elementib[];
++EXPORT_SYMBOL(_ZN8NameInfo5getdbEjPK7Elementib);
++extern char _ZN8NameInfo5queryEjPK7ElementRK6StringPvi[];
++EXPORT_SYMBOL(_ZN8NameInfo5queryEjPK7ElementRK6StringPvi);
++extern char _ZN8NameInfo6namedbEjiRK6StringP6NameDB[];
++EXPORT_SYMBOL(_ZN8NameInfo6namedbEjiRK6StringP6NameDB);
++extern char _ZN8NameInfo8removedbEP6NameDB[];
++EXPORT_SYMBOL(_ZN8NameInfo8removedbEP6NameDB);
++extern char _ZN8NameInfo8revqueryEjPK7ElementPKvi[];
++EXPORT_SYMBOL(_ZN8NameInfo8revqueryEjPK7ElementPKvi);
++extern char _ZN8NameInfo9installdbEP6NameDBPK7Element[];
++EXPORT_SYMBOL(_ZN8NameInfo9installdbEP6NameDBPK7Element);
++extern char _ZN8NameInfo9query_intEjPK7ElementRK6StringPi[];
++EXPORT_SYMBOL(_ZN8NameInfo9query_intEjPK7ElementRK6StringPi);
++extern char _ZN8NameInfo9query_intEjPK7ElementRK6StringPj[];
++EXPORT_SYMBOL(_ZN8NameInfo9query_intEjPK7ElementRK6StringPj);
++extern char _ZN8NameInfoC1Ev[];
++EXPORT_SYMBOL(_ZN8NameInfoC1Ev);
++extern char _ZN8NameInfoC2Ev[];
++EXPORT_SYMBOL(_ZN8NameInfoC2Ev);
++extern char _ZN8NameInfoD1Ev[];
++EXPORT_SYMBOL(_ZN8NameInfoD1Ev);
++extern char _ZN8NameInfoD2Ev[];
++EXPORT_SYMBOL(_ZN8NameInfoD2Ev);
++extern char _ZTV12StaticNameDB[];
++EXPORT_SYMBOL(_ZTV12StaticNameDB);
++extern char _ZTV13DynamicNameDB[];
++EXPORT_SYMBOL(_ZTV13DynamicNameDB);
++extern char _ZTV6NameDB[];
++EXPORT_SYMBOL(_ZTV6NameDB);
++extern char _ZN14ActiveNotifier12add_listenerEP4Task[];
++EXPORT_SYMBOL(_ZN14ActiveNotifier12add_listenerEP4Task);
++extern char _ZN14ActiveNotifier15listener_changeEPvib[];
++EXPORT_SYMBOL(_ZN14ActiveNotifier15listener_changeEPvib);
++extern char _ZN14ActiveNotifier15remove_listenerEP4Task[];
++EXPORT_SYMBOL(_ZN14ActiveNotifier15remove_listenerEP4Task);
++extern char _ZN14ActiveNotifier20add_dependent_signalEP14NotifierSignal[];
++EXPORT_SYMBOL(_ZN14ActiveNotifier20add_dependent_signalEP14NotifierSignal);
++extern char _ZN14ActiveNotifierC1EN8Notifier8SearchOpE[];
++EXPORT_SYMBOL(_ZN14ActiveNotifierC1EN8Notifier8SearchOpE);
++extern char _ZN14ActiveNotifierC2EN8Notifier8SearchOpE[];
++EXPORT_SYMBOL(_ZN14ActiveNotifierC2EN8Notifier8SearchOpE);
++extern char _ZN14ActiveNotifierD0Ev[];
++EXPORT_SYMBOL(_ZN14ActiveNotifierD0Ev);
++extern char _ZN14ActiveNotifierD1Ev[];
++EXPORT_SYMBOL(_ZN14ActiveNotifierD1Ev);
++extern char _ZN14ActiveNotifierD2Ev[];
++EXPORT_SYMBOL(_ZN14ActiveNotifierD2Ev);
++extern char _ZN14NotifierSignal12static_valueE[];
++EXPORT_SYMBOL(_ZN14NotifierSignal12static_valueE);
++extern char _ZN14NotifierSignal17static_initializeEv[];
++EXPORT_SYMBOL(_ZN14NotifierSignal17static_initializeEv);
++extern char _ZN14NotifierSignalpLERKS_[];
++EXPORT_SYMBOL(_ZN14NotifierSignalpLERKS_);
++extern char _ZN45_GLOBAL__N__ZN14NotifierSignal12static_valueE21NotifierElementFilter11check_matchEP7ElementiN13ElementFilter8PortTypeE[];
++EXPORT_SYMBOL(_ZN45_GLOBAL__N__ZN14NotifierSignal12static_valueE21NotifierElementFilter11check_matchEP7ElementiN13ElementFilter8PortTypeE);
++extern char _ZN45_GLOBAL__N__ZN14NotifierSignal12static_valueE21NotifierElementFilterC1EPKc[];
++EXPORT_SYMBOL(_ZN45_GLOBAL__N__ZN14NotifierSignal12static_valueE21NotifierElementFilterC1EPKc);
++extern char _ZN45_GLOBAL__N__ZN14NotifierSignal12static_valueE21NotifierElementFilterC2EPKc[];
++EXPORT_SYMBOL(_ZN45_GLOBAL__N__ZN14NotifierSignal12static_valueE21NotifierElementFilterC2EPKc);
++extern char _ZN45_GLOBAL__N__ZN14NotifierSignal12static_valueE21NotifierElementFilterD0Ev[];
++EXPORT_SYMBOL(_ZN45_GLOBAL__N__ZN14NotifierSignal12static_valueE21NotifierElementFilterD0Ev);
++extern char _ZN45_GLOBAL__N__ZN14NotifierSignal12static_valueE21NotifierElementFilterD1Ev[];
++EXPORT_SYMBOL(_ZN45_GLOBAL__N__ZN14NotifierSignal12static_valueE21NotifierElementFilterD1Ev);
++extern char _ZN8Notifier10initializeEP6Router[];
++EXPORT_SYMBOL(_ZN8Notifier10initializeEP6Router);
++extern char _ZN8Notifier12add_listenerEP4Task[];
++EXPORT_SYMBOL(_ZN8Notifier12add_listenerEP4Task);
++extern char _ZN8Notifier13FULL_NOTIFIERE[];
++EXPORT_SYMBOL(_ZN8Notifier13FULL_NOTIFIERE);
++extern char _ZN8Notifier14EMPTY_NOTIFIERE[];
++EXPORT_SYMBOL(_ZN8Notifier14EMPTY_NOTIFIERE);
++extern char _ZN8Notifier15remove_listenerEP4Task[];
++EXPORT_SYMBOL(_ZN8Notifier15remove_listenerEP4Task);
++extern char _ZN8Notifier20add_dependent_signalEP14NotifierSignal[];
++EXPORT_SYMBOL(_ZN8Notifier20add_dependent_signalEP14NotifierSignal);
++extern char _ZN8Notifier21upstream_empty_signalEP7ElementiP4TaskPS_[];
++EXPORT_SYMBOL(_ZN8Notifier21upstream_empty_signalEP7ElementiP4TaskPS_);
++extern char _ZN8Notifier22downstream_full_signalEP7ElementiP4TaskPS_[];
++EXPORT_SYMBOL(_ZN8Notifier22downstream_full_signalEP7ElementiP4TaskPS_);
++extern char _ZN8NotifierD0Ev[];
++EXPORT_SYMBOL(_ZN8NotifierD0Ev);
++extern char _ZN8NotifierD1Ev[];
++EXPORT_SYMBOL(_ZN8NotifierD1Ev);
++extern char _ZN8NotifierD2Ev[];
++EXPORT_SYMBOL(_ZN8NotifierD2Ev);
++extern char _ZNK14ActiveNotifier9listenersER6VectorIP4TaskE[];
++EXPORT_SYMBOL(_ZNK14ActiveNotifier9listenersER6VectorIP4TaskE);
++extern char _ZNK14NotifierSignal7unparseEv[];
++EXPORT_SYMBOL(_ZNK14NotifierSignal7unparseEv);
++extern char _ZTV14ActiveNotifier[];
++EXPORT_SYMBOL(_ZTV14ActiveNotifier);
++extern char _ZTV8Notifier[];
++EXPORT_SYMBOL(_ZTV8Notifier);
++extern char _ZTVN45_GLOBAL__N__ZN14NotifierSignal12static_valueE21NotifierElementFilterE[];
++EXPORT_SYMBOL(_ZTVN45_GLOBAL__N__ZN14NotifierSignal12static_valueE21NotifierElementFilterE);
++extern char _ZN13NotifierQueue4castEPKc[];
++EXPORT_SYMBOL(_ZN13NotifierQueue4castEPKc);
++extern char _ZN13NotifierQueue4pullEi[];
++EXPORT_SYMBOL(_ZN13NotifierQueue4pullEi);
++extern char _ZN13NotifierQueue4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN13NotifierQueue4pushEiP6Packet);
++extern char _ZN13NotifierQueue9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13NotifierQueue9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN13NotifierQueueC1Ev[];
++EXPORT_SYMBOL(_ZN13NotifierQueueC1Ev);
++extern char _ZN13NotifierQueueC2Ev[];
++EXPORT_SYMBOL(_ZN13NotifierQueueC2Ev);
++extern char _ZN13NotifierQueueD0Ev[];
++EXPORT_SYMBOL(_ZN13NotifierQueueD0Ev);
++extern char _ZN13NotifierQueueD1Ev[];
++EXPORT_SYMBOL(_ZN13NotifierQueueD1Ev);
++extern char _ZN13NotifierQueueD2Ev[];
++EXPORT_SYMBOL(_ZN13NotifierQueueD2Ev);
++extern char _ZNK13NotifierQueue10class_nameEv[];
++EXPORT_SYMBOL(_ZNK13NotifierQueue10class_nameEv);
++extern char _ZTV13NotifierQueue[];
++EXPORT_SYMBOL(_ZTV13NotifierQueue);
++extern char _ZN11NullElement13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN11NullElement13simple_actionEP6Packet);
++extern char _ZN11NullElementC1Ev[];
++EXPORT_SYMBOL(_ZN11NullElementC1Ev);
++extern char _ZN11NullElementC2Ev[];
++EXPORT_SYMBOL(_ZN11NullElementC2Ev);
++extern char _ZN11NullElementD0Ev[];
++EXPORT_SYMBOL(_ZN11NullElementD0Ev);
++extern char _ZN11NullElementD1Ev[];
++EXPORT_SYMBOL(_ZN11NullElementD1Ev);
++extern char _ZN11NullElementD2Ev[];
++EXPORT_SYMBOL(_ZN11NullElementD2Ev);
++extern char _ZN15PullNullElement4pullEi[];
++EXPORT_SYMBOL(_ZN15PullNullElement4pullEi);
++extern char _ZN15PullNullElementC1Ev[];
++EXPORT_SYMBOL(_ZN15PullNullElementC1Ev);
++extern char _ZN15PullNullElementC2Ev[];
++EXPORT_SYMBOL(_ZN15PullNullElementC2Ev);
++extern char _ZN15PullNullElementD0Ev[];
++EXPORT_SYMBOL(_ZN15PullNullElementD0Ev);
++extern char _ZN15PullNullElementD1Ev[];
++EXPORT_SYMBOL(_ZN15PullNullElementD1Ev);
++extern char _ZN15PullNullElementD2Ev[];
++EXPORT_SYMBOL(_ZN15PullNullElementD2Ev);
++extern char _ZN15PushNullElement4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN15PushNullElement4pushEiP6Packet);
++extern char _ZN15PushNullElementC1Ev[];
++EXPORT_SYMBOL(_ZN15PushNullElementC1Ev);
++extern char _ZN15PushNullElementC2Ev[];
++EXPORT_SYMBOL(_ZN15PushNullElementC2Ev);
++extern char _ZN15PushNullElementD0Ev[];
++EXPORT_SYMBOL(_ZN15PushNullElementD0Ev);
++extern char _ZN15PushNullElementD1Ev[];
++EXPORT_SYMBOL(_ZN15PushNullElementD1Ev);
++extern char _ZN15PushNullElementD2Ev[];
++EXPORT_SYMBOL(_ZN15PushNullElementD2Ev);
++extern char _ZNK11NullElement10class_nameEv[];
++EXPORT_SYMBOL(_ZNK11NullElement10class_nameEv);
++extern char _ZNK11NullElement10port_countEv[];
++EXPORT_SYMBOL(_ZNK11NullElement10port_countEv);
++extern char _ZNK11NullElement10processingEv[];
++EXPORT_SYMBOL(_ZNK11NullElement10processingEv);
++extern char _ZNK15PullNullElement10class_nameEv[];
++EXPORT_SYMBOL(_ZNK15PullNullElement10class_nameEv);
++extern char _ZNK15PullNullElement10port_countEv[];
++EXPORT_SYMBOL(_ZNK15PullNullElement10port_countEv);
++extern char _ZNK15PullNullElement10processingEv[];
++EXPORT_SYMBOL(_ZNK15PullNullElement10processingEv);
++extern char _ZNK15PushNullElement10class_nameEv[];
++EXPORT_SYMBOL(_ZNK15PushNullElement10class_nameEv);
++extern char _ZNK15PushNullElement10port_countEv[];
++EXPORT_SYMBOL(_ZNK15PushNullElement10port_countEv);
++extern char _ZNK15PushNullElement10processingEv[];
++EXPORT_SYMBOL(_ZNK15PushNullElement10processingEv);
++extern char _ZTV11NullElement[];
++EXPORT_SYMBOL(_ZTV11NullElement);
++extern char _ZTV15PullNullElement[];
++EXPORT_SYMBOL(_ZTV15PullNullElement);
++extern char _ZTV15PushNullElement[];
++EXPORT_SYMBOL(_ZTV15PushNullElement);
++extern char _ZN6Packet10shift_dataEib[];
++EXPORT_SYMBOL(_ZN6Packet10shift_dataEib);
++extern char _ZN6Packet13expensive_putEj[];
++EXPORT_SYMBOL(_ZN6Packet13expensive_putEj);
++extern char _ZN6Packet14expensive_pushEj[];
++EXPORT_SYMBOL(_ZN6Packet14expensive_pushEj);
++extern char _ZN6Packet19expensive_uniqueifyEiib[];
++EXPORT_SYMBOL(_ZN6Packet19expensive_uniqueifyEiib);
++extern char _ZN6Packet4makeEjPKhjj[];
++EXPORT_SYMBOL(_ZN6Packet4makeEjPKhjj);
++extern char _ZN6Packet5cloneEv[];
++EXPORT_SYMBOL(_ZN6Packet5cloneEv);
++extern char _ZN6PacketC1Ev[];
++EXPORT_SYMBOL(_ZN6PacketC1Ev);
++extern char _ZN6PacketC2Ev[];
++EXPORT_SYMBOL(_ZN6PacketC2Ev);
++extern char _ZN6PacketD1Ev[];
++EXPORT_SYMBOL(_ZN6PacketD1Ev);
++extern char _ZN6PacketD2Ev[];
++EXPORT_SYMBOL(_ZN6PacketD2Ev);
++extern char _ZN5Paint12add_handlersEv[];
++EXPORT_SYMBOL(_ZN5Paint12add_handlersEv);
++extern char _ZN5Paint13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN5Paint13simple_actionEP6Packet);
++extern char _ZN5Paint18color_read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN5Paint18color_read_handlerEP7ElementPv);
++extern char _ZN5Paint9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN5Paint9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN5PaintC1Ev[];
++EXPORT_SYMBOL(_ZN5PaintC1Ev);
++extern char _ZN5PaintC2Ev[];
++EXPORT_SYMBOL(_ZN5PaintC2Ev);
++extern char _ZN5PaintD0Ev[];
++EXPORT_SYMBOL(_ZN5PaintD0Ev);
++extern char _ZN5PaintD1Ev[];
++EXPORT_SYMBOL(_ZN5PaintD1Ev);
++extern char _ZN5PaintD2Ev[];
++EXPORT_SYMBOL(_ZN5PaintD2Ev);
++extern char _ZNK5Paint10class_nameEv[];
++EXPORT_SYMBOL(_ZNK5Paint10class_nameEv);
++extern char _ZNK5Paint10port_countEv[];
++EXPORT_SYMBOL(_ZNK5Paint10port_countEv);
++extern char _ZNK5Paint10processingEv[];
++EXPORT_SYMBOL(_ZNK5Paint10processingEv);
++extern char _ZNK5Paint20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK5Paint20can_live_reconfigureEv);
++extern char _ZTV5Paint[];
++EXPORT_SYMBOL(_ZTV5Paint);
++extern char _ZN11PaintSwitch4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN11PaintSwitch4pushEiP6Packet);
++extern char _ZN11PaintSwitch9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11PaintSwitch9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN11PaintSwitchC1Ev[];
++EXPORT_SYMBOL(_ZN11PaintSwitchC1Ev);
++extern char _ZN11PaintSwitchC2Ev[];
++EXPORT_SYMBOL(_ZN11PaintSwitchC2Ev);
++extern char _ZN11PaintSwitchD0Ev[];
++EXPORT_SYMBOL(_ZN11PaintSwitchD0Ev);
++extern char _ZN11PaintSwitchD1Ev[];
++EXPORT_SYMBOL(_ZN11PaintSwitchD1Ev);
++extern char _ZN11PaintSwitchD2Ev[];
++EXPORT_SYMBOL(_ZN11PaintSwitchD2Ev);
++extern char _ZNK11PaintSwitch10class_nameEv[];
++EXPORT_SYMBOL(_ZNK11PaintSwitch10class_nameEv);
++extern char _ZNK11PaintSwitch10port_countEv[];
++EXPORT_SYMBOL(_ZNK11PaintSwitch10port_countEv);
++extern char _ZNK11PaintSwitch10processingEv[];
++EXPORT_SYMBOL(_ZNK11PaintSwitch10processingEv);
++extern char _ZNK11PaintSwitch13configurationER6VectorI6StringE[];
++EXPORT_SYMBOL(_ZNK11PaintSwitch13configurationER6VectorI6StringE);
++extern char _ZNK11PaintSwitch20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK11PaintSwitch20can_live_reconfigureEv);
++extern char _ZTV11PaintSwitch[];
++EXPORT_SYMBOL(_ZTV11PaintSwitch);
++extern char _ZN8PaintTee13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN8PaintTee13simple_actionEP6Packet);
++extern char _ZN8PaintTee9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8PaintTee9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN8PaintTeeC1Ev[];
++EXPORT_SYMBOL(_ZN8PaintTeeC1Ev);
++extern char _ZN8PaintTeeC2Ev[];
++EXPORT_SYMBOL(_ZN8PaintTeeC2Ev);
++extern char _ZN8PaintTeeD0Ev[];
++EXPORT_SYMBOL(_ZN8PaintTeeD0Ev);
++extern char _ZN8PaintTeeD1Ev[];
++EXPORT_SYMBOL(_ZN8PaintTeeD1Ev);
++extern char _ZN8PaintTeeD2Ev[];
++EXPORT_SYMBOL(_ZN8PaintTeeD2Ev);
++extern char _ZNK8PaintTee10class_nameEv[];
++EXPORT_SYMBOL(_ZNK8PaintTee10class_nameEv);
++extern char _ZNK8PaintTee10port_countEv[];
++EXPORT_SYMBOL(_ZNK8PaintTee10port_countEv);
++extern char _ZNK8PaintTee10processingEv[];
++EXPORT_SYMBOL(_ZNK8PaintTee10processingEv);
++extern char _ZTV8PaintTee[];
++EXPORT_SYMBOL(_ZTV8PaintTee);
++extern char _ZN14PerfCountAccum10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14PerfCountAccum10initializeEP12ErrorHandler);
++extern char _ZN14PerfCountAccum12add_handlersEv[];
++EXPORT_SYMBOL(_ZN14PerfCountAccum12add_handlersEv);
++extern char _ZN14PerfCountAccum12read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN14PerfCountAccum12read_handlerEP7ElementPv);
++extern char _ZN14PerfCountAccum13reset_handlerERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14PerfCountAccum13reset_handlerERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN14PerfCountAccum4castEPKc[];
++EXPORT_SYMBOL(_ZN14PerfCountAccum4castEPKc);
++extern char _ZN14PerfCountAccum4pullEi[];
++EXPORT_SYMBOL(_ZN14PerfCountAccum4pullEi);
++extern char _ZN14PerfCountAccum4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN14PerfCountAccum4pushEiP6Packet);
++extern char _ZN14PerfCountAccum9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14PerfCountAccum9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN14PerfCountAccumC1Ev[];
++EXPORT_SYMBOL(_ZN14PerfCountAccumC1Ev);
++extern char _ZN14PerfCountAccumC2Ev[];
++EXPORT_SYMBOL(_ZN14PerfCountAccumC2Ev);
++extern char _ZN14PerfCountAccumD0Ev[];
++EXPORT_SYMBOL(_ZN14PerfCountAccumD0Ev);
++extern char _ZN14PerfCountAccumD1Ev[];
++EXPORT_SYMBOL(_ZN14PerfCountAccumD1Ev);
++extern char _ZN14PerfCountAccumD2Ev[];
++EXPORT_SYMBOL(_ZN14PerfCountAccumD2Ev);
++extern char _ZNK14PerfCountAccum10class_nameEv[];
++EXPORT_SYMBOL(_ZNK14PerfCountAccum10class_nameEv);
++extern char _ZNK14PerfCountAccum10port_countEv[];
++EXPORT_SYMBOL(_ZNK14PerfCountAccum10port_countEv);
++extern char _ZNK14PerfCountAccum10processingEv[];
++EXPORT_SYMBOL(_ZNK14PerfCountAccum10processingEv);
++extern char _ZTV14PerfCountAccum[];
++EXPORT_SYMBOL(_ZTV14PerfCountAccum);
++extern char _ZN13PerfCountInfo4castEPKc[];
++EXPORT_SYMBOL(_ZN13PerfCountInfo4castEPKc);
++extern char _ZN13PerfCountInfo9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13PerfCountInfo9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN13PerfCountInfoC1Ev[];
++EXPORT_SYMBOL(_ZN13PerfCountInfoC1Ev);
++extern char _ZN13PerfCountInfoC2Ev[];
++EXPORT_SYMBOL(_ZN13PerfCountInfoC2Ev);
++extern char _ZN13PerfCountInfoD0Ev[];
++EXPORT_SYMBOL(_ZN13PerfCountInfoD0Ev);
++extern char _ZN13PerfCountInfoD1Ev[];
++EXPORT_SYMBOL(_ZN13PerfCountInfoD1Ev);
++extern char _ZN13PerfCountInfoD2Ev[];
++EXPORT_SYMBOL(_ZN13PerfCountInfoD2Ev);
++extern char _ZNK13PerfCountInfo10class_nameEv[];
++EXPORT_SYMBOL(_ZNK13PerfCountInfo10class_nameEv);
++extern char _ZNK13PerfCountInfo15configure_phaseEv[];
++EXPORT_SYMBOL(_ZNK13PerfCountInfo15configure_phaseEv);
++extern char _ZTV13PerfCountInfo[];
++EXPORT_SYMBOL(_ZTV13PerfCountInfo);
++extern char _ZN13PerfCountUser10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13PerfCountUser10initializeEP12ErrorHandler);
++extern char _ZN13PerfCountUser7prepareERK6StringP12ErrorHandleri[];
++EXPORT_SYMBOL(_ZN13PerfCountUser7prepareERK6StringP12ErrorHandleri);
++extern char _ZN13PerfCountUserC1Ev[];
++EXPORT_SYMBOL(_ZN13PerfCountUserC1Ev);
++extern char _ZN13PerfCountUserC2Ev[];
++EXPORT_SYMBOL(_ZN13PerfCountUserC2Ev);
++extern char _ZN13PerfCountUserD0Ev[];
++EXPORT_SYMBOL(_ZN13PerfCountUserD0Ev);
++extern char _ZN13PerfCountUserD1Ev[];
++EXPORT_SYMBOL(_ZN13PerfCountUserD1Ev);
++extern char _ZN13PerfCountUserD2Ev[];
++EXPORT_SYMBOL(_ZN13PerfCountUserD2Ev);
++extern char _ZTV13PerfCountUser[];
++EXPORT_SYMBOL(_ZTV13PerfCountUser);
++extern char _ZN12PokeHandlers10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12PokeHandlers10initializeEP12ErrorHandler);
++extern char _ZN12PokeHandlers10read_paramEP7ElementPv[];
++EXPORT_SYMBOL(_ZN12PokeHandlers10read_paramEP7ElementPv);
++extern char _ZN12PokeHandlers10timer_hookEP5TimerPv[];
++EXPORT_SYMBOL(_ZN12PokeHandlers10timer_hookEP5TimerPv);
++extern char _ZN12PokeHandlers11LOOP_MARKERE[];
++EXPORT_SYMBOL(_ZN12PokeHandlers11LOOP_MARKERE);
++extern char _ZN12PokeHandlers11STOP_MARKERE[];
++EXPORT_SYMBOL(_ZN12PokeHandlers11STOP_MARKERE);
++extern char _ZN12PokeHandlers11write_paramERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12PokeHandlers11write_paramERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN12PokeHandlers12PAUSE_MARKERE[];
++EXPORT_SYMBOL(_ZN12PokeHandlers12PAUSE_MARKERE);
++extern char _ZN12PokeHandlers12add_handlersEv[];
++EXPORT_SYMBOL(_ZN12PokeHandlers12add_handlersEv);
++extern char _ZN12PokeHandlers3addEP7ElementRK6StringS4_i[];
++EXPORT_SYMBOL(_ZN12PokeHandlers3addEP7ElementRK6StringS4_i);
++extern char _ZN12PokeHandlers7unpauseEv[];
++EXPORT_SYMBOL(_ZN12PokeHandlers7unpauseEv);
++extern char _ZN12PokeHandlers9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12PokeHandlers9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12PokeHandlersC1Ev[];
++EXPORT_SYMBOL(_ZN12PokeHandlersC1Ev);
++extern char _ZN12PokeHandlersC2Ev[];
++EXPORT_SYMBOL(_ZN12PokeHandlersC2Ev);
++extern char _ZN12PokeHandlersD0Ev[];
++EXPORT_SYMBOL(_ZN12PokeHandlersD0Ev);
++extern char _ZN12PokeHandlersD1Ev[];
++EXPORT_SYMBOL(_ZN12PokeHandlersD1Ev);
++extern char _ZN12PokeHandlersD2Ev[];
++EXPORT_SYMBOL(_ZN12PokeHandlersD2Ev);
++extern char _ZNK12PokeHandlers10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12PokeHandlers10class_nameEv);
++extern char _ZNK12PokeHandlers20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK12PokeHandlers20can_live_reconfigureEv);
++extern char _ZTV12PokeHandlers[];
++EXPORT_SYMBOL(_ZTV12PokeHandlers);
++extern char _ZN10PollDevice10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10PollDevice10initializeEP12ErrorHandler);
++extern char _ZN10PollDevice12add_handlersEv[];
++EXPORT_SYMBOL(_ZN10PollDevice12add_handlersEv);
++extern char _ZN10PollDevice12reset_countsEv[];
++EXPORT_SYMBOL(_ZN10PollDevice12reset_countsEv);
++extern char _ZN10PollDevice13change_deviceEP10net_device[];
++EXPORT_SYMBOL(_ZN10PollDevice13change_deviceEP10net_device);
++extern char _ZN10PollDevice14static_cleanupEv[];
++EXPORT_SYMBOL(_ZN10PollDevice14static_cleanupEv);
++extern char _ZN10PollDevice17static_initializeEv[];
++EXPORT_SYMBOL(_ZN10PollDevice17static_initializeEv);
++extern char _ZN10PollDevice7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN10PollDevice7cleanupEN7Element12CleanupStageE);
++extern char _ZN10PollDevice8run_taskEP4Task[];
++EXPORT_SYMBOL(_ZN10PollDevice8run_taskEP4Task);
++extern char _ZN10PollDevice9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10PollDevice9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN10PollDeviceC1Ev[];
++EXPORT_SYMBOL(_ZN10PollDeviceC1Ev);
++extern char _ZN10PollDeviceC2Ev[];
++EXPORT_SYMBOL(_ZN10PollDeviceC2Ev);
++extern char _ZN10PollDeviceD0Ev[];
++EXPORT_SYMBOL(_ZN10PollDeviceD0Ev);
++extern char _ZN10PollDeviceD1Ev[];
++EXPORT_SYMBOL(_ZN10PollDeviceD1Ev);
++extern char _ZN10PollDeviceD2Ev[];
++EXPORT_SYMBOL(_ZN10PollDeviceD2Ev);
++extern char _ZNK10PollDevice10class_nameEv[];
++EXPORT_SYMBOL(_ZNK10PollDevice10class_nameEv);
++extern char _ZNK10PollDevice10port_countEv[];
++EXPORT_SYMBOL(_ZNK10PollDevice10port_countEv);
++extern char _ZNK10PollDevice10processingEv[];
++EXPORT_SYMBOL(_ZNK10PollDevice10processingEv);
++extern char _ZNK10PollDevice15configure_phaseEv[];
++EXPORT_SYMBOL(_ZNK10PollDevice15configure_phaseEv);
++extern char _ZTV10PollDevice[];
++EXPORT_SYMBOL(_ZTV10PollDevice);
++extern char _ZN8PortInfo9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8PortInfo9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN8PortInfoC1Ev[];
++EXPORT_SYMBOL(_ZN8PortInfoC1Ev);
++extern char _ZN8PortInfoC2Ev[];
++EXPORT_SYMBOL(_ZN8PortInfoC2Ev);
++extern char _ZN8PortInfoD0Ev[];
++EXPORT_SYMBOL(_ZN8PortInfoD0Ev);
++extern char _ZN8PortInfoD1Ev[];
++EXPORT_SYMBOL(_ZN8PortInfoD1Ev);
++extern char _ZN8PortInfoD2Ev[];
++EXPORT_SYMBOL(_ZN8PortInfoD2Ev);
++extern char _ZNK8PortInfo10class_nameEv[];
++EXPORT_SYMBOL(_ZNK8PortInfo10class_nameEv);
++extern char _ZNK8PortInfo15configure_phaseEv[];
++EXPORT_SYMBOL(_ZNK8PortInfo15configure_phaseEv);
++extern char _ZTV8PortInfo[];
++EXPORT_SYMBOL(_ZTV8PortInfo);
++extern char _ZN5Print13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN5Print13simple_actionEP6Packet);
++extern char _ZN5Print9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN5Print9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN5PrintC1Ev[];
++EXPORT_SYMBOL(_ZN5PrintC1Ev);
++extern char _ZN5PrintC2Ev[];
++EXPORT_SYMBOL(_ZN5PrintC2Ev);
++extern char _ZN5PrintD0Ev[];
++EXPORT_SYMBOL(_ZN5PrintD0Ev);
++extern char _ZN5PrintD1Ev[];
++EXPORT_SYMBOL(_ZN5PrintD1Ev);
++extern char _ZN5PrintD2Ev[];
++EXPORT_SYMBOL(_ZN5PrintD2Ev);
++extern char _ZNK5Print10class_nameEv[];
++EXPORT_SYMBOL(_ZNK5Print10class_nameEv);
++extern char _ZNK5Print10port_countEv[];
++EXPORT_SYMBOL(_ZNK5Print10port_countEv);
++extern char _ZNK5Print10processingEv[];
++EXPORT_SYMBOL(_ZNK5Print10processingEv);
++extern char _ZNK5Print20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK5Print20can_live_reconfigureEv);
++extern char _ZTV5Print[];
++EXPORT_SYMBOL(_ZTV5Print);
++extern char _ZN9PrioSched10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN9PrioSched10initializeEP12ErrorHandler);
++extern char _ZN9PrioSched4pullEi[];
++EXPORT_SYMBOL(_ZN9PrioSched4pullEi);
++extern char _ZN9PrioSched7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN9PrioSched7cleanupEN7Element12CleanupStageE);
++extern char _ZN9PrioSchedC1Ev[];
++EXPORT_SYMBOL(_ZN9PrioSchedC1Ev);
++extern char _ZN9PrioSchedC2Ev[];
++EXPORT_SYMBOL(_ZN9PrioSchedC2Ev);
++extern char _ZN9PrioSchedD0Ev[];
++EXPORT_SYMBOL(_ZN9PrioSchedD0Ev);
++extern char _ZN9PrioSchedD1Ev[];
++EXPORT_SYMBOL(_ZN9PrioSchedD1Ev);
++extern char _ZN9PrioSchedD2Ev[];
++EXPORT_SYMBOL(_ZN9PrioSchedD2Ev);
++extern char _ZNK9PrioSched10class_nameEv[];
++EXPORT_SYMBOL(_ZNK9PrioSched10class_nameEv);
++extern char _ZNK9PrioSched10port_countEv[];
++EXPORT_SYMBOL(_ZNK9PrioSched10port_countEv);
++extern char _ZNK9PrioSched10processingEv[];
++EXPORT_SYMBOL(_ZNK9PrioSched10processingEv);
++extern char _ZTV9PrioSched[];
++EXPORT_SYMBOL(_ZTV9PrioSched);
++extern char _ZN10PullSwitch10read_paramEP7ElementPv[];
++EXPORT_SYMBOL(_ZN10PullSwitch10read_paramEP7ElementPv);
++extern char _ZN10PullSwitch11write_paramERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10PullSwitch11write_paramERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN10PullSwitch12add_handlersEv[];
++EXPORT_SYMBOL(_ZN10PullSwitch12add_handlersEv);
++extern char _ZN10PullSwitch4pullEi[];
++EXPORT_SYMBOL(_ZN10PullSwitch4pullEi);
++extern char _ZN10PullSwitch5llrpcEjPv[];
++EXPORT_SYMBOL(_ZN10PullSwitch5llrpcEjPv);
++extern char _ZN10PullSwitch9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10PullSwitch9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN10PullSwitchC1Ev[];
++EXPORT_SYMBOL(_ZN10PullSwitchC1Ev);
++extern char _ZN10PullSwitchC2Ev[];
++EXPORT_SYMBOL(_ZN10PullSwitchC2Ev);
++extern char _ZN10PullSwitchD0Ev[];
++EXPORT_SYMBOL(_ZN10PullSwitchD0Ev);
++extern char _ZN10PullSwitchD1Ev[];
++EXPORT_SYMBOL(_ZN10PullSwitchD1Ev);
++extern char _ZN10PullSwitchD2Ev[];
++EXPORT_SYMBOL(_ZN10PullSwitchD2Ev);
++extern char _ZNK10PullSwitch10class_nameEv[];
++EXPORT_SYMBOL(_ZNK10PullSwitch10class_nameEv);
++extern char _ZNK10PullSwitch10port_countEv[];
++EXPORT_SYMBOL(_ZNK10PullSwitch10port_countEv);
++extern char _ZNK10PullSwitch10processingEv[];
++EXPORT_SYMBOL(_ZNK10PullSwitch10processingEv);
++extern char _ZNK10PullSwitch13configurationER6VectorI6StringE[];
++EXPORT_SYMBOL(_ZNK10PullSwitch13configurationER6VectorI6StringE);
++extern char _ZNK10PullSwitch20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK10PullSwitch20can_live_reconfigureEv);
++extern char _ZTV10PullSwitch[];
++EXPORT_SYMBOL(_ZTV10PullSwitch);
++extern char _ZN11QuitWatcher10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11QuitWatcher10initializeEP12ErrorHandler);
++extern char _ZN11QuitWatcher9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11QuitWatcher9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN11QuitWatcher9run_timerEP5Timer[];
++EXPORT_SYMBOL(_ZN11QuitWatcher9run_timerEP5Timer);
++extern char _ZN11QuitWatcherC1Ev[];
++EXPORT_SYMBOL(_ZN11QuitWatcherC1Ev);
++extern char _ZN11QuitWatcherC2Ev[];
++EXPORT_SYMBOL(_ZN11QuitWatcherC2Ev);
++extern char _ZN11QuitWatcherD0Ev[];
++EXPORT_SYMBOL(_ZN11QuitWatcherD0Ev);
++extern char _ZN11QuitWatcherD1Ev[];
++EXPORT_SYMBOL(_ZN11QuitWatcherD1Ev);
++extern char _ZN11QuitWatcherD2Ev[];
++EXPORT_SYMBOL(_ZN11QuitWatcherD2Ev);
++extern char _ZNK11QuitWatcher10class_nameEv[];
++EXPORT_SYMBOL(_ZNK11QuitWatcher10class_nameEv);
++extern char _ZTV11QuitWatcher[];
++EXPORT_SYMBOL(_ZTV11QuitWatcher);
++extern char _ZN13RadixIPLookup11dump_routesEv[];
++EXPORT_SYMBOL(_ZN13RadixIPLookup11dump_routesEv);
++extern char _ZN13RadixIPLookup12remove_routeERK7IPRoutePS0_P12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13RadixIPLookup12remove_routeERK7IPRoutePS0_P12ErrorHandler);
++extern char _ZN13RadixIPLookup5Radix10free_radixEPS0_[];
++EXPORT_SYMBOL(_ZN13RadixIPLookup5Radix10free_radixEPS0_);
++extern char _ZN13RadixIPLookup5Radix10make_radixEii[];
++EXPORT_SYMBOL(_ZN13RadixIPLookup5Radix10make_radixEii);
++extern char _ZN13RadixIPLookup5Radix6changeEjjij[];
++EXPORT_SYMBOL(_ZN13RadixIPLookup5Radix6changeEjjij);
++extern char _ZN13RadixIPLookup7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN13RadixIPLookup7cleanupEN7Element12CleanupStageE);
++extern char _ZN13RadixIPLookup9add_routeERK7IPRoutebPS0_P12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13RadixIPLookup9add_routeERK7IPRoutebPS0_P12ErrorHandler);
++extern char _ZN13RadixIPLookupC1Ev[];
++EXPORT_SYMBOL(_ZN13RadixIPLookupC1Ev);
++extern char _ZN13RadixIPLookupC2Ev[];
++EXPORT_SYMBOL(_ZN13RadixIPLookupC2Ev);
++extern char _ZN13RadixIPLookupD0Ev[];
++EXPORT_SYMBOL(_ZN13RadixIPLookupD0Ev);
++extern char _ZN13RadixIPLookupD1Ev[];
++EXPORT_SYMBOL(_ZN13RadixIPLookupD1Ev);
++extern char _ZN13RadixIPLookupD2Ev[];
++EXPORT_SYMBOL(_ZN13RadixIPLookupD2Ev);
++extern char _ZN6VectorI7IPRouteE5eraseEPS0_S2_[];
++EXPORT_SYMBOL(_ZN6VectorI7IPRouteE5eraseEPS0_S2_);
++extern char _ZNK13RadixIPLookup10class_nameEv[];
++EXPORT_SYMBOL(_ZNK13RadixIPLookup10class_nameEv);
++extern char _ZNK13RadixIPLookup10port_countEv[];
++EXPORT_SYMBOL(_ZNK13RadixIPLookup10port_countEv);
++extern char _ZNK13RadixIPLookup10processingEv[];
++EXPORT_SYMBOL(_ZNK13RadixIPLookup10processingEv);
++extern char _ZNK13RadixIPLookup12lookup_routeE9IPAddressRS0_[];
++EXPORT_SYMBOL(_ZNK13RadixIPLookup12lookup_routeE9IPAddressRS0_);
++extern char _ZTV13RadixIPLookup[];
++EXPORT_SYMBOL(_ZTV13RadixIPLookup);
++extern char _ZN15RandomBitErrors12add_handlersEv[];
++EXPORT_SYMBOL(_ZN15RandomBitErrors12add_handlersEv);
++extern char _ZN15RandomBitErrors13set_bit_errorEj[];
++EXPORT_SYMBOL(_ZN15RandomBitErrors13set_bit_errorEj);
++extern char _ZN15RandomBitErrors13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN15RandomBitErrors13simple_actionEP6Packet);
++extern char _ZN15RandomBitErrors9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN15RandomBitErrors9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN15RandomBitErrorsC1Ev[];
++EXPORT_SYMBOL(_ZN15RandomBitErrorsC1Ev);
++extern char _ZN15RandomBitErrorsC2Ev[];
++EXPORT_SYMBOL(_ZN15RandomBitErrorsC2Ev);
++extern char _ZN15RandomBitErrorsD0Ev[];
++EXPORT_SYMBOL(_ZN15RandomBitErrorsD0Ev);
++extern char _ZN15RandomBitErrorsD1Ev[];
++EXPORT_SYMBOL(_ZN15RandomBitErrorsD1Ev);
++extern char _ZN15RandomBitErrorsD2Ev[];
++EXPORT_SYMBOL(_ZN15RandomBitErrorsD2Ev);
++extern char _ZNK15RandomBitErrors10class_nameEv[];
++EXPORT_SYMBOL(_ZNK15RandomBitErrors10class_nameEv);
++extern char _ZNK15RandomBitErrors10port_countEv[];
++EXPORT_SYMBOL(_ZNK15RandomBitErrors10port_countEv);
++extern char _ZNK15RandomBitErrors10processingEv[];
++EXPORT_SYMBOL(_ZNK15RandomBitErrors10processingEv);
++extern char _ZNK15RandomBitErrors20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK15RandomBitErrors20can_live_reconfigureEv);
++extern char _ZTV15RandomBitErrors[];
++EXPORT_SYMBOL(_ZTV15RandomBitErrors);
++extern char _ZN12RandomSample10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12RandomSample10initializeEP12ErrorHandler);
++extern char _ZN12RandomSample12add_handlersEv[];
++EXPORT_SYMBOL(_ZN12RandomSample12add_handlersEv);
++extern char _ZN12RandomSample12read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN12RandomSample12read_handlerEP7ElementPv);
++extern char _ZN12RandomSample4pullEi[];
++EXPORT_SYMBOL(_ZN12RandomSample4pullEi);
++extern char _ZN12RandomSample4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN12RandomSample4pushEiP6Packet);
++extern char _ZN12RandomSample9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12RandomSample9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12RandomSampleC1Ev[];
++EXPORT_SYMBOL(_ZN12RandomSampleC1Ev);
++extern char _ZN12RandomSampleC2Ev[];
++EXPORT_SYMBOL(_ZN12RandomSampleC2Ev);
++extern char _ZN12RandomSampleD0Ev[];
++EXPORT_SYMBOL(_ZN12RandomSampleD0Ev);
++extern char _ZN12RandomSampleD1Ev[];
++EXPORT_SYMBOL(_ZN12RandomSampleD1Ev);
++extern char _ZN12RandomSampleD2Ev[];
++EXPORT_SYMBOL(_ZN12RandomSampleD2Ev);
++extern char _ZNK12RandomSample10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12RandomSample10class_nameEv);
++extern char _ZNK12RandomSample10port_countEv[];
++EXPORT_SYMBOL(_ZNK12RandomSample10port_countEv);
++extern char _ZNK12RandomSample10processingEv[];
++EXPORT_SYMBOL(_ZNK12RandomSample10processingEv);
++extern char _ZNK12RandomSample13configurationER6VectorI6StringE[];
++EXPORT_SYMBOL(_ZNK12RandomSample13configurationER6VectorI6StringE);
++extern char _ZNK12RandomSample20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK12RandomSample20can_live_reconfigureEv);
++extern char _ZTV12RandomSample[];
++EXPORT_SYMBOL(_ZTV12RandomSample);
++extern char _ZN12RandomSource10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12RandomSource10initializeEP12ErrorHandler);
++extern char _ZN12RandomSource11make_packetEv[];
++EXPORT_SYMBOL(_ZN12RandomSource11make_packetEv);
++extern char _ZN12RandomSource12add_handlersEv[];
++EXPORT_SYMBOL(_ZN12RandomSource12add_handlersEv);
++extern char _ZN12RandomSource4pullEi[];
++EXPORT_SYMBOL(_ZN12RandomSource4pullEi);
++extern char _ZN12RandomSource8run_taskEP4Task[];
++EXPORT_SYMBOL(_ZN12RandomSource8run_taskEP4Task);
++extern char _ZN12RandomSource9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12RandomSource9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12RandomSourceC1Ev[];
++EXPORT_SYMBOL(_ZN12RandomSourceC1Ev);
++extern char _ZN12RandomSourceC2Ev[];
++EXPORT_SYMBOL(_ZN12RandomSourceC2Ev);
++extern char _ZN12RandomSourceD0Ev[];
++EXPORT_SYMBOL(_ZN12RandomSourceD0Ev);
++extern char _ZN12RandomSourceD1Ev[];
++EXPORT_SYMBOL(_ZN12RandomSourceD1Ev);
++extern char _ZN12RandomSourceD2Ev[];
++EXPORT_SYMBOL(_ZN12RandomSourceD2Ev);
++extern char _ZNK12RandomSource10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12RandomSource10class_nameEv);
++extern char _ZNK12RandomSource10port_countEv[];
++EXPORT_SYMBOL(_ZNK12RandomSource10port_countEv);
++extern char _ZNK12RandomSource10processingEv[];
++EXPORT_SYMBOL(_ZNK12RandomSource10processingEv);
++extern char _ZTV12RandomSource[];
++EXPORT_SYMBOL(_ZTV12RandomSource);
++extern char _ZN12RandomSwitch4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN12RandomSwitch4pushEiP6Packet);
++extern char _ZN12RandomSwitchC1Ev[];
++EXPORT_SYMBOL(_ZN12RandomSwitchC1Ev);
++extern char _ZN12RandomSwitchC2Ev[];
++EXPORT_SYMBOL(_ZN12RandomSwitchC2Ev);
++extern char _ZN12RandomSwitchD0Ev[];
++EXPORT_SYMBOL(_ZN12RandomSwitchD0Ev);
++extern char _ZN12RandomSwitchD1Ev[];
++EXPORT_SYMBOL(_ZN12RandomSwitchD1Ev);
++extern char _ZN12RandomSwitchD2Ev[];
++EXPORT_SYMBOL(_ZN12RandomSwitchD2Ev);
++extern char _ZNK12RandomSwitch10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12RandomSwitch10class_nameEv);
++extern char _ZNK12RandomSwitch10port_countEv[];
++EXPORT_SYMBOL(_ZNK12RandomSwitch10port_countEv);
++extern char _ZNK12RandomSwitch10processingEv[];
++EXPORT_SYMBOL(_ZNK12RandomSwitch10processingEv);
++extern char _ZTV12RandomSwitch[];
++EXPORT_SYMBOL(_ZTV12RandomSwitch);
++extern char _ZN11RatedSource10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11RatedSource10initializeEP12ErrorHandler);
++extern char _ZN11RatedSource10read_paramEP7ElementPv[];
++EXPORT_SYMBOL(_ZN11RatedSource10read_paramEP7ElementPv);
++extern char _ZN11RatedSource12add_handlersEv[];
++EXPORT_SYMBOL(_ZN11RatedSource12add_handlersEv);
++extern char _ZN11RatedSource12change_paramERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11RatedSource12change_paramERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN11RatedSource12setup_packetEv[];
++EXPORT_SYMBOL(_ZN11RatedSource12setup_packetEv);
++extern char _ZN11RatedSource4pullEi[];
++EXPORT_SYMBOL(_ZN11RatedSource4pullEi);
++extern char _ZN11RatedSource7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN11RatedSource7cleanupEN7Element12CleanupStageE);
++extern char _ZN11RatedSource8NO_LIMITE[];
++EXPORT_SYMBOL(_ZN11RatedSource8NO_LIMITE);
++extern char _ZN11RatedSource8run_taskEP4Task[];
++EXPORT_SYMBOL(_ZN11RatedSource8run_taskEP4Task);
++extern char _ZN11RatedSource9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11RatedSource9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN11RatedSourceC1Ev[];
++EXPORT_SYMBOL(_ZN11RatedSourceC1Ev);
++extern char _ZN11RatedSourceC2Ev[];
++EXPORT_SYMBOL(_ZN11RatedSourceC2Ev);
++extern char _ZN11RatedSourceD0Ev[];
++EXPORT_SYMBOL(_ZN11RatedSourceD0Ev);
++extern char _ZN11RatedSourceD1Ev[];
++EXPORT_SYMBOL(_ZN11RatedSourceD1Ev);
++extern char _ZN11RatedSourceD2Ev[];
++EXPORT_SYMBOL(_ZN11RatedSourceD2Ev);
++extern char _ZNK11RatedSource10class_nameEv[];
++EXPORT_SYMBOL(_ZNK11RatedSource10class_nameEv);
++extern char _ZNK11RatedSource10port_countEv[];
++EXPORT_SYMBOL(_ZNK11RatedSource10port_countEv);
++extern char _ZNK11RatedSource10processingEv[];
++EXPORT_SYMBOL(_ZNK11RatedSource10processingEv);
++extern char _ZTV11RatedSource[];
++EXPORT_SYMBOL(_ZTV11RatedSource);
++extern char _ZN13RatedSplitter12add_handlersEv[];
++EXPORT_SYMBOL(_ZN13RatedSplitter12add_handlersEv);
++extern char _ZN13RatedSplitter4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN13RatedSplitter4pushEiP6Packet);
++extern char _ZN13RatedSplitter9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13RatedSplitter9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN13RatedSplitterC1Ev[];
++EXPORT_SYMBOL(_ZN13RatedSplitterC1Ev);
++extern char _ZN13RatedSplitterC2Ev[];
++EXPORT_SYMBOL(_ZN13RatedSplitterC2Ev);
++extern char _ZN13RatedSplitterD0Ev[];
++EXPORT_SYMBOL(_ZN13RatedSplitterD0Ev);
++extern char _ZN13RatedSplitterD1Ev[];
++EXPORT_SYMBOL(_ZN13RatedSplitterD1Ev);
++extern char _ZN13RatedSplitterD2Ev[];
++EXPORT_SYMBOL(_ZN13RatedSplitterD2Ev);
++extern char _ZNK13RatedSplitter10class_nameEv[];
++EXPORT_SYMBOL(_ZNK13RatedSplitter10class_nameEv);
++extern char _ZNK13RatedSplitter13configurationER6VectorI6StringE[];
++EXPORT_SYMBOL(_ZNK13RatedSplitter13configurationER6VectorI6StringE);
++extern char _ZTV13RatedSplitter[];
++EXPORT_SYMBOL(_ZTV13RatedSplitter);
++extern char _ZN12RatedUnqueue10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12RatedUnqueue10initializeEP12ErrorHandler);
++extern char _ZN12RatedUnqueue12add_handlersEv[];
++EXPORT_SYMBOL(_ZN12RatedUnqueue12add_handlersEv);
++extern char _ZN12RatedUnqueue8run_taskEP4Task[];
++EXPORT_SYMBOL(_ZN12RatedUnqueue8run_taskEP4Task);
++extern char _ZN12RatedUnqueue9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12RatedUnqueue9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12RatedUnqueueC1Ev[];
++EXPORT_SYMBOL(_ZN12RatedUnqueueC1Ev);
++extern char _ZN12RatedUnqueueC2Ev[];
++EXPORT_SYMBOL(_ZN12RatedUnqueueC2Ev);
++extern char _ZN12RatedUnqueueD0Ev[];
++EXPORT_SYMBOL(_ZN12RatedUnqueueD0Ev);
++extern char _ZN12RatedUnqueueD1Ev[];
++EXPORT_SYMBOL(_ZN12RatedUnqueueD1Ev);
++extern char _ZN12RatedUnqueueD2Ev[];
++EXPORT_SYMBOL(_ZN12RatedUnqueueD2Ev);
++extern char _ZNK12RatedUnqueue10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12RatedUnqueue10class_nameEv);
++extern char _ZNK12RatedUnqueue13configurationER6VectorI6StringE[];
++EXPORT_SYMBOL(_ZNK12RatedUnqueue13configurationER6VectorI6StringE);
++extern char _ZTV12RatedUnqueue[];
++EXPORT_SYMBOL(_ZTV12RatedUnqueue);
++extern char click_cycle_counter[];
++EXPORT_SYMBOL(click_cycle_counter);
++extern char _ZN11DirectEWMAXI24StabilityEWMAXParametersILj10EyxEE8update_nEyj[];
++EXPORT_SYMBOL(_ZN11DirectEWMAXI24StabilityEWMAXParametersILj10EyxEE8update_nEyj);
++extern char _ZN3RED10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN3RED10initializeEP12ErrorHandler);
++extern char _ZN3RED10read_statsEP7ElementPv[];
++EXPORT_SYMBOL(_ZN3RED10read_statsEP7ElementPv);
++extern char _ZN3RED10take_stateEP7ElementP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN3RED10take_stateEP7ElementP12ErrorHandler);
++extern char _ZN3RED11read_queuesEP7ElementPv[];
++EXPORT_SYMBOL(_ZN3RED11read_queuesEP7ElementPv);
++extern char _ZN3RED11should_dropEv[];
++EXPORT_SYMBOL(_ZN3RED11should_dropEv);
++extern char _ZN3RED12add_handlersEv[];
++EXPORT_SYMBOL(_ZN3RED12add_handlersEv);
++extern char _ZN3RED13set_C1_and_C2Ev[];
++EXPORT_SYMBOL(_ZN3RED13set_C1_and_C2Ev);
++extern char _ZN3RED14read_parameterEP7ElementPv[];
++EXPORT_SYMBOL(_ZN3RED14read_parameterEP7ElementPv);
++extern char _ZN3RED16finish_configureEjjjjRK6StringP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN3RED16finish_configureEjjjjRK6StringP12ErrorHandler);
++extern char _ZN3RED16live_reconfigureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN3RED16live_reconfigureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN3RED4pullEi[];
++EXPORT_SYMBOL(_ZN3RED4pullEi);
++extern char _ZN3RED4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN3RED4pushEiP6Packet);
++extern char _ZN3RED9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN3RED9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN3REDC1Ev[];
++EXPORT_SYMBOL(_ZN3REDC1Ev);
++extern char _ZN3REDC2Ev[];
++EXPORT_SYMBOL(_ZN3REDC2Ev);
++extern char _ZN3REDD0Ev[];
++EXPORT_SYMBOL(_ZN3REDD0Ev);
++extern char _ZN3REDD1Ev[];
++EXPORT_SYMBOL(_ZN3REDD1Ev);
++extern char _ZN3REDD2Ev[];
++EXPORT_SYMBOL(_ZN3REDD2Ev);
++extern char _ZNK3RED10class_nameEv[];
++EXPORT_SYMBOL(_ZNK3RED10class_nameEv);
++extern char _ZNK3RED10queue_sizeEv[];
++EXPORT_SYMBOL(_ZNK3RED10queue_sizeEv);
++extern char _ZNK3RED12check_paramsEjjjjP12ErrorHandler[];
++EXPORT_SYMBOL(_ZNK3RED12check_paramsEjjjjP12ErrorHandler);
++extern char _ZNK3RED13configurationER6VectorI6StringE[];
++EXPORT_SYMBOL(_ZNK3RED13configurationER6VectorI6StringE);
++extern char _ZTV3RED[];
++EXPORT_SYMBOL(_ZTV3RED);
++extern char _ZN7HashMapI8IPFlowIDiE10initializeEP20HashMap_ArenaFactoryj[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDiE10initializeEP20HashMap_ArenaFactoryj);
++extern char _ZN7HashMapI8IPFlowIDiE20set_dynamic_resizingEb[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDiE20set_dynamic_resizingEb);
++extern char _ZN7HashMapI8IPFlowIDiE6insertERKS0_RKi[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDiE6insertERKS0_RKi);
++extern char _ZN7HashMapI8IPFlowIDiE6resizeEj[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDiE6resizeEj);
++extern char _ZN7HashMapI8IPFlowIDiE7resize0Ej[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDiE7resize0Ej);
++extern char _ZN7HashMapI8IPFlowIDiE9set_arenaEP20HashMap_ArenaFactory[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDiE9set_arenaEP20HashMap_ArenaFactory);
++extern char _ZN7HashMapI8IPFlowIDiEC1Ev[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDiEC1Ev);
++extern char _ZN7HashMapI8IPFlowIDiED1Ev[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDiED1Ev);
++extern char _ZN8RFC2507c10make_otherEP6Packet[];
++EXPORT_SYMBOL(_ZN8RFC2507c10make_otherEP6Packet);
++extern char _ZN8RFC2507c13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN8RFC2507c13simple_actionEP6Packet);
++extern char _ZN8RFC2507c15make_compressedEiP6Packet[];
++EXPORT_SYMBOL(_ZN8RFC2507c15make_compressedEiP6Packet);
++extern char _ZN8RFC2507c7encodeXEiiPcRi[];
++EXPORT_SYMBOL(_ZN8RFC2507c7encodeXEiiPcRi);
++extern char _ZN8RFC2507c8encode16EiiPcRi[];
++EXPORT_SYMBOL(_ZN8RFC2507c8encode16EiiPcRi);
++extern char _ZN8RFC2507c8encode32EiiPcRi[];
++EXPORT_SYMBOL(_ZN8RFC2507c8encode32EiiPcRi);
++extern char _ZN8RFC2507c8make_keyERKNS_5tcpipERS0_[];
++EXPORT_SYMBOL(_ZN8RFC2507c8make_keyERKNS_5tcpipERS0_);
++extern char _ZN8RFC2507c9make_fullEiP6Packet[];
++EXPORT_SYMBOL(_ZN8RFC2507c9make_fullEiP6Packet);
++extern char _ZN8RFC2507cC1Ev[];
++EXPORT_SYMBOL(_ZN8RFC2507cC1Ev);
++extern char _ZN8RFC2507cC2Ev[];
++EXPORT_SYMBOL(_ZN8RFC2507cC2Ev);
++extern char _ZN8RFC2507cD0Ev[];
++EXPORT_SYMBOL(_ZN8RFC2507cD0Ev);
++extern char _ZN8RFC2507cD1Ev[];
++EXPORT_SYMBOL(_ZN8RFC2507cD1Ev);
++extern char _ZN8RFC2507cD2Ev[];
++EXPORT_SYMBOL(_ZN8RFC2507cD2Ev);
++extern char _ZNK7HashMapI8IPFlowIDiE9find_pairERKS0_[];
++EXPORT_SYMBOL(_ZNK7HashMapI8IPFlowIDiE9find_pairERKS0_);
++extern char _ZNK8RFC2507c10class_nameEv[];
++EXPORT_SYMBOL(_ZNK8RFC2507c10class_nameEv);
++extern char _ZNK8RFC2507c10port_countEv[];
++EXPORT_SYMBOL(_ZNK8RFC2507c10port_countEv);
++extern char _ZNK8RFC2507c10processingEv[];
++EXPORT_SYMBOL(_ZNK8RFC2507c10processingEv);
++extern char _ZTV8RFC2507c[];
++EXPORT_SYMBOL(_ZTV8RFC2507c);
++extern char _ZN8RFC2507d13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN8RFC2507d13simple_actionEP6Packet);
++extern char _ZN8RFC2507d6decodeERPKhRj[];
++EXPORT_SYMBOL(_ZN8RFC2507d6decodeERPKhRj);
++extern char _ZN8RFC2507d6decodeERPKhRt[];
++EXPORT_SYMBOL(_ZN8RFC2507d6decodeERPKhRt);
++extern char _ZN8RFC2507dC1Ev[];
++EXPORT_SYMBOL(_ZN8RFC2507dC1Ev);
++extern char _ZN8RFC2507dC2Ev[];
++EXPORT_SYMBOL(_ZN8RFC2507dC2Ev);
++extern char _ZN8RFC2507dD0Ev[];
++EXPORT_SYMBOL(_ZN8RFC2507dD0Ev);
++extern char _ZN8RFC2507dD1Ev[];
++EXPORT_SYMBOL(_ZN8RFC2507dD1Ev);
++extern char _ZN8RFC2507dD2Ev[];
++EXPORT_SYMBOL(_ZN8RFC2507dD2Ev);
++extern char _ZNK8RFC2507d10class_nameEv[];
++EXPORT_SYMBOL(_ZNK8RFC2507d10class_nameEv);
++extern char _ZNK8RFC2507d10port_countEv[];
++EXPORT_SYMBOL(_ZNK8RFC2507d10port_countEv);
++extern char _ZNK8RFC2507d10processingEv[];
++EXPORT_SYMBOL(_ZNK8RFC2507d10processingEv);
++extern char _ZTV8RFC2507d[];
++EXPORT_SYMBOL(_ZTV8RFC2507d);
++extern char _ZN7RIPSend10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7RIPSend10initializeEP12ErrorHandler);
++extern char _ZN7RIPSend9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7RIPSend9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN7RIPSend9run_timerEP5Timer[];
++EXPORT_SYMBOL(_ZN7RIPSend9run_timerEP5Timer);
++extern char _ZN7RIPSendC1Ev[];
++EXPORT_SYMBOL(_ZN7RIPSendC1Ev);
++extern char _ZN7RIPSendC2Ev[];
++EXPORT_SYMBOL(_ZN7RIPSendC2Ev);
++extern char _ZN7RIPSendD0Ev[];
++EXPORT_SYMBOL(_ZN7RIPSendD0Ev);
++extern char _ZN7RIPSendD1Ev[];
++EXPORT_SYMBOL(_ZN7RIPSendD1Ev);
++extern char _ZN7RIPSendD2Ev[];
++EXPORT_SYMBOL(_ZN7RIPSendD2Ev);
++extern char _ZNK7RIPSend10class_nameEv[];
++EXPORT_SYMBOL(_ZNK7RIPSend10class_nameEv);
++extern char _ZNK7RIPSend10port_countEv[];
++EXPORT_SYMBOL(_ZNK7RIPSend10port_countEv);
++extern char _ZNK7RIPSend10processingEv[];
++EXPORT_SYMBOL(_ZNK7RIPSend10processingEv);
++extern char _ZTV7RIPSend[];
++EXPORT_SYMBOL(_ZTV7RIPSend);
++extern char _ZN11ThreadSched22initial_home_thread_idEP4Taskb[];
++EXPORT_SYMBOL(_ZN11ThreadSched22initial_home_thread_idEP4Taskb);
++extern char _ZN11ThreadSchedD0Ev[];
++EXPORT_SYMBOL(_ZN11ThreadSchedD0Ev);
++extern char _ZN11ThreadSchedD1Ev[];
++EXPORT_SYMBOL(_ZN11ThreadSchedD1Ev);
++extern char _ZN6Router10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN6Router10initializeEP12ErrorHandler);
++extern char _ZN6Router11add_elementEP7ElementRK6StringS4_S4_[];
++EXPORT_SYMBOL(_ZN6Router11add_elementEP7ElementRK6StringS4_S4_);
++extern char _ZN6Router11make_gportsEv[];
++EXPORT_SYMBOL(_ZN6Router11make_gportsEv);
++extern char _ZN6Router11set_handlerEPK7ElementRK6StringiPFiiRS3_PS0_PK7HandlerP12ErrorHandlerEPvSF_[];
++EXPORT_SYMBOL(_ZN6Router11set_handlerEPK7ElementRK6StringiPFiiRS3_PS0_PK7HandlerP12ErrorHandlerEPvSF_);
++extern char _ZN6Router12hookup_errorERKNS_6HookupEbPKcP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN6Router12hookup_errorERKNS_6HookupEbPKcP12ErrorHandler);
++extern char _ZN6Router12set_runcountEi[];
++EXPORT_SYMBOL(_ZN6Router12set_runcountEi);
++extern char _ZN6Router13remove_hookupEi[];
++EXPORT_SYMBOL(_ZN6Router13remove_hookupEi);
++extern char _ZN6Router14add_connectionEiiii[];
++EXPORT_SYMBOL(_ZN6Router14add_connectionEiiii);
++extern char _ZN6Router14add_module_refEP6module[];
++EXPORT_SYMBOL(_ZN6Router14add_module_refEP6module);
++extern char _ZN6Router14set_attachmentERK6StringPv[];
++EXPORT_SYMBOL(_ZN6Router14set_attachmentERK6StringPv);
++extern char _ZN6Router14static_cleanupEv[];
++EXPORT_SYMBOL(_ZN6Router14static_cleanupEv);
++extern char _ZN6Router15add_requirementERK6String[];
++EXPORT_SYMBOL(_ZN6Router15add_requirementERK6String);
++extern char _ZN6Router15adjust_runcountEi[];
++EXPORT_SYMBOL(_ZN6Router15adjust_runcountEi);
++extern char _ZN6Router15force_name_infoEv[];
++EXPORT_SYMBOL(_ZN6Router15force_name_infoEv);
++extern char _ZN6Router15set_connectionsEv[];
++EXPORT_SYMBOL(_ZN6Router15set_connectionsEv);
++extern char _ZN6Router16add_read_handlerEPK7ElementRK6StringPFS3_PS0_PvES7_[];
++EXPORT_SYMBOL(_ZN6Router16add_read_handlerEPK7ElementRK6StringPFS3_PS0_PvES7_);
++extern char _ZN6Router16element_hindexesEPK7ElementR6VectorIiE[];
++EXPORT_SYMBOL(_ZN6Router16element_hindexesEPK7ElementR6VectorIiE);
++extern char _ZN6Router16force_attachmentERK6String[];
++EXPORT_SYMBOL(_ZN6Router16force_attachmentERK6String);
++extern char _ZN6Router16global_port_flowEbP7ElementiP13ElementFilterR9Bitvector[];
++EXPORT_SYMBOL(_ZN6Router16global_port_flowEbP7ElementiP13ElementFilterR9Bitvector);
++extern char _ZN6Router16processing_errorERKNS_6HookupES2_biP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN6Router16processing_errorERKNS_6HookupES2_biP12ErrorHandler);
++extern char _ZN6Router17add_write_handlerEPK7ElementRK6StringPFiS5_PS0_PvP12ErrorHandlerES7_[];
++EXPORT_SYMBOL(_ZN6Router17add_write_handlerEPK7ElementRK6StringPFiS5_PS0_PvP12ErrorHandlerES7_);
++extern char _ZN6Router17static_initializeEv[];
++EXPORT_SYMBOL(_ZN6Router17static_initializeEv);
++extern char _ZN6Router17upstream_elementsEP7ElementiP13ElementFilterR6VectorIS1_E[];
++EXPORT_SYMBOL(_ZN6Router17upstream_elementsEP7ElementiP13ElementFilterR6VectorIS1_E);
++extern char _ZN6Router18check_hookup_rangeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN6Router18check_hookup_rangeEP12ErrorHandler);
++extern char _ZN6Router18make_hookup_gportsEv[];
++EXPORT_SYMBOL(_ZN6Router18make_hookup_gportsEv);
++extern char _ZN6Router18set_econfigurationEiRK6String[];
++EXPORT_SYMBOL(_ZN6Router18set_econfigurationEiRK6String);
++extern char _ZN6Router18set_hotswap_routerEPS_[];
++EXPORT_SYMBOL(_ZN6Router18set_hotswap_routerEPS_);
++extern char _ZN6Router19check_push_and_pullEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN6Router19check_push_and_pullEP12ErrorHandler);
++extern char _ZN6Router19downstream_elementsEP7ElementiP13ElementFilterR6VectorIS1_E[];
++EXPORT_SYMBOL(_ZN6Router19downstream_elementsEP7ElementiP13ElementFilterR6VectorIS1_E);
++extern char _ZN6Router19initialize_handlersEbb[];
++EXPORT_SYMBOL(_ZN6Router19initialize_handlersEbb);
++extern char _ZN6Router19new_notifier_signalER14NotifierSignal[];
++EXPORT_SYMBOL(_ZN6Router19new_notifier_signalER14NotifierSignal);
++extern char _ZN6Router19router_read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN6Router19router_read_handlerEP7ElementPv);
++extern char _ZN6Router19store_local_handlerEiRK7Handler[];
++EXPORT_SYMBOL(_ZN6Router19store_local_handlerEiRK7Handler);
++extern char _ZN6Router20change_handler_flagsEPK7ElementRK6Stringjj[];
++EXPORT_SYMBOL(_ZN6Router20change_handler_flagsEPK7ElementRK6Stringjj);
++extern char _ZN6Router20store_global_handlerERK7Handler[];
++EXPORT_SYMBOL(_ZN6Router20store_global_handlerERK7Handler);
++extern char _ZN6Router21check_hookup_elementsEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN6Router21check_hookup_elementsEP12ErrorHandler);
++extern char _ZN6Router25check_hookup_completenessEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN6Router25check_hookup_completenessEP12ErrorHandler);
++extern char _ZN6Router5unuseEv[];
++EXPORT_SYMBOL(_ZN6Router5unuseEv);
++extern char _ZN6Router6HookupC1Eii[];
++EXPORT_SYMBOL(_ZN6Router6HookupC1Eii);
++extern char _ZN6Router6hindexEPK7ElementRK6String[];
++EXPORT_SYMBOL(_ZN6Router6hindexEPK7ElementRK6String);
++extern char _ZN6Router7elementEPKS_i[];
++EXPORT_SYMBOL(_ZN6Router7elementEPKS_i);
++extern char _ZN6Router7handlerEPK7ElementRK6String[];
++EXPORT_SYMBOL(_ZN6Router7handlerEPK7ElementRK6String);
++extern char _ZN6Router7handlerEPKS_i[];
++EXPORT_SYMBOL(_ZN6Router7handlerEPKS_i);
++extern char _ZN6Router8activateEbP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN6Router8activateEbP12ErrorHandler);
++extern char _ZN6RouterC1ERK6StringP6Master[];
++EXPORT_SYMBOL(_ZN6RouterC1ERK6StringP6Master);
++extern char _ZN6RouterC2ERK6StringP6Master[];
++EXPORT_SYMBOL(_ZN6RouterC2ERK6StringP6Master);
++extern char _ZN6RouterD1Ev[];
++EXPORT_SYMBOL(_ZN6RouterD1Ev);
++extern char _ZN6RouterD2Ev[];
++EXPORT_SYMBOL(_ZN6RouterD2Ev);
++extern char _ZN6VectorIiE5beginEv[];
++EXPORT_SYMBOL(_ZN6VectorIiE5beginEv);
++extern char _ZN6VectorIiEC1EiRKi[];
++EXPORT_SYMBOL(_ZN6VectorIiEC1EiRKi);
++extern char _ZN7Handler12unparse_nameEP7ElementRK6String[];
++EXPORT_SYMBOL(_ZN7Handler12unparse_nameEP7ElementRK6String);
++extern char _ZN7Handler17the_blank_handlerE[];
++EXPORT_SYMBOL(_ZN7Handler17the_blank_handlerE);
++extern char _ZNK6Router10attachmentERK6String[];
++EXPORT_SYMBOL(_ZNK6Router10attachmentERK6String);
++extern char _ZNK6Router13find_ehandlerEiRK6Stringb[];
++EXPORT_SYMBOL(_ZNK6Router13find_ehandlerEiRK6Stringb);
++extern char _ZNK6Router14econfigurationEi[];
++EXPORT_SYMBOL(_ZNK6Router14econfigurationEi);
++extern char _ZNK6Router14element_lerrorEP12ErrorHandlerP7ElementPKcz[];
++EXPORT_SYMBOL(_ZNK6Router14element_lerrorEP12ErrorHandlerP7ElementPKcz);
++extern char _ZNK6Router15chatter_channelERK6String[];
++EXPORT_SYMBOL(_ZNK6Router15chatter_channelERK6String);
++extern char _ZNK6Router15context_messageEiPKc[];
++EXPORT_SYMBOL(_ZNK6Router15context_messageEiPKc);
++extern char _ZNK6Router15unparse_classesER11StringAccumRK6String[];
++EXPORT_SYMBOL(_ZNK6Router15unparse_classesER11StringAccumRK6String);
++extern char _ZNK6Router19gport_list_elementsEbRK9BitvectorR6VectorIP7ElementE[];
++EXPORT_SYMBOL(_ZNK6Router19gport_list_elementsEbRK9BitvectorR6VectorIP7ElementE);
++extern char _ZNK6Router19unparse_connectionsER11StringAccumRK6String[];
++EXPORT_SYMBOL(_ZNK6Router19unparse_connectionsER11StringAccumRK6String);
++extern char _ZNK6Router20element_ports_stringEi[];
++EXPORT_SYMBOL(_ZNK6Router20element_ports_stringEi);
++extern char _ZNK6Router20unparse_declarationsER11StringAccumRK6String[];
++EXPORT_SYMBOL(_ZNK6Router20unparse_declarationsER11StringAccumRK6String);
++extern char _ZNK6Router20unparse_requirementsER11StringAccumRK6String[];
++EXPORT_SYMBOL(_ZNK6Router20unparse_requirementsER11StringAccumRK6String);
++extern char _ZNK6Router4findERK6StringP7ElementP12ErrorHandler[];
++EXPORT_SYMBOL(_ZNK6Router4findERK6StringP7ElementP12ErrorHandler);
++extern char _ZNK6Router4findERK6StringS0_P12ErrorHandler[];
++EXPORT_SYMBOL(_ZNK6Router4findERK6StringS0_P12ErrorHandler);
++extern char _ZNK6Router5enameEi[];
++EXPORT_SYMBOL(_ZNK6Router5enameEi);
++extern char _ZNK6Router7unparseER11StringAccumRK6String[];
++EXPORT_SYMBOL(_ZNK6Router7unparseER11StringAccumRK6String);
++extern char _ZNK6Router9elandmarkEi[];
++EXPORT_SYMBOL(_ZNK6Router9elandmarkEi);
++extern char _ZNK6VectorI6StringEixEi[];
++EXPORT_SYMBOL(_ZNK6VectorI6StringEixEi);
++extern char _ZNK6VectorIN6Router6HookupEE4sizeEv[];
++EXPORT_SYMBOL(_ZNK6VectorIN6Router6HookupEE4sizeEv);
++extern char _ZNK6VectorIN6Router6HookupEEixEi[];
++EXPORT_SYMBOL(_ZNK6VectorIN6Router6HookupEEixEi);
++extern char _ZNK6VectorIP7ElementEixEi[];
++EXPORT_SYMBOL(_ZNK6VectorIP7ElementEixEi);
++extern char _ZNK7Handler10call_writeERK6StringP7ElementbP12ErrorHandler[];
++EXPORT_SYMBOL(_ZNK7Handler10call_writeERK6StringP7ElementbP12ErrorHandler);
++extern char _ZNK7Handler12unparse_nameEP7Element[];
++EXPORT_SYMBOL(_ZNK7Handler12unparse_nameEP7Element);
++extern char _ZNK7Handler9call_readEP7ElementRK6StringbP12ErrorHandler[];
++EXPORT_SYMBOL(_ZNK7Handler9call_readEP7ElementRK6StringbP12ErrorHandler);
++extern char _ZTV11ThreadSched[];
++EXPORT_SYMBOL(_ZTV11ThreadSched);
++extern char _ZN12RouterThread11driver_onceEv[];
++EXPORT_SYMBOL(_ZN12RouterThread11driver_onceEv);
++extern char _ZN12RouterThread23unschedule_router_tasksEP6Router[];
++EXPORT_SYMBOL(_ZN12RouterThread23unschedule_router_tasksEP6Router);
++extern char _ZN12RouterThread6driverEv[];
++EXPORT_SYMBOL(_ZN12RouterThread6driverEv);
++extern char _ZN12RouterThreadC1EP6Masteri[];
++EXPORT_SYMBOL(_ZN12RouterThreadC1EP6Masteri);
++extern char _ZN12RouterThreadC2EP6Masteri[];
++EXPORT_SYMBOL(_ZN12RouterThreadC2EP6Masteri);
++extern char _ZN12RouterThreadD1Ev[];
++EXPORT_SYMBOL(_ZN12RouterThreadD1Ev);
++extern char _ZN12RouterThreadD2Ev[];
++EXPORT_SYMBOL(_ZN12RouterThreadD2Ev);
++extern char _ZN18RoundRobinIPMapper15notify_rewriterEP4IPRwP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN18RoundRobinIPMapper15notify_rewriterEP4IPRwP12ErrorHandler);
++extern char _ZN18RoundRobinIPMapper4castEPKc[];
++EXPORT_SYMBOL(_ZN18RoundRobinIPMapper4castEPKc);
++extern char _ZN18RoundRobinIPMapper7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN18RoundRobinIPMapper7cleanupEN7Element12CleanupStageE);
++extern char _ZN18RoundRobinIPMapper7get_mapEP4IPRwiRK8IPFlowIDP6Packet[];
++EXPORT_SYMBOL(_ZN18RoundRobinIPMapper7get_mapEP4IPRwiRK8IPFlowIDP6Packet);
++extern char _ZN18RoundRobinIPMapper9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN18RoundRobinIPMapper9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN18RoundRobinIPMapperC1Ev[];
++EXPORT_SYMBOL(_ZN18RoundRobinIPMapperC1Ev);
++extern char _ZN18RoundRobinIPMapperC2Ev[];
++EXPORT_SYMBOL(_ZN18RoundRobinIPMapperC2Ev);
++extern char _ZN18RoundRobinIPMapperD0Ev[];
++EXPORT_SYMBOL(_ZN18RoundRobinIPMapperD0Ev);
++extern char _ZN18RoundRobinIPMapperD1Ev[];
++EXPORT_SYMBOL(_ZN18RoundRobinIPMapperD1Ev);
++extern char _ZN18RoundRobinIPMapperD2Ev[];
++EXPORT_SYMBOL(_ZN18RoundRobinIPMapperD2Ev);
++extern char _ZNK18RoundRobinIPMapper10class_nameEv[];
++EXPORT_SYMBOL(_ZNK18RoundRobinIPMapper10class_nameEv);
++extern char _ZNK18RoundRobinIPMapper15configure_phaseEv[];
++EXPORT_SYMBOL(_ZNK18RoundRobinIPMapper15configure_phaseEv);
++extern char _ZTV18RoundRobinIPMapper[];
++EXPORT_SYMBOL(_ZTV18RoundRobinIPMapper);
++extern char _ZThn60_N18RoundRobinIPMapper7get_mapEP4IPRwiRK8IPFlowIDP6Packet[];
++EXPORT_SYMBOL(_ZThn60_N18RoundRobinIPMapper7get_mapEP4IPRwiRK8IPFlowIDP6Packet);
++extern char _ZThn60_N18RoundRobinIPMapperD0Ev[];
++EXPORT_SYMBOL(_ZThn60_N18RoundRobinIPMapperD0Ev);
++extern char _ZThn60_N18RoundRobinIPMapperD1Ev[];
++EXPORT_SYMBOL(_ZThn60_N18RoundRobinIPMapperD1Ev);
++extern char _ZN7RRSched10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7RRSched10initializeEP12ErrorHandler);
++extern char _ZN7RRSched4pullEi[];
++EXPORT_SYMBOL(_ZN7RRSched4pullEi);
++extern char _ZN7RRSched7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN7RRSched7cleanupEN7Element12CleanupStageE);
++extern char _ZN7RRSchedC1Ev[];
++EXPORT_SYMBOL(_ZN7RRSchedC1Ev);
++extern char _ZN7RRSchedC2Ev[];
++EXPORT_SYMBOL(_ZN7RRSchedC2Ev);
++extern char _ZN7RRSchedD0Ev[];
++EXPORT_SYMBOL(_ZN7RRSchedD0Ev);
++extern char _ZN7RRSchedD1Ev[];
++EXPORT_SYMBOL(_ZN7RRSchedD1Ev);
++extern char _ZN7RRSchedD2Ev[];
++EXPORT_SYMBOL(_ZN7RRSchedD2Ev);
++extern char _ZNK7RRSched10class_nameEv[];
++EXPORT_SYMBOL(_ZNK7RRSched10class_nameEv);
++extern char _ZNK7RRSched10port_countEv[];
++EXPORT_SYMBOL(_ZNK7RRSched10port_countEv);
++extern char _ZNK7RRSched10processingEv[];
++EXPORT_SYMBOL(_ZNK7RRSched10processingEv);
++extern char _ZTV7RRSched[];
++EXPORT_SYMBOL(_ZTV7RRSched);
++extern char _ZN16RoundRobinSwitch4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN16RoundRobinSwitch4pushEiP6Packet);
++extern char _ZN16RoundRobinSwitchC1Ev[];
++EXPORT_SYMBOL(_ZN16RoundRobinSwitchC1Ev);
++extern char _ZN16RoundRobinSwitchC2Ev[];
++EXPORT_SYMBOL(_ZN16RoundRobinSwitchC2Ev);
++extern char _ZN16RoundRobinSwitchD0Ev[];
++EXPORT_SYMBOL(_ZN16RoundRobinSwitchD0Ev);
++extern char _ZN16RoundRobinSwitchD1Ev[];
++EXPORT_SYMBOL(_ZN16RoundRobinSwitchD1Ev);
++extern char _ZN16RoundRobinSwitchD2Ev[];
++EXPORT_SYMBOL(_ZN16RoundRobinSwitchD2Ev);
++extern char _ZNK16RoundRobinSwitch10class_nameEv[];
++EXPORT_SYMBOL(_ZNK16RoundRobinSwitch10class_nameEv);
++extern char _ZNK16RoundRobinSwitch10port_countEv[];
++EXPORT_SYMBOL(_ZNK16RoundRobinSwitch10port_countEv);
++extern char _ZNK16RoundRobinSwitch10processingEv[];
++EXPORT_SYMBOL(_ZNK16RoundRobinSwitch10processingEv);
++extern char _ZTV16RoundRobinSwitch[];
++EXPORT_SYMBOL(_ZTV16RoundRobinSwitch);
++extern char _ZN8RTCycles12add_handlersEv[];
++EXPORT_SYMBOL(_ZN8RTCycles12add_handlersEv);
++extern char _ZN8RTCycles4pullEi[];
++EXPORT_SYMBOL(_ZN8RTCycles4pullEi);
++extern char _ZN8RTCycles4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN8RTCycles4pushEiP6Packet);
++extern char _ZN8RTCyclesC1Ev[];
++EXPORT_SYMBOL(_ZN8RTCyclesC1Ev);
++extern char _ZN8RTCyclesC2Ev[];
++EXPORT_SYMBOL(_ZN8RTCyclesC2Ev);
++extern char _ZN8RTCyclesD0Ev[];
++EXPORT_SYMBOL(_ZN8RTCyclesD0Ev);
++extern char _ZN8RTCyclesD1Ev[];
++EXPORT_SYMBOL(_ZN8RTCyclesD1Ev);
++extern char _ZN8RTCyclesD2Ev[];
++EXPORT_SYMBOL(_ZN8RTCyclesD2Ev);
++extern char _ZNK8RTCycles10class_nameEv[];
++EXPORT_SYMBOL(_ZNK8RTCycles10class_nameEv);
++extern char _ZNK8RTCycles10port_countEv[];
++EXPORT_SYMBOL(_ZNK8RTCycles10port_countEv);
++extern char _ZNK8RTCycles10processingEv[];
++EXPORT_SYMBOL(_ZNK8RTCycles10processingEv);
++extern char _ZTV8RTCycles[];
++EXPORT_SYMBOL(_ZTV8RTCycles);
++extern char _Z16click_init_schedP12ErrorHandler[];
++EXPORT_SYMBOL(_Z16click_init_schedP12ErrorHandler);
++extern char _Z19click_cleanup_schedv[];
++EXPORT_SYMBOL(_Z19click_cleanup_schedv);
++extern char _ZN12ScheduleInfo15initialize_taskEP7ElementP4TaskbP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12ScheduleInfo15initialize_taskEP7ElementP4TaskbP12ErrorHandler);
++extern char _ZN12ScheduleInfo5queryEP7ElementP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12ScheduleInfo5queryEP7ElementP12ErrorHandler);
++extern char _ZN12ScheduleInfo9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12ScheduleInfo9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12ScheduleInfoC1Ev[];
++EXPORT_SYMBOL(_ZN12ScheduleInfoC1Ev);
++extern char _ZN12ScheduleInfoC2Ev[];
++EXPORT_SYMBOL(_ZN12ScheduleInfoC2Ev);
++extern char _ZN12ScheduleInfoD0Ev[];
++EXPORT_SYMBOL(_ZN12ScheduleInfoD0Ev);
++extern char _ZN12ScheduleInfoD1Ev[];
++EXPORT_SYMBOL(_ZN12ScheduleInfoD1Ev);
++extern char _ZN12ScheduleInfoD2Ev[];
++EXPORT_SYMBOL(_ZN12ScheduleInfoD2Ev);
++extern char _ZNK12ScheduleInfo10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12ScheduleInfo10class_nameEv);
++extern char _ZNK12ScheduleInfo15configure_phaseEv[];
++EXPORT_SYMBOL(_ZNK12ScheduleInfo15configure_phaseEv);
++extern char _ZTV12ScheduleInfo[];
++EXPORT_SYMBOL(_ZTV12ScheduleInfo);
++extern char _ZN13ScheduleLinux10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13ScheduleLinux10initializeEP12ErrorHandler);
++extern char _ZN13ScheduleLinux12add_handlersEv[];
++EXPORT_SYMBOL(_ZN13ScheduleLinux12add_handlersEv);
++extern char _ZN13ScheduleLinux8run_taskEP4Task[];
++EXPORT_SYMBOL(_ZN13ScheduleLinux8run_taskEP4Task);
++extern char _ZN13ScheduleLinux9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13ScheduleLinux9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN13ScheduleLinuxC1Ev[];
++EXPORT_SYMBOL(_ZN13ScheduleLinuxC1Ev);
++extern char _ZN13ScheduleLinuxC2Ev[];
++EXPORT_SYMBOL(_ZN13ScheduleLinuxC2Ev);
++extern char _ZN13ScheduleLinuxD0Ev[];
++EXPORT_SYMBOL(_ZN13ScheduleLinuxD0Ev);
++extern char _ZN13ScheduleLinuxD1Ev[];
++EXPORT_SYMBOL(_ZN13ScheduleLinuxD1Ev);
++extern char _ZN13ScheduleLinuxD2Ev[];
++EXPORT_SYMBOL(_ZN13ScheduleLinuxD2Ev);
++extern char _ZNK13ScheduleLinux10class_nameEv[];
++EXPORT_SYMBOL(_ZNK13ScheduleLinux10class_nameEv);
++extern char _ZTV13ScheduleLinux[];
++EXPORT_SYMBOL(_ZTV13ScheduleLinux);
++extern char _ZN6Script10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN6Script10initializeEP12ErrorHandler);
++extern char _ZN6Script12add_handlersEv[];
++EXPORT_SYMBOL(_ZN6Script12add_handlersEv);
++extern char _ZN6Script12step_handlerEiR6StringP7ElementPK7HandlerP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN6Script12step_handlerEiR6StringP7ElementPK7HandlerP12ErrorHandler);
++extern char _ZN6Script14static_cleanupEv[];
++EXPORT_SYMBOL(_ZN6Script14static_cleanupEv);
++extern char _ZN6Script17static_initializeEv[];
++EXPORT_SYMBOL(_ZN6Script17static_initializeEv);
++extern char _ZN6Script18arithmetic_handlerEiR6StringP7ElementPK7HandlerP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN6Script18arithmetic_handlerEiR6StringP7ElementPK7HandlerP12ErrorHandler);
++extern char _ZN6Script4stepEiii[];
++EXPORT_SYMBOL(_ZN6Script4stepEiii);
++extern char _ZN6Script8Expander6expandERK6StringiiR11StringAccum[];
++EXPORT_SYMBOL(_ZN6Script8Expander6expandERK6StringiiR11StringAccum);
++extern char _ZN6Script8ExpanderD0Ev[];
++EXPORT_SYMBOL(_ZN6Script8ExpanderD0Ev);
++extern char _ZN6Script8ExpanderD1Ev[];
++EXPORT_SYMBOL(_ZN6Script8ExpanderD1Ev);
++extern char _ZN6Script8add_insnEiiiRK6String[];
++EXPORT_SYMBOL(_ZN6Script8add_insnEiiiRK6String);
++extern char _ZN6Script9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN6Script9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN6Script9run_timerEP5Timer[];
++EXPORT_SYMBOL(_ZN6Script9run_timerEP5Timer);
++extern char _ZN6ScriptC1Ev[];
++EXPORT_SYMBOL(_ZN6ScriptC1Ev);
++extern char _ZN6ScriptC2Ev[];
++EXPORT_SYMBOL(_ZN6ScriptC2Ev);
++extern char _ZN6ScriptD0Ev[];
++EXPORT_SYMBOL(_ZN6ScriptD0Ev);
++extern char _ZN6ScriptD1Ev[];
++EXPORT_SYMBOL(_ZN6ScriptD1Ev);
++extern char _ZN6ScriptD2Ev[];
++EXPORT_SYMBOL(_ZN6ScriptD2Ev);
++extern char _ZNK6Script10class_nameEv[];
++EXPORT_SYMBOL(_ZNK6Script10class_nameEv);
++extern char _ZNK6Script10find_labelERK6String[];
++EXPORT_SYMBOL(_ZNK6Script10find_labelERK6String);
++extern char _ZNK6Script13find_variableERK6String[];
++EXPORT_SYMBOL(_ZNK6Script13find_variableERK6String);
++extern char _ZTV6Script[];
++EXPORT_SYMBOL(_ZTV6Script);
++extern char _ZTVN6Script8ExpanderE[];
++EXPORT_SYMBOL(_ZTVN6Script8ExpanderE);
++extern char _ZN11SetAnnoByte12add_handlersEv[];
++EXPORT_SYMBOL(_ZN11SetAnnoByte12add_handlersEv);
++extern char _ZN11SetAnnoByte13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN11SetAnnoByte13simple_actionEP6Packet);
++extern char _ZN11SetAnnoByte18value_read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN11SetAnnoByte18value_read_handlerEP7ElementPv);
++extern char _ZN11SetAnnoByte19offset_read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN11SetAnnoByte19offset_read_handlerEP7ElementPv);
++extern char _ZN11SetAnnoByte9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11SetAnnoByte9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN11SetAnnoByteC1Ev[];
++EXPORT_SYMBOL(_ZN11SetAnnoByteC1Ev);
++extern char _ZN11SetAnnoByteC2Ev[];
++EXPORT_SYMBOL(_ZN11SetAnnoByteC2Ev);
++extern char _ZN11SetAnnoByteD0Ev[];
++EXPORT_SYMBOL(_ZN11SetAnnoByteD0Ev);
++extern char _ZN11SetAnnoByteD1Ev[];
++EXPORT_SYMBOL(_ZN11SetAnnoByteD1Ev);
++extern char _ZN11SetAnnoByteD2Ev[];
++EXPORT_SYMBOL(_ZN11SetAnnoByteD2Ev);
++extern char _ZNK11SetAnnoByte10class_nameEv[];
++EXPORT_SYMBOL(_ZNK11SetAnnoByte10class_nameEv);
++extern char _ZNK11SetAnnoByte10port_countEv[];
++EXPORT_SYMBOL(_ZNK11SetAnnoByte10port_countEv);
++extern char _ZNK11SetAnnoByte10processingEv[];
++EXPORT_SYMBOL(_ZNK11SetAnnoByte10processingEv);
++extern char _ZNK11SetAnnoByte20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK11SetAnnoByte20can_live_reconfigureEv);
++extern char _ZTV11SetAnnoByte[];
++EXPORT_SYMBOL(_ZTV11SetAnnoByte);
++extern char _ZN8SetCRC3213simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN8SetCRC3213simple_actionEP6Packet);
++extern char _ZN8SetCRC32C1Ev[];
++EXPORT_SYMBOL(_ZN8SetCRC32C1Ev);
++extern char _ZN8SetCRC32C2Ev[];
++EXPORT_SYMBOL(_ZN8SetCRC32C2Ev);
++extern char _ZN8SetCRC32D0Ev[];
++EXPORT_SYMBOL(_ZN8SetCRC32D0Ev);
++extern char _ZN8SetCRC32D1Ev[];
++EXPORT_SYMBOL(_ZN8SetCRC32D1Ev);
++extern char _ZN8SetCRC32D2Ev[];
++EXPORT_SYMBOL(_ZN8SetCRC32D2Ev);
++extern char _ZNK8SetCRC3210class_nameEv[];
++EXPORT_SYMBOL(_ZNK8SetCRC3210class_nameEv);
++extern char _ZNK8SetCRC3210port_countEv[];
++EXPORT_SYMBOL(_ZNK8SetCRC3210port_countEv);
++extern char _ZNK8SetCRC3210processingEv[];
++EXPORT_SYMBOL(_ZNK8SetCRC3210processingEv);
++extern char _ZTV8SetCRC32[];
++EXPORT_SYMBOL(_ZTV8SetCRC32);
++extern char _ZN13SetCycleCount4pullEi[];
++EXPORT_SYMBOL(_ZN13SetCycleCount4pullEi);
++extern char _ZN13SetCycleCount4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN13SetCycleCount4pushEiP6Packet);
++extern char _ZN13SetCycleCountC1Ev[];
++EXPORT_SYMBOL(_ZN13SetCycleCountC1Ev);
++extern char _ZN13SetCycleCountC2Ev[];
++EXPORT_SYMBOL(_ZN13SetCycleCountC2Ev);
++extern char _ZN13SetCycleCountD0Ev[];
++EXPORT_SYMBOL(_ZN13SetCycleCountD0Ev);
++extern char _ZN13SetCycleCountD1Ev[];
++EXPORT_SYMBOL(_ZN13SetCycleCountD1Ev);
++extern char _ZN13SetCycleCountD2Ev[];
++EXPORT_SYMBOL(_ZN13SetCycleCountD2Ev);
++extern char _ZNK13SetCycleCount10class_nameEv[];
++EXPORT_SYMBOL(_ZNK13SetCycleCount10class_nameEv);
++extern char _ZNK13SetCycleCount10port_countEv[];
++EXPORT_SYMBOL(_ZNK13SetCycleCount10port_countEv);
++extern char _ZNK13SetCycleCount10processingEv[];
++EXPORT_SYMBOL(_ZNK13SetCycleCount10processingEv);
++extern char _ZTV13SetCycleCount[];
++EXPORT_SYMBOL(_ZTV13SetCycleCount);
++extern char _ZN12SetIPAddress13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN12SetIPAddress13simple_actionEP6Packet);
++extern char _ZN12SetIPAddress9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12SetIPAddress9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12SetIPAddressC1Ev[];
++EXPORT_SYMBOL(_ZN12SetIPAddressC1Ev);
++extern char _ZN12SetIPAddressC2Ev[];
++EXPORT_SYMBOL(_ZN12SetIPAddressC2Ev);
++extern char _ZN12SetIPAddressD0Ev[];
++EXPORT_SYMBOL(_ZN12SetIPAddressD0Ev);
++extern char _ZN12SetIPAddressD1Ev[];
++EXPORT_SYMBOL(_ZN12SetIPAddressD1Ev);
++extern char _ZN12SetIPAddressD2Ev[];
++EXPORT_SYMBOL(_ZN12SetIPAddressD2Ev);
++extern char _ZNK12SetIPAddress10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12SetIPAddress10class_nameEv);
++extern char _ZNK12SetIPAddress10port_countEv[];
++EXPORT_SYMBOL(_ZNK12SetIPAddress10port_countEv);
++extern char _ZNK12SetIPAddress10processingEv[];
++EXPORT_SYMBOL(_ZNK12SetIPAddress10processingEv);
++extern char _ZNK12SetIPAddress20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK12SetIPAddress20can_live_reconfigureEv);
++extern char _ZTV12SetIPAddress[];
++EXPORT_SYMBOL(_ZTV12SetIPAddress);
++extern char _ZN13SetIPChecksum13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN13SetIPChecksum13simple_actionEP6Packet);
++extern char _ZN13SetIPChecksumC1Ev[];
++EXPORT_SYMBOL(_ZN13SetIPChecksumC1Ev);
++extern char _ZN13SetIPChecksumC2Ev[];
++EXPORT_SYMBOL(_ZN13SetIPChecksumC2Ev);
++extern char _ZN13SetIPChecksumD0Ev[];
++EXPORT_SYMBOL(_ZN13SetIPChecksumD0Ev);
++extern char _ZN13SetIPChecksumD1Ev[];
++EXPORT_SYMBOL(_ZN13SetIPChecksumD1Ev);
++extern char _ZN13SetIPChecksumD2Ev[];
++EXPORT_SYMBOL(_ZN13SetIPChecksumD2Ev);
++extern char _ZNK13SetIPChecksum10class_nameEv[];
++EXPORT_SYMBOL(_ZNK13SetIPChecksum10class_nameEv);
++extern char _ZNK13SetIPChecksum10port_countEv[];
++EXPORT_SYMBOL(_ZNK13SetIPChecksum10port_countEv);
++extern char _ZNK13SetIPChecksum10processingEv[];
++EXPORT_SYMBOL(_ZNK13SetIPChecksum10processingEv);
++extern char _ZTV13SetIPChecksum[];
++EXPORT_SYMBOL(_ZTV13SetIPChecksum);
++extern char _ZN9SetIPDSCP12add_handlersEv[];
++EXPORT_SYMBOL(_ZN9SetIPDSCP12add_handlersEv);
++extern char _ZN9SetIPDSCP4pullEi[];
++EXPORT_SYMBOL(_ZN9SetIPDSCP4pullEi);
++extern char _ZN9SetIPDSCP4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN9SetIPDSCP4pushEiP6Packet);
++extern char _ZN9SetIPDSCP9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN9SetIPDSCP9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN9SetIPDSCPC1Ev[];
++EXPORT_SYMBOL(_ZN9SetIPDSCPC1Ev);
++extern char _ZN9SetIPDSCPC2Ev[];
++EXPORT_SYMBOL(_ZN9SetIPDSCPC2Ev);
++extern char _ZN9SetIPDSCPD0Ev[];
++EXPORT_SYMBOL(_ZN9SetIPDSCPD0Ev);
++extern char _ZN9SetIPDSCPD1Ev[];
++EXPORT_SYMBOL(_ZN9SetIPDSCPD1Ev);
++extern char _ZN9SetIPDSCPD2Ev[];
++EXPORT_SYMBOL(_ZN9SetIPDSCPD2Ev);
++extern char _ZNK9SetIPDSCP10class_nameEv[];
++EXPORT_SYMBOL(_ZNK9SetIPDSCP10class_nameEv);
++extern char _ZNK9SetIPDSCP10port_countEv[];
++EXPORT_SYMBOL(_ZNK9SetIPDSCP10port_countEv);
++extern char _ZNK9SetIPDSCP10processingEv[];
++EXPORT_SYMBOL(_ZNK9SetIPDSCP10processingEv);
++extern char _ZNK9SetIPDSCP20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK9SetIPDSCP20can_live_reconfigureEv);
++extern char _ZTV9SetIPDSCP[];
++EXPORT_SYMBOL(_ZTV9SetIPDSCP);
++extern char _ZN13SetPacketType10parse_typeERK6String[];
++EXPORT_SYMBOL(_ZN13SetPacketType10parse_typeERK6String);
++extern char _ZN13SetPacketType12unparse_typeEi[];
++EXPORT_SYMBOL(_ZN13SetPacketType12unparse_typeEi);
++extern char _ZN13SetPacketType13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN13SetPacketType13simple_actionEP6Packet);
++extern char _ZN13SetPacketType9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN13SetPacketType9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN13SetPacketTypeC1Ev[];
++EXPORT_SYMBOL(_ZN13SetPacketTypeC1Ev);
++extern char _ZN13SetPacketTypeC2Ev[];
++EXPORT_SYMBOL(_ZN13SetPacketTypeC2Ev);
++extern char _ZN13SetPacketTypeD0Ev[];
++EXPORT_SYMBOL(_ZN13SetPacketTypeD0Ev);
++extern char _ZN13SetPacketTypeD1Ev[];
++EXPORT_SYMBOL(_ZN13SetPacketTypeD1Ev);
++extern char _ZN13SetPacketTypeD2Ev[];
++EXPORT_SYMBOL(_ZN13SetPacketTypeD2Ev);
++extern char _ZNK13SetPacketType10class_nameEv[];
++EXPORT_SYMBOL(_ZNK13SetPacketType10class_nameEv);
++extern char _ZNK13SetPacketType10port_countEv[];
++EXPORT_SYMBOL(_ZNK13SetPacketType10port_countEv);
++extern char _ZNK13SetPacketType10processingEv[];
++EXPORT_SYMBOL(_ZNK13SetPacketType10processingEv);
++extern char _ZNK13SetPacketType20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK13SetPacketType20can_live_reconfigureEv);
++extern char _ZTV13SetPacketType[];
++EXPORT_SYMBOL(_ZTV13SetPacketType);
++extern char _ZN12SetPerfCount4castEPKc[];
++EXPORT_SYMBOL(_ZN12SetPerfCount4castEPKc);
++extern char _ZN12SetPerfCount4pullEi[];
++EXPORT_SYMBOL(_ZN12SetPerfCount4pullEi);
++extern char _ZN12SetPerfCount4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN12SetPerfCount4pushEiP6Packet);
++extern char _ZN12SetPerfCount9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12SetPerfCount9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12SetPerfCountC1Ev[];
++EXPORT_SYMBOL(_ZN12SetPerfCountC1Ev);
++extern char _ZN12SetPerfCountC2Ev[];
++EXPORT_SYMBOL(_ZN12SetPerfCountC2Ev);
++extern char _ZN12SetPerfCountD0Ev[];
++EXPORT_SYMBOL(_ZN12SetPerfCountD0Ev);
++extern char _ZN12SetPerfCountD1Ev[];
++EXPORT_SYMBOL(_ZN12SetPerfCountD1Ev);
++extern char _ZN12SetPerfCountD2Ev[];
++EXPORT_SYMBOL(_ZN12SetPerfCountD2Ev);
++extern char _ZNK12SetPerfCount10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12SetPerfCount10class_nameEv);
++extern char _ZNK12SetPerfCount10port_countEv[];
++EXPORT_SYMBOL(_ZNK12SetPerfCount10port_countEv);
++extern char _ZNK12SetPerfCount10processingEv[];
++EXPORT_SYMBOL(_ZNK12SetPerfCount10processingEv);
++extern char _ZTV12SetPerfCount[];
++EXPORT_SYMBOL(_ZTV12SetPerfCount);
++extern char _ZN16SetRandIPAddress13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN16SetRandIPAddress13simple_actionEP6Packet);
++extern char _ZN16SetRandIPAddress4pickEv[];
++EXPORT_SYMBOL(_ZN16SetRandIPAddress4pickEv);
++extern char _ZN16SetRandIPAddress9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN16SetRandIPAddress9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN16SetRandIPAddressC1Ev[];
++EXPORT_SYMBOL(_ZN16SetRandIPAddressC1Ev);
++extern char _ZN16SetRandIPAddressC2Ev[];
++EXPORT_SYMBOL(_ZN16SetRandIPAddressC2Ev);
++extern char _ZN16SetRandIPAddressD0Ev[];
++EXPORT_SYMBOL(_ZN16SetRandIPAddressD0Ev);
++extern char _ZN16SetRandIPAddressD1Ev[];
++EXPORT_SYMBOL(_ZN16SetRandIPAddressD1Ev);
++extern char _ZN16SetRandIPAddressD2Ev[];
++EXPORT_SYMBOL(_ZN16SetRandIPAddressD2Ev);
++extern char _ZNK16SetRandIPAddress10class_nameEv[];
++EXPORT_SYMBOL(_ZNK16SetRandIPAddress10class_nameEv);
++extern char _ZNK16SetRandIPAddress10port_countEv[];
++EXPORT_SYMBOL(_ZNK16SetRandIPAddress10port_countEv);
++extern char _ZNK16SetRandIPAddress10processingEv[];
++EXPORT_SYMBOL(_ZNK16SetRandIPAddress10processingEv);
++extern char _ZTV16SetRandIPAddress[];
++EXPORT_SYMBOL(_ZTV16SetRandIPAddress);
++extern char _ZN14SetTCPChecksum13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN14SetTCPChecksum13simple_actionEP6Packet);
++extern char _ZN14SetTCPChecksum9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14SetTCPChecksum9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN14SetTCPChecksumC1Ev[];
++EXPORT_SYMBOL(_ZN14SetTCPChecksumC1Ev);
++extern char _ZN14SetTCPChecksumC2Ev[];
++EXPORT_SYMBOL(_ZN14SetTCPChecksumC2Ev);
++extern char _ZN14SetTCPChecksumD0Ev[];
++EXPORT_SYMBOL(_ZN14SetTCPChecksumD0Ev);
++extern char _ZN14SetTCPChecksumD1Ev[];
++EXPORT_SYMBOL(_ZN14SetTCPChecksumD1Ev);
++extern char _ZN14SetTCPChecksumD2Ev[];
++EXPORT_SYMBOL(_ZN14SetTCPChecksumD2Ev);
++extern char _ZNK14SetTCPChecksum10class_nameEv[];
++EXPORT_SYMBOL(_ZNK14SetTCPChecksum10class_nameEv);
++extern char _ZNK14SetTCPChecksum10port_countEv[];
++EXPORT_SYMBOL(_ZNK14SetTCPChecksum10port_countEv);
++extern char _ZNK14SetTCPChecksum10processingEv[];
++EXPORT_SYMBOL(_ZNK14SetTCPChecksum10processingEv);
++extern char _ZTV14SetTCPChecksum[];
++EXPORT_SYMBOL(_ZTV14SetTCPChecksum);
++extern char _ZN12SetTimestamp13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN12SetTimestamp13simple_actionEP6Packet);
++extern char _ZN12SetTimestamp9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12SetTimestamp9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12SetTimestampC1Ev[];
++EXPORT_SYMBOL(_ZN12SetTimestampC1Ev);
++extern char _ZN12SetTimestampC2Ev[];
++EXPORT_SYMBOL(_ZN12SetTimestampC2Ev);
++extern char _ZN12SetTimestampD0Ev[];
++EXPORT_SYMBOL(_ZN12SetTimestampD0Ev);
++extern char _ZN12SetTimestampD1Ev[];
++EXPORT_SYMBOL(_ZN12SetTimestampD1Ev);
++extern char _ZN12SetTimestampD2Ev[];
++EXPORT_SYMBOL(_ZN12SetTimestampD2Ev);
++extern char _ZNK12SetTimestamp10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12SetTimestamp10class_nameEv);
++extern char _ZNK12SetTimestamp10port_countEv[];
++EXPORT_SYMBOL(_ZNK12SetTimestamp10port_countEv);
++extern char _ZNK12SetTimestamp10processingEv[];
++EXPORT_SYMBOL(_ZNK12SetTimestamp10processingEv);
++extern char _ZTV12SetTimestamp[];
++EXPORT_SYMBOL(_ZTV12SetTimestamp);
++extern char _ZN14SetUDPChecksum13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN14SetUDPChecksum13simple_actionEP6Packet);
++extern char _ZN14SetUDPChecksumC1Ev[];
++EXPORT_SYMBOL(_ZN14SetUDPChecksumC1Ev);
++extern char _ZN14SetUDPChecksumC2Ev[];
++EXPORT_SYMBOL(_ZN14SetUDPChecksumC2Ev);
++extern char _ZN14SetUDPChecksumD0Ev[];
++EXPORT_SYMBOL(_ZN14SetUDPChecksumD0Ev);
++extern char _ZN14SetUDPChecksumD1Ev[];
++EXPORT_SYMBOL(_ZN14SetUDPChecksumD1Ev);
++extern char _ZN14SetUDPChecksumD2Ev[];
++EXPORT_SYMBOL(_ZN14SetUDPChecksumD2Ev);
++extern char _ZNK14SetUDPChecksum10class_nameEv[];
++EXPORT_SYMBOL(_ZNK14SetUDPChecksum10class_nameEv);
++extern char _ZNK14SetUDPChecksum10port_countEv[];
++EXPORT_SYMBOL(_ZNK14SetUDPChecksum10port_countEv);
++extern char _ZNK14SetUDPChecksum10processingEv[];
++EXPORT_SYMBOL(_ZNK14SetUDPChecksum10processingEv);
++extern char _ZTV14SetUDPChecksum[];
++EXPORT_SYMBOL(_ZTV14SetUDPChecksum);
++extern char _ZN6Shaper12add_handlersEv[];
++EXPORT_SYMBOL(_ZN6Shaper12add_handlersEv);
++extern char _ZN6Shaper4pullEi[];
++EXPORT_SYMBOL(_ZN6Shaper4pullEi);
++extern char _ZN6Shaper9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN6Shaper9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN6ShaperC1Ev[];
++EXPORT_SYMBOL(_ZN6ShaperC1Ev);
++extern char _ZN6ShaperC2Ev[];
++EXPORT_SYMBOL(_ZN6ShaperC2Ev);
++extern char _ZN6ShaperD0Ev[];
++EXPORT_SYMBOL(_ZN6ShaperD0Ev);
++extern char _ZN6ShaperD1Ev[];
++EXPORT_SYMBOL(_ZN6ShaperD1Ev);
++extern char _ZN6ShaperD2Ev[];
++EXPORT_SYMBOL(_ZN6ShaperD2Ev);
++extern char _ZNK6Shaper10class_nameEv[];
++EXPORT_SYMBOL(_ZNK6Shaper10class_nameEv);
++extern char _ZNK6Shaper13configurationER6VectorI6StringE[];
++EXPORT_SYMBOL(_ZNK6Shaper13configurationER6VectorI6StringE);
++extern char _ZTV6Shaper[];
++EXPORT_SYMBOL(_ZTV6Shaper);
++extern char _ZN11SimpleQueue10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11SimpleQueue10initializeEP12ErrorHandler);
++extern char _ZN11SimpleQueue10take_stateEP7ElementP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11SimpleQueue10take_stateEP7ElementP12ErrorHandler);
++extern char _ZN11SimpleQueue12add_handlersEv[];
++EXPORT_SYMBOL(_ZN11SimpleQueue12add_handlersEv);
++extern char _ZN11SimpleQueue12read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN11SimpleQueue12read_handlerEP7ElementPv);
++extern char _ZN11SimpleQueue13write_handlerERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11SimpleQueue13write_handlerERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN11SimpleQueue16live_reconfigureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11SimpleQueue16live_reconfigureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN11SimpleQueue4castEPKc[];
++EXPORT_SYMBOL(_ZN11SimpleQueue4castEPKc);
++extern char _ZN11SimpleQueue4pullEi[];
++EXPORT_SYMBOL(_ZN11SimpleQueue4pullEi);
++extern char _ZN11SimpleQueue4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN11SimpleQueue4pushEiP6Packet);
++extern char _ZN11SimpleQueue7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN11SimpleQueue7cleanupEN7Element12CleanupStageE);
++extern char _ZN11SimpleQueue9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11SimpleQueue9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN11SimpleQueueC1Ev[];
++EXPORT_SYMBOL(_ZN11SimpleQueueC1Ev);
++extern char _ZN11SimpleQueueC2Ev[];
++EXPORT_SYMBOL(_ZN11SimpleQueueC2Ev);
++extern char _ZN11SimpleQueueD0Ev[];
++EXPORT_SYMBOL(_ZN11SimpleQueueD0Ev);
++extern char _ZN11SimpleQueueD1Ev[];
++EXPORT_SYMBOL(_ZN11SimpleQueueD1Ev);
++extern char _ZN11SimpleQueueD2Ev[];
++EXPORT_SYMBOL(_ZN11SimpleQueueD2Ev);
++extern char _ZNK11SimpleQueue10class_nameEv[];
++EXPORT_SYMBOL(_ZNK11SimpleQueue10class_nameEv);
++extern char _ZTV11SimpleQueue[];
++EXPORT_SYMBOL(_ZTV11SimpleQueue);
++extern char _Z6jvcompI12chash_node_tIiEiXadL_ZNS1_3keyEEEEiPKvS3_[];
++EXPORT_SYMBOL(_Z6jvcompI12chash_node_tIiEiXadL_ZNS1_3keyEEEEiPKvS3_);
++extern char _ZN18SourceIPHashMapper12parse_serverERK6StringPPN4IPRw7PatternEPiS7_S7_P7ElementP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN18SourceIPHashMapper12parse_serverERK6StringPPN4IPRw7PatternEPiS7_S7_P7ElementP12ErrorHandler);
++extern char _ZN18SourceIPHashMapper15notify_rewriterEP4IPRwP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN18SourceIPHashMapper15notify_rewriterEP4IPRwP12ErrorHandler);
++extern char _ZN18SourceIPHashMapper4castEPKc[];
++EXPORT_SYMBOL(_ZN18SourceIPHashMapper4castEPKc);
++extern char _ZN18SourceIPHashMapper7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN18SourceIPHashMapper7cleanupEN7Element12CleanupStageE);
++extern char _ZN18SourceIPHashMapper7get_mapEP4IPRwiRK8IPFlowIDP6Packet[];
++EXPORT_SYMBOL(_ZN18SourceIPHashMapper7get_mapEP4IPRwiRK8IPFlowIDP6Packet);
++extern char _ZN18SourceIPHashMapper9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN18SourceIPHashMapper9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN18SourceIPHashMapperC1Ev[];
++EXPORT_SYMBOL(_ZN18SourceIPHashMapperC1Ev);
++extern char _ZN18SourceIPHashMapperC2Ev[];
++EXPORT_SYMBOL(_ZN18SourceIPHashMapperC2Ev);
++extern char _ZN18SourceIPHashMapperD0Ev[];
++EXPORT_SYMBOL(_ZN18SourceIPHashMapperD0Ev);
++extern char _ZN18SourceIPHashMapperD1Ev[];
++EXPORT_SYMBOL(_ZN18SourceIPHashMapperD1Ev);
++extern char _ZN18SourceIPHashMapperD2Ev[];
++EXPORT_SYMBOL(_ZN18SourceIPHashMapperD2Ev);
++extern char _ZNK18SourceIPHashMapper10class_nameEv[];
++EXPORT_SYMBOL(_ZNK18SourceIPHashMapper10class_nameEv);
++extern char _ZNK18SourceIPHashMapper15configure_phaseEv[];
++EXPORT_SYMBOL(_ZNK18SourceIPHashMapper15configure_phaseEv);
++extern char _ZTV18SourceIPHashMapper[];
++EXPORT_SYMBOL(_ZTV18SourceIPHashMapper);
++extern char _ZThn60_N18SourceIPHashMapper7get_mapEP4IPRwiRK8IPFlowIDP6Packet[];
++EXPORT_SYMBOL(_ZThn60_N18SourceIPHashMapper7get_mapEP4IPRwiRK8IPFlowIDP6Packet);
++extern char _ZThn60_N18SourceIPHashMapperD0Ev[];
++EXPORT_SYMBOL(_ZThn60_N18SourceIPHashMapperD0Ev);
++extern char _ZThn60_N18SourceIPHashMapperD1Ev[];
++EXPORT_SYMBOL(_ZThn60_N18SourceIPHashMapperD1Ev);
++extern char _Z11skbmgr_initv[];
++EXPORT_SYMBOL(_Z11skbmgr_initv);
++extern char _Z14skbmgr_cleanupv[];
++EXPORT_SYMBOL(_Z14skbmgr_cleanupv);
++extern char _Z19skbmgr_recycle_skbsP7sk_buff[];
++EXPORT_SYMBOL(_Z19skbmgr_recycle_skbsP7sk_buff);
++extern char _Z20skbmgr_allocate_skbsjjPi[];
++EXPORT_SYMBOL(_Z20skbmgr_allocate_skbsjjPi);
++extern char _ZN15RecycledSkbPool10initializeEv[];
++EXPORT_SYMBOL(_ZN15RecycledSkbPool10initializeEv);
++extern char _ZN15RecycledSkbPool7cleanupEv[];
++EXPORT_SYMBOL(_ZN15RecycledSkbPool7cleanupEv);
++extern char _ZN15RecycledSkbPool7recycleEP7sk_buff[];
++EXPORT_SYMBOL(_ZN15RecycledSkbPool7recycleEP7sk_buff);
++extern char _ZN15RecycledSkbPool8allocateEjjiPi[];
++EXPORT_SYMBOL(_ZN15RecycledSkbPool8allocateEjjiPi);
++extern char _ZN17RecycledSkbBucket10initializeEv[];
++EXPORT_SYMBOL(_ZN17RecycledSkbBucket10initializeEv);
++extern char _ZN17RecycledSkbBucket7cleanupEv[];
++EXPORT_SYMBOL(_ZN17RecycledSkbBucket7cleanupEv);
++extern char _ZN14SortedIPLookup10sort_tableEv[];
++EXPORT_SYMBOL(_ZN14SortedIPLookup10sort_tableEv);
++extern char _ZN14SortedIPLookup12remove_routeERK7IPRoutePS0_P12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14SortedIPLookup12remove_routeERK7IPRoutePS0_P12ErrorHandler);
++extern char _ZN14SortedIPLookup4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN14SortedIPLookup4pushEiP6Packet);
++extern char _ZN14SortedIPLookup9add_routeERK7IPRoutebPS0_P12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14SortedIPLookup9add_routeERK7IPRoutebPS0_P12ErrorHandler);
++extern char _ZN14SortedIPLookup9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14SortedIPLookup9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN14SortedIPLookupC1Ev[];
++EXPORT_SYMBOL(_ZN14SortedIPLookupC1Ev);
++extern char _ZN14SortedIPLookupC2Ev[];
++EXPORT_SYMBOL(_ZN14SortedIPLookupC2Ev);
++extern char _ZN14SortedIPLookupD0Ev[];
++EXPORT_SYMBOL(_ZN14SortedIPLookupD0Ev);
++extern char _ZN14SortedIPLookupD1Ev[];
++EXPORT_SYMBOL(_ZN14SortedIPLookupD1Ev);
++extern char _ZN14SortedIPLookupD2Ev[];
++EXPORT_SYMBOL(_ZN14SortedIPLookupD2Ev);
++extern char _ZN6VectorI7IPRouteE4swapERS1_[];
++EXPORT_SYMBOL(_ZN6VectorI7IPRouteE4swapERS1_);
++extern char _ZN6VectorI7IPRouteE6resizeEiRKS0_[];
++EXPORT_SYMBOL(_ZN6VectorI7IPRouteE6resizeEiRKS0_);
++extern char _ZN6VectorI7IPRouteEC1ERKS1_[];
++EXPORT_SYMBOL(_ZN6VectorI7IPRouteEC1ERKS1_);
++extern char _ZN6VectorI7IPRouteEaSERKS1_[];
++EXPORT_SYMBOL(_ZN6VectorI7IPRouteEaSERKS1_);
++extern char _ZNK14SortedIPLookup10class_nameEv[];
++EXPORT_SYMBOL(_ZNK14SortedIPLookup10class_nameEv);
++extern char _ZNK14SortedIPLookup5checkEv[];
++EXPORT_SYMBOL(_ZNK14SortedIPLookup5checkEv);
++extern char _ZTV14SortedIPLookup[];
++EXPORT_SYMBOL(_ZTV14SortedIPLookup);
++extern char _ZN15SpinlockAcquire13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN15SpinlockAcquire13simple_actionEP6Packet);
++extern char _ZN15SpinlockAcquire9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN15SpinlockAcquire9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN15SpinlockAcquireD0Ev[];
++EXPORT_SYMBOL(_ZN15SpinlockAcquireD0Ev);
++extern char _ZN15SpinlockAcquireD1Ev[];
++EXPORT_SYMBOL(_ZN15SpinlockAcquireD1Ev);
++extern char _ZNK15SpinlockAcquire10class_nameEv[];
++EXPORT_SYMBOL(_ZNK15SpinlockAcquire10class_nameEv);
++extern char _ZNK15SpinlockAcquire10port_countEv[];
++EXPORT_SYMBOL(_ZNK15SpinlockAcquire10port_countEv);
++extern char _ZNK15SpinlockAcquire10processingEv[];
++EXPORT_SYMBOL(_ZNK15SpinlockAcquire10processingEv);
++extern char _ZTV15SpinlockAcquire[];
++EXPORT_SYMBOL(_ZTV15SpinlockAcquire);
++extern char _ZN12SpinlockInfo12add_spinlockERK6VectorI6StringERKS1_P12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12SpinlockInfo12add_spinlockERK6VectorI6StringERKS1_P12ErrorHandler);
++extern char _ZN12SpinlockInfo7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN12SpinlockInfo7cleanupEN7Element12CleanupStageE);
++extern char _ZN12SpinlockInfo9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12SpinlockInfo9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12SpinlockInfoC1Ev[];
++EXPORT_SYMBOL(_ZN12SpinlockInfoC1Ev);
++extern char _ZN12SpinlockInfoC2Ev[];
++EXPORT_SYMBOL(_ZN12SpinlockInfoC2Ev);
++extern char _ZN12SpinlockInfoD0Ev[];
++EXPORT_SYMBOL(_ZN12SpinlockInfoD0Ev);
++extern char _ZN12SpinlockInfoD1Ev[];
++EXPORT_SYMBOL(_ZN12SpinlockInfoD1Ev);
++extern char _ZN12SpinlockInfoD2Ev[];
++EXPORT_SYMBOL(_ZN12SpinlockInfoD2Ev);
++extern char _ZNK12SpinlockInfo10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12SpinlockInfo10class_nameEv);
++extern char _ZNK12SpinlockInfo15configure_phaseEv[];
++EXPORT_SYMBOL(_ZNK12SpinlockInfo15configure_phaseEv);
++extern char _ZNK12SpinlockInfo5queryERK6StringS2_[];
++EXPORT_SYMBOL(_ZNK12SpinlockInfo5queryERK6StringS2_);
++extern char _ZTV12SpinlockInfo[];
++EXPORT_SYMBOL(_ZTV12SpinlockInfo);
++extern char _ZN15SpinlockRelease13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN15SpinlockRelease13simple_actionEP6Packet);
++extern char _ZN15SpinlockRelease9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN15SpinlockRelease9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN15SpinlockReleaseD0Ev[];
++EXPORT_SYMBOL(_ZN15SpinlockReleaseD0Ev);
++extern char _ZN15SpinlockReleaseD1Ev[];
++EXPORT_SYMBOL(_ZN15SpinlockReleaseD1Ev);
++extern char _ZNK15SpinlockRelease10class_nameEv[];
++EXPORT_SYMBOL(_ZNK15SpinlockRelease10class_nameEv);
++extern char _ZNK15SpinlockRelease10port_countEv[];
++EXPORT_SYMBOL(_ZNK15SpinlockRelease10port_countEv);
++extern char _ZNK15SpinlockRelease10processingEv[];
++EXPORT_SYMBOL(_ZNK15SpinlockRelease10processingEv);
++extern char _ZTV15SpinlockRelease[];
++EXPORT_SYMBOL(_ZTV15SpinlockRelease);
++extern char _ZN16StaticPullSwitch4pullEi[];
++EXPORT_SYMBOL(_ZN16StaticPullSwitch4pullEi);
++extern char _ZN16StaticPullSwitch9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN16StaticPullSwitch9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN16StaticPullSwitchC1Ev[];
++EXPORT_SYMBOL(_ZN16StaticPullSwitchC1Ev);
++extern char _ZN16StaticPullSwitchC2Ev[];
++EXPORT_SYMBOL(_ZN16StaticPullSwitchC2Ev);
++extern char _ZN16StaticPullSwitchD0Ev[];
++EXPORT_SYMBOL(_ZN16StaticPullSwitchD0Ev);
++extern char _ZN16StaticPullSwitchD1Ev[];
++EXPORT_SYMBOL(_ZN16StaticPullSwitchD1Ev);
++extern char _ZN16StaticPullSwitchD2Ev[];
++EXPORT_SYMBOL(_ZN16StaticPullSwitchD2Ev);
++extern char _ZNK16StaticPullSwitch10class_nameEv[];
++EXPORT_SYMBOL(_ZNK16StaticPullSwitch10class_nameEv);
++extern char _ZNK16StaticPullSwitch10port_countEv[];
++EXPORT_SYMBOL(_ZNK16StaticPullSwitch10port_countEv);
++extern char _ZNK16StaticPullSwitch10processingEv[];
++EXPORT_SYMBOL(_ZNK16StaticPullSwitch10processingEv);
++extern char _ZTV16StaticPullSwitch[];
++EXPORT_SYMBOL(_ZTV16StaticPullSwitch);
++extern char _ZN12StaticSwitch4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN12StaticSwitch4pushEiP6Packet);
++extern char _ZN12StaticSwitch9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN12StaticSwitch9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN12StaticSwitchC1Ev[];
++EXPORT_SYMBOL(_ZN12StaticSwitchC1Ev);
++extern char _ZN12StaticSwitchC2Ev[];
++EXPORT_SYMBOL(_ZN12StaticSwitchC2Ev);
++extern char _ZN12StaticSwitchD0Ev[];
++EXPORT_SYMBOL(_ZN12StaticSwitchD0Ev);
++extern char _ZN12StaticSwitchD1Ev[];
++EXPORT_SYMBOL(_ZN12StaticSwitchD1Ev);
++extern char _ZN12StaticSwitchD2Ev[];
++EXPORT_SYMBOL(_ZN12StaticSwitchD2Ev);
++extern char _ZNK12StaticSwitch10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12StaticSwitch10class_nameEv);
++extern char _ZNK12StaticSwitch10port_countEv[];
++EXPORT_SYMBOL(_ZNK12StaticSwitch10port_countEv);
++extern char _ZNK12StaticSwitch10processingEv[];
++EXPORT_SYMBOL(_ZNK12StaticSwitch10processingEv);
++extern char _ZTV12StaticSwitch[];
++EXPORT_SYMBOL(_ZTV12StaticSwitch);
++extern char _ZN17StaticThreadSched22initial_home_thread_idEP4Taskb[];
++EXPORT_SYMBOL(_ZN17StaticThreadSched22initial_home_thread_idEP4Taskb);
++extern char _ZN17StaticThreadSched9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN17StaticThreadSched9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN17StaticThreadSchedC1Ev[];
++EXPORT_SYMBOL(_ZN17StaticThreadSchedC1Ev);
++extern char _ZN17StaticThreadSchedC2Ev[];
++EXPORT_SYMBOL(_ZN17StaticThreadSchedC2Ev);
++extern char _ZN17StaticThreadSchedD0Ev[];
++EXPORT_SYMBOL(_ZN17StaticThreadSchedD0Ev);
++extern char _ZN17StaticThreadSchedD1Ev[];
++EXPORT_SYMBOL(_ZN17StaticThreadSchedD1Ev);
++extern char _ZN17StaticThreadSchedD2Ev[];
++EXPORT_SYMBOL(_ZN17StaticThreadSchedD2Ev);
++extern char _ZNK17StaticThreadSched10class_nameEv[];
++EXPORT_SYMBOL(_ZNK17StaticThreadSched10class_nameEv);
++extern char _ZTV17StaticThreadSched[];
++EXPORT_SYMBOL(_ZTV17StaticThreadSched);
++extern char _ZThn60_N17StaticThreadSched22initial_home_thread_idEP4Taskb[];
++EXPORT_SYMBOL(_ZThn60_N17StaticThreadSched22initial_home_thread_idEP4Taskb);
++extern char _ZThn60_N17StaticThreadSchedD0Ev[];
++EXPORT_SYMBOL(_ZThn60_N17StaticThreadSchedD0Ev);
++extern char _ZThn60_N17StaticThreadSchedD1Ev[];
++EXPORT_SYMBOL(_ZThn60_N17StaticThreadSchedD1Ev);
++extern char _ZN9StoreData13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN9StoreData13simple_actionEP6Packet);
++extern char _ZN9StoreData9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN9StoreData9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN9StoreDataC1Ev[];
++EXPORT_SYMBOL(_ZN9StoreDataC1Ev);
++extern char _ZN9StoreDataC2Ev[];
++EXPORT_SYMBOL(_ZN9StoreDataC2Ev);
++extern char _ZN9StoreDataD0Ev[];
++EXPORT_SYMBOL(_ZN9StoreDataD0Ev);
++extern char _ZN9StoreDataD1Ev[];
++EXPORT_SYMBOL(_ZN9StoreDataD1Ev);
++extern char _ZN9StoreDataD2Ev[];
++EXPORT_SYMBOL(_ZN9StoreDataD2Ev);
++extern char _ZNK9StoreData10class_nameEv[];
++EXPORT_SYMBOL(_ZNK9StoreData10class_nameEv);
++extern char _ZNK9StoreData10port_countEv[];
++EXPORT_SYMBOL(_ZNK9StoreData10port_countEv);
++extern char _ZNK9StoreData10processingEv[];
++EXPORT_SYMBOL(_ZNK9StoreData10processingEv);
++extern char _ZTV9StoreData[];
++EXPORT_SYMBOL(_ZTV9StoreData);
++extern char _ZN14StoreIPAddress13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN14StoreIPAddress13simple_actionEP6Packet);
++extern char _ZN14StoreIPAddress9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN14StoreIPAddress9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN14StoreIPAddressC1Ev[];
++EXPORT_SYMBOL(_ZN14StoreIPAddressC1Ev);
++extern char _ZN14StoreIPAddressC2Ev[];
++EXPORT_SYMBOL(_ZN14StoreIPAddressC2Ev);
++extern char _ZN14StoreIPAddressD0Ev[];
++EXPORT_SYMBOL(_ZN14StoreIPAddressD0Ev);
++extern char _ZN14StoreIPAddressD1Ev[];
++EXPORT_SYMBOL(_ZN14StoreIPAddressD1Ev);
++extern char _ZN14StoreIPAddressD2Ev[];
++EXPORT_SYMBOL(_ZN14StoreIPAddressD2Ev);
++extern char _ZNK14StoreIPAddress10class_nameEv[];
++EXPORT_SYMBOL(_ZNK14StoreIPAddress10class_nameEv);
++extern char _ZNK14StoreIPAddress10port_countEv[];
++EXPORT_SYMBOL(_ZNK14StoreIPAddress10port_countEv);
++extern char _ZNK14StoreIPAddress10processingEv[];
++EXPORT_SYMBOL(_ZNK14StoreIPAddress10processingEv);
++extern char _ZTV14StoreIPAddress[];
++EXPORT_SYMBOL(_ZTV14StoreIPAddress);
++extern char _ZN11StringAccum11append_fillEii[];
++EXPORT_SYMBOL(_ZN11StringAccum11append_fillEii);
++extern char _ZN11StringAccum11take_stringEv[];
++EXPORT_SYMBOL(_ZN11StringAccum11take_stringEv);
++extern char _ZN11StringAccum14append_numericExib[];
++EXPORT_SYMBOL(_ZN11StringAccum14append_numericExib);
++extern char _ZN11StringAccum14append_numericEyib[];
++EXPORT_SYMBOL(_ZN11StringAccum14append_numericEyib);
++extern char _ZN11StringAccum18make_out_of_memoryEv[];
++EXPORT_SYMBOL(_ZN11StringAccum18make_out_of_memoryEv);
++extern char _ZN11StringAccum4growEi[];
++EXPORT_SYMBOL(_ZN11StringAccum4growEi);
++extern char _ZN11StringAccum4swapERS_[];
++EXPORT_SYMBOL(_ZN11StringAccum4swapERS_);
++extern char _ZN11StringAccum5c_strEv[];
++EXPORT_SYMBOL(_ZN11StringAccum5c_strEv);
++extern char _ZN11StringAccum8snprintfEiPKcz[];
++EXPORT_SYMBOL(_ZN11StringAccum8snprintfEiPKcz);
++extern char _ZlsR11StringAccumPv[];
++EXPORT_SYMBOL(_ZlsR11StringAccumPv);
++extern char _ZlsR11StringAccuml[];
++EXPORT_SYMBOL(_ZlsR11StringAccuml);
++extern char _ZlsR11StringAccumm[];
++EXPORT_SYMBOL(_ZlsR11StringAccumm);
++extern char _ZN11StrideSched10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11StrideSched10initializeEP12ErrorHandler);
++extern char _ZN11StrideSched11set_ticketsEiiP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11StrideSched11set_ticketsEiiP12ErrorHandler);
++extern char _ZN11StrideSched12add_handlersEv[];
++EXPORT_SYMBOL(_ZN11StrideSched12add_handlersEv);
++extern char _ZN11StrideSched4pullEi[];
++EXPORT_SYMBOL(_ZN11StrideSched4pullEi);
++extern char _ZN11StrideSched7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN11StrideSched7cleanupEN7Element12CleanupStageE);
++extern char _ZN11StrideSched9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11StrideSched9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN11StrideSchedC1Ev[];
++EXPORT_SYMBOL(_ZN11StrideSchedC1Ev);
++extern char _ZN11StrideSchedC2Ev[];
++EXPORT_SYMBOL(_ZN11StrideSchedC2Ev);
++extern char _ZN11StrideSchedD0Ev[];
++EXPORT_SYMBOL(_ZN11StrideSchedD0Ev);
++extern char _ZN11StrideSchedD1Ev[];
++EXPORT_SYMBOL(_ZN11StrideSchedD1Ev);
++extern char _ZN11StrideSchedD2Ev[];
++EXPORT_SYMBOL(_ZN11StrideSchedD2Ev);
++extern char _ZNK11StrideSched10class_nameEv[];
++EXPORT_SYMBOL(_ZNK11StrideSched10class_nameEv);
++extern char _ZNK11StrideSched10port_countEv[];
++EXPORT_SYMBOL(_ZNK11StrideSched10port_countEv);
++extern char _ZNK11StrideSched10processingEv[];
++EXPORT_SYMBOL(_ZNK11StrideSched10processingEv);
++extern char _ZNK11StrideSched7ticketsEi[];
++EXPORT_SYMBOL(_ZNK11StrideSched7ticketsEi);
++extern char _ZTV11StrideSched[];
++EXPORT_SYMBOL(_ZTV11StrideSched);
++extern char _ZN12StrideSwitch4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN12StrideSwitch4pushEiP6Packet);
++extern char _ZN12StrideSwitchC1Ev[];
++EXPORT_SYMBOL(_ZN12StrideSwitchC1Ev);
++extern char _ZN12StrideSwitchC2Ev[];
++EXPORT_SYMBOL(_ZN12StrideSwitchC2Ev);
++extern char _ZN12StrideSwitchD0Ev[];
++EXPORT_SYMBOL(_ZN12StrideSwitchD0Ev);
++extern char _ZN12StrideSwitchD1Ev[];
++EXPORT_SYMBOL(_ZN12StrideSwitchD1Ev);
++extern char _ZN12StrideSwitchD2Ev[];
++EXPORT_SYMBOL(_ZN12StrideSwitchD2Ev);
++extern char _ZNK12StrideSwitch10class_nameEv[];
++EXPORT_SYMBOL(_ZNK12StrideSwitch10class_nameEv);
++extern char _ZNK12StrideSwitch10port_countEv[];
++EXPORT_SYMBOL(_ZNK12StrideSwitch10port_countEv);
++extern char _ZNK12StrideSwitch10processingEv[];
++EXPORT_SYMBOL(_ZNK12StrideSwitch10processingEv);
++extern char _ZTV12StrideSwitch[];
++EXPORT_SYMBOL(_ZTV12StrideSwitch);
++extern char _ZN6String11InitializerC1Ev[];
++EXPORT_SYMBOL(_ZN6String11InitializerC1Ev);
++extern char _ZN6String11InitializerC2Ev[];
++EXPORT_SYMBOL(_ZN6String11InitializerC2Ev);
++extern char _ZN6String11append_fillEii[];
++EXPORT_SYMBOL(_ZN6String11append_fillEii);
++extern char _ZN6String12claim_stringEPcii[];
++EXPORT_SYMBOL(_ZN6String12claim_stringEPcii);
++extern char _ZN6String12mutable_dataEv[];
++EXPORT_SYMBOL(_ZN6String12mutable_dataEv);
++extern char _ZN6String12oom_string_pE[];
++EXPORT_SYMBOL(_ZN6String12oom_string_pE);
++extern char _ZN6String13mutable_c_strEv[];
++EXPORT_SYMBOL(_ZN6String13mutable_c_strEv);
++extern char _ZN6String13null_string_pE[];
++EXPORT_SYMBOL(_ZN6String13null_string_pE);
++extern char _ZN6String13stable_stringEPKci[];
++EXPORT_SYMBOL(_ZN6String13stable_stringEPKci);
++extern char _ZN6String14append_garbageEi[];
++EXPORT_SYMBOL(_ZN6String14append_garbageEi);
++extern char _ZN6String14garbage_stringEi[];
++EXPORT_SYMBOL(_ZN6String14garbage_stringEi);
++extern char _ZN6String14numeric_stringExib[];
++EXPORT_SYMBOL(_ZN6String14numeric_stringExib);
++extern char _ZN6String14numeric_stringEyib[];
++EXPORT_SYMBOL(_ZN6String14numeric_stringEyib);
++extern char _ZN6String14permanent_memoE[];
++EXPORT_SYMBOL(_ZN6String14permanent_memoE);
++extern char _ZN6String14static_cleanupEv[];
++EXPORT_SYMBOL(_ZN6String14static_cleanupEv);
++extern char _ZN6String15oom_string_dataE[];
++EXPORT_SYMBOL(_ZN6String15oom_string_dataE);
++extern char _ZN6String17static_initializeEv[];
++EXPORT_SYMBOL(_ZN6String17static_initializeEv);
++extern char _ZN6String18make_out_of_memoryEv[];
++EXPORT_SYMBOL(_ZN6String18make_out_of_memoryEv);
++extern char _ZN6String4MemoC1Eii[];
++EXPORT_SYMBOL(_ZN6String4MemoC1Eii);
++extern char _ZN6String4MemoC2Eii[];
++EXPORT_SYMBOL(_ZN6String4MemoC2Eii);
++extern char _ZN6String4MemoD1Ev[];
++EXPORT_SYMBOL(_ZN6String4MemoD1Ev);
++extern char _ZN6String4MemoD2Ev[];
++EXPORT_SYMBOL(_ZN6String4MemoD2Ev);
++extern char _ZN6String6appendEPKci[];
++EXPORT_SYMBOL(_ZN6String6appendEPKci);
++extern char _ZN6String6assignEPKci[];
++EXPORT_SYMBOL(_ZN6String6assignEPKci);
++extern char _ZN6String8oom_memoE[];
++EXPORT_SYMBOL(_ZN6String8oom_memoE);
++extern char _ZN6String9null_memoE[];
++EXPORT_SYMBOL(_ZN6String9null_memoE);
++extern char _ZN6StringC1Ei[];
++EXPORT_SYMBOL(_ZN6StringC1Ei);
++extern char _ZN6StringC1Ej[];
++EXPORT_SYMBOL(_ZN6StringC1Ej);
++extern char _ZN6StringC1El[];
++EXPORT_SYMBOL(_ZN6StringC1El);
++extern char _ZN6StringC1Em[];
++EXPORT_SYMBOL(_ZN6StringC1Em);
++extern char _ZN6StringC1Ex[];
++EXPORT_SYMBOL(_ZN6StringC1Ex);
++extern char _ZN6StringC1Ey[];
++EXPORT_SYMBOL(_ZN6StringC1Ey);
++extern char _ZN6StringC2Ei[];
++EXPORT_SYMBOL(_ZN6StringC2Ei);
++extern char _ZN6StringC2Ej[];
++EXPORT_SYMBOL(_ZN6StringC2Ej);
++extern char _ZN6StringC2El[];
++EXPORT_SYMBOL(_ZN6StringC2El);
++extern char _ZN6StringC2Em[];
++EXPORT_SYMBOL(_ZN6StringC2Em);
++extern char _ZN6StringC2Ex[];
++EXPORT_SYMBOL(_ZN6StringC2Ex);
++extern char _ZN6StringC2Ey[];
++EXPORT_SYMBOL(_ZN6StringC2Ey);
++extern char _ZNK6String10find_rightEci[];
++EXPORT_SYMBOL(_ZNK6String10find_rightEci);
++extern char _ZNK6String10quoted_hexEv[];
++EXPORT_SYMBOL(_ZNK6String10quoted_hexEv);
++extern char _ZNK6String10trim_spaceEv[];
++EXPORT_SYMBOL(_ZNK6String10trim_spaceEv);
++extern char _ZNK6String5c_strEv[];
++EXPORT_SYMBOL(_ZNK6String5c_strEv);
++extern char _ZNK6String5lowerEv[];
++EXPORT_SYMBOL(_ZNK6String5lowerEv);
++extern char _ZNK6String5upperEv[];
++EXPORT_SYMBOL(_ZNK6String5upperEv);
++extern char _ZNK6String6equalsEPKci[];
++EXPORT_SYMBOL(_ZNK6String6equalsEPKci);
++extern char _ZNK6String7compareEPKci[];
++EXPORT_SYMBOL(_ZNK6String7compareEPKci);
++extern char _ZNK6String8hashcodeEv[];
++EXPORT_SYMBOL(_ZNK6String8hashcodeEv);
++extern char _ZNK6String9find_leftERKS_i[];
++EXPORT_SYMBOL(_ZNK6String9find_leftERKS_i);
++extern char _ZNK6String9find_leftEci[];
++EXPORT_SYMBOL(_ZNK6String9find_leftEci);
++extern char _ZNK6String9printableEv[];
++EXPORT_SYMBOL(_ZNK6String9printableEv);
++extern char _ZNK6String9substringEii[];
++EXPORT_SYMBOL(_ZNK6String9substringEii);
++extern char _ZN5Strip13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN5Strip13simple_actionEP6Packet);
++extern char _ZN5Strip9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN5Strip9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN5StripC1Ev[];
++EXPORT_SYMBOL(_ZN5StripC1Ev);
++extern char _ZN5StripC2Ev[];
++EXPORT_SYMBOL(_ZN5StripC2Ev);
++extern char _ZN5StripD0Ev[];
++EXPORT_SYMBOL(_ZN5StripD0Ev);
++extern char _ZN5StripD1Ev[];
++EXPORT_SYMBOL(_ZN5StripD1Ev);
++extern char _ZN5StripD2Ev[];
++EXPORT_SYMBOL(_ZN5StripD2Ev);
++extern char _ZNK5Strip10class_nameEv[];
++EXPORT_SYMBOL(_ZNK5Strip10class_nameEv);
++extern char _ZNK5Strip10port_countEv[];
++EXPORT_SYMBOL(_ZNK5Strip10port_countEv);
++extern char _ZNK5Strip10processingEv[];
++EXPORT_SYMBOL(_ZNK5Strip10processingEv);
++extern char _ZTV5Strip[];
++EXPORT_SYMBOL(_ZTV5Strip);
++extern char _ZN13StripIPHeader13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN13StripIPHeader13simple_actionEP6Packet);
++extern char _ZN13StripIPHeaderC1Ev[];
++EXPORT_SYMBOL(_ZN13StripIPHeaderC1Ev);
++extern char _ZN13StripIPHeaderC2Ev[];
++EXPORT_SYMBOL(_ZN13StripIPHeaderC2Ev);
++extern char _ZN13StripIPHeaderD0Ev[];
++EXPORT_SYMBOL(_ZN13StripIPHeaderD0Ev);
++extern char _ZN13StripIPHeaderD1Ev[];
++EXPORT_SYMBOL(_ZN13StripIPHeaderD1Ev);
++extern char _ZN13StripIPHeaderD2Ev[];
++EXPORT_SYMBOL(_ZN13StripIPHeaderD2Ev);
++extern char _ZNK13StripIPHeader10class_nameEv[];
++EXPORT_SYMBOL(_ZNK13StripIPHeader10class_nameEv);
++extern char _ZNK13StripIPHeader10port_countEv[];
++EXPORT_SYMBOL(_ZNK13StripIPHeader10port_countEv);
++extern char _ZTV13StripIPHeader[];
++EXPORT_SYMBOL(_ZTV13StripIPHeader);
++extern char _ZN20StripToNetworkHeader13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN20StripToNetworkHeader13simple_actionEP6Packet);
++extern char _ZN20StripToNetworkHeaderC1Ev[];
++EXPORT_SYMBOL(_ZN20StripToNetworkHeaderC1Ev);
++extern char _ZN20StripToNetworkHeaderC2Ev[];
++EXPORT_SYMBOL(_ZN20StripToNetworkHeaderC2Ev);
++extern char _ZN20StripToNetworkHeaderD0Ev[];
++EXPORT_SYMBOL(_ZN20StripToNetworkHeaderD0Ev);
++extern char _ZN20StripToNetworkHeaderD1Ev[];
++EXPORT_SYMBOL(_ZN20StripToNetworkHeaderD1Ev);
++extern char _ZN20StripToNetworkHeaderD2Ev[];
++EXPORT_SYMBOL(_ZN20StripToNetworkHeaderD2Ev);
++extern char _ZNK20StripToNetworkHeader10class_nameEv[];
++EXPORT_SYMBOL(_ZNK20StripToNetworkHeader10class_nameEv);
++extern char _ZNK20StripToNetworkHeader10port_countEv[];
++EXPORT_SYMBOL(_ZNK20StripToNetworkHeader10port_countEv);
++extern char _ZNK20StripToNetworkHeader10processingEv[];
++EXPORT_SYMBOL(_ZNK20StripToNetworkHeader10processingEv);
++extern char _ZTV20StripToNetworkHeader[];
++EXPORT_SYMBOL(_ZTV20StripToNetworkHeader);
++extern char _ZN10Suppressor10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10Suppressor10initializeEP12ErrorHandler);
++extern char _ZN10Suppressor12add_handlersEv[];
++EXPORT_SYMBOL(_ZN10Suppressor12add_handlersEv);
++extern char _ZN10Suppressor3setEib[];
++EXPORT_SYMBOL(_ZN10Suppressor3setEib);
++extern char _ZN10Suppressor4pullEi[];
++EXPORT_SYMBOL(_ZN10Suppressor4pullEi);
++extern char _ZN10Suppressor4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN10Suppressor4pushEiP6Packet);
++extern char _ZN10SuppressorC1Ev[];
++EXPORT_SYMBOL(_ZN10SuppressorC1Ev);
++extern char _ZN10SuppressorC2Ev[];
++EXPORT_SYMBOL(_ZN10SuppressorC2Ev);
++extern char _ZN10SuppressorD0Ev[];
++EXPORT_SYMBOL(_ZN10SuppressorD0Ev);
++extern char _ZN10SuppressorD1Ev[];
++EXPORT_SYMBOL(_ZN10SuppressorD1Ev);
++extern char _ZN10SuppressorD2Ev[];
++EXPORT_SYMBOL(_ZN10SuppressorD2Ev);
++extern char _ZNK10Suppressor10class_nameEv[];
++EXPORT_SYMBOL(_ZNK10Suppressor10class_nameEv);
++extern char _ZNK10Suppressor10port_countEv[];
++EXPORT_SYMBOL(_ZNK10Suppressor10port_countEv);
++extern char _ZNK10Suppressor10processingEv[];
++EXPORT_SYMBOL(_ZNK10Suppressor10processingEv);
++extern char _ZNK10Suppressor9flow_codeEv[];
++EXPORT_SYMBOL(_ZNK10Suppressor9flow_codeEv);
++extern char _ZTV10Suppressor[];
++EXPORT_SYMBOL(_ZTV10Suppressor);
++extern char _ZN6Switch10read_paramEP7ElementPv[];
++EXPORT_SYMBOL(_ZN6Switch10read_paramEP7ElementPv);
++extern char _ZN6Switch11write_paramERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN6Switch11write_paramERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN6Switch12add_handlersEv[];
++EXPORT_SYMBOL(_ZN6Switch12add_handlersEv);
++extern char _ZN6Switch4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN6Switch4pushEiP6Packet);
++extern char _ZN6Switch5llrpcEjPv[];
++EXPORT_SYMBOL(_ZN6Switch5llrpcEjPv);
++extern char _ZN6Switch9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN6Switch9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN6SwitchC1Ev[];
++EXPORT_SYMBOL(_ZN6SwitchC1Ev);
++extern char _ZN6SwitchC2Ev[];
++EXPORT_SYMBOL(_ZN6SwitchC2Ev);
++extern char _ZN6SwitchD0Ev[];
++EXPORT_SYMBOL(_ZN6SwitchD0Ev);
++extern char _ZN6SwitchD1Ev[];
++EXPORT_SYMBOL(_ZN6SwitchD1Ev);
++extern char _ZN6SwitchD2Ev[];
++EXPORT_SYMBOL(_ZN6SwitchD2Ev);
++extern char _ZNK6Switch10class_nameEv[];
++EXPORT_SYMBOL(_ZNK6Switch10class_nameEv);
++extern char _ZNK6Switch10port_countEv[];
++EXPORT_SYMBOL(_ZNK6Switch10port_countEv);
++extern char _ZNK6Switch10processingEv[];
++EXPORT_SYMBOL(_ZNK6Switch10processingEv);
++extern char _ZNK6Switch13configurationER6VectorI6StringE[];
++EXPORT_SYMBOL(_ZNK6Switch13configurationER6VectorI6StringE);
++extern char _ZNK6Switch20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK6Switch20can_live_reconfigureEv);
++extern char _ZTV6Switch[];
++EXPORT_SYMBOL(_ZTV6Switch);
++extern char _ZN4Task10error_hookEPS_Pv[];
++EXPORT_SYMBOL(_ZN4Task10error_hookEPS_Pv);
++extern char _ZN4Task10initializeEP6Routerb[];
++EXPORT_SYMBOL(_ZN4Task10initializeEP6Routerb);
++extern char _ZN4Task10initializeEP7Elementb[];
++EXPORT_SYMBOL(_ZN4Task10initializeEP7Elementb);
++extern char _ZN4Task10unscheduleEv[];
++EXPORT_SYMBOL(_ZN4Task10unscheduleEv);
++extern char _ZN4Task11add_pendingEv[];
++EXPORT_SYMBOL(_ZN4Task11add_pendingEv);
++extern char _ZN4Task11move_threadEi[];
++EXPORT_SYMBOL(_ZN4Task11move_threadEi);
++extern char _ZN4Task15process_pendingEP12RouterThread[];
++EXPORT_SYMBOL(_ZN4Task15process_pendingEP12RouterThread);
++extern char _ZN4Task15true_rescheduleEv[];
++EXPORT_SYMBOL(_ZN4Task15true_rescheduleEv);
++extern char _ZN4Task17strong_rescheduleEv[];
++EXPORT_SYMBOL(_ZN4Task17strong_rescheduleEv);
++extern char _ZN4Task17strong_unscheduleEv[];
++EXPORT_SYMBOL(_ZN4Task17strong_unscheduleEv);
++extern char _ZN4Task7cleanupEv[];
++EXPORT_SYMBOL(_ZN4Task7cleanupEv);
++extern char _ZN4TaskD1Ev[];
++EXPORT_SYMBOL(_ZN4TaskD1Ev);
++extern char _ZN4TaskD2Ev[];
++EXPORT_SYMBOL(_ZN4TaskD2Ev);
++extern char _ZNK4Task6masterEv[];
++EXPORT_SYMBOL(_ZNK4Task6masterEv);
++extern char _ZN11TCPRewriter10TCPMapping10apply_sackEP9click_tcpi[];
++EXPORT_SYMBOL(_ZN11TCPRewriter10TCPMapping10apply_sackEP9click_tcpi);
++extern char _ZN11TCPRewriter10TCPMapping18update_seqno_deltaEji[];
++EXPORT_SYMBOL(_ZN11TCPRewriter10TCPMapping18update_seqno_deltaEji);
++extern char _ZN11TCPRewriter10TCPMapping5applyEP14WritablePacket[];
++EXPORT_SYMBOL(_ZN11TCPRewriter10TCPMapping5applyEP14WritablePacket);
++extern char _ZN11TCPRewriter10TCPMappingC1Eb[];
++EXPORT_SYMBOL(_ZN11TCPRewriter10TCPMappingC1Eb);
++extern char _ZN11TCPRewriter10TCPMappingC2Eb[];
++EXPORT_SYMBOL(_ZN11TCPRewriter10TCPMappingC2Eb);
++extern char _ZN11TCPRewriter10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11TCPRewriter10initializeEP12ErrorHandler);
++extern char _ZN11TCPRewriter10take_stateEP7ElementP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11TCPRewriter10take_stateEP7ElementP12ErrorHandler);
++extern char _ZN11TCPRewriter11tcp_gc_hookEP5TimerPv[];
++EXPORT_SYMBOL(_ZN11TCPRewriter11tcp_gc_hookEP5TimerPv);
++extern char _ZN11TCPRewriter12add_handlersEv[];
++EXPORT_SYMBOL(_ZN11TCPRewriter12add_handlersEv);
++extern char _ZN11TCPRewriter13apply_patternEPN4IPRw7PatternEiRK8IPFlowIDii[];
++EXPORT_SYMBOL(_ZN11TCPRewriter13apply_patternEPN4IPRw7PatternEiRK8IPFlowIDii);
++extern char _ZN11TCPRewriter14notify_patternEPN4IPRw7PatternEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11TCPRewriter14notify_patternEPN4IPRw7PatternEP12ErrorHandler);
++extern char _ZN11TCPRewriter16tcp_done_gc_hookEP5TimerPv[];
++EXPORT_SYMBOL(_ZN11TCPRewriter16tcp_done_gc_hookEP5TimerPv);
++extern char _ZN11TCPRewriter21dump_mappings_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN11TCPRewriter21dump_mappings_handlerEP7ElementPv);
++extern char _ZN11TCPRewriter21dump_patterns_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN11TCPRewriter21dump_patterns_handlerEP7ElementPv);
++extern char _ZN11TCPRewriter22dump_nmappings_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN11TCPRewriter22dump_nmappings_handlerEP7ElementPv);
++extern char _ZN11TCPRewriter4castEPKc[];
++EXPORT_SYMBOL(_ZN11TCPRewriter4castEPKc);
++extern char _ZN11TCPRewriter4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN11TCPRewriter4pushEiP6Packet);
++extern char _ZN11TCPRewriter5llrpcEjPv[];
++EXPORT_SYMBOL(_ZN11TCPRewriter5llrpcEjPv);
++extern char _ZN11TCPRewriter7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN11TCPRewriter7cleanupEN7Element12CleanupStageE);
++extern char _ZN11TCPRewriter9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11TCPRewriter9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN11TCPRewriterC1Ev[];
++EXPORT_SYMBOL(_ZN11TCPRewriterC1Ev);
++extern char _ZN11TCPRewriterC2Ev[];
++EXPORT_SYMBOL(_ZN11TCPRewriterC2Ev);
++extern char _ZN11TCPRewriterD0Ev[];
++EXPORT_SYMBOL(_ZN11TCPRewriterD0Ev);
++extern char _ZN11TCPRewriterD1Ev[];
++EXPORT_SYMBOL(_ZN11TCPRewriterD1Ev);
++extern char _ZN11TCPRewriterD2Ev[];
++EXPORT_SYMBOL(_ZN11TCPRewriterD2Ev);
++extern char _ZNK11TCPRewriter10TCPMapping1sEv[];
++EXPORT_SYMBOL(_ZNK11TCPRewriter10TCPMapping1sEv);
++extern char _ZNK11TCPRewriter10class_nameEv[];
++EXPORT_SYMBOL(_ZNK11TCPRewriter10class_nameEv);
++extern char _ZNK11TCPRewriter10port_countEv[];
++EXPORT_SYMBOL(_ZNK11TCPRewriter10port_countEv);
++extern char _ZNK11TCPRewriter10processingEv[];
++EXPORT_SYMBOL(_ZNK11TCPRewriter10processingEv);
++extern char _ZNK11TCPRewriter11get_mappingEiRK8IPFlowID[];
++EXPORT_SYMBOL(_ZNK11TCPRewriter11get_mappingEiRK8IPFlowID);
++extern char _ZTV11TCPRewriter[];
++EXPORT_SYMBOL(_ZTV11TCPRewriter);
++extern char _ZN3Tee4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN3Tee4pushEiP6Packet);
++extern char _ZN3Tee9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN3Tee9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN3TeeC1Ev[];
++EXPORT_SYMBOL(_ZN3TeeC1Ev);
++extern char _ZN3TeeC2Ev[];
++EXPORT_SYMBOL(_ZN3TeeC2Ev);
++extern char _ZN3TeeD0Ev[];
++EXPORT_SYMBOL(_ZN3TeeD0Ev);
++extern char _ZN3TeeD1Ev[];
++EXPORT_SYMBOL(_ZN3TeeD1Ev);
++extern char _ZN3TeeD2Ev[];
++EXPORT_SYMBOL(_ZN3TeeD2Ev);
++extern char _ZN7PullTee4pullEi[];
++EXPORT_SYMBOL(_ZN7PullTee4pullEi);
++extern char _ZN7PullTee9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7PullTee9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN7PullTeeC1Ev[];
++EXPORT_SYMBOL(_ZN7PullTeeC1Ev);
++extern char _ZN7PullTeeC2Ev[];
++EXPORT_SYMBOL(_ZN7PullTeeC2Ev);
++extern char _ZN7PullTeeD0Ev[];
++EXPORT_SYMBOL(_ZN7PullTeeD0Ev);
++extern char _ZN7PullTeeD1Ev[];
++EXPORT_SYMBOL(_ZN7PullTeeD1Ev);
++extern char _ZN7PullTeeD2Ev[];
++EXPORT_SYMBOL(_ZN7PullTeeD2Ev);
++extern char _ZNK3Tee10class_nameEv[];
++EXPORT_SYMBOL(_ZNK3Tee10class_nameEv);
++extern char _ZNK3Tee10port_countEv[];
++EXPORT_SYMBOL(_ZNK3Tee10port_countEv);
++extern char _ZNK3Tee10processingEv[];
++EXPORT_SYMBOL(_ZNK3Tee10processingEv);
++extern char _ZNK7PullTee10class_nameEv[];
++EXPORT_SYMBOL(_ZNK7PullTee10class_nameEv);
++extern char _ZNK7PullTee10port_countEv[];
++EXPORT_SYMBOL(_ZNK7PullTee10port_countEv);
++extern char _ZNK7PullTee10processingEv[];
++EXPORT_SYMBOL(_ZNK7PullTee10processingEv);
++extern char _ZTV3Tee[];
++EXPORT_SYMBOL(_ZTV3Tee);
++extern char _ZTV7PullTee[];
++EXPORT_SYMBOL(_ZTV7PullTee);
++extern char _ZN17_HashMap_iteratorI6StringiEC1EP7HashMapIS0_iEb[];
++EXPORT_SYMBOL(_ZN17_HashMap_iteratorI6StringiEC1EP7HashMapIS0_iEb);
++extern char _ZN17_HashMap_iteratorI6StringiEC2EP7HashMapIS0_iEb[];
++EXPORT_SYMBOL(_ZN17_HashMap_iteratorI6StringiEC2EP7HashMapIS0_iEb);
++extern char _ZN23_HashMap_const_iteratorI6StringiEC1EPK7HashMapIS0_iEb[];
++EXPORT_SYMBOL(_ZN23_HashMap_const_iteratorI6StringiEC1EPK7HashMapIS0_iEb);
++extern char _ZN23_HashMap_const_iteratorI6StringiEC2EPK7HashMapIS0_iEb[];
++EXPORT_SYMBOL(_ZN23_HashMap_const_iteratorI6StringiEC2EPK7HashMapIS0_iEb);
++extern char _ZN23_HashMap_const_iteratorI6StringiEppEi[];
++EXPORT_SYMBOL(_ZN23_HashMap_const_iteratorI6StringiEppEi);
++extern char _ZN23_HashMap_const_iteratorI6StringiEppEv[];
++EXPORT_SYMBOL(_ZN23_HashMap_const_iteratorI6StringiEppEv);
++extern char _ZN23_HashMap_const_iteratorI8IPFlowIDbEC1EPK7HashMapIS0_bEb[];
++EXPORT_SYMBOL(_ZN23_HashMap_const_iteratorI8IPFlowIDbEC1EPK7HashMapIS0_bEb);
++extern char _ZN23_HashMap_const_iteratorI8IPFlowIDbEC2EPK7HashMapIS0_bEb[];
++EXPORT_SYMBOL(_ZN23_HashMap_const_iteratorI8IPFlowIDbEC2EPK7HashMapIS0_bEb);
++extern char _ZN23_HashMap_const_iteratorI9IPAddressjEC1EPK7HashMapIS0_jEb[];
++EXPORT_SYMBOL(_ZN23_HashMap_const_iteratorI9IPAddressjEC1EPK7HashMapIS0_jEb);
++extern char _ZN23_HashMap_const_iteratorI9IPAddressjEC2EPK7HashMapIS0_jEb[];
++EXPORT_SYMBOL(_ZN23_HashMap_const_iteratorI9IPAddressjEC2EPK7HashMapIS0_jEb);
++extern char _ZN6VectorI6StringE10push_frontERKS0_[];
++EXPORT_SYMBOL(_ZN6VectorI6StringE10push_frontERKS0_);
++extern char _ZN6VectorI6StringE2atEi[];
++EXPORT_SYMBOL(_ZN6VectorI6StringE2atEi);
++extern char _ZN6VectorI6StringE3endEv[];
++EXPORT_SYMBOL(_ZN6VectorI6StringE3endEv);
++extern char _ZN6VectorI6StringE4at_uEi[];
++EXPORT_SYMBOL(_ZN6VectorI6StringE4at_uEi);
++extern char _ZN6VectorI6StringE4backEv[];
++EXPORT_SYMBOL(_ZN6VectorI6StringE4backEv);
++extern char _ZN6VectorI6StringE4swapERS1_[];
++EXPORT_SYMBOL(_ZN6VectorI6StringE4swapERS1_);
++extern char _ZN6VectorI6StringE4veltEPS0_i[];
++EXPORT_SYMBOL(_ZN6VectorI6StringE4veltEPS0_i);
++extern char _ZN6VectorI6StringE5beginEv[];
++EXPORT_SYMBOL(_ZN6VectorI6StringE5beginEv);
++extern char _ZN6VectorI6StringE5clearEv[];
++EXPORT_SYMBOL(_ZN6VectorI6StringE5clearEv);
++extern char _ZN6VectorI6StringE5eraseEPS0_[];
++EXPORT_SYMBOL(_ZN6VectorI6StringE5eraseEPS0_);
++extern char _ZN6VectorI6StringE5frontEv[];
++EXPORT_SYMBOL(_ZN6VectorI6StringE5frontEv);
++extern char _ZN6VectorI6StringE6assignEiRKS0_[];
++EXPORT_SYMBOL(_ZN6VectorI6StringE6assignEiRKS0_);
++extern char _ZN6VectorI6StringE6insertEPS0_RKS0_[];
++EXPORT_SYMBOL(_ZN6VectorI6StringE6insertEPS0_RKS0_);
++extern char _ZN6VectorI6StringE8pop_backEv[];
++EXPORT_SYMBOL(_ZN6VectorI6StringE8pop_backEv);
++extern char _ZN6VectorI6StringE9pop_frontEv[];
++EXPORT_SYMBOL(_ZN6VectorI6StringE9pop_frontEv);
++extern char _ZN6VectorI6StringE9push_backERKS0_[];
++EXPORT_SYMBOL(_ZN6VectorI6StringE9push_backERKS0_);
++extern char _ZN6VectorI6StringEC1ERKS1_[];
++EXPORT_SYMBOL(_ZN6VectorI6StringEC1ERKS1_);
++extern char _ZN6VectorI6StringEC1EiRKS0_[];
++EXPORT_SYMBOL(_ZN6VectorI6StringEC1EiRKS0_);
++extern char _ZN6VectorI6StringEC1Ev[];
++EXPORT_SYMBOL(_ZN6VectorI6StringEC1Ev);
++extern char _ZN6VectorI6StringEC2ERKS1_[];
++EXPORT_SYMBOL(_ZN6VectorI6StringEC2ERKS1_);
++extern char _ZN6VectorI6StringEC2EiRKS0_[];
++EXPORT_SYMBOL(_ZN6VectorI6StringEC2EiRKS0_);
++extern char _ZN6VectorI6StringEC2Ev[];
++EXPORT_SYMBOL(_ZN6VectorI6StringEC2Ev);
++extern char _ZN6VectorI6StringED2Ev[];
++EXPORT_SYMBOL(_ZN6VectorI6StringED2Ev);
++extern char _ZN6VectorI6StringEaSERKS1_[];
++EXPORT_SYMBOL(_ZN6VectorI6StringEaSERKS1_);
++extern char _ZN6VectorI6StringEixEi[];
++EXPORT_SYMBOL(_ZN6VectorI6StringEixEi);
++extern char _ZN6VectorI9IPAddressE10push_frontERKS0_[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressE10push_frontERKS0_);
++extern char _ZN6VectorI9IPAddressE2atEi[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressE2atEi);
++extern char _ZN6VectorI9IPAddressE3endEv[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressE3endEv);
++extern char _ZN6VectorI9IPAddressE4at_uEi[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressE4at_uEi);
++extern char _ZN6VectorI9IPAddressE4backEv[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressE4backEv);
++extern char _ZN6VectorI9IPAddressE4swapERS1_[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressE4swapERS1_);
++extern char _ZN6VectorI9IPAddressE4veltEPS0_i[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressE4veltEPS0_i);
++extern char _ZN6VectorI9IPAddressE5beginEv[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressE5beginEv);
++extern char _ZN6VectorI9IPAddressE5clearEv[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressE5clearEv);
++extern char _ZN6VectorI9IPAddressE5eraseEPS0_[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressE5eraseEPS0_);
++extern char _ZN6VectorI9IPAddressE5eraseEPS0_S2_[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressE5eraseEPS0_S2_);
++extern char _ZN6VectorI9IPAddressE5frontEv[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressE5frontEv);
++extern char _ZN6VectorI9IPAddressE6assignEiRKS0_[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressE6assignEiRKS0_);
++extern char _ZN6VectorI9IPAddressE6insertEPS0_RKS0_[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressE6insertEPS0_RKS0_);
++extern char _ZN6VectorI9IPAddressE6resizeEiRKS0_[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressE6resizeEiRKS0_);
++extern char _ZN6VectorI9IPAddressE7reserveEi[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressE7reserveEi);
++extern char _ZN6VectorI9IPAddressE8pop_backEv[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressE8pop_backEv);
++extern char _ZN6VectorI9IPAddressE9pop_frontEv[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressE9pop_frontEv);
++extern char _ZN6VectorI9IPAddressE9push_backERKS0_[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressE9push_backERKS0_);
++extern char _ZN6VectorI9IPAddressEC1ERKS1_[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressEC1ERKS1_);
++extern char _ZN6VectorI9IPAddressEC1EiRKS0_[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressEC1EiRKS0_);
++extern char _ZN6VectorI9IPAddressEC1Ev[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressEC1Ev);
++extern char _ZN6VectorI9IPAddressEC2ERKS1_[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressEC2ERKS1_);
++extern char _ZN6VectorI9IPAddressEC2EiRKS0_[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressEC2EiRKS0_);
++extern char _ZN6VectorI9IPAddressEC2Ev[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressEC2Ev);
++extern char _ZN6VectorI9IPAddressED1Ev[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressED1Ev);
++extern char _ZN6VectorI9IPAddressED2Ev[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressED2Ev);
++extern char _ZN6VectorI9IPAddressEaSERKS1_[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressEaSERKS1_);
++extern char _ZN6VectorI9IPAddressEixEi[];
++EXPORT_SYMBOL(_ZN6VectorI9IPAddressEixEi);
++extern char _ZN6VectorIN6Router6HookupEE10push_frontERKS1_[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEE10push_frontERKS1_);
++extern char _ZN6VectorIN6Router6HookupEE2atEi[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEE2atEi);
++extern char _ZN6VectorIN6Router6HookupEE3endEv[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEE3endEv);
++extern char _ZN6VectorIN6Router6HookupEE4at_uEi[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEE4at_uEi);
++extern char _ZN6VectorIN6Router6HookupEE4backEv[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEE4backEv);
++extern char _ZN6VectorIN6Router6HookupEE4swapERS2_[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEE4swapERS2_);
++extern char _ZN6VectorIN6Router6HookupEE4veltEPS1_i[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEE4veltEPS1_i);
++extern char _ZN6VectorIN6Router6HookupEE5beginEv[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEE5beginEv);
++extern char _ZN6VectorIN6Router6HookupEE5clearEv[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEE5clearEv);
++extern char _ZN6VectorIN6Router6HookupEE5eraseEPS1_[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEE5eraseEPS1_);
++extern char _ZN6VectorIN6Router6HookupEE5eraseEPS1_S3_[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEE5eraseEPS1_S3_);
++extern char _ZN6VectorIN6Router6HookupEE5frontEv[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEE5frontEv);
++extern char _ZN6VectorIN6Router6HookupEE6assignEiRKS1_[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEE6assignEiRKS1_);
++extern char _ZN6VectorIN6Router6HookupEE6insertEPS1_RKS1_[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEE6insertEPS1_RKS1_);
++extern char _ZN6VectorIN6Router6HookupEE6resizeEiRKS1_[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEE6resizeEiRKS1_);
++extern char _ZN6VectorIN6Router6HookupEE8pop_backEv[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEE8pop_backEv);
++extern char _ZN6VectorIN6Router6HookupEE9pop_frontEv[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEE9pop_frontEv);
++extern char _ZN6VectorIN6Router6HookupEE9push_backERKS1_[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEE9push_backERKS1_);
++extern char _ZN6VectorIN6Router6HookupEEC1ERKS2_[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEEC1ERKS2_);
++extern char _ZN6VectorIN6Router6HookupEEC1EiRKS1_[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEEC1EiRKS1_);
++extern char _ZN6VectorIN6Router6HookupEEC1Ev[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEEC1Ev);
++extern char _ZN6VectorIN6Router6HookupEEC2ERKS2_[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEEC2ERKS2_);
++extern char _ZN6VectorIN6Router6HookupEEC2EiRKS1_[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEEC2EiRKS1_);
++extern char _ZN6VectorIN6Router6HookupEEC2Ev[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEEC2Ev);
++extern char _ZN6VectorIN6Router6HookupEED2Ev[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEED2Ev);
++extern char _ZN6VectorIN6Router6HookupEEaSERKS2_[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEEaSERKS2_);
++extern char _ZN6VectorIN6Router6HookupEEixEi[];
++EXPORT_SYMBOL(_ZN6VectorIN6Router6HookupEEixEi);
++extern char _ZN6VectorIiE10push_frontERKi[];
++EXPORT_SYMBOL(_ZN6VectorIiE10push_frontERKi);
++extern char _ZN6VectorIiE2atEi[];
++EXPORT_SYMBOL(_ZN6VectorIiE2atEi);
++extern char _ZN6VectorIiE3endEv[];
++EXPORT_SYMBOL(_ZN6VectorIiE3endEv);
++extern char _ZN6VectorIiE4at_uEi[];
++EXPORT_SYMBOL(_ZN6VectorIiE4at_uEi);
++extern char _ZN6VectorIiE4backEv[];
++EXPORT_SYMBOL(_ZN6VectorIiE4backEv);
++extern char _ZN6VectorIiE4swapERS0_[];
++EXPORT_SYMBOL(_ZN6VectorIiE4swapERS0_);
++extern char _ZN6VectorIiE4veltEPii[];
++EXPORT_SYMBOL(_ZN6VectorIiE4veltEPii);
++extern char _ZN6VectorIiE5clearEv[];
++EXPORT_SYMBOL(_ZN6VectorIiE5clearEv);
++extern char _ZN6VectorIiE5eraseEPi[];
++EXPORT_SYMBOL(_ZN6VectorIiE5eraseEPi);
++extern char _ZN6VectorIiE5eraseEPiS1_[];
++EXPORT_SYMBOL(_ZN6VectorIiE5eraseEPiS1_);
++extern char _ZN6VectorIiE5frontEv[];
++EXPORT_SYMBOL(_ZN6VectorIiE5frontEv);
++extern char _ZN6VectorIiE6insertEPiRKi[];
++EXPORT_SYMBOL(_ZN6VectorIiE6insertEPiRKi);
++extern char _ZN6VectorIiE8pop_backEv[];
++EXPORT_SYMBOL(_ZN6VectorIiE8pop_backEv);
++extern char _ZN6VectorIiE9pop_frontEv[];
++EXPORT_SYMBOL(_ZN6VectorIiE9pop_frontEv);
++extern char _ZN6VectorIiE9push_backERKi[];
++EXPORT_SYMBOL(_ZN6VectorIiE9push_backERKi);
++extern char _ZN6VectorIiEC1Ev[];
++EXPORT_SYMBOL(_ZN6VectorIiEC1Ev);
++extern char _ZN6VectorIiEC2ERKS0_[];
++EXPORT_SYMBOL(_ZN6VectorIiEC2ERKS0_);
++extern char _ZN6VectorIiEC2EiRKi[];
++EXPORT_SYMBOL(_ZN6VectorIiEC2EiRKi);
++extern char _ZN6VectorIiEC2Ev[];
++EXPORT_SYMBOL(_ZN6VectorIiEC2Ev);
++extern char _ZN6VectorIiED2Ev[];
++EXPORT_SYMBOL(_ZN6VectorIiED2Ev);
++extern char _ZN6VectorIiEixEi[];
++EXPORT_SYMBOL(_ZN6VectorIiEixEi);
++extern char _ZN6VectorIjE10push_frontERKj[];
++EXPORT_SYMBOL(_ZN6VectorIjE10push_frontERKj);
++extern char _ZN6VectorIjE2atEi[];
++EXPORT_SYMBOL(_ZN6VectorIjE2atEi);
++extern char _ZN6VectorIjE3endEv[];
++EXPORT_SYMBOL(_ZN6VectorIjE3endEv);
++extern char _ZN6VectorIjE4at_uEi[];
++EXPORT_SYMBOL(_ZN6VectorIjE4at_uEi);
++extern char _ZN6VectorIjE4backEv[];
++EXPORT_SYMBOL(_ZN6VectorIjE4backEv);
++extern char _ZN6VectorIjE4swapERS0_[];
++EXPORT_SYMBOL(_ZN6VectorIjE4swapERS0_);
++extern char _ZN6VectorIjE4veltEPji[];
++EXPORT_SYMBOL(_ZN6VectorIjE4veltEPji);
++extern char _ZN6VectorIjE5beginEv[];
++EXPORT_SYMBOL(_ZN6VectorIjE5beginEv);
++extern char _ZN6VectorIjE5clearEv[];
++EXPORT_SYMBOL(_ZN6VectorIjE5clearEv);
++extern char _ZN6VectorIjE5eraseEPj[];
++EXPORT_SYMBOL(_ZN6VectorIjE5eraseEPj);
++extern char _ZN6VectorIjE5eraseEPjS1_[];
++EXPORT_SYMBOL(_ZN6VectorIjE5eraseEPjS1_);
++extern char _ZN6VectorIjE5frontEv[];
++EXPORT_SYMBOL(_ZN6VectorIjE5frontEv);
++extern char _ZN6VectorIjE6assignEiRKj[];
++EXPORT_SYMBOL(_ZN6VectorIjE6assignEiRKj);
++extern char _ZN6VectorIjE6insertEPjRKj[];
++EXPORT_SYMBOL(_ZN6VectorIjE6insertEPjRKj);
++extern char _ZN6VectorIjE6resizeEiRKj[];
++EXPORT_SYMBOL(_ZN6VectorIjE6resizeEiRKj);
++extern char _ZN6VectorIjE7reserveEi[];
++EXPORT_SYMBOL(_ZN6VectorIjE7reserveEi);
++extern char _ZN6VectorIjE8pop_backEv[];
++EXPORT_SYMBOL(_ZN6VectorIjE8pop_backEv);
++extern char _ZN6VectorIjE9pop_frontEv[];
++EXPORT_SYMBOL(_ZN6VectorIjE9pop_frontEv);
++extern char _ZN6VectorIjE9push_backERKj[];
++EXPORT_SYMBOL(_ZN6VectorIjE9push_backERKj);
++extern char _ZN6VectorIjEC1ERKS0_[];
++EXPORT_SYMBOL(_ZN6VectorIjEC1ERKS0_);
++extern char _ZN6VectorIjEC1EiRKj[];
++EXPORT_SYMBOL(_ZN6VectorIjEC1EiRKj);
++extern char _ZN6VectorIjEC1Ev[];
++EXPORT_SYMBOL(_ZN6VectorIjEC1Ev);
++extern char _ZN6VectorIjEC2ERKS0_[];
++EXPORT_SYMBOL(_ZN6VectorIjEC2ERKS0_);
++extern char _ZN6VectorIjEC2EiRKj[];
++EXPORT_SYMBOL(_ZN6VectorIjEC2EiRKj);
++extern char _ZN6VectorIjEC2Ev[];
++EXPORT_SYMBOL(_ZN6VectorIjEC2Ev);
++extern char _ZN6VectorIjED1Ev[];
++EXPORT_SYMBOL(_ZN6VectorIjED1Ev);
++extern char _ZN6VectorIjED2Ev[];
++EXPORT_SYMBOL(_ZN6VectorIjED2Ev);
++extern char _ZN6VectorIjEaSERKS0_[];
++EXPORT_SYMBOL(_ZN6VectorIjEaSERKS0_);
++extern char _ZN6VectorIjEixEi[];
++EXPORT_SYMBOL(_ZN6VectorIjEixEi);
++extern char _ZN7HashMapI6StringiE10find_forceERKS0_[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiE10find_forceERKS0_);
++extern char _ZN7HashMapI6StringiE10find_forceERKS0_RKi[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiE10find_forceERKS0_RKi);
++extern char _ZN7HashMapI6StringiE10initializeEP20HashMap_ArenaFactoryj[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiE10initializeEP20HashMap_ArenaFactoryj);
++extern char _ZN7HashMapI6StringiE11findp_forceERKS0_[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiE11findp_forceERKS0_);
++extern char _ZN7HashMapI6StringiE11findp_forceERKS0_RKi[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiE11findp_forceERKS0_RKi);
++extern char _ZN7HashMapI6StringiE15find_pair_forceERKS0_[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiE15find_pair_forceERKS0_);
++extern char _ZN7HashMapI6StringiE15find_pair_forceERKS0_RKi[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiE15find_pair_forceERKS0_RKi);
++extern char _ZN7HashMapI6StringiE20set_dynamic_resizingEb[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiE20set_dynamic_resizingEb);
++extern char _ZN7HashMapI6StringiE3endEv[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiE3endEv);
++extern char _ZN7HashMapI6StringiE4swapERS1_[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiE4swapERS1_);
++extern char _ZN7HashMapI6StringiE5beginEv[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiE5beginEv);
++extern char _ZN7HashMapI6StringiE5clearEv[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiE5clearEv);
++extern char _ZN7HashMapI6StringiE6insertERKS0_RKi[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiE6insertERKS0_RKi);
++extern char _ZN7HashMapI6StringiE6removeERKS0_[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiE6removeERKS0_);
++extern char _ZN7HashMapI6StringiE6resizeEj[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiE6resizeEj);
++extern char _ZN7HashMapI6StringiE7resize0Ej[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiE7resize0Ej);
++extern char _ZN7HashMapI6StringiE9copy_fromERKS1_[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiE9copy_fromERKS1_);
++extern char _ZN7HashMapI6StringiE9set_arenaEP20HashMap_ArenaFactory[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiE9set_arenaEP20HashMap_ArenaFactory);
++extern char _ZN7HashMapI6StringiEC1ERKS1_[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiEC1ERKS1_);
++extern char _ZN7HashMapI6StringiEC1ERKiP20HashMap_ArenaFactory[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiEC1ERKiP20HashMap_ArenaFactory);
++extern char _ZN7HashMapI6StringiEC1Ev[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiEC1Ev);
++extern char _ZN7HashMapI6StringiEC2ERKS1_[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiEC2ERKS1_);
++extern char _ZN7HashMapI6StringiEC2ERKiP20HashMap_ArenaFactory[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiEC2ERKiP20HashMap_ArenaFactory);
++extern char _ZN7HashMapI6StringiEC2Ev[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiEC2Ev);
++extern char _ZN7HashMapI6StringiED1Ev[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiED1Ev);
++extern char _ZN7HashMapI6StringiED2Ev[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiED2Ev);
++extern char _ZN7HashMapI6StringiEaSERKS1_[];
++EXPORT_SYMBOL(_ZN7HashMapI6StringiEaSERKS1_);
++extern char _ZN7HashMapI8IPFlowIDbE10find_forceERKS0_[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbE10find_forceERKS0_);
++extern char _ZN7HashMapI8IPFlowIDbE10find_forceERKS0_RKb[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbE10find_forceERKS0_RKb);
++extern char _ZN7HashMapI8IPFlowIDbE10initializeEP20HashMap_ArenaFactoryj[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbE10initializeEP20HashMap_ArenaFactoryj);
++extern char _ZN7HashMapI8IPFlowIDbE11findp_forceERKS0_[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbE11findp_forceERKS0_);
++extern char _ZN7HashMapI8IPFlowIDbE11findp_forceERKS0_RKb[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbE11findp_forceERKS0_RKb);
++extern char _ZN7HashMapI8IPFlowIDbE15find_pair_forceERKS0_[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbE15find_pair_forceERKS0_);
++extern char _ZN7HashMapI8IPFlowIDbE15find_pair_forceERKS0_RKb[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbE15find_pair_forceERKS0_RKb);
++extern char _ZN7HashMapI8IPFlowIDbE20set_dynamic_resizingEb[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbE20set_dynamic_resizingEb);
++extern char _ZN7HashMapI8IPFlowIDbE3endEv[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbE3endEv);
++extern char _ZN7HashMapI8IPFlowIDbE4swapERS1_[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbE4swapERS1_);
++extern char _ZN7HashMapI8IPFlowIDbE5beginEv[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbE5beginEv);
++extern char _ZN7HashMapI8IPFlowIDbE5clearEv[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbE5clearEv);
++extern char _ZN7HashMapI8IPFlowIDbE6insertERKS0_RKb[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbE6insertERKS0_RKb);
++extern char _ZN7HashMapI8IPFlowIDbE6removeERKS0_[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbE6removeERKS0_);
++extern char _ZN7HashMapI8IPFlowIDbE6resizeEj[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbE6resizeEj);
++extern char _ZN7HashMapI8IPFlowIDbE7resize0Ej[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbE7resize0Ej);
++extern char _ZN7HashMapI8IPFlowIDbE9copy_fromERKS1_[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbE9copy_fromERKS1_);
++extern char _ZN7HashMapI8IPFlowIDbE9set_arenaEP20HashMap_ArenaFactory[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbE9set_arenaEP20HashMap_ArenaFactory);
++extern char _ZN7HashMapI8IPFlowIDbEC1ERKS1_[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbEC1ERKS1_);
++extern char _ZN7HashMapI8IPFlowIDbEC1ERKbP20HashMap_ArenaFactory[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbEC1ERKbP20HashMap_ArenaFactory);
++extern char _ZN7HashMapI8IPFlowIDbEC1Ev[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbEC1Ev);
++extern char _ZN7HashMapI8IPFlowIDbEC2ERKS1_[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbEC2ERKS1_);
++extern char _ZN7HashMapI8IPFlowIDbEC2ERKbP20HashMap_ArenaFactory[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbEC2ERKbP20HashMap_ArenaFactory);
++extern char _ZN7HashMapI8IPFlowIDbEC2Ev[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbEC2Ev);
++extern char _ZN7HashMapI8IPFlowIDbED1Ev[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbED1Ev);
++extern char _ZN7HashMapI8IPFlowIDbED2Ev[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbED2Ev);
++extern char _ZN7HashMapI8IPFlowIDbEaSERKS1_[];
++EXPORT_SYMBOL(_ZN7HashMapI8IPFlowIDbEaSERKS1_);
++extern char _ZN7HashMapI9IPAddressjE10find_forceERKS0_[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjE10find_forceERKS0_);
++extern char _ZN7HashMapI9IPAddressjE10find_forceERKS0_RKj[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjE10find_forceERKS0_RKj);
++extern char _ZN7HashMapI9IPAddressjE10initializeEP20HashMap_ArenaFactoryj[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjE10initializeEP20HashMap_ArenaFactoryj);
++extern char _ZN7HashMapI9IPAddressjE11findp_forceERKS0_[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjE11findp_forceERKS0_);
++extern char _ZN7HashMapI9IPAddressjE11findp_forceERKS0_RKj[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjE11findp_forceERKS0_RKj);
++extern char _ZN7HashMapI9IPAddressjE15find_pair_forceERKS0_[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjE15find_pair_forceERKS0_);
++extern char _ZN7HashMapI9IPAddressjE15find_pair_forceERKS0_RKj[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjE15find_pair_forceERKS0_RKj);
++extern char _ZN7HashMapI9IPAddressjE20set_dynamic_resizingEb[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjE20set_dynamic_resizingEb);
++extern char _ZN7HashMapI9IPAddressjE3endEv[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjE3endEv);
++extern char _ZN7HashMapI9IPAddressjE4swapERS1_[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjE4swapERS1_);
++extern char _ZN7HashMapI9IPAddressjE5beginEv[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjE5beginEv);
++extern char _ZN7HashMapI9IPAddressjE5clearEv[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjE5clearEv);
++extern char _ZN7HashMapI9IPAddressjE6insertERKS0_RKj[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjE6insertERKS0_RKj);
++extern char _ZN7HashMapI9IPAddressjE6removeERKS0_[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjE6removeERKS0_);
++extern char _ZN7HashMapI9IPAddressjE6resizeEj[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjE6resizeEj);
++extern char _ZN7HashMapI9IPAddressjE7resize0Ej[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjE7resize0Ej);
++extern char _ZN7HashMapI9IPAddressjE9copy_fromERKS1_[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjE9copy_fromERKS1_);
++extern char _ZN7HashMapI9IPAddressjE9set_arenaEP20HashMap_ArenaFactory[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjE9set_arenaEP20HashMap_ArenaFactory);
++extern char _ZN7HashMapI9IPAddressjEC1ERKS1_[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjEC1ERKS1_);
++extern char _ZN7HashMapI9IPAddressjEC1ERKjP20HashMap_ArenaFactory[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjEC1ERKjP20HashMap_ArenaFactory);
++extern char _ZN7HashMapI9IPAddressjEC1Ev[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjEC1Ev);
++extern char _ZN7HashMapI9IPAddressjEC2ERKS1_[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjEC2ERKS1_);
++extern char _ZN7HashMapI9IPAddressjEC2ERKjP20HashMap_ArenaFactory[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjEC2ERKjP20HashMap_ArenaFactory);
++extern char _ZN7HashMapI9IPAddressjEC2Ev[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjEC2Ev);
++extern char _ZN7HashMapI9IPAddressjED1Ev[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjED1Ev);
++extern char _ZN7HashMapI9IPAddressjED2Ev[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjED2Ev);
++extern char _ZN7HashMapI9IPAddressjEaSERKS1_[];
++EXPORT_SYMBOL(_ZN7HashMapI9IPAddressjEaSERKS1_);
++extern char _ZNK17_HashMap_iteratorI6StringiE4pairEv[];
++EXPORT_SYMBOL(_ZNK17_HashMap_iteratorI6StringiE4pairEv);
++extern char _ZNK17_HashMap_iteratorI6StringiE5valueEv[];
++EXPORT_SYMBOL(_ZNK17_HashMap_iteratorI6StringiE5valueEv);
++extern char _ZNK23_HashMap_const_iteratorI6StringiE3keyEv[];
++EXPORT_SYMBOL(_ZNK23_HashMap_const_iteratorI6StringiE3keyEv);
++extern char _ZNK23_HashMap_const_iteratorI6StringiE4liveEv[];
++EXPORT_SYMBOL(_ZNK23_HashMap_const_iteratorI6StringiE4liveEv);
++extern char _ZNK23_HashMap_const_iteratorI6StringiE4pairEv[];
++EXPORT_SYMBOL(_ZNK23_HashMap_const_iteratorI6StringiE4pairEv);
++extern char _ZNK23_HashMap_const_iteratorI6StringiE5valueEv[];
++EXPORT_SYMBOL(_ZNK23_HashMap_const_iteratorI6StringiE5valueEv);
++extern char _ZNK23_HashMap_const_iteratorI6StringiEcvMS1_KFbvEEv[];
++EXPORT_SYMBOL(_ZNK23_HashMap_const_iteratorI6StringiEcvMS1_KFbvEEv);
++extern char _ZNK6VectorI6StringE2atEi[];
++EXPORT_SYMBOL(_ZNK6VectorI6StringE2atEi);
++extern char _ZNK6VectorI6StringE3endEv[];
++EXPORT_SYMBOL(_ZNK6VectorI6StringE3endEv);
++extern char _ZNK6VectorI6StringE4at_uEi[];
++EXPORT_SYMBOL(_ZNK6VectorI6StringE4at_uEi);
++extern char _ZNK6VectorI6StringE4backEv[];
++EXPORT_SYMBOL(_ZNK6VectorI6StringE4backEv);
++extern char _ZNK6VectorI6StringE4sizeEv[];
++EXPORT_SYMBOL(_ZNK6VectorI6StringE4sizeEv);
++extern char _ZNK6VectorI6StringE4veltEi[];
++EXPORT_SYMBOL(_ZNK6VectorI6StringE4veltEi);
++extern char _ZNK6VectorI6StringE5beginEv[];
++EXPORT_SYMBOL(_ZNK6VectorI6StringE5beginEv);
++extern char _ZNK6VectorI6StringE5emptyEv[];
++EXPORT_SYMBOL(_ZNK6VectorI6StringE5emptyEv);
++extern char _ZNK6VectorI6StringE5frontEv[];
++EXPORT_SYMBOL(_ZNK6VectorI6StringE5frontEv);
++extern char _ZNK6VectorI6StringE8capacityEv[];
++EXPORT_SYMBOL(_ZNK6VectorI6StringE8capacityEv);
++extern char _ZNK6VectorI9IPAddressE2atEi[];
++EXPORT_SYMBOL(_ZNK6VectorI9IPAddressE2atEi);
++extern char _ZNK6VectorI9IPAddressE3endEv[];
++EXPORT_SYMBOL(_ZNK6VectorI9IPAddressE3endEv);
++extern char _ZNK6VectorI9IPAddressE4at_uEi[];
++EXPORT_SYMBOL(_ZNK6VectorI9IPAddressE4at_uEi);
++extern char _ZNK6VectorI9IPAddressE4backEv[];
++EXPORT_SYMBOL(_ZNK6VectorI9IPAddressE4backEv);
++extern char _ZNK6VectorI9IPAddressE4sizeEv[];
++EXPORT_SYMBOL(_ZNK6VectorI9IPAddressE4sizeEv);
++extern char _ZNK6VectorI9IPAddressE4veltEi[];
++EXPORT_SYMBOL(_ZNK6VectorI9IPAddressE4veltEi);
++extern char _ZNK6VectorI9IPAddressE5beginEv[];
++EXPORT_SYMBOL(_ZNK6VectorI9IPAddressE5beginEv);
++extern char _ZNK6VectorI9IPAddressE5emptyEv[];
++EXPORT_SYMBOL(_ZNK6VectorI9IPAddressE5emptyEv);
++extern char _ZNK6VectorI9IPAddressE5frontEv[];
++EXPORT_SYMBOL(_ZNK6VectorI9IPAddressE5frontEv);
++extern char _ZNK6VectorI9IPAddressE8capacityEv[];
++EXPORT_SYMBOL(_ZNK6VectorI9IPAddressE8capacityEv);
++extern char _ZNK6VectorI9IPAddressEixEi[];
++EXPORT_SYMBOL(_ZNK6VectorI9IPAddressEixEi);
++extern char _ZNK6VectorIN6Router6HookupEE2atEi[];
++EXPORT_SYMBOL(_ZNK6VectorIN6Router6HookupEE2atEi);
++extern char _ZNK6VectorIN6Router6HookupEE3endEv[];
++EXPORT_SYMBOL(_ZNK6VectorIN6Router6HookupEE3endEv);
++extern char _ZNK6VectorIN6Router6HookupEE4at_uEi[];
++EXPORT_SYMBOL(_ZNK6VectorIN6Router6HookupEE4at_uEi);
++extern char _ZNK6VectorIN6Router6HookupEE4backEv[];
++EXPORT_SYMBOL(_ZNK6VectorIN6Router6HookupEE4backEv);
++extern char _ZNK6VectorIN6Router6HookupEE4veltEi[];
++EXPORT_SYMBOL(_ZNK6VectorIN6Router6HookupEE4veltEi);
++extern char _ZNK6VectorIN6Router6HookupEE5beginEv[];
++EXPORT_SYMBOL(_ZNK6VectorIN6Router6HookupEE5beginEv);
++extern char _ZNK6VectorIN6Router6HookupEE5emptyEv[];
++EXPORT_SYMBOL(_ZNK6VectorIN6Router6HookupEE5emptyEv);
++extern char _ZNK6VectorIN6Router6HookupEE5frontEv[];
++EXPORT_SYMBOL(_ZNK6VectorIN6Router6HookupEE5frontEv);
++extern char _ZNK6VectorIN6Router6HookupEE8capacityEv[];
++EXPORT_SYMBOL(_ZNK6VectorIN6Router6HookupEE8capacityEv);
++extern char _ZNK6VectorIiE2atEi[];
++EXPORT_SYMBOL(_ZNK6VectorIiE2atEi);
++extern char _ZNK6VectorIiE3endEv[];
++EXPORT_SYMBOL(_ZNK6VectorIiE3endEv);
++extern char _ZNK6VectorIiE4at_uEi[];
++EXPORT_SYMBOL(_ZNK6VectorIiE4at_uEi);
++extern char _ZNK6VectorIiE4backEv[];
++EXPORT_SYMBOL(_ZNK6VectorIiE4backEv);
++extern char _ZNK6VectorIiE4sizeEv[];
++EXPORT_SYMBOL(_ZNK6VectorIiE4sizeEv);
++extern char _ZNK6VectorIiE4veltEi[];
++EXPORT_SYMBOL(_ZNK6VectorIiE4veltEi);
++extern char _ZNK6VectorIiE5beginEv[];
++EXPORT_SYMBOL(_ZNK6VectorIiE5beginEv);
++extern char _ZNK6VectorIiE5emptyEv[];
++EXPORT_SYMBOL(_ZNK6VectorIiE5emptyEv);
++extern char _ZNK6VectorIiE5frontEv[];
++EXPORT_SYMBOL(_ZNK6VectorIiE5frontEv);
++extern char _ZNK6VectorIiE8capacityEv[];
++EXPORT_SYMBOL(_ZNK6VectorIiE8capacityEv);
++extern char _ZNK6VectorIiEixEi[];
++EXPORT_SYMBOL(_ZNK6VectorIiEixEi);
++extern char _ZNK6VectorIjE2atEi[];
++EXPORT_SYMBOL(_ZNK6VectorIjE2atEi);
++extern char _ZNK6VectorIjE3endEv[];
++EXPORT_SYMBOL(_ZNK6VectorIjE3endEv);
++extern char _ZNK6VectorIjE4at_uEi[];
++EXPORT_SYMBOL(_ZNK6VectorIjE4at_uEi);
++extern char _ZNK6VectorIjE4backEv[];
++EXPORT_SYMBOL(_ZNK6VectorIjE4backEv);
++extern char _ZNK6VectorIjE4sizeEv[];
++EXPORT_SYMBOL(_ZNK6VectorIjE4sizeEv);
++extern char _ZNK6VectorIjE4veltEi[];
++EXPORT_SYMBOL(_ZNK6VectorIjE4veltEi);
++extern char _ZNK6VectorIjE5beginEv[];
++EXPORT_SYMBOL(_ZNK6VectorIjE5beginEv);
++extern char _ZNK6VectorIjE5emptyEv[];
++EXPORT_SYMBOL(_ZNK6VectorIjE5emptyEv);
++extern char _ZNK6VectorIjE5frontEv[];
++EXPORT_SYMBOL(_ZNK6VectorIjE5frontEv);
++extern char _ZNK6VectorIjE8capacityEv[];
++EXPORT_SYMBOL(_ZNK6VectorIjE8capacityEv);
++extern char _ZNK6VectorIjEixEi[];
++EXPORT_SYMBOL(_ZNK6VectorIjEixEi);
++extern char _ZNK7HashMapI6StringiE16dynamic_resizingEv[];
++EXPORT_SYMBOL(_ZNK7HashMapI6StringiE16dynamic_resizingEv);
++extern char _ZNK7HashMapI6StringiE3endEv[];
++EXPORT_SYMBOL(_ZNK7HashMapI6StringiE3endEv);
++extern char _ZNK7HashMapI6StringiE4findERKS0_[];
++EXPORT_SYMBOL(_ZNK7HashMapI6StringiE4findERKS0_);
++extern char _ZNK7HashMapI6StringiE4findERKS0_RKi[];
++EXPORT_SYMBOL(_ZNK7HashMapI6StringiE4findERKS0_RKi);
++extern char _ZNK7HashMapI6StringiE4sizeEv[];
++EXPORT_SYMBOL(_ZNK7HashMapI6StringiE4sizeEv);
++extern char _ZNK7HashMapI6StringiE5beginEv[];
++EXPORT_SYMBOL(_ZNK7HashMapI6StringiE5beginEv);
++extern char _ZNK7HashMapI6StringiE5emptyEv[];
++EXPORT_SYMBOL(_ZNK7HashMapI6StringiE5emptyEv);
++extern char _ZNK7HashMapI6StringiE5findpERKS0_[];
++EXPORT_SYMBOL(_ZNK7HashMapI6StringiE5findpERKS0_);
++extern char _ZNK7HashMapI6StringiE6bucketERKS0_[];
++EXPORT_SYMBOL(_ZNK7HashMapI6StringiE6bucketERKS0_);
++extern char _ZNK7HashMapI6StringiE8nbucketsEv[];
++EXPORT_SYMBOL(_ZNK7HashMapI6StringiE8nbucketsEv);
++extern char _ZNK7HashMapI6StringiE9find_pairERKS0_[];
++EXPORT_SYMBOL(_ZNK7HashMapI6StringiE9find_pairERKS0_);
++extern char _ZNK7HashMapI6StringiEixERKS0_[];
++EXPORT_SYMBOL(_ZNK7HashMapI6StringiEixERKS0_);
++extern char _ZNK7HashMapI8IPFlowIDbE16dynamic_resizingEv[];
++EXPORT_SYMBOL(_ZNK7HashMapI8IPFlowIDbE16dynamic_resizingEv);
++extern char _ZNK7HashMapI8IPFlowIDbE3endEv[];
++EXPORT_SYMBOL(_ZNK7HashMapI8IPFlowIDbE3endEv);
++extern char _ZNK7HashMapI8IPFlowIDbE4findERKS0_[];
++EXPORT_SYMBOL(_ZNK7HashMapI8IPFlowIDbE4findERKS0_);
++extern char _ZNK7HashMapI8IPFlowIDbE4findERKS0_RKb[];
++EXPORT_SYMBOL(_ZNK7HashMapI8IPFlowIDbE4findERKS0_RKb);
++extern char _ZNK7HashMapI8IPFlowIDbE4sizeEv[];
++EXPORT_SYMBOL(_ZNK7HashMapI8IPFlowIDbE4sizeEv);
++extern char _ZNK7HashMapI8IPFlowIDbE5beginEv[];
++EXPORT_SYMBOL(_ZNK7HashMapI8IPFlowIDbE5beginEv);
++extern char _ZNK7HashMapI8IPFlowIDbE5emptyEv[];
++EXPORT_SYMBOL(_ZNK7HashMapI8IPFlowIDbE5emptyEv);
++extern char _ZNK7HashMapI8IPFlowIDbE5findpERKS0_[];
++EXPORT_SYMBOL(_ZNK7HashMapI8IPFlowIDbE5findpERKS0_);
++extern char _ZNK7HashMapI8IPFlowIDbE6bucketERKS0_[];
++EXPORT_SYMBOL(_ZNK7HashMapI8IPFlowIDbE6bucketERKS0_);
++extern char _ZNK7HashMapI8IPFlowIDbE8nbucketsEv[];
++EXPORT_SYMBOL(_ZNK7HashMapI8IPFlowIDbE8nbucketsEv);
++extern char _ZNK7HashMapI8IPFlowIDbE9find_pairERKS0_[];
++EXPORT_SYMBOL(_ZNK7HashMapI8IPFlowIDbE9find_pairERKS0_);
++extern char _ZNK7HashMapI8IPFlowIDbEixERKS0_[];
++EXPORT_SYMBOL(_ZNK7HashMapI8IPFlowIDbEixERKS0_);
++extern char _ZNK7HashMapI9IPAddressjE16dynamic_resizingEv[];
++EXPORT_SYMBOL(_ZNK7HashMapI9IPAddressjE16dynamic_resizingEv);
++extern char _ZNK7HashMapI9IPAddressjE3endEv[];
++EXPORT_SYMBOL(_ZNK7HashMapI9IPAddressjE3endEv);
++extern char _ZNK7HashMapI9IPAddressjE4findERKS0_[];
++EXPORT_SYMBOL(_ZNK7HashMapI9IPAddressjE4findERKS0_);
++extern char _ZNK7HashMapI9IPAddressjE4findERKS0_RKj[];
++EXPORT_SYMBOL(_ZNK7HashMapI9IPAddressjE4findERKS0_RKj);
++extern char _ZNK7HashMapI9IPAddressjE4sizeEv[];
++EXPORT_SYMBOL(_ZNK7HashMapI9IPAddressjE4sizeEv);
++extern char _ZNK7HashMapI9IPAddressjE5beginEv[];
++EXPORT_SYMBOL(_ZNK7HashMapI9IPAddressjE5beginEv);
++extern char _ZNK7HashMapI9IPAddressjE5emptyEv[];
++EXPORT_SYMBOL(_ZNK7HashMapI9IPAddressjE5emptyEv);
++extern char _ZNK7HashMapI9IPAddressjE5findpERKS0_[];
++EXPORT_SYMBOL(_ZNK7HashMapI9IPAddressjE5findpERKS0_);
++extern char _ZNK7HashMapI9IPAddressjE6bucketERKS0_[];
++EXPORT_SYMBOL(_ZNK7HashMapI9IPAddressjE6bucketERKS0_);
++extern char _ZNK7HashMapI9IPAddressjE8nbucketsEv[];
++EXPORT_SYMBOL(_ZNK7HashMapI9IPAddressjE8nbucketsEv);
++extern char _ZNK7HashMapI9IPAddressjE9find_pairERKS0_[];
++EXPORT_SYMBOL(_ZNK7HashMapI9IPAddressjE9find_pairERKS0_);
++extern char _ZNK7HashMapI9IPAddressjEixERKS0_[];
++EXPORT_SYMBOL(_ZNK7HashMapI9IPAddressjEixERKS0_);
++extern char _ZN9TimedSink10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN9TimedSink10initializeEP12ErrorHandler);
++extern char _ZN9TimedSink9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN9TimedSink9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN9TimedSink9run_timerEP5Timer[];
++EXPORT_SYMBOL(_ZN9TimedSink9run_timerEP5Timer);
++extern char _ZN9TimedSinkC1Ev[];
++EXPORT_SYMBOL(_ZN9TimedSinkC1Ev);
++extern char _ZN9TimedSinkC2Ev[];
++EXPORT_SYMBOL(_ZN9TimedSinkC2Ev);
++extern char _ZN9TimedSinkD0Ev[];
++EXPORT_SYMBOL(_ZN9TimedSinkD0Ev);
++extern char _ZN9TimedSinkD1Ev[];
++EXPORT_SYMBOL(_ZN9TimedSinkD1Ev);
++extern char _ZN9TimedSinkD2Ev[];
++EXPORT_SYMBOL(_ZN9TimedSinkD2Ev);
++extern char _ZNK9TimedSink10class_nameEv[];
++EXPORT_SYMBOL(_ZNK9TimedSink10class_nameEv);
++extern char _ZNK9TimedSink10port_countEv[];
++EXPORT_SYMBOL(_ZNK9TimedSink10port_countEv);
++extern char _ZNK9TimedSink10processingEv[];
++EXPORT_SYMBOL(_ZNK9TimedSink10processingEv);
++extern char _ZTV9TimedSink[];
++EXPORT_SYMBOL(_ZTV9TimedSink);
++extern char _ZN11TimedSource10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11TimedSource10initializeEP12ErrorHandler);
++extern char _ZN11TimedSource10read_paramEP7ElementPv[];
++EXPORT_SYMBOL(_ZN11TimedSource10read_paramEP7ElementPv);
++extern char _ZN11TimedSource12add_handlersEv[];
++EXPORT_SYMBOL(_ZN11TimedSource12add_handlersEv);
++extern char _ZN11TimedSource12change_paramERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11TimedSource12change_paramERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN11TimedSource7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN11TimedSource7cleanupEN7Element12CleanupStageE);
++extern char _ZN11TimedSource9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN11TimedSource9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN11TimedSource9run_timerEP5Timer[];
++EXPORT_SYMBOL(_ZN11TimedSource9run_timerEP5Timer);
++extern char _ZN11TimedSourceC1Ev[];
++EXPORT_SYMBOL(_ZN11TimedSourceC1Ev);
++extern char _ZN11TimedSourceC2Ev[];
++EXPORT_SYMBOL(_ZN11TimedSourceC2Ev);
++extern char _ZN11TimedSourceD0Ev[];
++EXPORT_SYMBOL(_ZN11TimedSourceD0Ev);
++extern char _ZN11TimedSourceD1Ev[];
++EXPORT_SYMBOL(_ZN11TimedSourceD1Ev);
++extern char _ZN11TimedSourceD2Ev[];
++EXPORT_SYMBOL(_ZN11TimedSourceD2Ev);
++extern char _ZNK11TimedSource10class_nameEv[];
++EXPORT_SYMBOL(_ZNK11TimedSource10class_nameEv);
++extern char _ZNK11TimedSource10port_countEv[];
++EXPORT_SYMBOL(_ZNK11TimedSource10port_countEv);
++extern char _ZNK11TimedSource10processingEv[];
++EXPORT_SYMBOL(_ZNK11TimedSource10processingEv);
++extern char _ZTV11TimedSource[];
++EXPORT_SYMBOL(_ZTV11TimedSource);
++extern char _ZN5Timer10unscheduleEv[];
++EXPORT_SYMBOL(_ZN5Timer10unscheduleEv);
++extern char _ZN5Timer11schedule_atERK9Timestamp[];
++EXPORT_SYMBOL(_ZN5Timer11schedule_atERK9Timestamp);
++extern char _ZN5Timer14schedule_afterERK9Timestamp[];
++EXPORT_SYMBOL(_ZN5Timer14schedule_afterERK9Timestamp);
++extern char _ZN5Timer8set_hookEP4Task[];
++EXPORT_SYMBOL(_ZN5Timer8set_hookEP4Task);
++extern char _ZN5Timer8set_hookEP7Element[];
++EXPORT_SYMBOL(_ZN5Timer8set_hookEP7Element);
++extern char _ZN5Timer8set_hookEPFvPS_PvES1_[];
++EXPORT_SYMBOL(_ZN5Timer8set_hookEPFvPS_PvES1_);
++extern char _ZN5TimerC1EP4Task[];
++EXPORT_SYMBOL(_ZN5TimerC1EP4Task);
++extern char _ZN5TimerC1EP7Element[];
++EXPORT_SYMBOL(_ZN5TimerC1EP7Element);
++extern char _ZN5TimerC1EPFvPS_PvES1_[];
++EXPORT_SYMBOL(_ZN5TimerC1EPFvPS_PvES1_);
++extern char _ZN5TimerC1Ev[];
++EXPORT_SYMBOL(_ZN5TimerC1Ev);
++extern char _ZN5TimerC2EP4Task[];
++EXPORT_SYMBOL(_ZN5TimerC2EP4Task);
++extern char _ZN5TimerC2EP7Element[];
++EXPORT_SYMBOL(_ZN5TimerC2EP7Element);
++extern char _ZN5TimerC2EPFvPS_PvES1_[];
++EXPORT_SYMBOL(_ZN5TimerC2EPFvPS_PvES1_);
++extern char _ZN5TimerC2Ev[];
++EXPORT_SYMBOL(_ZN5TimerC2Ev);
++extern char _ZNK9Timestamp7unparseEv[];
++EXPORT_SYMBOL(_ZNK9Timestamp7unparseEv);
++extern char _ZlsR11StringAccumRK7timeval[];
++EXPORT_SYMBOL(_ZlsR11StringAccumRK7timeval);
++extern char _ZlsR11StringAccumRK9Timestamp[];
++EXPORT_SYMBOL(_ZlsR11StringAccumRK9Timestamp);
++extern char _ZN8ToDevice10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8ToDevice10initializeEP12ErrorHandler);
++extern char _ZN8ToDevice12add_handlersEv[];
++EXPORT_SYMBOL(_ZN8ToDevice12add_handlersEv);
++extern char _ZN8ToDevice12queue_packetEP6Packet[];
++EXPORT_SYMBOL(_ZN8ToDevice12queue_packetEP6Packet);
++extern char _ZN8ToDevice12reset_countsEv[];
++EXPORT_SYMBOL(_ZN8ToDevice12reset_countsEv);
++extern char _ZN8ToDevice13change_deviceEP10net_device[];
++EXPORT_SYMBOL(_ZN8ToDevice13change_deviceEP10net_device);
++extern char _ZN8ToDevice14static_cleanupEv[];
++EXPORT_SYMBOL(_ZN8ToDevice14static_cleanupEv);
++extern char _ZN8ToDevice17static_initializeEv[];
++EXPORT_SYMBOL(_ZN8ToDevice17static_initializeEv);
++extern char _ZN8ToDevice7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN8ToDevice7cleanupEN7Element12CleanupStageE);
++extern char _ZN8ToDevice8run_taskEP4Task[];
++EXPORT_SYMBOL(_ZN8ToDevice8run_taskEP4Task);
++extern char _ZN8ToDevice9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8ToDevice9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN8ToDeviceC1Ev[];
++EXPORT_SYMBOL(_ZN8ToDeviceC1Ev);
++extern char _ZN8ToDeviceC2Ev[];
++EXPORT_SYMBOL(_ZN8ToDeviceC2Ev);
++extern char _ZN8ToDeviceD0Ev[];
++EXPORT_SYMBOL(_ZN8ToDeviceD0Ev);
++extern char _ZN8ToDeviceD1Ev[];
++EXPORT_SYMBOL(_ZN8ToDeviceD1Ev);
++extern char _ZN8ToDeviceD2Ev[];
++EXPORT_SYMBOL(_ZN8ToDeviceD2Ev);
++extern char _ZNK8ToDevice10class_nameEv[];
++EXPORT_SYMBOL(_ZNK8ToDevice10class_nameEv);
++extern char _ZNK8ToDevice10port_countEv[];
++EXPORT_SYMBOL(_ZNK8ToDevice10port_countEv);
++extern char _ZNK8ToDevice10processingEv[];
++EXPORT_SYMBOL(_ZNK8ToDevice10processingEv);
++extern char _ZNK8ToDevice15configure_phaseEv[];
++EXPORT_SYMBOL(_ZNK8ToDevice15configure_phaseEv);
++extern char _ZTV8ToDevice[];
++EXPORT_SYMBOL(_ZTV8ToDevice);
++extern char _ZN6ToHost10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN6ToHost10initializeEP12ErrorHandler);
++extern char _ZN6ToHost12add_handlersEv[];
++EXPORT_SYMBOL(_ZN6ToHost12add_handlersEv);
++extern char _ZN6ToHost12read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN6ToHost12read_handlerEP7ElementPv);
++extern char _ZN6ToHost14static_cleanupEv[];
++EXPORT_SYMBOL(_ZN6ToHost14static_cleanupEv);
++extern char _ZN6ToHost17static_initializeEv[];
++EXPORT_SYMBOL(_ZN6ToHost17static_initializeEv);
++extern char _ZN6ToHost4pushEiP6Packet[];
++EXPORT_SYMBOL(_ZN6ToHost4pushEiP6Packet);
++extern char _ZN6ToHost7cleanupEN7Element12CleanupStageE[];
++EXPORT_SYMBOL(_ZN6ToHost7cleanupEN7Element12CleanupStageE);
++extern char _ZN6ToHost9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN6ToHost9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN6ToHostC1Ev[];
++EXPORT_SYMBOL(_ZN6ToHostC1Ev);
++extern char _ZN6ToHostC2Ev[];
++EXPORT_SYMBOL(_ZN6ToHostC2Ev);
++extern char _ZN6ToHostD0Ev[];
++EXPORT_SYMBOL(_ZN6ToHostD0Ev);
++extern char _ZN6ToHostD1Ev[];
++EXPORT_SYMBOL(_ZN6ToHostD1Ev);
++extern char _ZN6ToHostD2Ev[];
++EXPORT_SYMBOL(_ZN6ToHostD2Ev);
++extern char _ZNK6ToHost10class_nameEv[];
++EXPORT_SYMBOL(_ZNK6ToHost10class_nameEv);
++extern char _ZNK6ToHost10port_countEv[];
++EXPORT_SYMBOL(_ZNK6ToHost10port_countEv);
++extern char _ZNK6ToHost10processingEv[];
++EXPORT_SYMBOL(_ZNK6ToHost10processingEv);
++extern char _ZNK6ToHost15configure_phaseEv[];
++EXPORT_SYMBOL(_ZNK6ToHost15configure_phaseEv);
++extern char _ZNK6ToHost5flagsEv[];
++EXPORT_SYMBOL(_ZNK6ToHost5flagsEv);
++extern char _ZTV6ToHost[];
++EXPORT_SYMBOL(_ZTV6ToHost);
++extern char _ZN14ToHostSniffersC1Ev[];
++EXPORT_SYMBOL(_ZN14ToHostSniffersC1Ev);
++extern char _ZN14ToHostSniffersC2Ev[];
++EXPORT_SYMBOL(_ZN14ToHostSniffersC2Ev);
++extern char _ZN14ToHostSniffersD0Ev[];
++EXPORT_SYMBOL(_ZN14ToHostSniffersD0Ev);
++extern char _ZN14ToHostSniffersD1Ev[];
++EXPORT_SYMBOL(_ZN14ToHostSniffersD1Ev);
++extern char _ZN14ToHostSniffersD2Ev[];
++EXPORT_SYMBOL(_ZN14ToHostSniffersD2Ev);
++extern char _ZNK14ToHostSniffers10class_nameEv[];
++EXPORT_SYMBOL(_ZNK14ToHostSniffers10class_nameEv);
++extern char _ZTV14ToHostSniffers[];
++EXPORT_SYMBOL(_ZTV14ToHostSniffers);
++extern char _ZN8Truncate13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN8Truncate13simple_actionEP6Packet);
++extern char _ZN8Truncate9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8Truncate9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN8TruncateC1Ev[];
++EXPORT_SYMBOL(_ZN8TruncateC1Ev);
++extern char _ZN8TruncateC2Ev[];
++EXPORT_SYMBOL(_ZN8TruncateC2Ev);
++extern char _ZN8TruncateD0Ev[];
++EXPORT_SYMBOL(_ZN8TruncateD0Ev);
++extern char _ZN8TruncateD1Ev[];
++EXPORT_SYMBOL(_ZN8TruncateD1Ev);
++extern char _ZN8TruncateD2Ev[];
++EXPORT_SYMBOL(_ZN8TruncateD2Ev);
++extern char _ZNK8Truncate10class_nameEv[];
++EXPORT_SYMBOL(_ZNK8Truncate10class_nameEv);
++extern char _ZNK8Truncate10port_countEv[];
++EXPORT_SYMBOL(_ZNK8Truncate10port_countEv);
++extern char _ZNK8Truncate10processingEv[];
++EXPORT_SYMBOL(_ZNK8Truncate10processingEv);
++extern char _ZTV8Truncate[];
++EXPORT_SYMBOL(_ZTV8Truncate);
++extern char _ZN10UDPIPEncap12add_handlersEv[];
++EXPORT_SYMBOL(_ZN10UDPIPEncap12add_handlersEv);
++extern char _ZN10UDPIPEncap12read_handlerEP7ElementPv[];
++EXPORT_SYMBOL(_ZN10UDPIPEncap12read_handlerEP7ElementPv);
++extern char _ZN10UDPIPEncap13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN10UDPIPEncap13simple_actionEP6Packet);
++extern char _ZN10UDPIPEncap9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN10UDPIPEncap9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN10UDPIPEncapC1Ev[];
++EXPORT_SYMBOL(_ZN10UDPIPEncapC1Ev);
++extern char _ZN10UDPIPEncapC2Ev[];
++EXPORT_SYMBOL(_ZN10UDPIPEncapC2Ev);
++extern char _ZN10UDPIPEncapD0Ev[];
++EXPORT_SYMBOL(_ZN10UDPIPEncapD0Ev);
++extern char _ZN10UDPIPEncapD1Ev[];
++EXPORT_SYMBOL(_ZN10UDPIPEncapD1Ev);
++extern char _ZN10UDPIPEncapD2Ev[];
++EXPORT_SYMBOL(_ZN10UDPIPEncapD2Ev);
++extern char _ZNK10UDPIPEncap10class_nameEv[];
++EXPORT_SYMBOL(_ZNK10UDPIPEncap10class_nameEv);
++extern char _ZNK10UDPIPEncap10port_countEv[];
++EXPORT_SYMBOL(_ZNK10UDPIPEncap10port_countEv);
++extern char _ZNK10UDPIPEncap10processingEv[];
++EXPORT_SYMBOL(_ZNK10UDPIPEncap10processingEv);
++extern char _ZNK10UDPIPEncap20can_live_reconfigureEv[];
++EXPORT_SYMBOL(_ZNK10UDPIPEncap20can_live_reconfigureEv);
++extern char _ZNK10UDPIPEncap5flagsEv[];
++EXPORT_SYMBOL(_ZNK10UDPIPEncap5flagsEv);
++extern char _ZTV10UDPIPEncap[];
++EXPORT_SYMBOL(_ZTV10UDPIPEncap);
++extern char _ZN7Unqueue10initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7Unqueue10initializeEP12ErrorHandler);
++extern char _ZN7Unqueue10read_paramEP7ElementPv[];
++EXPORT_SYMBOL(_ZN7Unqueue10read_paramEP7ElementPv);
++extern char _ZN7Unqueue11write_paramERK6StringP7ElementPvP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7Unqueue11write_paramERK6StringP7ElementPvP12ErrorHandler);
++extern char _ZN7Unqueue12add_handlersEv[];
++EXPORT_SYMBOL(_ZN7Unqueue12add_handlersEv);
++extern char _ZN7Unqueue8run_taskEP4Task[];
++EXPORT_SYMBOL(_ZN7Unqueue8run_taskEP4Task);
++extern char _ZN7Unqueue9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7Unqueue9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN7UnqueueC1Ev[];
++EXPORT_SYMBOL(_ZN7UnqueueC1Ev);
++extern char _ZN7UnqueueC2Ev[];
++EXPORT_SYMBOL(_ZN7UnqueueC2Ev);
++extern char _ZN7UnqueueD0Ev[];
++EXPORT_SYMBOL(_ZN7UnqueueD0Ev);
++extern char _ZN7UnqueueD1Ev[];
++EXPORT_SYMBOL(_ZN7UnqueueD1Ev);
++extern char _ZN7UnqueueD2Ev[];
++EXPORT_SYMBOL(_ZN7UnqueueD2Ev);
++extern char _ZNK7Unqueue10class_nameEv[];
++EXPORT_SYMBOL(_ZNK7Unqueue10class_nameEv);
++extern char _ZNK7Unqueue10port_countEv[];
++EXPORT_SYMBOL(_ZNK7Unqueue10port_countEv);
++extern char _ZNK7Unqueue10processingEv[];
++EXPORT_SYMBOL(_ZNK7Unqueue10processingEv);
++extern char _ZTV7Unqueue[];
++EXPORT_SYMBOL(_ZTV7Unqueue);
++extern char _ZN8Unqueue210initializeEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8Unqueue210initializeEP12ErrorHandler);
++extern char _ZN8Unqueue210read_paramEP7ElementPv[];
++EXPORT_SYMBOL(_ZN8Unqueue210read_paramEP7ElementPv);
++extern char _ZN8Unqueue212add_handlersEv[];
++EXPORT_SYMBOL(_ZN8Unqueue212add_handlersEv);
++extern char _ZN8Unqueue28run_taskEP4Task[];
++EXPORT_SYMBOL(_ZN8Unqueue28run_taskEP4Task);
++extern char _ZN8Unqueue29configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN8Unqueue29configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN8Unqueue2C1Ev[];
++EXPORT_SYMBOL(_ZN8Unqueue2C1Ev);
++extern char _ZN8Unqueue2C2Ev[];
++EXPORT_SYMBOL(_ZN8Unqueue2C2Ev);
++extern char _ZN8Unqueue2D0Ev[];
++EXPORT_SYMBOL(_ZN8Unqueue2D0Ev);
++extern char _ZN8Unqueue2D1Ev[];
++EXPORT_SYMBOL(_ZN8Unqueue2D1Ev);
++extern char _ZN8Unqueue2D2Ev[];
++EXPORT_SYMBOL(_ZN8Unqueue2D2Ev);
++extern char _ZNK8Unqueue210class_nameEv[];
++EXPORT_SYMBOL(_ZNK8Unqueue210class_nameEv);
++extern char _ZNK8Unqueue210port_countEv[];
++EXPORT_SYMBOL(_ZNK8Unqueue210port_countEv);
++extern char _ZNK8Unqueue210processingEv[];
++EXPORT_SYMBOL(_ZNK8Unqueue210processingEv);
++extern char _ZTV8Unqueue2[];
++EXPORT_SYMBOL(_ZTV8Unqueue2);
++extern char _ZN7Unstrip13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN7Unstrip13simple_actionEP6Packet);
++extern char _ZN7Unstrip9configureER6VectorI6StringEP12ErrorHandler[];
++EXPORT_SYMBOL(_ZN7Unstrip9configureER6VectorI6StringEP12ErrorHandler);
++extern char _ZN7UnstripC1Ej[];
++EXPORT_SYMBOL(_ZN7UnstripC1Ej);
++extern char _ZN7UnstripC2Ej[];
++EXPORT_SYMBOL(_ZN7UnstripC2Ej);
++extern char _ZN7UnstripD0Ev[];
++EXPORT_SYMBOL(_ZN7UnstripD0Ev);
++extern char _ZN7UnstripD1Ev[];
++EXPORT_SYMBOL(_ZN7UnstripD1Ev);
++extern char _ZN7UnstripD2Ev[];
++EXPORT_SYMBOL(_ZN7UnstripD2Ev);
++extern char _ZNK7Unstrip10class_nameEv[];
++EXPORT_SYMBOL(_ZNK7Unstrip10class_nameEv);
++extern char _ZNK7Unstrip10port_countEv[];
++EXPORT_SYMBOL(_ZNK7Unstrip10port_countEv);
++extern char _ZNK7Unstrip10processingEv[];
++EXPORT_SYMBOL(_ZNK7Unstrip10processingEv);
++extern char _ZTV7Unstrip[];
++EXPORT_SYMBOL(_ZTV7Unstrip);
++extern char _ZN15UnstripIPHeader13simple_actionEP6Packet[];
++EXPORT_SYMBOL(_ZN15UnstripIPHeader13simple_actionEP6Packet);
++extern char _ZN15UnstripIPHeaderC1Ev[];
++EXPORT_SYMBOL(_ZN15UnstripIPHeaderC1Ev);
++extern char _ZN15UnstripIPHeaderC2Ev[];
++EXPORT_SYMBOL(_ZN15UnstripIPHeaderC2Ev);
++extern char _ZN15UnstripIPHeaderD0Ev[];
++EXPORT_SYMBOL(_ZN15UnstripIPHeaderD0Ev);
++extern char _ZN15UnstripIPHeaderD1Ev[];
++EXPORT_SYMBOL(_ZN15UnstripIPHeaderD1Ev);
++extern char _ZN15UnstripIPHeaderD2Ev[];
++EXPORT_SYMBOL(_ZN15UnstripIPHeaderD2Ev);
++extern char _ZNK15UnstripIPHeader10class_nameEv[];
++EXPORT_SYMBOL(_ZNK15UnstripIPHeader10class_nameEv);
++extern char _ZNK15UnstripIPHeader10port_countEv[];
++EXPORT_SYMBOL(_ZNK15UnstripIPHeader10port_countEv);
++extern char _ZTV15UnstripIPHeader[];
++EXPORT_SYMBOL(_ZTV15UnstripIPHeader);
++extern char _Z19cp_expand_in_quotesRK6Stringi[];
++EXPORT_SYMBOL(_Z19cp_expand_in_quotesRK6Stringi);
++extern char _Z9cp_expandRK6StringR16VariableExpanderb[];
++EXPORT_SYMBOL(_Z9cp_expandRK6StringR16VariableExpanderb);
++extern char _ZN19VariableEnvironment6defineERK6StringS2_b[];
++EXPORT_SYMBOL(_ZN19VariableEnvironment6defineERK6StringS2_b);
++extern char _ZN19VariableEnvironment6expandERK6StringiiR11StringAccum[];
++EXPORT_SYMBOL(_ZN19VariableEnvironment6expandERK6StringiiR11StringAccum);
++extern char _ZN19VariableEnvironment9parent_ofEi[];
++EXPORT_SYMBOL(_ZN19VariableEnvironment9parent_ofEi);
++extern char _ZN19VariableEnvironmentC1EPS_[];
++EXPORT_SYMBOL(_ZN19VariableEnvironmentC1EPS_);
++extern char _ZN19VariableEnvironmentC2EPS_[];
++EXPORT_SYMBOL(_ZN19VariableEnvironmentC2EPS_);
++extern char _ZN19VariableEnvironmentD0Ev[];
++EXPORT_SYMBOL(_ZN19VariableEnvironmentD0Ev);
++extern char _ZN19VariableEnvironmentD1Ev[];
++EXPORT_SYMBOL(_ZN19VariableEnvironmentD1Ev);
++extern char _ZNK19VariableEnvironment5valueERK6StringRb[];
++EXPORT_SYMBOL(_ZNK19VariableEnvironment5valueERK6StringRb);
++extern char _ZTV19VariableEnvironment[];
++EXPORT_SYMBOL(_ZTV19VariableEnvironment);
++extern char _ZN6VectorIPvE4swapERS1_[];
++EXPORT_SYMBOL(_ZN6VectorIPvE4swapERS1_);
++extern char _ZN6VectorIPvE5eraseEPS0_S2_[];
++EXPORT_SYMBOL(_ZN6VectorIPvE5eraseEPS0_S2_);
++extern char _ZN6VectorIPvE6assignEiS0_[];
++EXPORT_SYMBOL(_ZN6VectorIPvE6assignEiS0_);
++extern char _ZN6VectorIPvE6insertEPS0_S0_[];
++EXPORT_SYMBOL(_ZN6VectorIPvE6insertEPS0_S0_);
++extern char _ZN6VectorIPvE6resizeEiS0_[];
++EXPORT_SYMBOL(_ZN6VectorIPvE6resizeEiS0_);
++extern char _ZN6VectorIPvE7reserveEi[];
++EXPORT_SYMBOL(_ZN6VectorIPvE7reserveEi);
++extern char _ZN6VectorIPvEC1ERKS1_[];
++EXPORT_SYMBOL(_ZN6VectorIPvEC1ERKS1_);
++extern char _ZN6VectorIPvEC2ERKS1_[];
++EXPORT_SYMBOL(_ZN6VectorIPvEC2ERKS1_);
++extern char _ZN6VectorIPvED1Ev[];
++EXPORT_SYMBOL(_ZN6VectorIPvED1Ev);
++extern char _ZN6VectorIPvED2Ev[];
++EXPORT_SYMBOL(_ZN6VectorIPvED2Ev);
++extern char _ZN6VectorIPvEaSERKS1_[];
++EXPORT_SYMBOL(_ZN6VectorIPvEaSERKS1_);
+diff -Nurb click-1.6.0/linuxmodule/modules.order click-1.6.0-27/linuxmodule/modules.order
+--- click-1.6.0/linuxmodule/modules.order      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/linuxmodule/modules.order   2009-02-11 16:55:09.000000000 -0500
+@@ -0,0 +1,2 @@
++kernel//d/click/click-1.6.0-27/linuxmodule/click.ko
++kernel//d/click/click-1.6.0-27/linuxmodule/proclikefs.ko
+diff -Nurb click-1.6.0/linuxmodule/proclikefs.c click-1.6.0-27/linuxmodule/proclikefs.c
+--- click-1.6.0/linuxmodule/proclikefs.c       2007-07-16 19:47:50.000000000 -0400
++++ click-1.6.0-27/linuxmodule/proclikefs.c    2009-02-11 16:49:44.000000000 -0500
+@@ -20,6 +20,8 @@
+ #undef CLICK_LINUXMODULE
+ #include <linux/version.h>
+ #include <linux/autoconf.h>
++#include <linux/list.h>
++
+ #ifndef EXPORT_SYMTAB
+ # define EXPORT_SYMTAB
+ #endif
+@@ -73,7 +75,7 @@
+     char name[1];
+ };
+-static LIST_HEAD(fs_list);
++static struct list_head fs_list;
+ static spinlock_t fslist_lock;
+ extern spinlock_t inode_lock;
+ extern spinlock_t sb_lock;
+@@ -357,7 +359,7 @@
+       fo->unlocked_ioctl = (void *) return_EIO;
+       fo->compat_ioctl = (void *) return_EIO;
+       fo->aio_fsync = (void *) return_EIO;
+-      fo->sendfile = (void *) return_EIO;
++      //fo->sendfile = (void *) return_EIO;
+       fo->check_flags = (void *) return_EIO;
+       fo->flock = (void *) return_EIO;
+ #endif
+@@ -533,10 +535,12 @@
+ int
+ init_module(void)
+ {
+-    proclikefs_null_super_operations.read_inode = proclikefs_read_inode;
++    //proclikefs_null_super_operations.read_inode = proclikefs_read_inode;
+     proclikefs_null_super_operations.put_super = proclikefs_put_super;
+     proclikefs_null_root_inode_operations.lookup = proclikefs_null_root_lookup;
+     spin_lock_init(&fslist_lock);
++    INIT_LIST_HEAD(&fs_list);
++    printk (KERN_CRIT "Initializing module\n");
+     return 0;
+ }
+diff -Nurb click-1.6.0/linuxmodule/proclikefs.c.orig click-1.6.0-27/linuxmodule/proclikefs.c.orig
+--- click-1.6.0/linuxmodule/proclikefs.c.orig  1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/linuxmodule/proclikefs.c.orig       2007-07-16 19:47:50.000000000 -0400
+@@ -0,0 +1,567 @@
++/* -*- c-basic-offset: 4 -*- */
++/*
++ * proclikefs.c -- /proc-like file system infrastructure; allow file systems
++ * to be unmounted even while active
++ * Eddie Kohler
++ *
++ * Copyright (c) 2002-2003 International Computer Science Institute
++ * Copyright (c) 2005 Regents of the University of California
++ *
++ * This source code is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the Free
++ * Software Foundation, version 2.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
++ * more details.
++ */
++
++#undef CLICK_LINUXMODULE
++#include <linux/version.h>
++#include <linux/autoconf.h>
++#ifndef EXPORT_SYMTAB
++# define EXPORT_SYMTAB
++#endif
++#ifdef CONFIG_MODVERSIONS
++# define MODVERSIONS
++# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
++#  include <linux/modversions.h>
++# endif
++#endif
++#include <linux/module.h>
++#include "proclikefs.h"
++#include <linux/string.h>
++#include <linux/slab.h>
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
++# include <linux/locks.h>
++#endif
++#include <linux/file.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
++# include <linux/namei.h>
++#endif
++
++#ifndef MOD_DEC_USE_COUNT
++# define MOD_DEC_USE_COUNT    module_put(THIS_MODULE)
++#endif
++
++
++#if 0
++# define DEBUG(args...) do { printk("<1>proclikefs: " args); printk("\n"); } while (0)
++#else
++# define DEBUG(args...) /* nada */
++#endif
++
++struct proclikefs_file_operations {
++    struct file_operations pfo_op;
++    struct proclikefs_file_operations *pfo_next;
++};
++
++struct proclikefs_inode_operations {
++    struct inode_operations pio_op;
++    struct proclikefs_inode_operations *pio_next;
++};
++
++struct proclikefs_file_system {
++    struct file_system_type fs;
++    struct list_head fs_list;
++    atomic_t nsuper;
++    int live;
++    spinlock_t lock;
++    struct proclikefs_file_operations *pfs_pfo;
++    struct proclikefs_inode_operations *pfs_pio;
++    char name[1];
++};
++
++static LIST_HEAD(fs_list);
++static spinlock_t fslist_lock;
++extern spinlock_t inode_lock;
++extern spinlock_t sb_lock;
++
++static struct super_operations proclikefs_null_super_operations;
++static struct inode_operations proclikefs_null_root_inode_operations;
++
++EXPORT_SYMBOL(proclikefs_register_filesystem);
++EXPORT_SYMBOL(proclikefs_reinitialize_supers);
++EXPORT_SYMBOL(proclikefs_unregister_filesystem);
++EXPORT_SYMBOL(proclikefs_read_super);
++EXPORT_SYMBOL(proclikefs_put_super);
++EXPORT_SYMBOL(proclikefs_new_file_operations);
++EXPORT_SYMBOL(proclikefs_new_inode_operations);
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
++static struct super_block *
++proclikefs_null_read_super(struct super_block *sb, void *data, int silent)
++{
++    DEBUG("null_read_super");
++    sb->s_dev = 0;
++    return 0;
++}
++#endif
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 16)
++static struct dentry *
++proclikefs_null_root_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *namei)
++{
++    return (struct dentry *)(ERR_PTR(-ENOENT));
++}
++#else
++static struct dentry *
++proclikefs_null_root_lookup(struct inode *dir, struct dentry *dentry)
++{
++    return (struct dentry *)(ERR_PTR(-ENOENT));
++}
++#endif
++
++struct proclikefs_file_system *
++proclikefs_register_filesystem(const char *name, int fs_flags,
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
++      int (*get_sb) (struct file_system_type *, int, const char *, void *, struct vfsmount *)
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
++      struct super_block *(*get_sb) (struct file_system_type *, int, const char *, void *)
++#else
++      struct super_block *(*read_super) (struct super_block *, void *, int)
++#endif
++      )
++{
++    struct proclikefs_file_system *newfs = 0;
++    struct list_head *next;
++    int newfs_is_new = 0;
++    
++    if (!name)
++      return 0;
++    
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
++    if (!try_module_get(THIS_MODULE)) {
++      printk("<1>proclikefs: error using module\n");
++      return 0;
++    }
++#else 
++    MOD_INC_USE_COUNT;
++#endif
++
++    spin_lock(&fslist_lock);
++    
++    for (next = fs_list.next; next != &fs_list; next = next->next) {
++      newfs = list_entry(next, struct proclikefs_file_system, fs_list);
++      if (strcmp(name, newfs->name) == 0) {
++          if (newfs->live > 0) { /* active filesystem with that name */
++              spin_unlock(&fslist_lock);
++              MOD_DEC_USE_COUNT;
++              return 0;
++          } else
++              break;
++      }
++    }
++
++    if (!newfs) {
++      newfs = kmalloc(sizeof(struct proclikefs_file_system) + strlen(name), GFP_ATOMIC);
++      if (!newfs) {           /* out of memory */
++          spin_unlock(&fslist_lock);
++          MOD_DEC_USE_COUNT;
++          return 0;
++      }
++      newfs->pfs_pfo = 0;
++      newfs->pfs_pio = 0;
++      list_add(&newfs->fs_list, &fs_list);
++      strcpy(newfs->name, name);
++      spin_lock_init(&newfs->lock);
++      atomic_set(&newfs->nsuper, 0);
++      newfs->fs.name = newfs->name;
++      newfs->fs.next = 0;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0)
++      newfs->fs.owner = THIS_MODULE;
++#endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 10)
++      INIT_LIST_HEAD(&newfs->fs.fs_supers);
++#endif
++      newfs_is_new = 1;
++    }
++
++    newfs->fs.fs_flags = fs_flags;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
++    newfs->fs.get_sb = get_sb;
++    newfs->fs.kill_sb = kill_anon_super;
++#else
++    newfs->fs.read_super = read_super;
++#endif
++    newfs->live = 1;
++    DEBUG("pfs[%p]: created filesystem %s", newfs, name);
++
++    if (newfs_is_new) {
++      int err = register_filesystem(&newfs->fs);
++      if (err != 0)
++          printk("<1>proclikefs: error %d while initializing pfs[%p] (%s)\n", -err, newfs, name);
++    }
++
++    spin_unlock(&fslist_lock);
++    return newfs;
++}
++
++void
++proclikefs_reinitialize_supers(struct proclikefs_file_system *pfs,
++                             void (*reread_super) (struct super_block *))
++{
++    struct super_block *sb;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 10)
++      struct list_head *p;
++#endif
++    spin_lock(&fslist_lock);
++    /* transfer superblocks */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 10)
++    spin_lock(&sb_lock);
++    for (p = pfs->fs.fs_supers.next; p != &pfs->fs.fs_supers; p = p->next) {
++      sb = list_entry(p, struct super_block, s_instances);
++      if (sb->s_type == &pfs->fs)
++          (*reread_super)(sb);
++      else
++          printk("<1>proclikefs: confusion\n");
++    }
++    spin_unlock(&sb_lock);
++#else
++    for (sb = sb_entry(super_blocks.next); sb != sb_entry(&super_blocks); 
++       sb = sb_entry(sb->s_list.next))
++      if (sb->s_type == &pfs->fs)
++          (*reread_super)(sb);
++#endif
++    spin_unlock(&fslist_lock);
++}
++
++static void
++proclikefs_kill_super(struct super_block *sb, struct file_operations *dummy)
++{
++    struct dentry *dentry_tree;
++    struct list_head *p;
++
++    DEBUG("killing files");
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 16)
++    file_list_lock();
++    list_for_each(p, &sb->s_files) {
++      struct file *filp = list_entry(p, struct file, f_u.fu_list);
++      filp->f_op = dummy;
++    }
++    file_list_unlock();
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0)
++    file_list_lock();
++    for (p = sb->s_files.next; p != &sb->s_files; p = p->next) {
++      struct file *filp = list_entry(p, struct file, f_list);
++      filp->f_op = dummy;
++    }
++    file_list_unlock();
++#else
++    (void) dummy;
++    (void) p;
++#endif
++
++    lock_super(sb);
++
++    sb->s_op = &proclikefs_null_super_operations;
++    /* will not create new dentries any more */
++
++    /* clear out dentries, starting from the root */
++    /* Develop a linked list corresponding to depth-first search, through
++       the d_fsdata fields. */
++    /* XXX locking? */
++    
++    DEBUG("killing dentries");
++    dentry_tree = sb->s_root;
++    if (dentry_tree) {
++      /* Do not d_drop(root) */
++      dentry_tree->d_fsdata = 0;
++    }
++    while (dentry_tree) {
++      struct list_head *next;
++      struct dentry *active = dentry_tree;
++      /* Process this dentry, move to next */
++      active->d_op = 0;
++      dentry_tree = (struct dentry *)active->d_fsdata;
++      /* Prepend children to dentry_tree */
++      next = active->d_subdirs.next;
++      while (next != &active->d_subdirs) {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 16)
++          struct dentry *child = list_entry(next, struct dentry, d_u.d_child);
++#else
++          struct dentry *child = list_entry(next, struct dentry, d_child);
++#endif
++          next = next->next;
++          d_drop(child);
++          child->d_fsdata = (void *)dentry_tree;
++          dentry_tree = child;
++      }
++    }
++
++    /* But the root inode can't be a dead inode */
++    sb->s_root->d_inode->i_op = &proclikefs_null_root_inode_operations;
++
++    unlock_super(sb);
++    DEBUG("done killing super");
++}
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 16)
++static int bad_follow_link(struct dentry *dent, struct nameidata *nd)
++{
++# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
++      nd_set_link(nd, ERR_PTR(-EIO));
++      return 0;
++# else
++      return vfs_follow_link(nd, ERR_PTR(-EIO));
++# endif
++}
++#endif
++
++static int return_EIO(void)
++{
++      return -EIO;
++}
++
++void
++proclikefs_unregister_filesystem(struct proclikefs_file_system *pfs)
++{
++    struct super_block *sb;
++    struct file *filp;
++    struct list_head *p;
++    struct proclikefs_file_operations *pfo;
++    struct proclikefs_inode_operations *pio;
++    
++    if (!pfs)
++      return;
++
++    DEBUG("unregister_filesystem entry");
++    spin_lock(&fslist_lock);
++
++    /* clear out file operations */
++    for (pfo = pfs->pfs_pfo; pfo; pfo = pfo->pfo_next) {
++      struct file_operations *fo = &pfo->pfo_op;
++      fo->llseek = (void *) return_EIO;
++      fo->read = (void *) return_EIO;
++      fo->write = (void *) return_EIO;
++      fo->readdir = (void *) return_EIO;
++      fo->poll = (void *) return_EIO;
++      fo->ioctl = (void *) return_EIO;
++      fo->mmap = (void *) return_EIO;
++      fo->open = (void *) return_EIO;
++      fo->flush = (void *) return_EIO;
++      fo->release = (void *) return_EIO;
++      fo->fsync = (void *) return_EIO;
++      fo->fasync = (void *) return_EIO;
++      fo->lock = (void *) return_EIO;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19)
++      fo->readv = (void *) return_EIO;
++      fo->writev = (void *) return_EIO;
++#endif
++      fo->sendpage = (void *) return_EIO;
++      fo->get_unmapped_area = (void *) return_EIO;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
++      fo->aio_read = (void *) return_EIO;
++      fo->aio_write = (void *) return_EIO;
++      fo->unlocked_ioctl = (void *) return_EIO;
++      fo->compat_ioctl = (void *) return_EIO;
++      fo->aio_fsync = (void *) return_EIO;
++      fo->sendfile = (void *) return_EIO;
++      fo->check_flags = (void *) return_EIO;
++      fo->flock = (void *) return_EIO;
++#endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
++      fo->dir_notify = (void *) return_EIO;
++      fo->splice_write = (void *) return_EIO;
++      fo->splice_read = (void *) return_EIO;
++#endif
++    }
++
++    for (pio = pfs->pfs_pio; pio; pio = pio->pio_next) {
++      struct inode_operations *io = &pio->pio_op;
++      io->create = (void *) return_EIO;
++      io->lookup = (void *) return_EIO;
++      io->link = (void *) return_EIO;
++      io->unlink = (void *) return_EIO;
++      io->symlink = (void *) return_EIO;
++      io->mkdir = (void *) return_EIO;
++      io->rmdir = (void *) return_EIO;
++      io->mknod = (void *) return_EIO;
++      io->rename = (void *) return_EIO;
++      io->readlink = (void *) return_EIO;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 16)
++      io->follow_link = 0;
++#else
++      io->follow_link = bad_follow_link;
++#endif
++      io->truncate = (void *) return_EIO;
++      io->permission = (void *) return_EIO;
++      io->setattr = (void *) return_EIO;
++      io->getattr = (void *) return_EIO;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 20)
++      io->setxattr = (void *) return_EIO;
++      io->getxattr = (void *) return_EIO;
++      io->listxattr = (void *) return_EIO;
++      io->removexattr = (void *) return_EIO;
++#endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
++      io->put_link = (void *) return_EIO;
++#else
++      io->revalidate = (void *) return_EIO;
++#endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
++      io->truncate_range = (void *) return_EIO;
++#endif
++    }
++    
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0)
++    /* file operations cleared out superblock by superblock, below */
++    (void) filp;
++#else
++    /* clear out file operations */
++    /* inuse_filps is protected by the single kernel lock */
++    /* XXX locking? */
++    for (filp = inuse_filps; filp; filp = filp->f_next) {
++      struct dentry *dentry = filp->f_dentry;
++      if (!dentry)
++          continue;
++      inode = dentry->d_inode;
++      if (!inode || !inode->i_sb || inode->i_sb->s_type != &pfs->fs)
++          continue;
++      filp->f_op = &pfs->pfs_pfo->pfo_op;
++    }
++#endif
++    
++    spin_lock(&pfs->lock);
++
++    /* clear out superblock operations */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 10)
++    DEBUG("clearing superblocks");
++    spin_lock(&sb_lock);
++    for (p = pfs->fs.fs_supers.next; p != &pfs->fs.fs_supers; p = p->next) {
++      sb = list_entry(p, struct super_block, s_instances);
++      proclikefs_kill_super(sb, &pfs->pfs_pfo->pfo_op);
++    }
++    spin_unlock(&sb_lock);
++#else
++    for (sb = sb_entry(super_blocks.next); sb != sb_entry(&super_blocks); 
++       sb = sb_entry(sb->s_list.next)) {
++      if (sb->s_type != &pfs->fs)
++          continue;
++      proclikefs_kill_super(sb, &pfs->pfs_pfo->pfo_op);
++    }
++    (void) p;
++#endif
++
++    pfs->live = 0;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
++    pfs->fs.read_super = proclikefs_null_read_super;
++#endif
++    MOD_DEC_USE_COUNT;
++
++    spin_unlock(&pfs->lock);
++    spin_unlock(&fslist_lock);
++}
++
++void
++proclikefs_read_super(struct super_block *sb)
++{
++    struct proclikefs_file_system *pfs = (struct proclikefs_file_system *) (sb->s_type);
++    atomic_inc(&pfs->nsuper);
++    DEBUG("pfs[%p]: read_super for %s", pfs, pfs->fs.name);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
++    if (!try_module_get(THIS_MODULE))
++      printk("<1>proclikefs: error using module\n");
++#else 
++    MOD_INC_USE_COUNT;
++#endif
++}
++
++void
++proclikefs_put_super(struct super_block *sb)
++{
++    struct proclikefs_file_system *pfs = (struct proclikefs_file_system *) (sb->s_type);
++    atomic_dec(&pfs->nsuper);
++    DEBUG("pfs[%p]: put_super for %s", pfs, pfs->fs.name);
++    MOD_DEC_USE_COUNT;
++    spin_lock(&fslist_lock);
++    if (!pfs->live && atomic_read(&pfs->nsuper) == 0) {
++      struct proclikefs_file_operations *pfo;
++      struct proclikefs_inode_operations *pio;
++      
++      list_del(&pfs->fs_list);
++      unregister_filesystem(&pfs->fs);
++      while ((pfo = pfs->pfs_pfo)) {
++          pfs->pfs_pfo = pfo->pfo_next;
++          kfree(pfo);
++      }
++      while ((pio = pfs->pfs_pio)) {
++          pfs->pfs_pio = pio->pio_next;
++          kfree(pio);
++      }
++      kfree(pfs);
++    }
++    spin_unlock(&fslist_lock);
++}
++
++struct file_operations *
++proclikefs_new_file_operations(struct proclikefs_file_system *pfs)
++{
++    struct proclikefs_file_operations *pfo = kmalloc(sizeof(struct proclikefs_file_operations), GFP_ATOMIC);
++    
++    if (pfo) {
++      spin_lock(&fslist_lock);
++      pfo->pfo_next = pfs->pfs_pfo;
++      pfs->pfs_pfo = pfo;
++      spin_unlock(&fslist_lock);
++      memset(&pfo->pfo_op, 0, sizeof(struct file_operations));
++    }
++    return &pfo->pfo_op;
++}
++
++struct inode_operations *
++proclikefs_new_inode_operations(struct proclikefs_file_system *pfs)
++{
++    struct proclikefs_inode_operations *pio = kmalloc(sizeof(struct proclikefs_inode_operations), GFP_ATOMIC);
++    
++    if (pio) {
++      spin_lock(&fslist_lock);
++      pio->pio_next = pfs->pfs_pio;
++      pfs->pfs_pio = pio;
++      spin_unlock(&fslist_lock);
++      memset(&pio->pio_op, 0, sizeof(struct inode_operations));
++    }
++    return &pio->pio_op;
++}
++
++void
++proclikefs_read_inode(struct inode *inode)
++{
++}
++
++int
++init_module(void)
++{
++    proclikefs_null_super_operations.read_inode = proclikefs_read_inode;
++    proclikefs_null_super_operations.put_super = proclikefs_put_super;
++    proclikefs_null_root_inode_operations.lookup = proclikefs_null_root_lookup;
++    spin_lock_init(&fslist_lock);
++    return 0;
++}
++
++void
++cleanup_module(void)
++{
++    struct list_head *next;
++    spin_lock(&fslist_lock);
++    for (next = fs_list.next; next != &fs_list; ) {
++      struct proclikefs_file_system *pfs = list_entry(next, struct proclikefs_file_system, fs_list);
++      next = next->next;
++      if (pfs->live || atomic_read(&pfs->nsuper) != 0)
++          printk("<1>proclikefs: unregistering active FS %s, prepare to die\n", pfs->name);       
++      unregister_filesystem(&pfs->fs);
++      kfree(pfs);
++    }
++    spin_unlock(&fslist_lock);
++}
++
++#ifdef MODULE_AUTHOR
++MODULE_AUTHOR("Eddie Kohler <kohler@cs.ucla.edu>");
++#endif
++#ifdef MODULE_DESCRIPTION
++MODULE_DESCRIPTION("Proclikefs: allow module unload of mounted filesystems");
++#endif
++#ifdef MODULE_LICENSE
++MODULE_LICENSE("GPL");
++#endif
+diff -Nurb click-1.6.0/linuxmodule/read-pmc.c click-1.6.0-27/linuxmodule/read-pmc.c
+--- click-1.6.0/linuxmodule/read-pmc.c 2007-07-16 19:47:50.000000000 -0400
++++ click-1.6.0-27/linuxmodule/read-pmc.c      2009-02-11 16:51:50.000000000 -0500
+@@ -21,6 +21,7 @@
+ #include <asm/system.h>
++
+ #define P6MSR_CTRSEL0 0x186   /* MSR for programming CTR0 on P6 */
+ #define P6MSR_CTRSEL1 0x187   /* MSR for programming CTR0 on P6 */
+ #define P6MSR_CTR0 0xc1       /* Ctr0 on P6 */
+diff -Nurb click-1.6.0/linuxmodule/read-pmc.c.orig click-1.6.0-27/linuxmodule/read-pmc.c.orig
+--- click-1.6.0/linuxmodule/read-pmc.c.orig    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/linuxmodule/read-pmc.c.orig 2007-07-16 19:47:50.000000000 -0400
+@@ -0,0 +1,62 @@
++/*
++ * Read and clear the PPro performance counters.
++ * Can't be compiled in C++?
++ */
++
++  /*
++   * Event number.
++   * 0x48 Number of cycles while a DCU mis is outstanding.
++   * 0x80 instruction fetches.
++   * 0x81 instruction fetch misses.
++   * 0x85 ITLB misses.
++   * 0x86 cycles of instruction fetch stall.
++   * 0xC8 interrupts.
++   * 0x13 floating point divides (only counter 1).
++   * 0x79 cycles in which the cpu is NOT halted.
++   */
++
++#include <click/config.h>
++#include <linux/types.h>
++#include <linux/kernel.h>
++#include <asm/system.h>
++
++
++#define P6MSR_CTRSEL0 0x186   /* MSR for programming CTR0 on P6 */
++#define P6MSR_CTRSEL1 0x187   /* MSR for programming CTR0 on P6 */
++#define P6MSR_CTR0 0xc1       /* Ctr0 on P6 */
++#define P6MSR_CTR1 0xc2       /* Ctr1 on P6 */
++
++typedef unsigned long long u_quad_t;
++typedef u_quad_t pctrval;
++
++#define rdmsr(msr)                                            \
++({                                                            \
++  pctrval v;                                                  \
++  __asm __volatile (".byte 0xf, 0x32" : "=A" (v) : "c" (msr));        \
++  v;                                                          \
++})
++
++#define wrmsr(msr, v) \
++     __asm __volatile (".byte 0xf, 0x30" :: "A" ((u_quad_t) (v)), "c" (msr));
++
++/* Read the performance counters (Pentium Pro only) */
++#define rdpmc(ctr)                            \
++({                                            \
++  pctrval v;                                  \
++  __asm __volatile (".byte 0xf, 0x33\n"               \
++                  "\tandl $0xff, %%edx"       \
++                  : "=A" (v) : "c" (ctr));    \
++  v;                                          \
++})
++
++void
++click_cycle_counter(int which, unsigned int *fnp, unsigned long long *valp)
++{
++#ifdef __i386__
++  *fnp = rdmsr(P6MSR_CTRSEL0 + which);
++  *valp = rdpmc(which);
++  wrmsr(P6MSR_CTR0+which, 0);
++#else
++  printk("<1>click_cycle_counter: not i386\n");
++#endif
++}
+diff -Nurb click-1.6.0/linuxmodule/sched.cc click-1.6.0-27/linuxmodule/sched.cc
+--- click-1.6.0/linuxmodule/sched.cc   2007-08-28 19:01:58.000000000 -0400
++++ click-1.6.0-27/linuxmodule/sched.cc        2009-01-26 16:55:57.000000000 -0500
+@@ -228,7 +228,7 @@
+   click_thread_priority = priority;
+   if (click_thread_pids)
+     for (int i = 0; i < click_thread_pids->size(); i++) {
+-      struct task_struct *task = find_task_by_pid((*click_thread_pids)[i]);
++      struct task_struct *task = find_task_by_vpid((*click_thread_pids)[i]);
+       if (task)
+       TASK_PRIO(task) = priority;
+     }
+@@ -429,7 +429,7 @@
+     SOFT_SPIN_LOCK(&click_thread_lock);
+     for (int i = 0; i < click_thread_pids->size(); i++) {
+       printk("<1>click:   router thread pid %d\n", (*click_thread_pids)[i]);
+-      struct task_struct *ct = find_task_by_pid((*click_thread_pids)[i]);
++      struct task_struct *ct = find_task_by_vpid((*click_thread_pids)[i]);
+       if (ct)
+         printk("<1>click:   state %d, EIP %08x\n", (int) ct->state, KSTK_EIP(ct));
+     }
+diff -Nurb click-1.6.0/linuxmodule/sched.cc.orig click-1.6.0-27/linuxmodule/sched.cc.orig
+--- click-1.6.0/linuxmodule/sched.cc.orig      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/linuxmodule/sched.cc.orig   2007-08-28 19:01:58.000000000 -0400
+@@ -0,0 +1,446 @@
++// -*- c-basic-offset: 4 -*-
++/*
++ * sched.cc -- kernel scheduler thread for click
++ * Benjie Chen, Eddie Kohler
++ *
++ * Copyright (c) 1999-2000 Massachusetts Institute of Technology
++ * Copyright (c) 2002-2003 International Computer Science Institute
++ * Copyright (c) 2007 Regents of the University of California
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, subject to the conditions
++ * listed in the Click LICENSE file. These conditions include: you must
++ * preserve this copyright notice, and you cannot mention the copyright
++ * holders in advertising related to the Software without their permission.
++ * The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
++ * notice is a summary of the Click LICENSE file; the license in that file is
++ * legally binding.
++ */
++
++#define CLICK_SCHED_DEBUG
++#include <click/config.h>
++#include "modulepriv.hh"
++
++#include <click/routerthread.hh>
++#include <click/glue.hh>
++#include <click/router.hh>
++#include <click/straccum.hh>
++#include <click/master.hh>
++#include <click/confparse.hh>
++
++#include <click/cxxprotect.h>
++CLICK_CXX_PROTECT
++#include <linux/sched.h>
++#include <linux/timer.h>
++#include <linux/interrupt.h>
++#include <linux/netdevice.h>
++#include <linux/etherdevice.h>
++#include <asm/bitops.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
++# include <linux/cpumask.h>
++#endif
++CLICK_CXX_UNPROTECT
++#include <click/cxxunprotect.h>
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
++# define MIN_PRIO     MAX_RT_PRIO
++/* MAX_PRIO already defined */
++# define PRIO2NICE(p) ((p) - MIN_PRIO - 20)
++# define NICE2PRIO(n) (MIN_PRIO + (n) + 20)
++# define DEF_PRIO     NICE2PRIO(0)
++# define TASK_PRIO(t) ((t)->static_prio)
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0)
++# define MIN_PRIO     (-20)
++# define MAX_PRIO     20
++# define PRIO2NICE(p) (p)
++# define NICE2PRIO(n) (n)
++# define DEF_PRIO     DEF_NICE
++# define TASK_PRIO(t) ((t)->nice)
++#else
++# define MIN_PRIO     1
++# define MAX_PRIO     (2 * DEF_PRIORITY)
++# define PRIO2NICE(p) (DEF_PRIORITY - (p))
++# define NICE2PRIO(n) (DEF_PRIORITY - (n))
++# define DEF_PRIO     DEF_PRIORITY
++# define TASK_PRIO(t) ((t)->priority)
++#endif
++
++#define SOFT_SPIN_LOCK(l)     do { /*MDEBUG("soft_lock %s", #l);*/ soft_spin_lock((l)); } while (0)
++#define SPIN_UNLOCK(l)                do { /*MDEBUG("unlock %s", #l);*/ spin_unlock((l)); } while (0)
++
++static spinlock_t click_thread_lock;
++static int click_thread_priority = DEF_PRIO;
++static Vector<int> *click_thread_pids;
++static Router *placeholder_router;
++
++#ifdef HAVE_ADAPTIVE_SCHEDULER
++static unsigned min_click_frac = 5, max_click_frac = 800;
++#endif
++
++static void
++soft_spin_lock(spinlock_t *l)
++{
++    while (!spin_trylock(l))
++      schedule();
++}
++
++static int
++click_sched(void *thunk)
++{
++#ifdef LINUX_2_2
++  // In Linux 2.2, daemonize() doesn't do exit_files.
++  exit_files(current);
++  current->files = init_task.files;
++  if (current->files)
++    atomic_inc(&current->files->count);
++#endif
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
++  daemonize("kclick");
++#else
++  daemonize();
++  strcpy(current->comm, "kclick");
++#endif
++  
++  TASK_PRIO(current) = click_thread_priority;
++
++  RouterThread *rt = (RouterThread *)thunk;
++#ifdef HAVE_ADAPTIVE_SCHEDULER
++  rt->set_cpu_share(min_click_frac, max_click_frac);
++#endif
++
++#if CONFIG_SMP
++  int mycpu = click_parm(CLICKPARM_CPU);
++  if (mycpu >= 0) {
++      mycpu += rt->thread_id();
++# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
++      if (mycpu < num_possible_cpus() && cpu_online(mycpu))
++        set_cpus_allowed(current, cpumask_of_cpu(mycpu));
++      else
++        printk("<1>click: warning: cpu %d for thread %d offline\n", mycpu, rt->thread_id());
++# elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 21)
++      if (mycpu < smp_num_cpus && (cpu_online_map & (1UL << cpu_logical_map(mycpu))))
++        set_cpus_allowed(current, 1UL << cpu_logical_map(mycpu));
++      else
++        printk("<1>click: warning: cpu %d for thread %d offline\n", mycpu, rt->thread_id());
++# endif
++  }
++#endif
++  
++  printk("<1>click: starting router thread pid %d (%p)\n", current->pid, rt);
++
++  // add pid to thread list
++  SOFT_SPIN_LOCK(&click_thread_lock);
++  if (click_thread_pids)
++    click_thread_pids->push_back(current->pid);
++  SPIN_UNLOCK(&click_thread_lock);
++
++  // driver loop; does not return for a while
++  rt->driver();
++
++  // release master (preserved in click_init_sched)
++  click_master->unuse();
++
++  // remove pid from thread list
++  SOFT_SPIN_LOCK(&click_thread_lock);
++  if (click_thread_pids)
++    for (int i = 0; i < click_thread_pids->size(); i++) {
++      if ((*click_thread_pids)[i] == current->pid) {
++      (*click_thread_pids)[i] = click_thread_pids->back();
++      click_thread_pids->pop_back();
++      break;
++      }
++    }
++  printk("<1>click: stopping router thread pid %d\n", current->pid);
++  SPIN_UNLOCK(&click_thread_lock);
++  
++  return 0;
++}
++
++static int
++kill_router_threads()
++{
++    delete placeholder_router;
++    if (click_router)
++      click_router->set_runcount(Router::STOP_RUNCOUNT);
++  
++    // wait up to 5 seconds for routers to exit
++    unsigned long out_jiffies = jiffies + 5 * HZ;
++    int num_threads;
++    do {
++      MDEBUG("click_sched: waiting for threads to die");
++      SOFT_SPIN_LOCK(&click_thread_lock);
++      num_threads = click_thread_pids->size();
++      SPIN_UNLOCK(&click_thread_lock);
++      if (num_threads > 0)
++          schedule();
++    } while (num_threads > 0 && jiffies < out_jiffies);
++
++  if (num_threads > 0) {
++    printk("<1>click: current router threads refuse to die!\n");
++    return -1;
++  } else
++    return 0;
++}
++
++
++/******************************* Handlers ************************************/
++
++static String
++read_threads(Element *, void *)
++{
++  StringAccum sa;
++  MDEBUG("reading threads");
++  SOFT_SPIN_LOCK(&click_thread_lock);
++  if (click_thread_pids)
++    for (int i = 0; i < click_thread_pids->size(); i++)
++      sa << (*click_thread_pids)[i] << '\n';
++  SPIN_UNLOCK(&click_thread_lock);
++  return sa.take_string();
++}
++
++static String
++read_priority(Element *, void *)
++{
++  return String(PRIO2NICE(click_thread_priority)) + "\n";
++}
++
++static int
++write_priority(const String &conf, Element *, void *, ErrorHandler *errh)
++{
++  int priority;
++  if (!cp_integer(cp_uncomment(conf), &priority))
++    return errh->error("priority must be an integer");
++
++  priority = NICE2PRIO(priority);
++  if (priority < MIN_PRIO) {
++    priority = MIN_PRIO;
++    errh->warning("priority pinned at %d", PRIO2NICE(priority));
++  } else if (priority > MAX_PRIO) {
++    priority = MAX_PRIO;
++    errh->warning("priority pinned at %d", PRIO2NICE(priority));
++  }
++
++  // change current thread priorities
++  MDEBUG("writing priority");
++  SOFT_SPIN_LOCK(&click_thread_lock);
++  click_thread_priority = priority;
++  if (click_thread_pids)
++    for (int i = 0; i < click_thread_pids->size(); i++) {
++      struct task_struct *task = find_task_by_pid((*click_thread_pids)[i]);
++      if (task)
++      TASK_PRIO(task) = priority;
++    }
++  SPIN_UNLOCK(&click_thread_lock);
++  
++  return 0;
++}
++
++
++#if CLICK_DEBUG_MASTER
++static String
++read_master_info(Element *, void *)
++{
++  return click_master->info();
++}
++#endif
++
++
++#ifdef HAVE_ADAPTIVE_SCHEDULER
++
++static String
++read_cpu_share(Element *, void *thunk)
++{
++  int val = (thunk ? max_click_frac : min_click_frac);
++  return cp_unparse_real10(val, 3) + "\n";
++}
++
++static String
++read_cur_cpu_share(Element *, void *)
++{
++  if (click_router) {
++    String s;
++    for (int i = 0; i < click_master->nthreads(); i++)
++      s += cp_unparse_real10(click_master->thread(i)->cur_cpu_share(), 3) + "\n";
++    return s;
++  } else
++    return "0\n";
++}
++
++static int
++write_cpu_share(const String &conf, Element *, void *thunk, ErrorHandler *errh)
++{
++  const char *name = (thunk ? "max_" : "min_");
++  
++  int32_t frac;
++  if (!cp_real10(cp_uncomment(conf), 3, &frac) || frac < 1 || frac > 999)
++    return errh->error("%scpu_share must be a real number between 0.001 and 0.999", name);
++
++  (thunk ? max_click_frac : min_click_frac) = frac;
++
++  // change current thread priorities
++  for (int i = 0; i < click_master->nthreads(); i++)
++    click_master->thread(i)->set_cpu_share(min_click_frac, max_click_frac);
++  
++  return 0;
++}
++
++#endif
++
++enum { H_TASKS_PER_ITER, H_ITERS_PER_TIMERS, H_ITERS_PER_OS };
++
++
++static String
++read_sched_param(Element *, void *thunk) 
++{
++    String s;
++    switch (reinterpret_cast<uintptr_t>(thunk)) {
++      
++      case H_TASKS_PER_ITER:
++      for (int i = 0; i < click_master->nthreads(); i++)
++          s += String(click_master->thread(i)->_tasks_per_iter) + "\n";
++      break;
++
++      case H_ITERS_PER_TIMERS:
++      for (int i = 0; i < click_master->nthreads(); i++)
++          s += String(click_master->thread(i)->_iters_per_timers) + "\n";
++      break;
++        
++      case H_ITERS_PER_OS:
++      for (int i = 0; i < click_master->nthreads(); i++)
++          s += String(click_master->thread(i)->_iters_per_os) + "\n";
++      break;
++      
++    }
++    return s;
++}
++
++static int
++write_sched_param(const String &conf, Element *e, void *thunk, ErrorHandler *errh) 
++{
++    switch (reinterpret_cast<uintptr_t>(thunk)) {
++
++      case H_TASKS_PER_ITER: {
++        unsigned x;
++        if (!cp_integer(conf, &x)) 
++            return errh->error("tasks_per_iter must be unsigned\n");
++        // change current thread priorities
++        for (int i = 0; i < click_master->nthreads(); i++)
++            click_master->thread(i)->_tasks_per_iter = x;
++        break;
++      }
++
++      case H_ITERS_PER_TIMERS: {
++        unsigned x;
++        if (!cp_integer(conf, &x)) 
++            return errh->error("tasks_per_iter_timers must be unsigned\n");
++        // change current thread priorities
++        for (int i = 0; i < click_master->nthreads(); i++)
++            click_master->thread(i)->_iters_per_timers = x;
++        break;
++      }
++
++      case H_ITERS_PER_OS: {
++        unsigned x;
++        if (!cp_integer(conf, &x)) 
++            return errh->error("tasks_per_iter_os must be unsigned\n");
++        // change current thread priorities
++        for (int i = 0; i < click_master->nthreads(); i++)
++            click_master->thread(i)->_iters_per_os = x;
++        break;
++      }
++      
++    }
++    return 0;
++}
++
++/********************** Initialization and cleanup ***************************/
++
++void
++click_init_sched(ErrorHandler *errh)
++{
++  spin_lock_init(&click_thread_lock);
++  click_thread_pids = new Vector<int>;
++  bool greedy = click_parm(CLICKPARM_GREEDY);
++
++#if __MTCLICK__
++  click_master = new Master(click_parm(CLICKPARM_THREADS));
++  if (num_possible_cpus() != NUM_CLICK_CPUS)
++    click_chatter("warning: click compiled for %d cpus, machine allows %d", 
++                NUM_CLICK_CPUS, num_possible_cpus());
++#else
++  click_master = new Master(1);
++#endif
++  click_master->use();
++
++  placeholder_router = new Router("", click_master);
++  placeholder_router->initialize(errh);
++  placeholder_router->activate(errh);
++
++  for (int i = 0; i < click_master->nthreads(); i++) {
++    click_master->use();
++    RouterThread *thread = click_master->thread(i);
++    thread->set_greedy(greedy);
++    pid_t pid = kernel_thread 
++      (click_sched, thread, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
++    if (pid < 0) {
++      errh->error("cannot create kernel thread for Click thread %i!", i); 
++      click_master->unuse();
++    }
++  }
++
++  Router::add_read_handler(0, "threads", read_threads, 0);
++  Router::add_read_handler(0, "priority", read_priority, 0);
++  Router::add_write_handler(0, "priority", write_priority, 0);
++#ifdef HAVE_ADAPTIVE_SCHEDULER
++  static_assert(Task::MAX_UTILIZATION == 1000);
++  Router::add_read_handler(0, "min_cpu_share", read_cpu_share, 0);
++  Router::add_write_handler(0, "min_cpu_share", write_cpu_share, 0);
++  Router::add_read_handler(0, "max_cpu_share", read_cpu_share, (void *)1);
++  Router::add_write_handler(0, "max_cpu_share", write_cpu_share, (void *)1);
++  Router::add_read_handler(0, "cpu_share", read_cur_cpu_share, 0);
++#else 
++  Router::add_read_handler(0, "tasks_per_iter", read_sched_param, 
++                         (void *)H_TASKS_PER_ITER);
++  Router::add_read_handler(0, "iters_per_timers", read_sched_param, 
++                         (void *)H_ITERS_PER_TIMERS);
++  Router::add_read_handler(0, "iters_per_os", read_sched_param, 
++                         (void *)H_ITERS_PER_OS);
++
++  Router::add_write_handler(0, "tasks_per_iter", write_sched_param, 
++                          (void *)H_TASKS_PER_ITER);
++  Router::add_write_handler(0, "iters_per_timers", write_sched_param, 
++                          (void *)H_ITERS_PER_TIMERS);
++  Router::add_write_handler(0, "iters_per_os", write_sched_param, 
++                          (void *)H_ITERS_PER_OS);
++
++#endif
++#if CLICK_DEBUG_MASTER
++  Router::add_read_handler(0, "master_info", read_master_info, 0);
++#endif
++}
++
++int
++click_cleanup_sched()
++{
++  if (kill_router_threads() < 0) {
++    printk("<1>click: Following threads still active, expect a crash:\n");
++    SOFT_SPIN_LOCK(&click_thread_lock);
++    for (int i = 0; i < click_thread_pids->size(); i++) {
++      printk("<1>click:   router thread pid %d\n", (*click_thread_pids)[i]);
++      struct task_struct *ct = find_task_by_pid((*click_thread_pids)[i]);
++      if (ct)
++        printk("<1>click:   state %d, EIP %08x\n", (int) ct->state, KSTK_EIP(ct));
++    }
++    SPIN_UNLOCK(&click_thread_lock);
++    click_master->unuse();
++    return -1;
++  } else {
++    delete click_thread_pids;
++    click_thread_pids = 0;
++    click_master->unuse();
++    click_master = 0;
++    return 0;
++  }
++}
+diff -Nurb click-1.6.0/linuxmodule/string.i click-1.6.0-27/linuxmodule/string.i
+--- click-1.6.0/linuxmodule/string.i   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/linuxmodule/string.i        2009-02-11 15:17:46.000000000 -0500
+@@ -0,0 +1,24292 @@
++# 1 "/d/click/click-1.6.0-27/linuxmodule/../lib/string.cc"
++# 1 "<built-in>"
++# 1 "<command line>"
++# 1 "/d/click/click-1.6.0-27/linuxmodule/../lib/string.cc"
++# 20 "/d/click/click-1.6.0-27/linuxmodule/../lib/string.cc"
++# 1 "/d/click/click-1.6.0-27/linuxmodule/../include/click/config.h" 1
++# 150 "/d/click/click-1.6.0-27/linuxmodule/../include/click/config.h"
++# 1 "/d/click/click-1.6.0-27/linuxmodule/../include/click/config-linuxmodule.h" 1
++# 90 "/d/click/click-1.6.0-27/linuxmodule/../include/click/config-linuxmodule.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/autoconf.h" 1
++# 91 "/d/click/click-1.6.0-27/linuxmodule/../include/click/config-linuxmodule.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/types.h" 1
++# 11 "/d/kernels/linux-2.6.27.10-clickport/include/linux/types.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/posix_types.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/stddef.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/compiler.h" 1
++# 40 "/d/kernels/linux-2.6.27.10-clickport/include/linux/compiler.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/compiler-gcc4.h" 1
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/compiler-gcc.h" 1
++# 7 "/d/kernels/linux-2.6.27.10-clickport/include/linux/compiler-gcc4.h" 2
++# 41 "/d/kernels/linux-2.6.27.10-clickport/include/linux/compiler.h" 2
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/linux/stddef.h" 2
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/linux/posix_types.h" 2
++# 36 "/d/kernels/linux-2.6.27.10-clickport/include/linux/posix_types.h"
++typedef struct {
++ unsigned long fds_bits [(1024/(8 * sizeof(unsigned long)))];
++} __kernel_fd_set;
++
++
++typedef void (*__kernel_sighandler_t)(int);
++
++
++typedef int __kernel_key_t;
++typedef int __kernel_mqd_t;
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/posix_types.h" 1
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/posix_types_32.h" 1
++# 10 "/d/kernels/linux-2.6.27.10-clickport/include/asm/posix_types_32.h"
++typedef unsigned long __kernel_ino_t;
++typedef unsigned short __kernel_mode_t;
++typedef unsigned short __kernel_nlink_t;
++typedef long __kernel_off_t;
++typedef int __kernel_pid_t;
++typedef unsigned short __kernel_ipc_pid_t;
++typedef unsigned short __kernel_uid_t;
++typedef unsigned short __kernel_gid_t;
++typedef unsigned int __kernel_size_t;
++typedef int __kernel_ssize_t;
++typedef int __kernel_ptrdiff_t;
++typedef long __kernel_time_t;
++typedef long __kernel_suseconds_t;
++typedef long __kernel_clock_t;
++typedef int __kernel_timer_t;
++typedef int __kernel_clockid_t;
++typedef int __kernel_daddr_t;
++typedef char * __kernel_caddr_t;
++typedef unsigned short __kernel_uid16_t;
++typedef unsigned short __kernel_gid16_t;
++typedef unsigned int __kernel_uid32_t;
++typedef unsigned int __kernel_gid32_t;
++
++typedef unsigned short __kernel_old_uid_t;
++typedef unsigned short __kernel_old_gid_t;
++typedef unsigned short __kernel_old_dev_t;
++
++
++typedef long long __kernel_loff_t;
++
++
++typedef struct {
++ int val[2];
++} __kernel_fsid_t;
++# 4 "/d/kernels/linux-2.6.27.10-clickport/include/asm/posix_types.h" 2
++# 48 "/d/kernels/linux-2.6.27.10-clickport/include/linux/posix_types.h" 2
++# 12 "/d/kernels/linux-2.6.27.10-clickport/include/linux/types.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/types.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/int-ll64.h" 1
++# 17 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/int-ll64.h"
++typedef __signed__ char __s8;
++typedef unsigned char __u8;
++
++typedef __signed__ short __s16;
++typedef unsigned short __u16;
++
++typedef __signed__ int __s32;
++typedef unsigned int __u32;
++
++
++__extension__ typedef __signed__ long long __s64;
++__extension__ typedef unsigned long long __u64;
++# 40 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/int-ll64.h"
++typedef signed char s8;
++typedef unsigned char u8;
++
++typedef signed short s16;
++typedef unsigned short u16;
++
++typedef signed int s32;
++typedef unsigned int u32;
++
++typedef signed long long s64;
++typedef unsigned long long u64;
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/asm/types.h" 2
++
++
++
++typedef unsigned short umode_t;
++# 25 "/d/kernels/linux-2.6.27.10-clickport/include/asm/types.h"
++typedef u64 dma64_addr_t;
++
++
++
++
++typedef u32 dma_addr_t;
++# 13 "/d/kernels/linux-2.6.27.10-clickport/include/linux/types.h" 2
++
++
++
++typedef __u32 __kernel_dev_t;
++
++typedef __kernel_fd_set fd_set;
++typedef __kernel_dev_t dev_t;
++typedef __kernel_ino_t ino_t;
++typedef __kernel_mode_t mode_t;
++typedef __kernel_nlink_t nlink_t;
++typedef __kernel_off_t off_t;
++typedef __kernel_pid_t pid_t;
++typedef __kernel_daddr_t daddr_t;
++typedef __kernel_key_t key_t;
++typedef __kernel_suseconds_t suseconds_t;
++typedef __kernel_timer_t timer_t;
++typedef __kernel_clockid_t clockid_t;
++typedef __kernel_mqd_t mqd_t;
++
++
++
++
++
++
++typedef __kernel_uid32_t uid_t;
++typedef __kernel_gid32_t gid_t;
++typedef __kernel_uid16_t uid16_t;
++typedef __kernel_gid16_t gid16_t;
++typedef unsigned int xid_t;
++typedef unsigned int nid_t;
++typedef unsigned int tag_t;
++
++typedef unsigned long uintptr_t;
++
++
++
++typedef __kernel_old_uid_t old_uid_t;
++typedef __kernel_old_gid_t old_gid_t;
++# 62 "/d/kernels/linux-2.6.27.10-clickport/include/linux/types.h"
++typedef __kernel_loff_t loff_t;
++# 71 "/d/kernels/linux-2.6.27.10-clickport/include/linux/types.h"
++typedef __kernel_size_t size_t;
++
++
++
++
++typedef __kernel_ssize_t ssize_t;
++
++
++
++
++typedef __kernel_ptrdiff_t ptrdiff_t;
++
++
++
++
++typedef __kernel_time_t time_t;
++
++
++
++
++typedef __kernel_clock_t clock_t;
++
++
++
++
++typedef __kernel_caddr_t caddr_t;
++
++
++
++typedef unsigned char u_char;
++typedef unsigned short u_short;
++typedef unsigned int u_int;
++typedef unsigned long u_long;
++
++
++typedef unsigned char unchar;
++typedef unsigned short ushort;
++typedef unsigned int uint;
++typedef unsigned long ulong;
++
++
++
++
++typedef __u8 u_int8_t;
++typedef __s8 int8_t;
++typedef __u16 u_int16_t;
++typedef __s16 int16_t;
++typedef __u32 u_int32_t;
++typedef __s32 int32_t;
++
++
++
++typedef __u8 uint8_t;
++typedef __u16 uint16_t;
++typedef __u32 uint32_t;
++
++
++typedef __u64 uint64_t;
++typedef __u64 u_int64_t;
++typedef __s64 int64_t;
++# 145 "/d/kernels/linux-2.6.27.10-clickport/include/linux/types.h"
++typedef u64 sector_t;
++# 154 "/d/kernels/linux-2.6.27.10-clickport/include/linux/types.h"
++typedef u64 blkcnt_t;
++# 185 "/d/kernels/linux-2.6.27.10-clickport/include/linux/types.h"
++typedef __u16 __le16;
++typedef __u16 __be16;
++typedef __u32 __le32;
++typedef __u32 __be32;
++
++typedef __u64 __le64;
++typedef __u64 __be64;
++
++typedef __u16 __sum16;
++typedef __u32 __wsum;
++
++
++typedef unsigned gfp_t;
++
++
++typedef u64 resource_size_t;
++
++
++
++
++struct ustat {
++ __kernel_daddr_t f_tfree;
++ __kernel_ino_t f_tinode;
++ char f_fname[6];
++ char f_fpack[6];
++};
++# 92 "/d/click/click-1.6.0-27/linuxmodule/../include/click/config-linuxmodule.h" 2
++typedef ptrdiff_t intptr_t;
++# 115 "/d/click/click-1.6.0-27/linuxmodule/../include/click/config-linuxmodule.h"
++void *operator new(size_t) throw ();
++void *operator new[](size_t) throw ();
++
++
++inline __attribute__((always_inline)) void *operator new(size_t, void *v) { return v; }
++# 129 "/d/click/click-1.6.0-27/linuxmodule/../include/click/config-linuxmodule.h"
++# 1 "/d/click/click-1.6.0-27/linuxmodule/../include/click/fixconfig.h" 1
++
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/alternative.h" 1
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/asm.h" 1
++# 7 "/d/kernels/linux-2.6.27.10-clickport/include/asm/alternative.h" 2
++# 42 "/d/kernels/linux-2.6.27.10-clickport/include/asm/alternative.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/cpufeature.h" 1
++
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/required-features.h" 1
++# 8 "/d/kernels/linux-2.6.27.10-clickport/include/asm/cpufeature.h" 2
++# 123 "/d/kernels/linux-2.6.27.10-clickport/include/asm/cpufeature.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/bitops.h" 1
++# 17 "/d/kernels/linux-2.6.27.10-clickport/include/linux/bitops.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h" 1
++# 13 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/alternative.h" 1
++# 14 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h" 2
++# 56 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h"
++static inline __attribute__((always_inline)) void set_bit(unsigned int nr, volatile unsigned long *addr)
++{
++ if ((__builtin_constant_p(nr))) {
++  asm volatile(".section .smp_locks,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "661f\n" ".previous\n" "661:\n\tlock; " "orb %1,%0"
++   : "+m" (*(volatile long *) ((char *)(addr) + ((nr)>>3)))
++   : "iq" ((u8)(1 << ((nr) & 7)))
++   : "memory");
++ } else {
++  asm volatile(".section .smp_locks,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "661f\n" ".previous\n" "661:\n\tlock; " "bts %1,%0"
++   : "+m" (*(volatile long *) (addr)) : "Ir" (nr) : "memory");
++ }
++}
++# 78 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h"
++static inline __attribute__((always_inline)) void __set_bit(int nr, volatile unsigned long *addr)
++{
++ asm volatile("bts %1,%0" : "+m" (*(volatile long *) (addr)) : "Ir" (nr) : "memory");
++}
++# 93 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h"
++static inline __attribute__((always_inline)) void clear_bit(int nr, volatile unsigned long *addr)
++{
++ if ((__builtin_constant_p(nr))) {
++  asm volatile(".section .smp_locks,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "661f\n" ".previous\n" "661:\n\tlock; " "andb %1,%0"
++   : "+m" (*(volatile long *) ((char *)(addr) + ((nr)>>3)))
++   : "iq" ((u8)~(1 << ((nr) & 7))));
++ } else {
++  asm volatile(".section .smp_locks,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "661f\n" ".previous\n" "661:\n\tlock; " "btr %1,%0"
++   : "+m" (*(volatile long *) (addr))
++   : "Ir" (nr));
++ }
++}
++# 114 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h"
++static inline __attribute__((always_inline)) void clear_bit_unlock(unsigned nr, volatile unsigned long *addr)
++{
++ __asm__ __volatile__("": : :"memory");
++ clear_bit(nr, addr);
++}
++
++static inline __attribute__((always_inline)) void __clear_bit(int nr, volatile unsigned long *addr)
++{
++ asm volatile("btr %1,%0" : "+m" (*(volatile long *) (addr)) : "Ir" (nr));
++}
++# 137 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h"
++static inline __attribute__((always_inline)) void __clear_bit_unlock(unsigned nr, volatile unsigned long *addr)
++{
++ __asm__ __volatile__("": : :"memory");
++ __clear_bit(nr, addr);
++}
++# 155 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h"
++static inline __attribute__((always_inline)) void __change_bit(int nr, volatile unsigned long *addr)
++{
++ asm volatile("btc %1,%0" : "+m" (*(volatile long *) (addr)) : "Ir" (nr));
++}
++# 169 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h"
++static inline __attribute__((always_inline)) void change_bit(int nr, volatile unsigned long *addr)
++{
++ asm volatile(".section .smp_locks,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "661f\n" ".previous\n" "661:\n\tlock; " "btc %1,%0" : "+m" (*(volatile long *) (addr)) : "Ir" (nr));
++}
++# 182 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h"
++static inline __attribute__((always_inline)) int test_and_set_bit(int nr, volatile unsigned long *addr)
++{
++ int oldbit;
++
++ asm volatile(".section .smp_locks,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "661f\n" ".previous\n" "661:\n\tlock; " "bts %2,%1\n\t"
++       "sbb %0,%0" : "=r" (oldbit), "+m" (*(volatile long *) (addr)) : "Ir" (nr) : "memory");
++
++ return oldbit;
++}
++# 199 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h"
++static inline __attribute__((always_inline)) int test_and_set_bit_lock(int nr, volatile unsigned long *addr)
++{
++ return test_and_set_bit(nr, addr);
++}
++# 213 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h"
++static inline __attribute__((always_inline)) int __test_and_set_bit(int nr, volatile unsigned long *addr)
++{
++ int oldbit;
++
++ asm("bts %2,%1\n\t"
++     "sbb %0,%0"
++     : "=r" (oldbit), "+m" (*(volatile long *) (addr))
++     : "Ir" (nr));
++ return oldbit;
++}
++# 232 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h"
++static inline __attribute__((always_inline)) int test_and_clear_bit(int nr, volatile unsigned long *addr)
++{
++ int oldbit;
++
++ asm volatile(".section .smp_locks,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "661f\n" ".previous\n" "661:\n\tlock; " "btr %2,%1\n\t"
++       "sbb %0,%0"
++       : "=r" (oldbit), "+m" (*(volatile long *) (addr)) : "Ir" (nr) : "memory");
++
++ return oldbit;
++}
++# 252 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h"
++static inline __attribute__((always_inline)) int __test_and_clear_bit(int nr, volatile unsigned long *addr)
++{
++ int oldbit;
++
++ asm volatile("btr %2,%1\n\t"
++       "sbb %0,%0"
++       : "=r" (oldbit), "+m" (*(volatile long *) (addr))
++       : "Ir" (nr));
++ return oldbit;
++}
++
++
++static inline __attribute__((always_inline)) int __test_and_change_bit(int nr, volatile unsigned long *addr)
++{
++ int oldbit;
++
++ asm volatile("btc %2,%1\n\t"
++       "sbb %0,%0"
++       : "=r" (oldbit), "+m" (*(volatile long *) (addr))
++       : "Ir" (nr) : "memory");
++
++ return oldbit;
++}
++# 284 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h"
++static inline __attribute__((always_inline)) int test_and_change_bit(int nr, volatile unsigned long *addr)
++{
++ int oldbit;
++
++ asm volatile(".section .smp_locks,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "661f\n" ".previous\n" "661:\n\tlock; " "btc %2,%1\n\t"
++       "sbb %0,%0"
++       : "=r" (oldbit), "+m" (*(volatile long *) (addr)) : "Ir" (nr) : "memory");
++
++ return oldbit;
++}
++
++static inline __attribute__((always_inline)) int constant_test_bit(int nr, const volatile unsigned long *addr)
++{
++ return ((1UL << (nr % 32)) &
++  (((unsigned long *)addr)[nr / 32])) != 0;
++}
++
++static inline __attribute__((always_inline)) int variable_test_bit(int nr, volatile const unsigned long *addr)
++{
++ int oldbit;
++
++ asm volatile("bt %2,%1\n\t"
++       "sbb %0,%0"
++       : "=r" (oldbit)
++       : "m" (*(unsigned long *)addr), "Ir" (nr));
++
++ return oldbit;
++}
++# 333 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h"
++static inline __attribute__((always_inline)) unsigned long __ffs(unsigned long word)
++{
++ asm("bsf %1,%0"
++  : "=r" (word)
++  : "rm" (word));
++ return word;
++}
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) unsigned long ffz(unsigned long word)
++{
++ asm("bsf %1,%0"
++  : "=r" (word)
++  : "r" (~word));
++ return word;
++}
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) unsigned long __fls(unsigned long word)
++{
++ asm("bsr %1,%0"
++     : "=r" (word)
++     : "rm" (word));
++ return word;
++}
++# 381 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h"
++static inline __attribute__((always_inline)) int ffs(int x)
++{
++ int r;
++
++ asm("bsfl %1,%0\n\t"
++     "cmovzl %2,%0"
++     : "=r" (r) : "rm" (x), "r" (-1));
++
++
++
++
++
++
++ return r + 1;
++}
++# 408 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h"
++static inline __attribute__((always_inline)) int fls(int x)
++{
++ int r;
++
++ asm("bsrl %1,%0\n\t"
++     "cmovzl %2,%0"
++     : "=&r" (r) : "rm" (x), "rm" (-1));
++
++
++
++
++
++
++ return r + 1;
++}
++
++
++
++
++static inline __attribute__((always_inline)) void set_bit_string(unsigned long *bitmap,
++  unsigned long i, int len)
++{
++ unsigned long end = i + len;
++ while (i < end) {
++  __set_bit(i, bitmap);
++  i++;
++ }
++}
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/bitops/sched.h" 1
++# 12 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/bitops/sched.h"
++static inline __attribute__((always_inline)) int sched_find_first_bit(const unsigned long *b)
++{
++
++
++
++
++
++ if (b[0])
++  return __ffs(b[0]);
++ if (b[1])
++  return __ffs(b[1]) + 32;
++ if (b[2])
++  return __ffs(b[2]) + 64;
++ return __ffs(b[3]) + 96;
++
++
++
++}
++# 440 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h" 2
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/bitops/hweight.h" 1
++
++
++
++
++
++
++extern unsigned int hweight16(unsigned int w);
++extern unsigned int hweight8(unsigned int w);
++extern unsigned long hweight64(__u64 w);
++# 444 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h" 2
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/bitops/fls64.h" 1
++# 18 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/bitops/fls64.h"
++static inline __attribute__((always_inline)) int fls64(__u64 x)
++{
++ __u32 h = x >> 32;
++ if (h)
++  return fls(h) + 32;
++ return fls(x);
++}
++# 448 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h" 2
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/bitops/ext2-non-atomic.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/bitops/le.h" 1
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/byteorder.h" 1
++# 11 "/d/kernels/linux-2.6.27.10-clickport/include/asm/byteorder.h"
++static inline __attribute__((always_inline)) __attribute__((__const__)) __u32 ___arch__swab32(__u32 x)
++{
++
++ asm("bswap %0" : "=r" (x) : "0" (x));
++
++
++
++
++
++
++
++ return x;
++}
++
++static inline __attribute__((always_inline)) __attribute__((__const__)) __u64 ___arch__swab64(__u64 val)
++{
++ union {
++  struct {
++   __u32 a;
++   __u32 b;
++  } s;
++  __u64 u;
++ } v;
++ v.u = val;
++
++ asm("bswapl %0 ; bswapl %1 ; xchgl %0,%1"
++     : "=r" (v.s.a), "=r" (v.s.b)
++     : "0" (v.s.a), "1" (v.s.b));
++
++
++
++
++
++
++
++ return v.u;
++}
++# 79 "/d/kernels/linux-2.6.27.10-clickport/include/asm/byteorder.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/byteorder/little_endian.h" 1
++# 12 "/d/kernels/linux-2.6.27.10-clickport/include/linux/byteorder/little_endian.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/byteorder/swab.h" 1
++# 64 "/d/kernels/linux-2.6.27.10-clickport/include/linux/byteorder/swab.h"
++static __inline__ __attribute__((always_inline)) __attribute__((__const__)) __u16 ___swab16(__u16 x)
++{
++ return x<<8 | x>>8;
++}
++static __inline__ __attribute__((always_inline)) __attribute__((__const__)) __u32 ___swab32(__u32 x)
++{
++ return x<<24 | x>>24 |
++  (x & (__u32)0x0000ff00UL)<<8 |
++  (x & (__u32)0x00ff0000UL)>>8;
++}
++static __inline__ __attribute__((always_inline)) __attribute__((__const__)) __u64 ___swab64(__u64 x)
++{
++ return x<<56 | x>>56 |
++  (x & (__u64)0x000000000000ff00ULL)<<40 |
++  (x & (__u64)0x0000000000ff0000ULL)<<24 |
++  (x & (__u64)0x00000000ff000000ULL)<< 8 |
++         (x & (__u64)0x000000ff00000000ULL)>> 8 |
++  (x & (__u64)0x0000ff0000000000ULL)>>24 |
++  (x & (__u64)0x00ff000000000000ULL)>>40;
++}
++# 163 "/d/kernels/linux-2.6.27.10-clickport/include/linux/byteorder/swab.h"
++static __inline__ __attribute__((always_inline)) __attribute__((__const__)) __u16 __fswab16(__u16 x)
++{
++ return ___swab16(x);
++}
++static __inline__ __attribute__((always_inline)) __u16 __swab16p(const __u16 *x)
++{
++ return ___swab16(*(x));
++}
++static __inline__ __attribute__((always_inline)) void __swab16s(__u16 *addr)
++{
++ ((void)(*(addr) = ___swab16(*(addr))));
++}
++
++static __inline__ __attribute__((always_inline)) __attribute__((__const__)) __u32 __fswab32(__u32 x)
++{
++ return ___arch__swab32(x);
++}
++static __inline__ __attribute__((always_inline)) __u32 __swab32p(const __u32 *x)
++{
++ return ___arch__swab32(*(x));
++}
++static __inline__ __attribute__((always_inline)) void __swab32s(__u32 *addr)
++{
++ ((void)(*(addr) = ___arch__swab32(*(addr))));
++}
++
++
++static __inline__ __attribute__((always_inline)) __attribute__((__const__)) __u64 __fswab64(__u64 x)
++{
++
++
++
++
++
++ return ___arch__swab64(x);
++
++}
++static __inline__ __attribute__((always_inline)) __u64 __swab64p(const __u64 *x)
++{
++ return ___arch__swab64(*(x));
++}
++static __inline__ __attribute__((always_inline)) void __swab64s(__u64 *addr)
++{
++ ((void)(*(addr) = ___arch__swab64(*(addr))));
++}
++# 13 "/d/kernels/linux-2.6.27.10-clickport/include/linux/byteorder/little_endian.h" 2
++# 43 "/d/kernels/linux-2.6.27.10-clickport/include/linux/byteorder/little_endian.h"
++static inline __attribute__((always_inline)) __le64 __cpu_to_le64p(const __u64 *p)
++{
++ return ( __le64)*p;
++}
++static inline __attribute__((always_inline)) __u64 __le64_to_cpup(const __le64 *p)
++{
++ return ( __u64)*p;
++}
++static inline __attribute__((always_inline)) __le32 __cpu_to_le32p(const __u32 *p)
++{
++ return ( __le32)*p;
++}
++static inline __attribute__((always_inline)) __u32 __le32_to_cpup(const __le32 *p)
++{
++ return ( __u32)*p;
++}
++static inline __attribute__((always_inline)) __le16 __cpu_to_le16p(const __u16 *p)
++{
++ return ( __le16)*p;
++}
++static inline __attribute__((always_inline)) __u16 __le16_to_cpup(const __le16 *p)
++{
++ return ( __u16)*p;
++}
++static inline __attribute__((always_inline)) __be64 __cpu_to_be64p(const __u64 *p)
++{
++ return ( __be64)__swab64p(p);
++}
++static inline __attribute__((always_inline)) __u64 __be64_to_cpup(const __be64 *p)
++{
++ return __swab64p((__u64 *)p);
++}
++static inline __attribute__((always_inline)) __be32 __cpu_to_be32p(const __u32 *p)
++{
++ return ( __be32)__swab32p(p);
++}
++static inline __attribute__((always_inline)) __u32 __be32_to_cpup(const __be32 *p)
++{
++ return __swab32p((__u32 *)p);
++}
++static inline __attribute__((always_inline)) __be16 __cpu_to_be16p(const __u16 *p)
++{
++ return ( __be16)__swab16p(p);
++}
++static inline __attribute__((always_inline)) __u16 __be16_to_cpup(const __be16 *p)
++{
++ return __swab16p((__u16 *)p);
++}
++# 105 "/d/kernels/linux-2.6.27.10-clickport/include/linux/byteorder/little_endian.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/byteorder/generic.h" 1
++# 143 "/d/kernels/linux-2.6.27.10-clickport/include/linux/byteorder/generic.h"
++static inline __attribute__((always_inline)) void le16_add_cpu(__le16 *var, u16 val)
++{
++ *var = (( __le16)(__u16)((( __u16)(__le16)(*var)) + val));
++}
++
++static inline __attribute__((always_inline)) void le32_add_cpu(__le32 *var, u32 val)
++{
++ *var = (( __le32)(__u32)((( __u32)(__le32)(*var)) + val));
++}
++
++static inline __attribute__((always_inline)) void le64_add_cpu(__le64 *var, u64 val)
++{
++ *var = (( __le64)(__u64)((( __u64)(__le64)(*var)) + val));
++}
++
++static inline __attribute__((always_inline)) void be16_add_cpu(__be16 *var, u16 val)
++{
++ *var = (( __be16)(__builtin_constant_p((__u16)(((__builtin_constant_p((__u16)(( __u16)(__be16)(*var))) ? ((__u16)( (((__u16)((( __u16)(__be16)(*var))) & (__u16)0x00ffU) << 8) | (((__u16)((( __u16)(__be16)(*var))) & (__u16)0xff00U) >> 8) )) : __fswab16((( __u16)(__be16)(*var)))) + val))) ? ((__u16)( (((__u16)((((__builtin_constant_p((__u16)(( __u16)(__be16)(*var))) ? ((__u16)( (((__u16)((( __u16)(__be16)(*var))) & (__u16)0x00ffU) << 8) | (((__u16)((( __u16)(__be16)(*var))) & (__u16)0xff00U) >> 8) )) : __fswab16((( __u16)(__be16)(*var)))) + val))) & (__u16)0x00ffU) << 8) | (((__u16)((((__builtin_constant_p((__u16)(( __u16)(__be16)(*var))) ? ((__u16)( (((__u16)((( __u16)(__be16)(*var))) & (__u16)0x00ffU) << 8) | (((__u16)((( __u16)(__be16)(*var))) & (__u16)0xff00U) >> 8) )) : __fswab16((( __u16)(__be16)(*var)))) + val))) & (__u16)0xff00U) >> 8) )) : __fswab16((((__builtin_constant_p((__u16)(( __u16)(__be16)(*var))) ? ((__u16)( (((__u16)((( __u16)(__be16)(*var))) & (__u16)0x00ffU) << 8) | (((__u16)((( __u16)(__be16)(*var))) & (__u16)0xff00U) >> 8) )) : __fswab16((( __u16)(__be16)(*var)))) + val)))));
++}
++
++static inline __attribute__((always_inline)) void be32_add_cpu(__be32 *var, u32 val)
++{
++ *var = (( __be32)(__builtin_constant_p((__u32)(((__builtin_constant_p((__u32)(( __u32)(__be32)(*var))) ? ((__u32)( (((__u32)((( __u32)(__be32)(*var))) & (__u32)0x000000ffUL) << 24) | (((__u32)((( __u32)(__be32)(*var))) & (__u32)0x0000ff00UL) << 8) | (((__u32)((( __u32)(__be32)(*var))) & (__u32)0x00ff0000UL) >> 8) | (((__u32)((( __u32)(__be32)(*var))) & (__u32)0xff000000UL) >> 24) )) : __fswab32((( __u32)(__be32)(*var)))) + val))) ? ((__u32)( (((__u32)((((__builtin_constant_p((__u32)(( __u32)(__be32)(*var))) ? ((__u32)( (((__u32)((( __u32)(__be32)(*var))) & (__u32)0x000000ffUL) << 24) | (((__u32)((( __u32)(__be32)(*var))) & (__u32)0x0000ff00UL) << 8) | (((__u32)((( __u32)(__be32)(*var))) & (__u32)0x00ff0000UL) >> 8) | (((__u32)((( __u32)(__be32)(*var))) & (__u32)0xff000000UL) >> 24) )) : __fswab32((( __u32)(__be32)(*var)))) + val))) & (__u32)0x000000ffUL) << 24) | (((__u32)((((__builtin_constant_p((__u32)(( __u32)(__be32)(*var))) ? ((__u32)( (((__u32)((( __u32)(__be32)(*var))) & (__u32)0x000000ffUL) << 24) | (((__u32)((( __u32)(__be32)(*var))) & (__u32)0x0000ff00UL) << 8) | (((__u32)((( __u32)(__be32)(*var))) & (__u32)0x00ff0000UL) >> 8) | (((__u32)((( __u32)(__be32)(*var))) & (__u32)0xff000000UL) >> 24) )) : __fswab32((( __u32)(__be32)(*var)))) + val))) & (__u32)0x0000ff00UL) << 8) | (((__u32)((((__builtin_constant_p((__u32)(( __u32)(__be32)(*var))) ? ((__u32)( (((__u32)((( __u32)(__be32)(*var))) & (__u32)0x000000ffUL) << 24) | (((__u32)((( __u32)(__be32)(*var))) & (__u32)0x0000ff00UL) << 8) | (((__u32)((( __u32)(__be32)(*var))) & (__u32)0x00ff0000UL) >> 8) | (((__u32)((( __u32)(__be32)(*var))) & (__u32)0xff000000UL) >> 24) )) : __fswab32((( __u32)(__be32)(*var)))) + val))) & (__u32)0x00ff0000UL) >> 8) | (((__u32)((((__builtin_constant_p((__u32)(( __u32)(__be32)(*var))) ? ((__u32)( (((__u32)((( __u32)(__be32)(*var))) & (__u32)0x000000ffUL) << 24) | (((__u32)((( __u32)(__be32)(*var))) & (__u32)0x0000ff00UL) << 8) | (((__u32)((( __u32)(__be32)(*var))) & (__u32)0x00ff0000UL) >> 8) | (((__u32)((( __u32)(__be32)(*var))) & (__u32)0xff000000UL) >> 24) )) : __fswab32((( __u32)(__be32)(*var)))) + val))) & (__u32)0xff000000UL) >> 24) )) : __fswab32((((__builtin_constant_p((__u32)(( __u32)(__be32)(*var))) ? ((__u32)( (((__u32)((( __u32)(__be32)(*var))) & (__u32)0x000000ffUL) << 24) | (((__u32)((( __u32)(__be32)(*var))) & (__u32)0x0000ff00UL) << 8) | (((__u32)((( __u32)(__be32)(*var))) & (__u32)0x00ff0000UL) >> 8) | (((__u32)((( __u32)(__be32)(*var))) & (__u32)0xff000000UL) >> 24) )) : __fswab32((( __u32)(__be32)(*var)))) + val)))));
++}
++
++static inline __attribute__((always_inline)) void be64_add_cpu(__be64 *var, u64 val)
++{
++ *var = (( __be64)(__builtin_constant_p((__u64)(((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00000000000000ffULL) << 56) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x000000000000ff00ULL) << 40) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x0000000000ff0000ULL) << 24) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00000000ff000000ULL) << 8) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x000000ff00000000ULL) >> 8) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x0000ff0000000000ULL) >> 24) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00ff000000000000ULL) >> 40) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0xff00000000000000ULL) >> 56) )) : __fswab64((( __u64)(__be64)(*var)))) + val))) ? ((__u64)( (__u64)(((__u64)((((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00000000000000ffULL) << 56) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x000000000000ff00ULL) << 40) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x0000000000ff0000ULL) << 24) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00000000ff000000ULL) << 8) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x000000ff00000000ULL) >> 8) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x0000ff0000000000ULL) >> 24) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00ff000000000000ULL) >> 40) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0xff00000000000000ULL) >> 56) )) : __fswab64((( __u64)(__be64)(*var)))) + val))) & (__u64)0x00000000000000ffULL) << 56) | (__u64)(((__u64)((((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00000000000000ffULL) << 56) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x000000000000ff00ULL) << 40) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x0000000000ff0000ULL) << 24) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00000000ff000000ULL) << 8) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x000000ff00000000ULL) >> 8) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x0000ff0000000000ULL) >> 24) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00ff000000000000ULL) >> 40) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0xff00000000000000ULL) >> 56) )) : __fswab64((( __u64)(__be64)(*var)))) + val))) & (__u64)0x000000000000ff00ULL) << 40) | (__u64)(((__u64)((((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00000000000000ffULL) << 56) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x000000000000ff00ULL) << 40) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x0000000000ff0000ULL) << 24) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00000000ff000000ULL) << 8) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x000000ff00000000ULL) >> 8) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x0000ff0000000000ULL) >> 24) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00ff000000000000ULL) >> 40) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0xff00000000000000ULL) >> 56) )) : __fswab64((( __u64)(__be64)(*var)))) + val))) & (__u64)0x0000000000ff0000ULL) << 24) | (__u64)(((__u64)((((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00000000000000ffULL) << 56) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x000000000000ff00ULL) << 40) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x0000000000ff0000ULL) << 24) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00000000ff000000ULL) << 8) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x000000ff00000000ULL) >> 8) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x0000ff0000000000ULL) >> 24) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00ff000000000000ULL) >> 40) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0xff00000000000000ULL) >> 56) )) : __fswab64((( __u64)(__be64)(*var)))) + val))) & (__u64)0x00000000ff000000ULL) << 8) | (__u64)(((__u64)((((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00000000000000ffULL) << 56) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x000000000000ff00ULL) << 40) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x0000000000ff0000ULL) << 24) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00000000ff000000ULL) << 8) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x000000ff00000000ULL) >> 8) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x0000ff0000000000ULL) >> 24) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00ff000000000000ULL) >> 40) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0xff00000000000000ULL) >> 56) )) : __fswab64((( __u64)(__be64)(*var)))) + val))) & (__u64)0x000000ff00000000ULL) >> 8) | (__u64)(((__u64)((((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00000000000000ffULL) << 56) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x000000000000ff00ULL) << 40) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x0000000000ff0000ULL) << 24) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00000000ff000000ULL) << 8) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x000000ff00000000ULL) >> 8) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x0000ff0000000000ULL) >> 24) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00ff000000000000ULL) >> 40) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0xff00000000000000ULL) >> 56) )) : __fswab64((( __u64)(__be64)(*var)))) + val))) & (__u64)0x0000ff0000000000ULL) >> 24) | (__u64)(((__u64)((((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00000000000000ffULL) << 56) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x000000000000ff00ULL) << 40) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x0000000000ff0000ULL) << 24) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00000000ff000000ULL) << 8) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x000000ff00000000ULL) >> 8) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x0000ff0000000000ULL) >> 24) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00ff000000000000ULL) >> 40) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0xff00000000000000ULL) >> 56) )) : __fswab64((( __u64)(__be64)(*var)))) + val))) & (__u64)0x00ff000000000000ULL) >> 40) | (__u64)(((__u64)((((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00000000000000ffULL) << 56) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x000000000000ff00ULL) << 40) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x0000000000ff0000ULL) << 24) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00000000ff000000ULL) << 8) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x000000ff00000000ULL) >> 8) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x0000ff0000000000ULL) >> 24) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00ff000000000000ULL) >> 40) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0xff00000000000000ULL) >> 56) )) : __fswab64((( __u64)(__be64)(*var)))) + val))) & (__u64)0xff00000000000000ULL) >> 56) )) : __fswab64((((__builtin_constant_p((__u64)(( __u64)(__be64)(*var))) ? ((__u64)( (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00000000000000ffULL) << 56) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x000000000000ff00ULL) << 40) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x0000000000ff0000ULL) << 24) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00000000ff000000ULL) << 8) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x000000ff00000000ULL) >> 8) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x0000ff0000000000ULL) >> 24) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0x00ff000000000000ULL) >> 40) | (__u64)(((__u64)((( __u64)(__be64)(*var))) & (__u64)0xff00000000000000ULL) >> 56) )) : __fswab64((( __u64)(__be64)(*var)))) + val)))));
++}
++# 106 "/d/kernels/linux-2.6.27.10-clickport/include/linux/byteorder/little_endian.h" 2
++# 80 "/d/kernels/linux-2.6.27.10-clickport/include/asm/byteorder.h" 2
++# 6 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/bitops/le.h" 2
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/bitops/ext2-non-atomic.h" 2
++# 452 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h" 2
++
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/bitops/minix.h" 1
++# 459 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bitops.h" 2
++# 18 "/d/kernels/linux-2.6.27.10-clickport/include/linux/bitops.h" 2
++
++
++
++
++
++
++
++static __inline__ __attribute__((always_inline)) int get_bitmask_order(unsigned int count)
++{
++ int order;
++
++ order = fls(count);
++ return order;
++}
++
++static __inline__ __attribute__((always_inline)) int get_count_order(unsigned int count)
++{
++ int order;
++
++ order = fls(count) - 1;
++ if (count & (count - 1))
++  order++;
++ return order;
++}
++
++static inline __attribute__((always_inline)) unsigned long hweight_long(unsigned long w)
++{
++ return sizeof(w) == 4 ? hweight32(w) : hweight64(w);
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) __u32 rol32(__u32 word, unsigned int shift)
++{
++ return (word << shift) | (word >> (32 - shift));
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) __u32 ror32(__u32 word, unsigned int shift)
++{
++ return (word >> shift) | (word << (32 - shift));
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) __u16 rol16(__u16 word, unsigned int shift)
++{
++ return (word << shift) | (word >> (16 - shift));
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) __u16 ror16(__u16 word, unsigned int shift)
++{
++ return (word >> shift) | (word << (16 - shift));
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) __u8 rol8(__u8 word, unsigned int shift)
++{
++ return (word << shift) | (word >> (8 - shift));
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) __u8 ror8(__u8 word, unsigned int shift)
++{
++ return (word >> shift) | (word << (8 - shift));
++}
++
++static inline __attribute__((always_inline)) unsigned fls_long(unsigned long l)
++{
++ if (sizeof(l) == 4)
++  return fls(l);
++ return fls64(l);
++}
++# 124 "/d/kernels/linux-2.6.27.10-clickport/include/linux/bitops.h"
++extern unsigned long find_first_bit(const unsigned long *addr,
++        unsigned long size);
++# 134 "/d/kernels/linux-2.6.27.10-clickport/include/linux/bitops.h"
++extern unsigned long find_first_zero_bit(const unsigned long *addr,
++      unsigned long size);
++# 147 "/d/kernels/linux-2.6.27.10-clickport/include/linux/bitops.h"
++extern unsigned long find_next_bit(const unsigned long *addr,
++       unsigned long size, unsigned long offset);
++# 157 "/d/kernels/linux-2.6.27.10-clickport/include/linux/bitops.h"
++extern unsigned long find_next_zero_bit(const unsigned long *addr,
++     unsigned long size,
++     unsigned long offset);
++# 124 "/d/kernels/linux-2.6.27.10-clickport/include/asm/cpufeature.h" 2
++
++extern const char * const x86_cap_flags[8*32];
++extern const char * const x86_power_flags[32];
++# 43 "/d/kernels/linux-2.6.27.10-clickport/include/asm/alternative.h" 2
++
++struct alt_instr {
++ u8 *instr;
++ u8 *replacement;
++ u8 cpuid;
++ u8 instrlen;
++ u8 replacementlen;
++ u8 pad1;
++
++
++
++};
++
++extern void alternative_instructions(void);
++extern void apply_alternatives(struct alt_instr *start, struct alt_instr *end);
++
++struct module;
++
++
++extern void alternatives_smp_module_add(struct module *mod, char *name,
++     void *locks, void *locks_end,
++     void *text, void *text_end);
++extern void alternatives_smp_module_del(struct module *mod);
++extern void alternatives_smp_switch(int smp);
++# 75 "/d/kernels/linux-2.6.27.10-clickport/include/asm/alternative.h"
++const unsigned char *const *find_nop_table(void);
++# 148 "/d/kernels/linux-2.6.27.10-clickport/include/asm/alternative.h"
++struct paravirt_patch_site;
++
++void apply_paravirt(struct paravirt_patch_site *start,
++      struct paravirt_patch_site *end);
++# 160 "/d/kernels/linux-2.6.27.10-clickport/include/asm/alternative.h"
++extern void add_nops(void *insns, unsigned int len);
++# 180 "/d/kernels/linux-2.6.27.10-clickport/include/asm/alternative.h"
++extern void *text_poke(void *addr, const void *opcode, size_t len);
++extern void *text_poke_early(void *addr, const void *opcode, size_t len);
++# 8 "/d/click/click-1.6.0-27/linuxmodule/../include/click/fixconfig.h" 2
++# 130 "/d/click/click-1.6.0-27/linuxmodule/../include/click/config-linuxmodule.h" 2
++
++
++
++
++
++extern "C" {
++
++void click_assert_failed(const char *file, int line, const char *problem_text);
++
++}
++# 151 "/d/click/click-1.6.0-27/linuxmodule/../include/click/config.h" 2
++# 21 "/d/click/click-1.6.0-27/linuxmodule/../lib/string.cc" 2
++# 1 "/d/click/click-1.6.0-27/linuxmodule/../include/click/string.hh" 1
++
++
++
++
++
++
++# 1 "/d/click/click-1.6.0-27/linuxmodule/../include/click/algorithm.hh" 1
++
++
++
++
++template <class T>
++inline __attribute__((always_inline)) T *
++find(T *begin, T *end, const T &val)
++{
++    while (begin < end && *begin != val)
++ begin++;
++    return begin;
++}
++
++template <class T>
++inline __attribute__((always_inline)) const T *
++find(const T *begin, const T *end, const T &val)
++{
++    while (begin < end && *begin != val)
++ begin++;
++    return begin;
++}
++
++
++# 8 "/d/click/click-1.6.0-27/linuxmodule/../include/click/string.hh" 2
++# 1 "/d/click/click-1.6.0-27/linuxmodule/../include/click/atomic.hh" 1
++
++
++
++
++# 1 "/d/click/click-1.6.0-27/linuxmodule/../include/click/glue.hh" 1
++# 16 "/d/click/click-1.6.0-27/linuxmodule/../include/click/glue.hh"
++# 1 "/d/click/click-1.6.0-27/linuxmodule/../include/click/cxxprotect.h" 1
++# 17 "/d/click/click-1.6.0-27/linuxmodule/../include/click/glue.hh" 2
++extern "C" {
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h" 1
++# 10 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h"
++# 1 "/usr/lib/gcc/i686-pc-linux-gnu/4.1.1/include/stdarg.h" 1 3 4
++# 43 "/usr/lib/gcc/i686-pc-linux-gnu/4.1.1/include/stdarg.h" 3 4
++typedef __builtin_va_list __gnuc_va_list;
++# 105 "/usr/lib/gcc/i686-pc-linux-gnu/4.1.1/include/stdarg.h" 3 4
++typedef __gnuc_va_list va_list;
++# 11 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/linkage.h" 1
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/linkage.h" 1
++# 6 "/d/kernels/linux-2.6.27.10-clickport/include/linux/linkage.h" 2
++# 12 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h" 2
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/log2.h" 1
++# 21 "/d/kernels/linux-2.6.27.10-clickport/include/linux/log2.h"
++extern __attribute__((const, noreturn))
++int ____ilog2_NaN(void);
++# 31 "/d/kernels/linux-2.6.27.10-clickport/include/linux/log2.h"
++static inline __attribute__((always_inline)) __attribute__((const))
++int __ilog2_u32(u32 n)
++{
++ return fls(n) - 1;
++}
++
++
++
++static inline __attribute__((always_inline)) __attribute__((const))
++int __ilog2_u64(u64 n)
++{
++ return fls64(n) - 1;
++}
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) __attribute__((const))
++bool is_power_of_2(unsigned long n)
++{
++ return (n != 0 && ((n & (n - 1)) == 0));
++}
++
++
++
++
++static inline __attribute__((always_inline)) __attribute__((const))
++unsigned long __roundup_pow_of_two(unsigned long n)
++{
++ return 1UL << fls_long(n - 1);
++}
++
++
++
++
++static inline __attribute__((always_inline)) __attribute__((const))
++unsigned long __rounddown_pow_of_two(unsigned long n)
++{
++ return 1UL << (fls_long(n) - 1);
++}
++# 17 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/typecheck.h" 1
++# 18 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h" 1
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/param.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/param.h" 1
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/linux/param.h" 2
++# 4 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ratelimit.h" 2
++
++
++
++
++struct ratelimit_state {
++ int interval;
++ int burst;
++ int printed;
++ int missed;
++ unsigned long begin;
++};
++
++
++
++
++extern int __ratelimit(struct ratelimit_state *rs);
++
++static inline __attribute__((always_inline)) int ratelimit(void)
++{
++ static struct ratelimit_state rs = {(5 * 1000), 10,};
++
++ return __ratelimit(&rs);
++}
++# 19 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bug.h" 1
++# 38 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bug.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/bug.h" 1
++# 10 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/bug.h"
++struct bug_entry {
++ unsigned long bug_addr;
++
++ const char *file;
++ unsigned short line;
++
++ unsigned short flags;
++};
++# 36 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/bug.h"
++extern void warn_on_slowpath(const char *file, const int line);
++extern void warn_slowpath(const char *file, const int line,
++  const char *fmt, ...) __attribute__((format(printf, 3, 4)));
++# 39 "/d/kernels/linux-2.6.27.10-clickport/include/asm/bug.h" 2
++# 21 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h" 2
++
++extern const char linux_banner[];
++extern const char linux_proc_banner[];
++# 55 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/div64.h" 1
++# 36 "/d/kernels/linux-2.6.27.10-clickport/include/asm/div64.h"
++static inline __attribute__((always_inline)) u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder)
++{
++ union {
++  u64 v64;
++  u32 v32[2];
++ } d = { dividend };
++ u32 upper;
++
++ upper = d.v32[1];
++ d.v32[1] = 0;
++ if (upper >= divisor) {
++  d.v32[1] = upper / divisor;
++  upper %= divisor;
++ }
++ asm ("divl %2" : "=a" (d.v32[0]), "=d" (*remainder) :
++  "rm" (divisor), "0" (d.v32[0]), "1" (upper));
++ return d.v64;
++}
++# 56 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h" 2
++# 100 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h"
++extern int console_printk[];
++
++
++
++
++
++
++struct completion;
++struct pt_regs;
++struct user;
++# 129 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h"
++  void __might_sleep(char *file, int line);
++# 143 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h"
++extern struct atomic_notifier_head panic_notifier_list;
++extern long (*panic_blink)(long time);
++ void panic(const char * fmt, ...)
++ __attribute__ ((noreturn, format (printf, 1, 2))) ;
++extern void oops_enter(void);
++extern void oops_exit(void);
++extern int oops_may_print(void);
++ void do_exit(long error_code)
++ __attribute__((noreturn));
++ void complete_and_exit(struct completion *, long)
++ __attribute__((noreturn));
++extern unsigned long simple_strtoul(const char *,char **,unsigned int);
++extern long simple_strtol(const char *,char **,unsigned int);
++extern unsigned long long simple_strtoull(const char *,char **,unsigned int);
++extern long long simple_strtoll(const char *,char **,unsigned int);
++extern int strict_strtoul(const char *, unsigned int, unsigned long *);
++extern int strict_strtol(const char *, unsigned int, long *);
++extern int strict_strtoull(const char *, unsigned int, unsigned long long *);
++extern int strict_strtoll(const char *, unsigned int, long long *);
++extern int sprintf(char * buf, const char * fmt, ...)
++ __attribute__ ((format (printf, 2, 3)));
++extern int vsprintf(char *buf, const char *, va_list)
++ __attribute__ ((format (printf, 2, 0)));
++extern int snprintf(char * buf, size_t size, const char * fmt, ...)
++ __attribute__ ((format (printf, 3, 4)));
++extern int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
++ __attribute__ ((format (printf, 3, 0)));
++extern int scnprintf(char * buf, size_t size, const char * fmt, ...)
++ __attribute__ ((format (printf, 3, 4)));
++extern int vscnprintf(char *buf, size_t size, const char *fmt, va_list args)
++ __attribute__ ((format (printf, 3, 0)));
++extern char *kasprintf(gfp_t gfp, const char *fmt, ...)
++ __attribute__ ((format (printf, 2, 3)));
++extern char *kvasprintf(gfp_t gfp, const char *fmt, va_list args);
++
++extern int sscanf(const char *, const char *, ...)
++ __attribute__ ((format (scanf, 2, 3)));
++extern int vsscanf(const char *, const char *, va_list)
++ __attribute__ ((format (scanf, 2, 0)));
++
++extern int get_option(char **str, int *pint);
++extern char *get_options(const char *str, int nints, int *ints);
++extern unsigned long long memparse(char *ptr, char **retptr);
++
++extern int core_kernel_text(unsigned long addr);
++extern int __kernel_text_address(unsigned long addr);
++extern int kernel_text_address(unsigned long addr);
++struct pid;
++extern struct pid *session_of_pgrp(struct pid *pgrp);
++
++
++extern "C" __attribute__((regparm(0))) int vprintk(const char *fmt, va_list args)
++ __attribute__ ((format (printf, 1, 0)));
++extern "C" __attribute__((regparm(0))) int printk(const char * fmt, ...)
++ __attribute__ ((format (printf, 1, 2))) ;
++
++extern struct ratelimit_state printk_ratelimit_state;
++extern int printk_ratelimit(void);
++extern bool printk_timed_ratelimit(unsigned long *caller_jiffies,
++       unsigned int interval_msec);
++# 216 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h"
++extern "C" __attribute__((regparm(0))) void __attribute__((format(printf, 1, 2)))
++    early_printk(const char *fmt, ...);
++
++unsigned long int_sqrt(unsigned long);
++
++static inline __attribute__((always_inline)) void console_silent(void)
++{
++ (console_printk[0]) = 0;
++}
++
++static inline __attribute__((always_inline)) void console_verbose(void)
++{
++ if ((console_printk[0]))
++  (console_printk[0]) = 15;
++}
++
++extern void bust_spinlocks(int yes);
++extern void wake_up_klogd(void);
++extern int oops_in_progress;
++extern int panic_timeout;
++extern int panic_on_oops;
++extern int panic_on_unrecovered_nmi;
++extern int tainted;
++extern const char *print_tainted(void);
++extern void add_taint(unsigned);
++extern int root_mountflags;
++
++
++extern enum system_states {
++ SYSTEM_BOOTING,
++ SYSTEM_RUNNING,
++ SYSTEM_HALT,
++ SYSTEM_POWER_OFF,
++ SYSTEM_RESTART,
++ SYSTEM_SUSPEND_DISK,
++} system_state;
++# 264 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h"
++extern void dump_stack(void) ;
++
++enum {
++ DUMP_PREFIX_NONE,
++ DUMP_PREFIX_ADDRESS,
++ DUMP_PREFIX_OFFSET
++};
++extern void hex_dump_to_buffer(const void *buf, size_t len,
++    int rowsize, int groupsize,
++    char *linebuf, size_t linebuflen, bool ascii);
++extern void print_hex_dump(const char *level, const char *prefix_str,
++    int prefix_type, int rowsize, int groupsize,
++    const void *buf, size_t len, bool ascii);
++extern void print_hex_dump_bytes(const char *prefix_str, int prefix_type,
++   const void *buf, size_t len);
++
++extern const char hex_asc[];
++
++
++
++static inline __attribute__((always_inline)) char *pack_hex_byte(char *buf, u8 byte)
++{
++ *buf++ = hex_asc[((byte) & 0xf0) >> 4];
++ *buf++ = hex_asc[((byte) & 0x0f)];
++ return buf;
++}
++# 447 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kernel.h"
++struct sysinfo;
++extern int do_sysinfo(struct sysinfo *info);
++
++
++
++
++struct sysinfo {
++ long uptime;
++ unsigned long loads[3];
++ unsigned long totalram;
++ unsigned long freeram;
++ unsigned long sharedram;
++ unsigned long bufferram;
++ unsigned long totalswap;
++ unsigned long freeswap;
++ unsigned short procs;
++ unsigned short pad;
++ unsigned long totalhigh;
++ unsigned long freehigh;
++ unsigned int mem_unit;
++ char _f[20-2*sizeof(long)-sizeof(int)];
++};
++# 24 "/d/click/click-1.6.0-27/linuxmodule/../include/click/glue.hh" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/version.h" 1
++# 25 "/d/click/click-1.6.0-27/linuxmodule/../include/click/glue.hh" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/string.h" 1
++# 14 "/d/kernels/linux-2.6.27.10-clickport/include/linux/string.h"
++extern char *strndup_user(const char *, long);
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/string.h" 1
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/string_32.h" 1
++# 9 "/d/kernels/linux-2.6.27.10-clickport/include/asm/string_32.h"
++extern char *strcpy(char *dest, const char *src);
++
++
++extern char *strncpy(char *dest, const char *src, size_t count);
++
++
++extern char *strcat(char *dest, const char *src);
++
++
++extern char *strncat(char *dest, const char *src, size_t count);
++
++
++extern int strcmp(const char *cs, const char *ct);
++
++
++extern int strncmp(const char *cs, const char *ct, size_t count);
++
++
++extern char *strchr(const char *s, int c);
++
++
++extern size_t strlen(const char *s);
++
++static inline __attribute__((always_inline)) __attribute__((always_inline)) void *__memcpy(void *to, const void *from, size_t n)
++{
++ int d0, d1, d2;
++ asm volatile("rep ; movsl\n\t"
++       "movl %4,%%ecx\n\t"
++       "andl $3,%%ecx\n\t"
++       "jz 1f\n\t"
++       "rep ; movsb\n\t"
++       "1:"
++       : "=&c" (d0), "=&D" (d1), "=&S" (d2)
++       : "0" (n / 4), "g" (n), "1" ((long)to), "2" ((long)from)
++       : "memory");
++ return to;
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) __attribute__((always_inline)) void *__constant_memcpy(void *to, const void *from,
++            size_t n)
++{
++ long esi, edi;
++ if (!n)
++  return to;
++
++ switch (n) {
++ case 1:
++  *(char *)to = *(char *)from;
++  return to;
++ case 2:
++  *(short *)to = *(short *)from;
++  return to;
++ case 4:
++  *(int *)to = *(int *)from;
++  return to;
++
++ case 3:
++  *(short *)to = *(short *)from;
++  *((char *)to + 2) = *((char *)from + 2);
++  return to;
++ case 5:
++  *(int *)to = *(int *)from;
++  *((char *)to + 4) = *((char *)from + 4);
++  return to;
++ case 6:
++  *(int *)to = *(int *)from;
++  *((short *)to + 2) = *((short *)from + 2);
++  return to;
++ case 8:
++  *(int *)to = *(int *)from;
++  *((int *)to + 1) = *((int *)from + 1);
++  return to;
++ }
++
++ esi = (long)from;
++ edi = (long)to;
++ if (n >= 5 * 4) {
++
++  int ecx;
++  asm volatile("rep ; movsl"
++        : "=&c" (ecx), "=&D" (edi), "=&S" (esi)
++        : "0" (n / 4), "1" (edi), "2" (esi)
++        : "memory"
++  );
++ } else {
++
++  if (n >= 4 * 4)
++   asm volatile("movsl"
++         : "=&D"(edi), "=&S"(esi)
++         : "0"(edi), "1"(esi)
++         : "memory");
++  if (n >= 3 * 4)
++   asm volatile("movsl"
++         : "=&D"(edi), "=&S"(esi)
++         : "0"(edi), "1"(esi)
++         : "memory");
++  if (n >= 2 * 4)
++   asm volatile("movsl"
++         : "=&D"(edi), "=&S"(esi)
++         : "0"(edi), "1"(esi)
++         : "memory");
++  if (n >= 1 * 4)
++   asm volatile("movsl"
++         : "=&D"(edi), "=&S"(esi)
++         : "0"(edi), "1"(esi)
++         : "memory");
++ }
++ switch (n % 4) {
++
++ case 0:
++  return to;
++ case 1:
++  asm volatile("movsb"
++        : "=&D"(edi), "=&S"(esi)
++        : "0"(edi), "1"(esi)
++        : "memory");
++  return to;
++ case 2:
++  asm volatile("movsw"
++        : "=&D"(edi), "=&S"(esi)
++        : "0"(edi), "1"(esi)
++        : "memory");
++  return to;
++ default:
++  asm volatile("movsw\n\tmovsb"
++        : "=&D"(edi), "=&S"(esi)
++        : "0"(edi), "1"(esi)
++        : "memory");
++  return to;
++ }
++}
++# 188 "/d/kernels/linux-2.6.27.10-clickport/include/asm/string_32.h"
++void *memmove(void *dest, const void *src, size_t n);
++
++
++
++
++extern void *memchr(const void *cs, int c, size_t count);
++
++static inline __attribute__((always_inline)) void *__memset_generic(void *s, char c, size_t count)
++{
++ int d0, d1;
++ asm volatile("rep\n\t"
++       "stosb"
++       : "=&c" (d0), "=&D" (d1)
++       : "a" (c), "1" (s), "0" (count)
++       : "memory");
++ return s;
++}
++# 214 "/d/kernels/linux-2.6.27.10-clickport/include/asm/string_32.h"
++static inline __attribute__((always_inline)) __attribute__((always_inline))
++void *__constant_c_memset(void *s, unsigned long c, size_t count)
++{
++ int d0, d1;
++ asm volatile("rep ; stosl\n\t"
++       "testb $2,%b3\n\t"
++       "je 1f\n\t"
++       "stosw\n"
++       "1:\ttestb $1,%b3\n\t"
++       "je 2f\n\t"
++       "stosb\n"
++       "2:"
++       : "=&c" (d0), "=&D" (d1)
++       : "a" (c), "q" (count), "0" (count/4), "1" ((long)s)
++       : "memory");
++ return s;
++}
++
++
++
++extern size_t strnlen(const char *s, size_t count);
++
++
++
++extern char *strstr(const char *cs, const char *ct);
++
++
++
++
++
++static inline __attribute__((always_inline)) __attribute__((always_inline))
++void *__constant_c_and_count_memset(void *s, unsigned long pattern,
++        size_t count)
++{
++ switch (count) {
++ case 0:
++  return s;
++ case 1:
++  *(unsigned char *)s = pattern & 0xff;
++  return s;
++ case 2:
++  *(unsigned short *)s = pattern & 0xffff;
++  return s;
++ case 3:
++  *(unsigned short *)s = pattern & 0xffff;
++  *((unsigned char *)s + 2) = pattern & 0xff;
++  return s;
++ case 4:
++  *(unsigned long *)s = pattern;
++  return s;
++ }
++# 273 "/d/kernels/linux-2.6.27.10-clickport/include/asm/string_32.h"
++ {
++  int d0, d1;
++
++
++
++
++  unsigned long eax = pattern;
++
++
++  switch (count % 4) {
++  case 0:
++   asm volatile("rep ; stosl" "" : "=&c" (d0), "=&D" (d1) : "a" (eax), "0" (count/4), "1" ((long)s) : "memory");
++   return s;
++  case 1:
++   asm volatile("rep ; stosl" "\n\tstosb" : "=&c" (d0), "=&D" (d1) : "a" (eax), "0" (count/4), "1" ((long)s) : "memory");
++   return s;
++  case 2:
++   asm volatile("rep ; stosl" "\n\tstosw" : "=&c" (d0), "=&D" (d1) : "a" (eax), "0" (count/4), "1" ((long)s) : "memory");
++   return s;
++  default:
++   asm volatile("rep ; stosl" "\n\tstosw\n\tstosb" : "=&c" (d0), "=&D" (d1) : "a" (eax), "0" (count/4), "1" ((long)s) : "memory");
++   return s;
++  }
++ }
++
++
++}
++# 322 "/d/kernels/linux-2.6.27.10-clickport/include/asm/string_32.h"
++extern void *memscan(void *addr, int c, size_t size);
++# 3 "/d/kernels/linux-2.6.27.10-clickport/include/asm/string.h" 2
++# 20 "/d/kernels/linux-2.6.27.10-clickport/include/linux/string.h" 2
++# 28 "/d/kernels/linux-2.6.27.10-clickport/include/linux/string.h"
++size_t strlcpy(char *, const char *, size_t);
++# 37 "/d/kernels/linux-2.6.27.10-clickport/include/linux/string.h"
++extern size_t strlcat(char *, const char *, __kernel_size_t);
++# 46 "/d/kernels/linux-2.6.27.10-clickport/include/linux/string.h"
++extern int strnicmp(const char *, const char *, __kernel_size_t);
++
++
++extern int strcasecmp(const char *s1, const char *s2);
++
++
++extern int strncasecmp(const char *s1, const char *s2, size_t n);
++
++
++
++
++
++extern char * strnchr(const char *, size_t, int);
++
++
++extern char * strrchr(const char *,int);
++
++extern char * strstrip(char *);
++# 74 "/d/kernels/linux-2.6.27.10-clickport/include/linux/string.h"
++extern char * strpbrk(const char *,const char *);
++
++
++extern char * strsep(char **,const char *);
++
++
++extern __kernel_size_t strspn(const char *,const char *);
++
++
++extern __kernel_size_t strcspn(const char *,const char *);
++# 99 "/d/kernels/linux-2.6.27.10-clickport/include/linux/string.h"
++extern int __builtin_memcmp(const void *,const void *,__kernel_size_t);
++
++
++
++
++
++extern char *kstrdup(const char *s, gfp_t gfp);
++extern char *kstrndup(const char *s, size_t len, gfp_t gfp);
++extern void *kmemdup(const void *src, size_t len, gfp_t gfp);
++
++extern char **argv_split(gfp_t gfp, const char *str, int *argcp);
++extern void argv_free(char **argv);
++
++extern bool sysfs_streq(const char *s1, const char *s2);
++
++extern ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos,
++   const void *from, size_t available);
++# 26 "/d/click/click-1.6.0-27/linuxmodule/../include/click/glue.hh" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h" 1
++# 19 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/time.h" 1
++
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/cache.h" 1
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/cache.h" 1
++# 6 "/d/kernels/linux-2.6.27.10-clickport/include/linux/cache.h" 2
++# 8 "/d/kernels/linux-2.6.27.10-clickport/include/linux/time.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h" 1
++# 29 "/d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h" 1
++# 50 "/d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h" 1
++# 9 "/d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h" 1
++# 12 "/d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h"
++struct timespec;
++struct compat_timespec;
++
++
++
++
++struct restart_block {
++ long (*fn)(struct restart_block *);
++ union {
++  struct {
++   unsigned long arg0, arg1, arg2, arg3;
++  };
++
++  struct {
++   u32 *uaddr;
++   u32 val;
++   u32 flags;
++   u32 bitset;
++   u64 time;
++  } futex;
++
++  struct {
++   clockid_t index;
++   struct timespec *rmtp;
++
++
++
++   u64 expires;
++  } nanosleep;
++ };
++};
++
++extern long do_no_restart_syscall(struct restart_block *parm);
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h" 1
++# 11 "/d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/const.h" 1
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h" 2
++# 44 "/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/page_32.h" 1
++# 52 "/d/kernels/linux-2.6.27.10-clickport/include/asm/page_32.h"
++typedef unsigned long pteval_t;
++typedef unsigned long pmdval_t;
++typedef unsigned long pudval_t;
++typedef unsigned long pgdval_t;
++typedef unsigned long pgprotval_t;
++typedef unsigned long phys_addr_t;
++
++typedef union {
++ pteval_t pte;
++ pteval_t pte_low;
++} pte_t;
++
++
++
++
++
++typedef struct page *pgtable_t;
++# 83 "/d/kernels/linux-2.6.27.10-clickport/include/asm/page_32.h"
++extern int nx_enabled;
++
++
++
++
++
++extern unsigned int __VMALLOC_RESERVE;
++extern int sysctl_legacy_va_layout;
++
++
++
++
++extern void find_low_pfn_range(void);
++extern unsigned long init_memory_mapping(unsigned long start,
++      unsigned long end);
++extern void initmem_init(unsigned long, unsigned long);
++extern void setup_bootmem_allocator(void);
++# 117 "/d/kernels/linux-2.6.27.10-clickport/include/asm/page_32.h"
++static inline __attribute__((always_inline)) void clear_page(void *page)
++{
++ (__builtin_constant_p(0) ? (__builtin_constant_p((((1UL) << 12))) ? __constant_c_and_count_memset(((page)), ((0x01010101UL * (unsigned char)(0))), ((((1UL) << 12)))) : __constant_c_memset(((page)), ((0x01010101UL * (unsigned char)(0))), ((((1UL) << 12))))) : (__builtin_constant_p((((1UL) << 12))) ? __memset_generic((((page))), (((0))), (((((1UL) << 12))))) : __memset_generic(((page)), ((0)), ((((1UL) << 12))))));
++}
++
++static inline __attribute__((always_inline)) void copy_page(void *to, void *from)
++{
++ (__builtin_constant_p((((1UL) << 12))) ? __constant_memcpy((to), (from), (((1UL) << 12))) : __memcpy((to), (from), (((1UL) << 12))));
++}
++# 45 "/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h" 2
++# 56 "/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h"
++typedef struct { pgdval_t pgd; } pgd_t;
++typedef struct { pgprotval_t pgprot; } pgprot_t;
++
++extern int page_is_ram(unsigned long pagenr);
++extern int devmem_is_allowed(unsigned long pagenr);
++extern void map_devmem(unsigned long pfn, unsigned long size,
++         pgprot_t vma_prot);
++extern void unmap_devmem(unsigned long pfn, unsigned long size,
++    pgprot_t vma_prot);
++
++extern unsigned long max_low_pfn_mapped;
++extern unsigned long max_pfn_mapped;
++
++struct page;
++
++static inline __attribute__((always_inline)) void clear_user_page(void *page, unsigned long vaddr,
++    struct page *pg)
++{
++ clear_page(page);
++}
++
++static inline __attribute__((always_inline)) void copy_user_page(void *to, void *from, unsigned long vaddr,
++    struct page *topage)
++{
++ copy_page(to, from);
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) pgd_t native_make_pgd(pgdval_t val)
++{
++ return (pgd_t) { val };
++}
++
++static inline __attribute__((always_inline)) pgdval_t native_pgd_val(pgd_t pgd)
++{
++ return pgd.pgd;
++}
++# 131 "/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h" 1
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h" 1
++# 13 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h"
++typedef struct { pgd_t pgd; } pud_t;
++# 25 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h"
++static inline __attribute__((always_inline)) int pgd_none(pgd_t pgd) { return 0; }
++static inline __attribute__((always_inline)) int pgd_bad(pgd_t pgd) { return 0; }
++static inline __attribute__((always_inline)) int pgd_present(pgd_t pgd) { return 1; }
++static inline __attribute__((always_inline)) void pgd_clear(pgd_t *pgd) { }
++# 38 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopud.h"
++static inline __attribute__((always_inline)) pud_t * pud_offset(pgd_t * pgd, unsigned long address)
++{
++ return (pud_t *)pgd;
++}
++# 7 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h" 2
++
++struct mm_struct;
++# 17 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h"
++typedef struct { pud_t pud; } pmd_t;
++# 29 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h"
++static inline __attribute__((always_inline)) int pud_none(pud_t pud) { return 0; }
++static inline __attribute__((always_inline)) int pud_bad(pud_t pud) { return 0; }
++static inline __attribute__((always_inline)) int pud_present(pud_t pud) { return 1; }
++static inline __attribute__((always_inline)) void pud_clear(pud_t *pud) { }
++# 43 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h"
++static inline __attribute__((always_inline)) pmd_t * pmd_offset(pud_t * pud, unsigned long address)
++{
++ return (pmd_t *)pud;
++}
++# 59 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable-nopmd.h"
++static inline __attribute__((always_inline)) void pmd_free(struct mm_struct *mm, pmd_t *pmd)
++{
++}
++# 132 "/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h" 2
++
++static inline __attribute__((always_inline)) pmdval_t native_pmd_val(pmd_t pmd)
++{
++ return native_pgd_val(pmd.pud.pgd);
++}
++
++
++static inline __attribute__((always_inline)) pte_t native_make_pte(pteval_t val)
++{
++ return (pte_t) ({pte_t duh; duh.pte = val;duh;});
++}
++
++static inline __attribute__((always_inline)) pteval_t native_pte_val(pte_t pte)
++{
++ return pte.pte;
++}
++
++static inline __attribute__((always_inline)) pteval_t native_pte_flags(pte_t pte)
++{
++ return native_pte_val(pte) & (~((pteval_t)(((signed long)(~(((1UL) << 12)-1))) & ((phys_addr_t)(1ULL << 32) - 1))));
++}
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h" 1
++
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h" 1
++# 8 "/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h" 2
++# 32 "/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/cpumask.h" 1
++# 138 "/d/kernels/linux-2.6.27.10-clickport/include/linux/cpumask.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/threads.h" 1
++# 139 "/d/kernels/linux-2.6.27.10-clickport/include/linux/cpumask.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/bitmap.h" 1
++# 87 "/d/kernels/linux-2.6.27.10-clickport/include/linux/bitmap.h"
++extern int __bitmap_empty(const unsigned long *bitmap, int bits);
++extern int __bitmap_full(const unsigned long *bitmap, int bits);
++extern int __bitmap_equal(const unsigned long *bitmap1,
++                 const unsigned long *bitmap2, int bits);
++extern void __bitmap_complement(unsigned long *dst, const unsigned long *src,
++   int bits);
++extern void __bitmap_shift_right(unsigned long *dst,
++                        const unsigned long *src, int shift, int bits);
++extern void __bitmap_shift_left(unsigned long *dst,
++                        const unsigned long *src, int shift, int bits);
++extern void __bitmap_and(unsigned long *dst, const unsigned long *bitmap1,
++   const unsigned long *bitmap2, int bits);
++extern void __bitmap_or(unsigned long *dst, const unsigned long *bitmap1,
++   const unsigned long *bitmap2, int bits);
++extern void __bitmap_xor(unsigned long *dst, const unsigned long *bitmap1,
++   const unsigned long *bitmap2, int bits);
++extern void __bitmap_andnot(unsigned long *dst, const unsigned long *bitmap1,
++   const unsigned long *bitmap2, int bits);
++extern int __bitmap_intersects(const unsigned long *bitmap1,
++   const unsigned long *bitmap2, int bits);
++extern int __bitmap_subset(const unsigned long *bitmap1,
++   const unsigned long *bitmap2, int bits);
++extern int __bitmap_weight(const unsigned long *bitmap, int bits);
++
++extern int bitmap_scnprintf(char *buf, unsigned int len,
++   const unsigned long *src, int nbits);
++extern int bitmap_scnprintf_len(unsigned int nr_bits);
++extern int __bitmap_parse(const char *buf, unsigned int buflen, int is_user,
++   unsigned long *dst, int nbits);
++extern int bitmap_parse_user(const char *ubuf, unsigned int ulen,
++   unsigned long *dst, int nbits);
++extern int bitmap_scnlistprintf(char *buf, unsigned int len,
++   const unsigned long *src, int nbits);
++extern int bitmap_parselist(const char *buf, unsigned long *maskp,
++   int nmaskbits);
++extern void bitmap_remap(unsigned long *dst, const unsigned long *src,
++  const unsigned long *old, const unsigned long *xxx_new, int bits);
++extern int bitmap_bitremap(int oldbit,
++  const unsigned long *old, const unsigned long *xxx_new, int bits);
++extern void bitmap_onto(unsigned long *dst, const unsigned long *orig,
++  const unsigned long *relmap, int bits);
++extern void bitmap_fold(unsigned long *dst, const unsigned long *orig,
++  int sz, int bits);
++extern int bitmap_find_free_region(unsigned long *bitmap, int bits, int order);
++extern void bitmap_release_region(unsigned long *bitmap, int pos, int order);
++extern int bitmap_allocate_region(unsigned long *bitmap, int pos, int order);
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void bitmap_zero(unsigned long *dst, int nbits)
++{
++ if (nbits <= 32)
++  *dst = 0UL;
++ else {
++  int len = (((nbits) + (8 * sizeof(long)) - 1) / (8 * sizeof(long))) * sizeof(unsigned long);
++  (__builtin_constant_p(0) ? (__builtin_constant_p((len)) ? __constant_c_and_count_memset(((dst)), ((0x01010101UL * (unsigned char)(0))), ((len))) : __constant_c_memset(((dst)), ((0x01010101UL * (unsigned char)(0))), ((len)))) : (__builtin_constant_p((len)) ? __memset_generic((((dst))), (((0))), (((len)))) : __memset_generic(((dst)), ((0)), ((len)))));
++ }
++}
++
++static inline __attribute__((always_inline)) void bitmap_fill(unsigned long *dst, int nbits)
++{
++ size_t nlongs = (((nbits) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)));
++ if (nlongs > 1) {
++  int len = (nlongs - 1) * sizeof(unsigned long);
++  (__builtin_constant_p(0xff) ? (__builtin_constant_p((len)) ? __constant_c_and_count_memset(((dst)), ((0x01010101UL * (unsigned char)(0xff))), ((len))) : __constant_c_memset(((dst)), ((0x01010101UL * (unsigned char)(0xff))), ((len)))) : (__builtin_constant_p((len)) ? __memset_generic((((dst))), (((0xff))), (((len)))) : __memset_generic(((dst)), ((0xff)), ((len)))));
++ }
++ dst[nlongs - 1] = ( ((nbits) % 32) ? (1UL<<((nbits) % 32))-1 : ~0UL );
++}
++
++static inline __attribute__((always_inline)) void bitmap_copy(unsigned long *dst, const unsigned long *src,
++   int nbits)
++{
++ if (nbits <= 32)
++  *dst = *src;
++ else {
++  int len = (((nbits) + (8 * sizeof(long)) - 1) / (8 * sizeof(long))) * sizeof(unsigned long);
++  (__builtin_constant_p((len)) ? __constant_memcpy((dst), (src), (len)) : __memcpy((dst), (src), (len)));
++ }
++}
++
++static inline __attribute__((always_inline)) void bitmap_and(unsigned long *dst, const unsigned long *src1,
++   const unsigned long *src2, int nbits)
++{
++ if (nbits <= 32)
++  *dst = *src1 & *src2;
++ else
++  __bitmap_and(dst, src1, src2, nbits);
++}
++
++static inline __attribute__((always_inline)) void bitmap_or(unsigned long *dst, const unsigned long *src1,
++   const unsigned long *src2, int nbits)
++{
++ if (nbits <= 32)
++  *dst = *src1 | *src2;
++ else
++  __bitmap_or(dst, src1, src2, nbits);
++}
++
++static inline __attribute__((always_inline)) void bitmap_xor(unsigned long *dst, const unsigned long *src1,
++   const unsigned long *src2, int nbits)
++{
++ if (nbits <= 32)
++  *dst = *src1 ^ *src2;
++ else
++  __bitmap_xor(dst, src1, src2, nbits);
++}
++
++static inline __attribute__((always_inline)) void bitmap_andnot(unsigned long *dst, const unsigned long *src1,
++   const unsigned long *src2, int nbits)
++{
++ if (nbits <= 32)
++  *dst = *src1 & ~(*src2);
++ else
++  __bitmap_andnot(dst, src1, src2, nbits);
++}
++
++static inline __attribute__((always_inline)) void bitmap_complement(unsigned long *dst, const unsigned long *src,
++   int nbits)
++{
++ if (nbits <= 32)
++  *dst = ~(*src) & ( ((nbits) % 32) ? (1UL<<((nbits) % 32))-1 : ~0UL );
++ else
++  __bitmap_complement(dst, src, nbits);
++}
++
++static inline __attribute__((always_inline)) int bitmap_equal(const unsigned long *src1,
++   const unsigned long *src2, int nbits)
++{
++ if (nbits <= 32)
++  return ! ((*src1 ^ *src2) & ( ((nbits) % 32) ? (1UL<<((nbits) % 32))-1 : ~0UL ));
++ else
++  return __bitmap_equal(src1, src2, nbits);
++}
++
++static inline __attribute__((always_inline)) int bitmap_intersects(const unsigned long *src1,
++   const unsigned long *src2, int nbits)
++{
++ if (nbits <= 32)
++  return ((*src1 & *src2) & ( ((nbits) % 32) ? (1UL<<((nbits) % 32))-1 : ~0UL )) != 0;
++ else
++  return __bitmap_intersects(src1, src2, nbits);
++}
++
++static inline __attribute__((always_inline)) int bitmap_subset(const unsigned long *src1,
++   const unsigned long *src2, int nbits)
++{
++ if (nbits <= 32)
++  return ! ((*src1 & ~(*src2)) & ( ((nbits) % 32) ? (1UL<<((nbits) % 32))-1 : ~0UL ));
++ else
++  return __bitmap_subset(src1, src2, nbits);
++}
++
++static inline __attribute__((always_inline)) int bitmap_empty(const unsigned long *src, int nbits)
++{
++ if (nbits <= 32)
++  return ! (*src & ( ((nbits) % 32) ? (1UL<<((nbits) % 32))-1 : ~0UL ));
++ else
++  return __bitmap_empty(src, nbits);
++}
++
++static inline __attribute__((always_inline)) int bitmap_full(const unsigned long *src, int nbits)
++{
++ if (nbits <= 32)
++  return ! (~(*src) & ( ((nbits) % 32) ? (1UL<<((nbits) % 32))-1 : ~0UL ));
++ else
++  return __bitmap_full(src, nbits);
++}
++
++static inline __attribute__((always_inline)) int bitmap_weight(const unsigned long *src, int nbits)
++{
++ if (nbits <= 32)
++  return hweight_long(*src & ( ((nbits) % 32) ? (1UL<<((nbits) % 32))-1 : ~0UL ));
++ return __bitmap_weight(src, nbits);
++}
++
++static inline __attribute__((always_inline)) void bitmap_shift_right(unsigned long *dst,
++   const unsigned long *src, int n, int nbits)
++{
++ if (nbits <= 32)
++  *dst = *src >> n;
++ else
++  __bitmap_shift_right(dst, src, n, nbits);
++}
++
++static inline __attribute__((always_inline)) void bitmap_shift_left(unsigned long *dst,
++   const unsigned long *src, int n, int nbits)
++{
++ if (nbits <= 32)
++  *dst = (*src << n) & ( ((nbits) % 32) ? (1UL<<((nbits) % 32))-1 : ~0UL );
++ else
++  __bitmap_shift_left(dst, src, n, nbits);
++}
++
++static inline __attribute__((always_inline)) int bitmap_parse(const char *buf, unsigned int buflen,
++   unsigned long *maskp, int nmaskbits)
++{
++ return __bitmap_parse(buf, buflen, 0, maskp, nmaskbits);
++}
++# 140 "/d/kernels/linux-2.6.27.10-clickport/include/linux/cpumask.h" 2
++
++typedef struct { unsigned long bits[(((32) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))]; } cpumask_t;
++extern cpumask_t _unused_cpumask_arg_;
++
++
++static inline __attribute__((always_inline)) void __cpu_set(int cpu, volatile cpumask_t *dstp)
++{
++ set_bit(cpu, dstp->bits);
++}
++
++
++static inline __attribute__((always_inline)) void __cpu_clear(int cpu, volatile cpumask_t *dstp)
++{
++ clear_bit(cpu, dstp->bits);
++}
++
++
++static inline __attribute__((always_inline)) void __cpus_setall(cpumask_t *dstp, int nbits)
++{
++ bitmap_fill(dstp->bits, nbits);
++}
++
++
++static inline __attribute__((always_inline)) void __cpus_clear(cpumask_t *dstp, int nbits)
++{
++ bitmap_zero(dstp->bits, nbits);
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) int __cpu_test_and_set(int cpu, cpumask_t *addr)
++{
++ return test_and_set_bit(cpu, addr->bits);
++}
++
++
++static inline __attribute__((always_inline)) void __cpus_and(cpumask_t *dstp, const cpumask_t *src1p,
++     const cpumask_t *src2p, int nbits)
++{
++ bitmap_and(dstp->bits, src1p->bits, src2p->bits, nbits);
++}
++
++
++static inline __attribute__((always_inline)) void __cpus_or(cpumask_t *dstp, const cpumask_t *src1p,
++     const cpumask_t *src2p, int nbits)
++{
++ bitmap_or(dstp->bits, src1p->bits, src2p->bits, nbits);
++}
++
++
++static inline __attribute__((always_inline)) void __cpus_xor(cpumask_t *dstp, const cpumask_t *src1p,
++     const cpumask_t *src2p, int nbits)
++{
++ bitmap_xor(dstp->bits, src1p->bits, src2p->bits, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) void __cpus_andnot(cpumask_t *dstp, const cpumask_t *src1p,
++     const cpumask_t *src2p, int nbits)
++{
++ bitmap_andnot(dstp->bits, src1p->bits, src2p->bits, nbits);
++}
++
++
++static inline __attribute__((always_inline)) void __cpus_complement(cpumask_t *dstp,
++     const cpumask_t *srcp, int nbits)
++{
++ bitmap_complement(dstp->bits, srcp->bits, nbits);
++}
++
++
++static inline __attribute__((always_inline)) int __cpus_equal(const cpumask_t *src1p,
++     const cpumask_t *src2p, int nbits)
++{
++ return bitmap_equal(src1p->bits, src2p->bits, nbits);
++}
++
++
++static inline __attribute__((always_inline)) int __cpus_intersects(const cpumask_t *src1p,
++     const cpumask_t *src2p, int nbits)
++{
++ return bitmap_intersects(src1p->bits, src2p->bits, nbits);
++}
++
++
++static inline __attribute__((always_inline)) int __cpus_subset(const cpumask_t *src1p,
++     const cpumask_t *src2p, int nbits)
++{
++ return bitmap_subset(src1p->bits, src2p->bits, nbits);
++}
++
++
++static inline __attribute__((always_inline)) int __cpus_empty(const cpumask_t *srcp, int nbits)
++{
++ return bitmap_empty(srcp->bits, nbits);
++}
++
++
++static inline __attribute__((always_inline)) int __cpus_full(const cpumask_t *srcp, int nbits)
++{
++ return bitmap_full(srcp->bits, nbits);
++}
++
++
++static inline __attribute__((always_inline)) int __cpus_weight(const cpumask_t *srcp, int nbits)
++{
++ return bitmap_weight(srcp->bits, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) void __cpus_shift_right(cpumask_t *dstp,
++     const cpumask_t *srcp, int n, int nbits)
++{
++ bitmap_shift_right(dstp->bits, srcp->bits, n, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) void __cpus_shift_left(cpumask_t *dstp,
++     const cpumask_t *srcp, int n, int nbits)
++{
++ bitmap_shift_left(dstp->bits, srcp->bits, n, nbits);
++}
++# 275 "/d/kernels/linux-2.6.27.10-clickport/include/linux/cpumask.h"
++extern const unsigned long
++ cpu_bit_bitmap[32 +1][(((32) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))];
++
++static inline __attribute__((always_inline)) const cpumask_t *get_cpu_mask(unsigned int cpu)
++{
++ const unsigned long *p = cpu_bit_bitmap[1 + cpu % 32];
++ p -= cpu / 32;
++ return (const cpumask_t *)p;
++}
++# 341 "/d/kernels/linux-2.6.27.10-clickport/include/linux/cpumask.h"
++static inline __attribute__((always_inline)) int __cpumask_scnprintf(char *buf, int len,
++     const cpumask_t *srcp, int nbits)
++{
++ return bitmap_scnprintf(buf, len, srcp->bits, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) int __cpumask_parse_user(const char *buf, int len,
++     cpumask_t *dstp, int nbits)
++{
++ return bitmap_parse_user(buf, len, dstp->bits, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) int __cpulist_scnprintf(char *buf, int len,
++     const cpumask_t *srcp, int nbits)
++{
++ return bitmap_scnlistprintf(buf, len, srcp->bits, nbits);
++}
++
++
++static inline __attribute__((always_inline)) int __cpulist_parse(const char *buf, cpumask_t *dstp, int nbits)
++{
++ return bitmap_parselist(buf, dstp->bits, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) int __cpu_remap(int oldbit,
++  const cpumask_t *oldp, const cpumask_t *newp, int nbits)
++{
++ return bitmap_bitremap(oldbit, oldp->bits, newp->bits, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) void __cpus_remap(cpumask_t *dstp, const cpumask_t *srcp,
++  const cpumask_t *oldp, const cpumask_t *newp, int nbits)
++{
++ bitmap_remap(dstp->bits, srcp->bits, oldp->bits, newp->bits, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) void __cpus_onto(cpumask_t *dstp, const cpumask_t *origp,
++  const cpumask_t *relmapp, int nbits)
++{
++ bitmap_onto(dstp->bits, origp->bits, relmapp->bits, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) void __cpus_fold(cpumask_t *dstp, const cpumask_t *origp,
++  int sz, int nbits)
++{
++ bitmap_fold(dstp->bits, origp->bits, sz, nbits);
++}
++# 412 "/d/kernels/linux-2.6.27.10-clickport/include/linux/cpumask.h"
++extern int nr_cpu_ids;
++int __first_cpu(const cpumask_t *srcp);
++int __next_cpu(int n, const cpumask_t *srcp);
++int __any_online_cpu(const cpumask_t *mask);
++# 501 "/d/kernels/linux-2.6.27.10-clickport/include/linux/cpumask.h"
++extern cpumask_t cpu_possible_map;
++extern cpumask_t cpu_online_map;
++extern cpumask_t cpu_present_map;
++extern cpumask_t cpu_active_map;
++# 33 "/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/kmap_types.h" 1
++# 10 "/d/kernels/linux-2.6.27.10-clickport/include/asm/kmap_types.h"
++enum km_type {
++ KM_BOUNCE_READ,
++ KM_SKB_SUNRPC_DATA,
++ KM_SKB_DATA_SOFTIRQ,
++ KM_USER0,
++ KM_USER1,
++ KM_BIO_SRC_IRQ,
++ KM_BIO_DST_IRQ,
++ KM_PTE0,
++ KM_PTE1,
++ KM_IRQ0,
++ KM_IRQ1,
++ KM_SOFTIRQ0,
++ KM_SOFTIRQ1,
++ KM_TYPE_NR
++};
++# 34 "/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/desc_defs.h" 1
++# 22 "/d/kernels/linux-2.6.27.10-clickport/include/asm/desc_defs.h"
++struct desc_struct {
++ union {
++  struct {
++   unsigned int a;
++   unsigned int b;
++  };
++  struct {
++   u16 limit0;
++   u16 base0;
++   unsigned base1: 8, type: 4, s: 1, dpl: 2, p: 1;
++   unsigned limit: 4, avl: 1, l: 1, d: 1, g: 1, base2: 8;
++  };
++ };
++} __attribute__((packed));
++
++enum {
++ GATE_INTERRUPT = 0xE,
++ GATE_TRAP = 0xF,
++ GATE_CALL = 0xC,
++ GATE_TASK = 0x5,
++};
++
++
++struct gate_struct64 {
++ u16 offset_low;
++ u16 segment;
++ unsigned ist : 3, zero0 : 5, type : 5, dpl : 2, p : 1;
++ u16 offset_middle;
++ u32 offset_high;
++ u32 zero1;
++} __attribute__((packed));
++
++
++
++
++
++enum {
++ DESC_TSS = 0x9,
++ DESC_LDT = 0x2,
++ DESCTYPE_S = 0x10,
++};
++
++
++struct ldttss_desc64 {
++ u16 limit0;
++ u16 base0;
++ unsigned base1 : 8, type : 5, dpl : 2, p : 1;
++ unsigned limit1 : 4, zero0 : 3, g : 1, base2 : 8;
++ u32 base3;
++ u32 zero1;
++} __attribute__((packed));
++# 81 "/d/kernels/linux-2.6.27.10-clickport/include/asm/desc_defs.h"
++typedef struct desc_struct gate_desc;
++typedef struct desc_struct ldt_desc;
++typedef struct desc_struct tss_desc;
++
++
++
++
++struct desc_ptr {
++ unsigned short size;
++ unsigned long address;
++} __attribute__((packed)) ;
++# 35 "/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h" 2
++
++struct page;
++struct thread_struct;
++struct desc_ptr;
++struct tss_struct;
++struct mm_struct;
++struct desc_struct;
++
++
++struct pv_info {
++ unsigned int kernel_rpl;
++ int shared_kernel_pmd;
++ int paravirt_enabled;
++ const char *name;
++};
++
++struct pv_init_ops {
++# 60 "/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h"
++ unsigned (*patch)(u8 type, u16 clobber, void *insnbuf,
++     unsigned long addr, unsigned len);
++
++
++ void (*arch_setup)(void);
++ char *(*memory_setup)(void);
++ void (*post_allocator_init)(void);
++
++
++ void (*banner)(void);
++};
++
++
++struct pv_lazy_ops {
++
++ void (*enter)(void);
++ void (*leave)(void);
++};
++
++struct pv_time_ops {
++ void (*time_init)(void);
++
++
++ unsigned long (*get_wallclock)(void);
++ int (*set_wallclock)(unsigned long);
++
++ unsigned long long (*sched_clock)(void);
++ unsigned long (*get_tsc_khz)(void);
++};
++
++struct pv_cpu_ops {
++
++ unsigned long (*get_debugreg)(int regno);
++ void (*set_debugreg)(int regno, unsigned long value);
++
++ void (*clts)(void);
++
++ unsigned long (*read_cr0)(void);
++ void (*write_cr0)(unsigned long);
++
++ unsigned long (*read_cr4_safe)(void);
++ unsigned long (*read_cr4)(void);
++ void (*write_cr4)(unsigned long);
++
++
++
++
++
++
++
++ void (*load_tr_desc)(void);
++ void (*load_gdt)(const struct desc_ptr *);
++ void (*load_idt)(const struct desc_ptr *);
++ void (*store_gdt)(struct desc_ptr *);
++ void (*store_idt)(struct desc_ptr *);
++ void (*set_ldt)(const void *desc, unsigned entries);
++ unsigned long (*store_tr)(void);
++ void (*load_tls)(struct thread_struct *t, unsigned int cpu);
++
++
++
++ void (*write_ldt_entry)(struct desc_struct *ldt, int entrynum,
++    const void *desc);
++ void (*write_gdt_entry)(struct desc_struct *,
++    int entrynum, const void *desc, int size);
++ void (*write_idt_entry)(gate_desc *,
++    int entrynum, const gate_desc *gate);
++ void (*load_sp0)(struct tss_struct *tss, struct thread_struct *t);
++
++ void (*set_iopl_mask)(unsigned mask);
++
++ void (*wbinvd)(void);
++ void (*io_delay)(void);
++
++
++ void (*cpuid)(unsigned int *eax, unsigned int *ebx,
++        unsigned int *ecx, unsigned int *edx);
++
++
++
++ u64 (*read_msr)(unsigned int msr, int *err);
++ int (*write_msr)(unsigned int msr, unsigned low, unsigned high);
++
++ u64 (*read_tsc)(void);
++ u64 (*read_pmc)(int counter);
++ unsigned long long (*read_tscp)(unsigned int *aux);
++
++
++
++
++
++
++
++ void (*irq_enable_sysexit)(void);
++
++
++
++
++
++
++
++ void (*usergs_sysret64)(void);
++
++
++
++
++
++
++
++ void (*usergs_sysret32)(void);
++
++
++
++ void (*iret)(void);
++
++ void (*swapgs)(void);
++
++ struct pv_lazy_ops lazy_mode;
++};
++
++struct pv_irq_ops {
++ void (*init_IRQ)(void);
++
++
++
++
++
++
++
++ unsigned long (*save_fl)(void);
++ void (*restore_fl)(unsigned long);
++ void (*irq_disable)(void);
++ void (*irq_enable)(void);
++ void (*safe_halt)(void);
++ void (*halt)(void);
++
++
++
++
++};
++
++struct pv_apic_ops {
++
++
++
++
++
++ void (*apic_write)(unsigned long reg, u32 v);
++ u32 (*apic_read)(unsigned long reg);
++ void (*setup_boot_clock)(void);
++ void (*setup_secondary_clock)(void);
++
++ void (*startup_ipi_hook)(int phys_apicid,
++     unsigned long start_eip,
++     unsigned long start_esp);
++
++};
++
++struct pv_mmu_ops {
++
++
++
++
++
++
++ void (*pagetable_setup_start)(pgd_t *pgd_base);
++ void (*pagetable_setup_done)(pgd_t *pgd_base);
++
++ unsigned long (*read_cr2)(void);
++ void (*write_cr2)(unsigned long);
++
++ unsigned long (*read_cr3)(void);
++ void (*write_cr3)(unsigned long);
++
++
++
++
++
++ void (*activate_mm)(struct mm_struct *prev,
++       struct mm_struct *next);
++ void (*dup_mmap)(struct mm_struct *oldmm,
++    struct mm_struct *mm);
++ void (*exit_mmap)(struct mm_struct *mm);
++
++
++
++ void (*flush_tlb_user)(void);
++ void (*flush_tlb_kernel)(void);
++ void (*flush_tlb_single)(unsigned long addr);
++ void (*flush_tlb_others)(const cpumask_t *cpus, struct mm_struct *mm,
++     unsigned long va);
++
++
++ int (*pgd_alloc)(struct mm_struct *mm);
++ void (*pgd_free)(struct mm_struct *mm, pgd_t *pgd);
++
++
++
++
++
++ void (*alloc_pte)(struct mm_struct *mm, u32 pfn);
++ void (*alloc_pmd)(struct mm_struct *mm, u32 pfn);
++ void (*alloc_pmd_clone)(u32 pfn, u32 clonepfn, u32 start, u32 count);
++ void (*alloc_pud)(struct mm_struct *mm, u32 pfn);
++ void (*release_pte)(u32 pfn);
++ void (*release_pmd)(u32 pfn);
++ void (*release_pud)(u32 pfn);
++
++
++ void (*set_pte)(pte_t *ptep, pte_t pteval);
++ void (*set_pte_at)(struct mm_struct *mm, unsigned long addr,
++      pte_t *ptep, pte_t pteval);
++ void (*set_pmd)(pmd_t *pmdp, pmd_t pmdval);
++ void (*pte_update)(struct mm_struct *mm, unsigned long addr,
++      pte_t *ptep);
++ void (*pte_update_defer)(struct mm_struct *mm,
++     unsigned long addr, pte_t *ptep);
++
++ pte_t (*ptep_modify_prot_start)(struct mm_struct *mm, unsigned long addr,
++     pte_t *ptep);
++ void (*ptep_modify_prot_commit)(struct mm_struct *mm, unsigned long addr,
++     pte_t *ptep, pte_t pte);
++
++ pteval_t (*pte_val)(pte_t);
++ pteval_t (*pte_flags)(pte_t);
++ pte_t (*make_pte)(pteval_t pte);
++
++ pgdval_t (*pgd_val)(pgd_t);
++ pgd_t (*make_pgd)(pgdval_t pgd);
++# 315 "/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h"
++ void *(*kmap_atomic_pte)(struct page *page, enum km_type type);
++
++
++ struct pv_lazy_ops lazy_mode;
++
++
++
++
++
++ void (*set_fixmap)(unsigned idx,
++      unsigned long phys, pgprot_t flags);
++};
++
++struct raw_spinlock;
++struct pv_lock_ops {
++ int (*spin_is_locked)(struct raw_spinlock *lock);
++ int (*spin_is_contended)(struct raw_spinlock *lock);
++ void (*spin_lock)(struct raw_spinlock *lock);
++ int (*spin_trylock)(struct raw_spinlock *lock);
++ void (*spin_unlock)(struct raw_spinlock *lock);
++};
++
++
++
++
++struct paravirt_patch_template {
++ struct pv_init_ops pv_init_ops;
++ struct pv_time_ops pv_time_ops;
++ struct pv_cpu_ops pv_cpu_ops;
++ struct pv_irq_ops pv_irq_ops;
++ struct pv_apic_ops pv_apic_ops;
++ struct pv_mmu_ops pv_mmu_ops;
++ struct pv_lock_ops pv_lock_ops;
++};
++
++extern struct pv_info pv_info;
++extern struct pv_init_ops pv_init_ops;
++extern struct pv_time_ops pv_time_ops;
++extern struct pv_cpu_ops pv_cpu_ops;
++extern struct pv_irq_ops pv_irq_ops;
++extern struct pv_apic_ops pv_apic_ops;
++extern struct pv_mmu_ops pv_mmu_ops;
++extern struct pv_lock_ops pv_lock_ops;
++# 391 "/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h"
++unsigned paravirt_patch_nop(void);
++unsigned paravirt_patch_ignore(unsigned len);
++unsigned paravirt_patch_call(void *insnbuf,
++        const void *target, u16 tgt_clobbers,
++        unsigned long addr, u16 site_clobbers,
++        unsigned len);
++unsigned paravirt_patch_jmp(void *insnbuf, const void *target,
++       unsigned long addr, unsigned len);
++unsigned paravirt_patch_default(u8 type, u16 clobbers, void *insnbuf,
++    unsigned long addr, unsigned len);
++
++unsigned paravirt_patch_insns(void *insnbuf, unsigned len,
++         const char *start, const char *end);
++
++unsigned native_patch(u8 type, u16 clobbers, void *ibuf,
++        unsigned long addr, unsigned len);
++
++int paravirt_disable_iospace(void);
++# 600 "/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h"
++static inline __attribute__((always_inline)) int paravirt_enabled(void)
++{
++ return pv_info.paravirt_enabled;
++}
++
++static inline __attribute__((always_inline)) void load_sp0(struct tss_struct *tss,
++        struct thread_struct *thread)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.load_sp0); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.load_sp0) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.load_sp0), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(tss)), "1" ((unsigned long)(thread)) : "memory", "cc" ); });
++}
++
++
++static inline __attribute__((always_inline)) unsigned long get_wallclock(void)
++{
++ return ({ unsigned long __ret; unsigned long __eax, __edx, __ecx; ((void)pv_time_ops.get_wallclock); if (sizeof(unsigned long) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_time_ops.get_wallclock) / sizeof(void *))), [paravirt_opptr] "m" (pv_time_ops.get_wallclock), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); __ret = (unsigned long)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_time_ops.get_wallclock) / sizeof(void *))), [paravirt_opptr] "m" (pv_time_ops.get_wallclock), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); __ret = (unsigned long)__eax; } __ret; });
++}
++
++static inline __attribute__((always_inline)) int set_wallclock(unsigned long nowtime)
++{
++ return ({ int __ret; unsigned long __eax, __edx, __ecx; ((void)pv_time_ops.set_wallclock); if (sizeof(int) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_time_ops.set_wallclock) / sizeof(void *))), [paravirt_opptr] "m" (pv_time_ops.set_wallclock), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(nowtime)) : "memory", "cc" ); __ret = (int)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_time_ops.set_wallclock) / sizeof(void *))), [paravirt_opptr] "m" (pv_time_ops.set_wallclock), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(nowtime)) : "memory", "cc" ); __ret = (int)__eax; } __ret; });
++}
++
++static inline __attribute__((always_inline)) void (*choose_time_init(void))(void)
++{
++ return pv_time_ops.time_init;
++}
++
++
++static inline __attribute__((always_inline)) void __cpuid(unsigned int *eax, unsigned int *ebx,
++      unsigned int *ecx, unsigned int *edx)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.cpuid); asm volatile("push %[_arg4];" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "lea 4(%%esp),%%esp;" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.cpuid) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.cpuid), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((u32)(eax)), "1" ((u32)(ebx)), "2" ((u32)(ecx)), [_arg4] "mr" ((u32)(edx)) : "memory", "cc" ); });
++}
++
++
++
++
++static inline __attribute__((always_inline)) unsigned long paravirt_get_debugreg(int reg)
++{
++ return ({ unsigned long __ret; unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.get_debugreg); if (sizeof(unsigned long) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.get_debugreg) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.get_debugreg), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(reg)) : "memory", "cc" ); __ret = (unsigned long)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.get_debugreg) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.get_debugreg), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(reg)) : "memory", "cc" ); __ret = (unsigned long)__eax; } __ret; });
++}
++
++static inline __attribute__((always_inline)) void set_debugreg(unsigned long val, int reg)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.set_debugreg); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.set_debugreg) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.set_debugreg), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(reg)), "1" ((unsigned long)(val)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) void clts(void)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.clts); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.clts) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.clts), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) unsigned long read_cr0(void)
++{
++ return ({ unsigned long __ret; unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.read_cr0); if (sizeof(unsigned long) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_cr0) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.read_cr0), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); __ret = (unsigned long)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_cr0) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.read_cr0), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); __ret = (unsigned long)__eax; } __ret; });
++}
++
++static inline __attribute__((always_inline)) void write_cr0(unsigned long x)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.write_cr0); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.write_cr0) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.write_cr0), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(x)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) unsigned long read_cr2(void)
++{
++ return ({ unsigned long __ret; unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.read_cr2); if (sizeof(unsigned long) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.read_cr2) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.read_cr2), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); __ret = (unsigned long)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.read_cr2) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.read_cr2), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); __ret = (unsigned long)__eax; } __ret; });
++}
++
++static inline __attribute__((always_inline)) void write_cr2(unsigned long x)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.write_cr2); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.write_cr2) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.write_cr2), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(x)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) unsigned long read_cr3(void)
++{
++ return ({ unsigned long __ret; unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.read_cr3); if (sizeof(unsigned long) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.read_cr3) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.read_cr3), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); __ret = (unsigned long)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.read_cr3) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.read_cr3), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); __ret = (unsigned long)__eax; } __ret; });
++}
++
++static inline __attribute__((always_inline)) void write_cr3(unsigned long x)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.write_cr3); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.write_cr3) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.write_cr3), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(x)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) unsigned long read_cr4(void)
++{
++ return ({ unsigned long __ret; unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.read_cr4); if (sizeof(unsigned long) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_cr4) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.read_cr4), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); __ret = (unsigned long)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_cr4) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.read_cr4), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); __ret = (unsigned long)__eax; } __ret; });
++}
++static inline __attribute__((always_inline)) unsigned long read_cr4_safe(void)
++{
++ return ({ unsigned long __ret; unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.read_cr4_safe); if (sizeof(unsigned long) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_cr4_safe) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.read_cr4_safe), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); __ret = (unsigned long)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_cr4_safe) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.read_cr4_safe), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); __ret = (unsigned long)__eax; } __ret; });
++}
++
++static inline __attribute__((always_inline)) void write_cr4(unsigned long x)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.write_cr4); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.write_cr4) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.write_cr4), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(x)) : "memory", "cc" ); });
++}
++# 708 "/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h"
++static inline __attribute__((always_inline)) void raw_safe_halt(void)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_irq_ops.safe_halt); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_irq_ops.safe_halt) / sizeof(void *))), [paravirt_opptr] "m" (pv_irq_ops.safe_halt), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) void halt(void)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_irq_ops.safe_halt); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_irq_ops.safe_halt) / sizeof(void *))), [paravirt_opptr] "m" (pv_irq_ops.safe_halt), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) void wbinvd(void)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.wbinvd); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.wbinvd) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.wbinvd), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); });
++}
++
++
++
++static inline __attribute__((always_inline)) u64 paravirt_read_msr(unsigned msr, int *err)
++{
++ return ({ u64 __ret; unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.read_msr); if (sizeof(u64) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_msr) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.read_msr), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(msr)), "1" ((unsigned long)(err)) : "memory", "cc" ); __ret = (u64)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_msr) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.read_msr), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(msr)), "1" ((unsigned long)(err)) : "memory", "cc" ); __ret = (u64)__eax; } __ret; });
++}
++static inline __attribute__((always_inline)) int paravirt_write_msr(unsigned msr, unsigned low, unsigned high)
++{
++ return ({ int __ret; unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.write_msr); if (sizeof(int) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.write_msr) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.write_msr), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(msr)), "1"((unsigned long)(low)), "2"((unsigned long)(high)) : "memory", "cc" ); __ret = (int)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.write_msr) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.write_msr), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(msr)), "1"((unsigned long)(low)), "2"((unsigned long)(high)) : "memory", "cc" ); __ret = (int)__eax; } __ret; });
++}
++# 767 "/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h"
++static inline __attribute__((always_inline)) int rdmsrl_safe(unsigned msr, unsigned long long *p)
++{
++ int err;
++
++ *p = paravirt_read_msr(msr, &err);
++ return err;
++}
++
++static inline __attribute__((always_inline)) u64 paravirt_read_tsc(void)
++{
++ return ({ u64 __ret; unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.read_tsc); if (sizeof(u64) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_tsc) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.read_tsc), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); __ret = (u64)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_tsc) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.read_tsc), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); __ret = (u64)__eax; } __ret; });
++}
++# 788 "/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h"
++static inline __attribute__((always_inline)) unsigned long long paravirt_sched_clock(void)
++{
++ return ({ unsigned long long __ret; unsigned long __eax, __edx, __ecx; ((void)pv_time_ops.sched_clock); if (sizeof(unsigned long long) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_time_ops.sched_clock) / sizeof(void *))), [paravirt_opptr] "m" (pv_time_ops.sched_clock), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); __ret = (unsigned long long)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_time_ops.sched_clock) / sizeof(void *))), [paravirt_opptr] "m" (pv_time_ops.sched_clock), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); __ret = (unsigned long long)__eax; } __ret; });
++}
++
++
++static inline __attribute__((always_inline)) unsigned long long paravirt_read_pmc(int counter)
++{
++ return ({ u64 __ret; unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.read_pmc); if (sizeof(u64) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_pmc) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.read_pmc), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(counter)) : "memory", "cc" ); __ret = (u64)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_pmc) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.read_pmc), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(counter)) : "memory", "cc" ); __ret = (u64)__eax; } __ret; });
++}
++# 806 "/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h"
++static inline __attribute__((always_inline)) unsigned long long paravirt_rdtscp(unsigned int *aux)
++{
++ return ({ u64 __ret; unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.read_tscp); if (sizeof(u64) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_tscp) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.read_tscp), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(aux)) : "memory", "cc" ); __ret = (u64)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.read_tscp) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.read_tscp), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(aux)) : "memory", "cc" ); __ret = (u64)__eax; } __ret; });
++}
++# 827 "/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h"
++static inline __attribute__((always_inline)) void load_TR_desc(void)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.load_tr_desc); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.load_tr_desc) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.load_tr_desc), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); });
++}
++static inline __attribute__((always_inline)) void load_gdt(const struct desc_ptr *dtr)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.load_gdt); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.load_gdt) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.load_gdt), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(dtr)) : "memory", "cc" ); });
++}
++static inline __attribute__((always_inline)) void load_idt(const struct desc_ptr *dtr)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.load_idt); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.load_idt) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.load_idt), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(dtr)) : "memory", "cc" ); });
++}
++static inline __attribute__((always_inline)) void set_ldt(const void *addr, unsigned entries)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.set_ldt); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.set_ldt) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.set_ldt), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(addr)), "1" ((unsigned long)(entries)) : "memory", "cc" ); });
++}
++static inline __attribute__((always_inline)) void store_gdt(struct desc_ptr *dtr)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.store_gdt); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.store_gdt) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.store_gdt), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(dtr)) : "memory", "cc" ); });
++}
++static inline __attribute__((always_inline)) void store_idt(struct desc_ptr *dtr)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.store_idt); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.store_idt) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.store_idt), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(dtr)) : "memory", "cc" ); });
++}
++static inline __attribute__((always_inline)) unsigned long paravirt_store_tr(void)
++{
++ return ({ unsigned long __ret; unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.store_tr); if (sizeof(unsigned long) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.store_tr) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.store_tr), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); __ret = (unsigned long)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.store_tr) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.store_tr), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); __ret = (unsigned long)__eax; } __ret; });
++}
++
++static inline __attribute__((always_inline)) void load_TLS(struct thread_struct *t, unsigned cpu)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.load_tls); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.load_tls) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.load_tls), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(t)), "1" ((unsigned long)(cpu)) : "memory", "cc" ); });
++}
++# 868 "/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h"
++static inline __attribute__((always_inline)) void write_ldt_entry(struct desc_struct *dt, int entry,
++       const void *desc)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.write_ldt_entry); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.write_ldt_entry) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.write_ldt_entry), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(dt)), "1"((unsigned long)(entry)), "2"((unsigned long)(desc)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) void write_gdt_entry(struct desc_struct *dt, int entry,
++       void *desc, int type)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.write_gdt_entry); asm volatile("push %[_arg4];" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "lea 4(%%esp),%%esp;" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.write_gdt_entry) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.write_gdt_entry), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((u32)(dt)), "1" ((u32)(entry)), "2" ((u32)(desc)), [_arg4] "mr" ((u32)(type)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) void write_idt_entry(gate_desc *dt, int entry, const gate_desc *g)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.write_idt_entry); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.write_idt_entry) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.write_idt_entry), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(dt)), "1"((unsigned long)(entry)), "2"((unsigned long)(g)) : "memory", "cc" ); });
++}
++static inline __attribute__((always_inline)) void set_iopl_mask(unsigned mask)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.set_iopl_mask); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.set_iopl_mask) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.set_iopl_mask), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(mask)) : "memory", "cc" ); });
++}
++
++
++static inline __attribute__((always_inline)) void slow_down_io(void)
++{
++ pv_cpu_ops.io_delay();
++
++
++
++
++
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) void apic_write(unsigned long reg, u32 v)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_apic_ops.apic_write); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_apic_ops.apic_write) / sizeof(void *))), [paravirt_opptr] "m" (pv_apic_ops.apic_write), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(reg)), "1" ((unsigned long)(v)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) u32 apic_read(unsigned long reg)
++{
++ return ({ unsigned long __ret; unsigned long __eax, __edx, __ecx; ((void)pv_apic_ops.apic_read); if (sizeof(unsigned long) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_apic_ops.apic_read) / sizeof(void *))), [paravirt_opptr] "m" (pv_apic_ops.apic_read), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(reg)) : "memory", "cc" ); __ret = (unsigned long)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_apic_ops.apic_read) / sizeof(void *))), [paravirt_opptr] "m" (pv_apic_ops.apic_read), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(reg)) : "memory", "cc" ); __ret = (unsigned long)__eax; } __ret; });
++}
++
++static inline __attribute__((always_inline)) void setup_boot_clock(void)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_apic_ops.setup_boot_clock); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_apic_ops.setup_boot_clock) / sizeof(void *))), [paravirt_opptr] "m" (pv_apic_ops.setup_boot_clock), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) void setup_secondary_clock(void)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_apic_ops.setup_secondary_clock); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_apic_ops.setup_secondary_clock) / sizeof(void *))), [paravirt_opptr] "m" (pv_apic_ops.setup_secondary_clock), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); });
++}
++
++
++static inline __attribute__((always_inline)) void paravirt_post_allocator_init(void)
++{
++ if (pv_init_ops.post_allocator_init)
++  (*pv_init_ops.post_allocator_init)();
++}
++
++static inline __attribute__((always_inline)) void paravirt_pagetable_setup_start(pgd_t *base)
++{
++ (*pv_mmu_ops.pagetable_setup_start)(base);
++}
++
++static inline __attribute__((always_inline)) void paravirt_pagetable_setup_done(pgd_t *base)
++{
++ (*pv_mmu_ops.pagetable_setup_done)(base);
++}
++
++
++static inline __attribute__((always_inline)) void startup_ipi_hook(int phys_apicid, unsigned long start_eip,
++        unsigned long start_esp)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_apic_ops.startup_ipi_hook); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_apic_ops.startup_ipi_hook) / sizeof(void *))), [paravirt_opptr] "m" (pv_apic_ops.startup_ipi_hook), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(phys_apicid)), "1"((unsigned long)(start_eip)), "2"((unsigned long)(start_esp)) : "memory", "cc" ); });
++
++}
++
++
++static inline __attribute__((always_inline)) void paravirt_activate_mm(struct mm_struct *prev,
++     struct mm_struct *next)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.activate_mm); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.activate_mm) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.activate_mm), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(prev)), "1" ((unsigned long)(next)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) void arch_dup_mmap(struct mm_struct *oldmm,
++     struct mm_struct *mm)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.dup_mmap); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.dup_mmap) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.dup_mmap), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(oldmm)), "1" ((unsigned long)(mm)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) void arch_exit_mmap(struct mm_struct *mm)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.exit_mmap); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.exit_mmap) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.exit_mmap), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(mm)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) void __flush_tlb(void)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.flush_tlb_user); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.flush_tlb_user) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.flush_tlb_user), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); });
++}
++static inline __attribute__((always_inline)) void __flush_tlb_global(void)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.flush_tlb_kernel); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.flush_tlb_kernel) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.flush_tlb_kernel), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); });
++}
++static inline __attribute__((always_inline)) void __flush_tlb_single(unsigned long addr)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.flush_tlb_single); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.flush_tlb_single) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.flush_tlb_single), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(addr)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) void flush_tlb_others(cpumask_t cpumask, struct mm_struct *mm,
++        unsigned long va)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.flush_tlb_others); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.flush_tlb_others) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.flush_tlb_others), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(&cpumask)), "1"((unsigned long)(mm)), "2"((unsigned long)(va)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) int paravirt_pgd_alloc(struct mm_struct *mm)
++{
++ return ({ int __ret; unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.pgd_alloc); if (sizeof(int) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pgd_alloc) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.pgd_alloc), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(mm)) : "memory", "cc" ); __ret = (int)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pgd_alloc) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.pgd_alloc), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(mm)) : "memory", "cc" ); __ret = (int)__eax; } __ret; });
++}
++
++static inline __attribute__((always_inline)) void paravirt_pgd_free(struct mm_struct *mm, pgd_t *pgd)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.pgd_free); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pgd_free) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.pgd_free), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(mm)), "1" ((unsigned long)(pgd)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) void paravirt_alloc_pte(struct mm_struct *mm, unsigned pfn)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.alloc_pte); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.alloc_pte) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.alloc_pte), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(mm)), "1" ((unsigned long)(pfn)) : "memory", "cc" ); });
++}
++static inline __attribute__((always_inline)) void paravirt_release_pte(unsigned pfn)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.release_pte); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.release_pte) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.release_pte), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(pfn)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) void paravirt_alloc_pmd(struct mm_struct *mm, unsigned pfn)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.alloc_pmd); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.alloc_pmd) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.alloc_pmd), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(mm)), "1" ((unsigned long)(pfn)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) void paravirt_alloc_pmd_clone(unsigned pfn, unsigned clonepfn,
++         unsigned start, unsigned count)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.alloc_pmd_clone); asm volatile("push %[_arg4];" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "lea 4(%%esp),%%esp;" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.alloc_pmd_clone) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.alloc_pmd_clone), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((u32)(pfn)), "1" ((u32)(clonepfn)), "2" ((u32)(start)), [_arg4] "mr" ((u32)(count)) : "memory", "cc" ); });
++}
++static inline __attribute__((always_inline)) void paravirt_release_pmd(unsigned pfn)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.release_pmd); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.release_pmd) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.release_pmd), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(pfn)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) void paravirt_alloc_pud(struct mm_struct *mm, unsigned pfn)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.alloc_pud); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.alloc_pud) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.alloc_pud), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(mm)), "1" ((unsigned long)(pfn)) : "memory", "cc" ); });
++}
++static inline __attribute__((always_inline)) void paravirt_release_pud(unsigned pfn)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.release_pud); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.release_pud) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.release_pud), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(pfn)) : "memory", "cc" ); });
++}
++
++
++static inline __attribute__((always_inline)) void *kmap_atomic_pte(struct page *page, enum km_type type)
++{
++ unsigned long ret;
++ ret = ({ unsigned long __ret; unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.kmap_atomic_pte); if (sizeof(unsigned long) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.kmap_atomic_pte) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.kmap_atomic_pte), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(page)), "1" ((unsigned long)(type)) : "memory", "cc" ); __ret = (unsigned long)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.kmap_atomic_pte) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.kmap_atomic_pte), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(page)), "1" ((unsigned long)(type)) : "memory", "cc" ); __ret = (unsigned long)__eax; } __ret; });
++ return (void *)ret;
++}
++
++
++static inline __attribute__((always_inline)) void pte_update(struct mm_struct *mm, unsigned long addr,
++         pte_t *ptep)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.pte_update); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pte_update) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.pte_update), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(mm)), "1"((unsigned long)(addr)), "2"((unsigned long)(ptep)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) void pte_update_defer(struct mm_struct *mm, unsigned long addr,
++        pte_t *ptep)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.pte_update_defer); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pte_update_defer) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.pte_update_defer), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(mm)), "1"((unsigned long)(addr)), "2"((unsigned long)(ptep)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) pte_t __pte(pteval_t val)
++{
++ pteval_t ret;
++
++ if (sizeof(pteval_t) > sizeof(long))
++  ret = ({ pteval_t __ret; unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.make_pte); if (sizeof(pteval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pte) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.make_pte), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(val)), "1" ((unsigned long)((u64)val >> 32)) : "memory", "cc" ); __ret = (pteval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pte) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.make_pte), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(val)), "1" ((unsigned long)((u64)val >> 32)) : "memory", "cc" ); __ret = (pteval_t)__eax; } __ret; });
++
++
++ else
++  ret = ({ pteval_t __ret; unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.make_pte); if (sizeof(pteval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pte) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.make_pte), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(val)) : "memory", "cc" ); __ret = (pteval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pte) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.make_pte), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(val)) : "memory", "cc" ); __ret = (pteval_t)__eax; } __ret; });
++
++
++
++ return (pte_t) ({pte_t duh; duh.pte = ret;duh;});
++}
++
++static inline __attribute__((always_inline)) pteval_t pte_val(pte_t pte)
++{
++ pteval_t ret;
++
++ if (sizeof(pteval_t) > sizeof(long))
++  ret = ({ pteval_t __ret; unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.pte_val); if (sizeof(pteval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pte_val) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.pte_val), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(pte.pte)), "1" ((unsigned long)((u64)pte.pte >> 32)) : "memory", "cc" ); __ret = (pteval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pte_val) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.pte_val), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(pte.pte)), "1" ((unsigned long)((u64)pte.pte >> 32)) : "memory", "cc" ); __ret = (pteval_t)__eax; } __ret; });
++
++ else
++  ret = ({ pteval_t __ret; unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.pte_val); if (sizeof(pteval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pte_val) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.pte_val), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(pte.pte)) : "memory", "cc" ); __ret = (pteval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pte_val) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.pte_val), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(pte.pte)) : "memory", "cc" ); __ret = (pteval_t)__eax; } __ret; });
++
++
++ return ret;
++}
++
++static inline __attribute__((always_inline)) pteval_t pte_flags(pte_t pte)
++{
++ pteval_t ret;
++
++ if (sizeof(pteval_t) > sizeof(long))
++  ret = ({ pteval_t __ret; unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.pte_flags); if (sizeof(pteval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pte_flags) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.pte_flags), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(pte.pte)), "1" ((unsigned long)((u64)pte.pte >> 32)) : "memory", "cc" ); __ret = (pteval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pte_flags) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.pte_flags), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(pte.pte)), "1" ((unsigned long)((u64)pte.pte >> 32)) : "memory", "cc" ); __ret = (pteval_t)__eax; } __ret; });
++
++ else
++  ret = ({ pteval_t __ret; unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.pte_flags); if (sizeof(pteval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pte_flags) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.pte_flags), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(pte.pte)) : "memory", "cc" ); __ret = (pteval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pte_flags) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.pte_flags), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(pte.pte)) : "memory", "cc" ); __ret = (pteval_t)__eax; } __ret; });
++
++
++
++
++
++ return ret;
++}
++
++static inline __attribute__((always_inline)) pgd_t __pgd(pgdval_t val)
++{
++ pgdval_t ret;
++
++ if (sizeof(pgdval_t) > sizeof(long))
++  ret = ({ pgdval_t __ret; unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.make_pgd); if (sizeof(pgdval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pgd) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.make_pgd), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(val)), "1" ((unsigned long)((u64)val >> 32)) : "memory", "cc" ); __ret = (pgdval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pgd) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.make_pgd), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(val)), "1" ((unsigned long)((u64)val >> 32)) : "memory", "cc" ); __ret = (pgdval_t)__eax; } __ret; });
++
++ else
++  ret = ({ pgdval_t __ret; unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.make_pgd); if (sizeof(pgdval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pgd) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.make_pgd), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(val)) : "memory", "cc" ); __ret = (pgdval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.make_pgd) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.make_pgd), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(val)) : "memory", "cc" ); __ret = (pgdval_t)__eax; } __ret; });
++
++
++ return (pgd_t) { ret };
++}
++
++static inline __attribute__((always_inline)) pgdval_t pgd_val(pgd_t pgd)
++{
++ pgdval_t ret;
++
++ if (sizeof(pgdval_t) > sizeof(long))
++  ret = ({ pgdval_t __ret; unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.pgd_val); if (sizeof(pgdval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pgd_val) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.pgd_val), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(pgd.pgd)), "1" ((unsigned long)((u64)pgd.pgd >> 32)) : "memory", "cc" ); __ret = (pgdval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pgd_val) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.pgd_val), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(pgd.pgd)), "1" ((unsigned long)((u64)pgd.pgd >> 32)) : "memory", "cc" ); __ret = (pgdval_t)__eax; } __ret; });
++
++ else
++  ret = ({ pgdval_t __ret; unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.pgd_val); if (sizeof(pgdval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pgd_val) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.pgd_val), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(pgd.pgd)) : "memory", "cc" ); __ret = (pgdval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.pgd_val) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.pgd_val), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(pgd.pgd)) : "memory", "cc" ); __ret = (pgdval_t)__eax; } __ret; });
++
++
++ return ret;
++}
++
++
++static inline __attribute__((always_inline)) pte_t ptep_modify_prot_start(struct mm_struct *mm, unsigned long addr,
++        pte_t *ptep)
++{
++ pteval_t ret;
++
++ ret = ({ pteval_t __ret; unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.ptep_modify_prot_start); if (sizeof(pteval_t) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.ptep_modify_prot_start) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.ptep_modify_prot_start), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(mm)), "1"((unsigned long)(addr)), "2"((unsigned long)(ptep)) : "memory", "cc" ); __ret = (pteval_t)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.ptep_modify_prot_start) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.ptep_modify_prot_start), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(mm)), "1"((unsigned long)(addr)), "2"((unsigned long)(ptep)) : "memory", "cc" ); __ret = (pteval_t)__eax; } __ret; });
++
++
++ return (pte_t) ({pte_t duh; duh.pte = ret;duh;});
++}
++
++static inline __attribute__((always_inline)) void ptep_modify_prot_commit(struct mm_struct *mm, unsigned long addr,
++        pte_t *ptep, pte_t pte)
++{
++ if (sizeof(pteval_t) > sizeof(long))
++
++  pv_mmu_ops.ptep_modify_prot_commit(mm, addr, ptep, pte);
++ else
++  ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.ptep_modify_prot_commit); asm volatile("push %[_arg4];" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "lea 4(%%esp),%%esp;" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.ptep_modify_prot_commit) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.ptep_modify_prot_commit), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((u32)(mm)), "1" ((u32)(addr)), "2" ((u32)(ptep)), [_arg4] "mr" ((u32)(pte.pte)) : "memory", "cc" ); });
++
++}
++
++static inline __attribute__((always_inline)) void set_pte(pte_t *ptep, pte_t pte)
++{
++ if (sizeof(pteval_t) > sizeof(long))
++  ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.set_pte); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.set_pte) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.set_pte), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(ptep)), "1"((unsigned long)(pte.pte)), "2"((unsigned long)((u64)pte.pte >> 32)) : "memory", "cc" ); });
++
++ else
++  ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.set_pte); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.set_pte) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.set_pte), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(ptep)), "1" ((unsigned long)(pte.pte)) : "memory", "cc" ); });
++
++}
++
++static inline __attribute__((always_inline)) void set_pte_at(struct mm_struct *mm, unsigned long addr,
++         pte_t *ptep, pte_t pte)
++{
++ if (sizeof(pteval_t) > sizeof(long))
++
++  pv_mmu_ops.set_pte_at(mm, addr, ptep, pte);
++ else
++  ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.set_pte_at); asm volatile("push %[_arg4];" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "lea 4(%%esp),%%esp;" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.set_pte_at) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.set_pte_at), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((u32)(mm)), "1" ((u32)(addr)), "2" ((u32)(ptep)), [_arg4] "mr" ((u32)(pte.pte)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) void set_pmd(pmd_t *pmdp, pmd_t pmd)
++{
++ pmdval_t val = native_pmd_val(pmd);
++
++ if (sizeof(pmdval_t) > sizeof(long))
++  ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.set_pmd); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.set_pmd) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.set_pmd), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(pmdp)), "1"((unsigned long)(val)), "2"((unsigned long)((u64)val >> 32)) : "memory", "cc" ); });
++ else
++  ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.set_pmd); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.set_pmd) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.set_pmd), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(pmdp)), "1" ((unsigned long)(val)) : "memory", "cc" ); });
++}
++# 1300 "/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h"
++static inline __attribute__((always_inline)) void set_pte_atomic(pte_t *ptep, pte_t pte)
++{
++ set_pte(ptep, pte);
++}
++
++static inline __attribute__((always_inline)) void set_pte_present(struct mm_struct *mm, unsigned long addr,
++       pte_t *ptep, pte_t pte)
++{
++ set_pte(ptep, pte);
++}
++
++static inline __attribute__((always_inline)) void pte_clear(struct mm_struct *mm, unsigned long addr,
++        pte_t *ptep)
++{
++ set_pte_at(mm, addr, ptep, __pte(0));
++}
++# 1326 "/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h"
++enum paravirt_lazy_mode {
++ PARAVIRT_LAZY_NONE,
++ PARAVIRT_LAZY_MMU,
++ PARAVIRT_LAZY_CPU,
++};
++
++enum paravirt_lazy_mode paravirt_get_lazy_mode(void);
++void paravirt_enter_lazy_cpu(void);
++void paravirt_leave_lazy_cpu(void);
++void paravirt_enter_lazy_mmu(void);
++void paravirt_leave_lazy_mmu(void);
++void paravirt_leave_lazy(enum paravirt_lazy_mode mode);
++
++
++static inline __attribute__((always_inline)) void arch_enter_lazy_cpu_mode(void)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.lazy_mode.enter); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.lazy_mode.enter) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.lazy_mode.enter), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) void arch_leave_lazy_cpu_mode(void)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_cpu_ops.lazy_mode.leave); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_cpu_ops.lazy_mode.leave) / sizeof(void *))), [paravirt_opptr] "m" (pv_cpu_ops.lazy_mode.leave), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) void arch_flush_lazy_cpu_mode(void)
++{
++ if (__builtin_expect(!!(paravirt_get_lazy_mode() == PARAVIRT_LAZY_CPU), 0)) {
++  arch_leave_lazy_cpu_mode();
++  arch_enter_lazy_cpu_mode();
++ }
++}
++
++
++
++static inline __attribute__((always_inline)) void arch_enter_lazy_mmu_mode(void)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.lazy_mode.enter); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.lazy_mode.enter) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.lazy_mode.enter), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) void arch_leave_lazy_mmu_mode(void)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_mmu_ops.lazy_mode.leave); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_mmu_ops.lazy_mode.leave) / sizeof(void *))), [paravirt_opptr] "m" (pv_mmu_ops.lazy_mode.leave), [paravirt_clobber] "i" (((1 << 3) - 1)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) void arch_flush_lazy_mmu_mode(void)
++{
++ if (__builtin_expect(!!(paravirt_get_lazy_mode() == PARAVIRT_LAZY_MMU), 0)) {
++  arch_leave_lazy_mmu_mode();
++  arch_enter_lazy_mmu_mode();
++ }
++}
++
++static inline __attribute__((always_inline)) void __set_fixmap(unsigned idx,
++    unsigned long phys, pgprot_t flags)
++{
++ pv_mmu_ops.set_fixmap(idx, phys, flags);
++}
++
++void _paravirt_nop(void);
++
++
++void paravirt_use_bytelocks(void);
++
++
++
++static inline __attribute__((always_inline)) int __raw_spin_is_locked(struct raw_spinlock *lock)
++{
++ return ({ int __ret; unsigned long __eax, __edx, __ecx; ((void)pv_lock_ops.spin_is_locked); if (sizeof(int) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_lock_ops.spin_is_locked) / sizeof(void *))), [paravirt_opptr] "m" (pv_lock_ops.spin_is_locked), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(lock)) : "memory", "cc" ); __ret = (int)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_lock_ops.spin_is_locked) / sizeof(void *))), [paravirt_opptr] "m" (pv_lock_ops.spin_is_locked), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(lock)) : "memory", "cc" ); __ret = (int)__eax; } __ret; });
++}
++
++static inline __attribute__((always_inline)) int __raw_spin_is_contended(struct raw_spinlock *lock)
++{
++ return ({ int __ret; unsigned long __eax, __edx, __ecx; ((void)pv_lock_ops.spin_is_contended); if (sizeof(int) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_lock_ops.spin_is_contended) / sizeof(void *))), [paravirt_opptr] "m" (pv_lock_ops.spin_is_contended), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(lock)) : "memory", "cc" ); __ret = (int)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_lock_ops.spin_is_contended) / sizeof(void *))), [paravirt_opptr] "m" (pv_lock_ops.spin_is_contended), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(lock)) : "memory", "cc" ); __ret = (int)__eax; } __ret; });
++}
++
++static inline __attribute__((always_inline)) __attribute__((always_inline)) void __raw_spin_lock(struct raw_spinlock *lock)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_lock_ops.spin_lock); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_lock_ops.spin_lock) / sizeof(void *))), [paravirt_opptr] "m" (pv_lock_ops.spin_lock), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(lock)) : "memory", "cc" ); });
++}
++
++static inline __attribute__((always_inline)) __attribute__((always_inline)) int __raw_spin_trylock(struct raw_spinlock *lock)
++{
++ return ({ int __ret; unsigned long __eax, __edx, __ecx; ((void)pv_lock_ops.spin_trylock); if (sizeof(int) > sizeof(unsigned long)) { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_lock_ops.spin_trylock) / sizeof(void *))), [paravirt_opptr] "m" (pv_lock_ops.spin_trylock), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(lock)) : "memory", "cc" ); __ret = (int)((((u64)__edx) << 32) | __eax); } else { asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_lock_ops.spin_trylock) / sizeof(void *))), [paravirt_opptr] "m" (pv_lock_ops.spin_trylock), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(lock)) : "memory", "cc" ); __ret = (int)__eax; } __ret; });
++}
++
++static inline __attribute__((always_inline)) __attribute__((always_inline)) void __raw_spin_unlock(struct raw_spinlock *lock)
++{
++ ({ unsigned long __eax, __edx, __ecx; ((void)pv_lock_ops.spin_unlock); asm volatile("" "771:\n\t" "call *%[paravirt_opptr];" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n" "" : "=a" (__eax), "=d" (__edx), "=c" (__ecx) : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_lock_ops.spin_unlock) / sizeof(void *))), [paravirt_opptr] "m" (pv_lock_ops.spin_unlock), [paravirt_clobber] "i" (((1 << 3) - 1)), "0" ((unsigned long)(lock)) : "memory", "cc" ); });
++}
++
++
++
++
++struct paravirt_patch_site {
++ u8 *instr;
++ u8 instrtype;
++ u8 len;
++ u16 clobbers;
++};
++
++extern struct paravirt_patch_site __parainstructions[],
++ __parainstructions_end[];
++# 1445 "/d/kernels/linux-2.6.27.10-clickport/include/asm/paravirt.h"
++static inline __attribute__((always_inline)) unsigned long __raw_local_save_flags(void)
++{
++ unsigned long f;
++
++ asm volatile("771:\n\t" "pushl %%ecx; pushl %%edx;" "call *%[paravirt_opptr];" "popl %%edx; popl %%ecx" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n"
++
++
++       : "=a"(f)
++       : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_irq_ops.save_fl) / sizeof(void *))), [paravirt_opptr] "m" (pv_irq_ops.save_fl),
++         [paravirt_clobber] "i" ((1 << 0))
++       : "memory", "cc" );
++ return f;
++}
++
++static inline __attribute__((always_inline)) void raw_local_irq_restore(unsigned long f)
++{
++ asm volatile("771:\n\t" "pushl %%ecx; pushl %%edx;" "call *%[paravirt_opptr];" "popl %%edx; popl %%ecx" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n"
++
++
++       : "=a"(f)
++       : "0"(f),
++         [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_irq_ops.restore_fl) / sizeof(void *))), [paravirt_opptr] "m" (pv_irq_ops.restore_fl),
++         [paravirt_clobber] "i" ((1 << 0))
++       : "memory", "cc" );
++}
++
++static inline __attribute__((always_inline)) void raw_local_irq_disable(void)
++{
++ asm volatile("771:\n\t" "pushl %%ecx; pushl %%edx;" "call *%[paravirt_opptr];" "popl %%edx; popl %%ecx" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n"
++
++
++       :
++       : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_irq_ops.irq_disable) / sizeof(void *))), [paravirt_opptr] "m" (pv_irq_ops.irq_disable),
++         [paravirt_clobber] "i" ((1 << 0))
++       : "memory", "eax", "cc" );
++}
++
++static inline __attribute__((always_inline)) void raw_local_irq_enable(void)
++{
++ asm volatile("771:\n\t" "pushl %%ecx; pushl %%edx;" "call *%[paravirt_opptr];" "popl %%edx; popl %%ecx" "\n" "772:\n" ".pushsection .parainstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " " 771b\n" "  .byte " "%c[paravirt_typenum]" "\n" "  .byte 772b-771b\n" "  .short " "%c[paravirt_clobber]" "\n" ".popsection\n"
++
++
++       :
++       : [paravirt_typenum] "i" ((__builtin_offsetof(struct paravirt_patch_template,pv_irq_ops.irq_enable) / sizeof(void *))), [paravirt_opptr] "m" (pv_irq_ops.irq_enable),
++         [paravirt_clobber] "i" ((1 << 0))
++       : "memory", "eax", "cc" );
++}
++
++static inline __attribute__((always_inline)) unsigned long __raw_local_irq_save(void)
++{
++ unsigned long f;
++
++ f = __raw_local_save_flags();
++ raw_local_irq_disable();
++ return f;
++}
++# 159 "/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h" 2
++# 196 "/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/memory_model.h" 1
++# 197 "/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/page.h" 1
++# 9 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/page.h"
++static __inline__ __attribute__((always_inline)) __attribute__((__const__)) int get_order(unsigned long size)
++{
++ int order;
++
++ size = (size - 1) >> (12 - 1);
++ order = -1;
++ do {
++  size >>= 1;
++  order++;
++ } while (size);
++ return order;
++}
++# 198 "/d/kernels/linux-2.6.27.10-clickport/include/asm/page.h" 2
++# 12 "/d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h" 2
++# 20 "/d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h"
++struct task_struct;
++struct exec_domain;
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/processor-flags.h" 1
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h" 2
++
++
++struct task_struct;
++struct mm_struct;
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/vm86.h" 1
++# 62 "/d/kernels/linux-2.6.27.10-clickport/include/asm/vm86.h"
++struct vm86_regs {
++
++
++
++ long ebx;
++ long ecx;
++ long edx;
++ long esi;
++ long edi;
++ long ebp;
++ long eax;
++ long __null_ds;
++ long __null_es;
++ long __null_fs;
++ long __null_gs;
++ long orig_eax;
++ long eip;
++ unsigned short cs, __csh;
++ long eflags;
++ long esp;
++ unsigned short ss, __ssh;
++
++
++
++ unsigned short es, __esh;
++ unsigned short ds, __dsh;
++ unsigned short fs, __fsh;
++ unsigned short gs, __gsh;
++};
++
++struct revectored_struct {
++ unsigned long __map[8];
++};
++
++struct vm86_struct {
++ struct vm86_regs regs;
++ unsigned long flags;
++ unsigned long screen_bitmap;
++ unsigned long cpu_type;
++ struct revectored_struct int_revectored;
++ struct revectored_struct int21_revectored;
++};
++
++
++
++
++
++
++struct vm86plus_info_struct {
++ unsigned long force_return_for_pic:1;
++ unsigned long vm86dbg_active:1;
++ unsigned long vm86dbg_TFpendig:1;
++ unsigned long unused:28;
++ unsigned long is_vm86pus:1;
++ unsigned char vm86dbg_intxxtab[32];
++};
++struct vm86plus_struct {
++ struct vm86_regs regs;
++ unsigned long flags;
++ unsigned long screen_bitmap;
++ unsigned long cpu_type;
++ struct revectored_struct int_revectored;
++ struct revectored_struct int21_revectored;
++ struct vm86plus_info_struct vm86plus;
++};
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/ptrace.h" 1
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/ptrace-abi.h" 1
++# 90 "/d/kernels/linux-2.6.27.10-clickport/include/asm/ptrace-abi.h"
++struct ptrace_bts_config {
++
++ __u32 size;
++
++ __u32 flags;
++
++ __u32 signal;
++
++ __u32 bts_size;
++};
++# 6 "/d/kernels/linux-2.6.27.10-clickport/include/asm/ptrace.h" 2
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/ds.h" 1
++# 24 "/d/kernels/linux-2.6.27.10-clickport/include/asm/ds.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/init.h" 1
++# 135 "/d/kernels/linux-2.6.27.10-clickport/include/linux/init.h"
++typedef int (*initcall_t)(void);
++typedef void (*exitcall_t)(void);
++
++extern initcall_t __con_initcall_start[], __con_initcall_end[];
++extern initcall_t __security_initcall_start[], __security_initcall_end[];
++
++
++extern int do_one_initcall(initcall_t fn);
++extern char __attribute__ ((__section__(".init.data"))) boot_command_line[];
++extern char *saved_command_line;
++extern unsigned int reset_devices;
++
++
++void setup_arch(char **);
++void prepare_namespace(void);
++
++extern void (*late_time_init)(void);
++# 25 "/d/kernels/linux-2.6.27.10-clickport/include/asm/ds.h" 2
++
++struct cpuinfo_x86;
++
++
++
++
++
++
++
++enum bts_qualifier {
++ BTS_INVALID = 0,
++ BTS_BRANCH,
++ BTS_TASK_ARRIVES,
++ BTS_TASK_DEPARTS
++};
++
++struct bts_struct {
++ u64 qualifier;
++ union {
++
++  struct {
++   u64 from_ip;
++   u64 to_ip;
++  } lbr;
++
++
++  u64 jiffies;
++ } variant;
++};
++
++
++
++
++
++extern int ds_allocate(void **, size_t);
++extern int ds_free(void **);
++extern int ds_get_bts_size(void *);
++extern int ds_get_bts_end(void *);
++extern int ds_get_bts_index(void *);
++extern int ds_set_overflow(void *, int);
++extern int ds_get_overflow(void *);
++extern int ds_clear(void *);
++extern int ds_read_bts(void *, int, struct bts_struct *);
++extern int ds_write_bts(void *, const struct bts_struct *);
++extern unsigned long ds_debugctl_mask(void);
++extern void __attribute__ ((__section__(".cpuinit.text"))) ds_init_intel(struct cpuinfo_x86 *c);
++# 10 "/d/kernels/linux-2.6.27.10-clickport/include/asm/ptrace.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/segment.h" 1
++# 211 "/d/kernels/linux-2.6.27.10-clickport/include/asm/segment.h"
++extern const char early_idt_handlers[32][10];
++# 11 "/d/kernels/linux-2.6.27.10-clickport/include/asm/ptrace.h" 2
++# 43 "/d/kernels/linux-2.6.27.10-clickport/include/asm/ptrace.h"
++struct pt_regs {
++ unsigned long bx;
++ unsigned long cx;
++ unsigned long dx;
++ unsigned long si;
++ unsigned long di;
++ unsigned long bp;
++ unsigned long ax;
++ unsigned long ds;
++ unsigned long es;
++ unsigned long fs;
++
++ unsigned long orig_ax;
++ unsigned long ip;
++ unsigned long cs;
++ unsigned long flags;
++ unsigned long sp;
++ unsigned long ss;
++};
++# 135 "/d/kernels/linux-2.6.27.10-clickport/include/asm/ptrace.h"
++struct task_struct;
++
++extern void ptrace_bts_take_timestamp(struct task_struct *, enum bts_qualifier);
++
++extern unsigned long profile_pc(struct pt_regs *regs);
++
++extern unsigned long
++convert_ip_to_linear(struct task_struct *child, struct pt_regs *regs);
++
++
++extern void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs,
++    int error_code);
++
++
++
++
++static inline __attribute__((always_inline)) unsigned long regs_return_value(struct pt_regs *regs)
++{
++ return regs->ax;
++}
++# 163 "/d/kernels/linux-2.6.27.10-clickport/include/asm/ptrace.h"
++static inline __attribute__((always_inline)) int user_mode(struct pt_regs *regs)
++{
++
++ return (regs->cs & 0x3) == 0x3;
++
++
++
++}
++
++static inline __attribute__((always_inline)) int user_mode_vm(struct pt_regs *regs)
++{
++
++ return ((regs->cs & 0x3) | (regs->flags & 0x00020000)) >=
++  0x3;
++
++
++
++}
++
++static inline __attribute__((always_inline)) int v8086_mode(struct pt_regs *regs)
++{
++
++ return (regs->flags & 0x00020000);
++
++
++
++}
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) unsigned long kernel_trap_sp(struct pt_regs *regs)
++{
++
++ return (unsigned long)regs;
++
++
++
++}
++
++static inline __attribute__((always_inline)) unsigned long instruction_pointer(struct pt_regs *regs)
++{
++ return regs->ip;
++}
++
++static inline __attribute__((always_inline)) unsigned long frame_pointer(struct pt_regs *regs)
++{
++ return regs->bp;
++}
++
++
++
++
++
++extern void user_enable_single_step(struct task_struct *);
++extern void user_disable_single_step(struct task_struct *);
++
++extern void user_enable_block_step(struct task_struct *);
++
++
++
++
++
++
++struct user_desc;
++extern int do_get_thread_area(struct task_struct *p, int idx,
++         struct user_desc *info);
++extern int do_set_thread_area(struct task_struct *p, int idx,
++         struct user_desc *info, int can_allocate);
++# 131 "/d/kernels/linux-2.6.27.10-clickport/include/asm/vm86.h" 2
++# 141 "/d/kernels/linux-2.6.27.10-clickport/include/asm/vm86.h"
++struct kernel_vm86_regs {
++
++
++
++ struct pt_regs pt;
++
++
++
++ unsigned short es, __esh;
++ unsigned short ds, __dsh;
++ unsigned short fs, __fsh;
++ unsigned short gs, __gsh;
++};
++
++struct kernel_vm86_struct {
++ struct kernel_vm86_regs regs;
++# 166 "/d/kernels/linux-2.6.27.10-clickport/include/asm/vm86.h"
++ unsigned long flags;
++ unsigned long screen_bitmap;
++ unsigned long cpu_type;
++ struct revectored_struct int_revectored;
++ struct revectored_struct int21_revectored;
++ struct vm86plus_info_struct vm86plus;
++ struct pt_regs *regs32;
++# 183 "/d/kernels/linux-2.6.27.10-clickport/include/asm/vm86.h"
++};
++
++
++
++void handle_vm86_fault(struct kernel_vm86_regs *, long);
++int handle_vm86_trap(struct kernel_vm86_regs *, long, int);
++struct pt_regs *save_v86_state(struct kernel_vm86_regs *);
++
++struct task_struct;
++void release_vm86_irqs(struct task_struct *);
++# 11 "/d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/math_emu.h" 1
++
++
++
++
++
++
++
++struct info {
++ long ___orig_eip;
++ long ___ebx;
++ long ___ecx;
++ long ___edx;
++ long ___esi;
++ long ___edi;
++ long ___ebp;
++ long ___eax;
++ long ___ds;
++ long ___es;
++ long ___fs;
++ long ___orig_eax;
++ long ___eip;
++ long ___cs;
++ long ___eflags;
++ long ___esp;
++ long ___ss;
++ long ___vm86_es;
++ long ___vm86_ds;
++ long ___vm86_fs;
++ long ___vm86_gs;
++};
++# 12 "/d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h" 2
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/sigcontext.h" 1
++# 22 "/d/kernels/linux-2.6.27.10-clickport/include/asm/sigcontext.h"
++struct _fpreg {
++ unsigned short significand[4];
++ unsigned short exponent;
++};
++
++struct _fpxreg {
++ unsigned short significand[4];
++ unsigned short exponent;
++ unsigned short padding[3];
++};
++
++struct _xmmreg {
++ unsigned long element[4];
++};
++
++struct _fpstate {
++
++ unsigned long cw;
++ unsigned long sw;
++ unsigned long tag;
++ unsigned long ipoff;
++ unsigned long cssel;
++ unsigned long dataoff;
++ unsigned long datasel;
++ struct _fpreg _st[8];
++ unsigned short status;
++ unsigned short magic;
++
++
++ unsigned long _fxsr_env[6];
++ unsigned long mxcsr;
++ unsigned long reserved;
++ struct _fpxreg _fxsr_st[8];
++ struct _xmmreg _xmm[8];
++ unsigned long padding[56];
++};
++
++
++
++
++struct sigcontext {
++ unsigned short gs, __gsh;
++ unsigned short fs, __fsh;
++ unsigned short es, __esh;
++ unsigned short ds, __dsh;
++ unsigned long di;
++ unsigned long si;
++ unsigned long bp;
++ unsigned long sp;
++ unsigned long bx;
++ unsigned long dx;
++ unsigned long cx;
++ unsigned long ax;
++ unsigned long trapno;
++ unsigned long err;
++ unsigned long ip;
++ unsigned short cs, __csh;
++ unsigned long flags;
++ unsigned long sp_at_signal;
++ unsigned short ss, __ssh;
++ struct _fpstate *fpstate;
++ unsigned long oldmask;
++ unsigned long cr2;
++};
++# 15 "/d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/current.h" 1
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/percpu.h" 1
++# 105 "/d/kernels/linux-2.6.27.10-clickport/include/asm/percpu.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/percpu.h" 1
++# 22 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/percpu.h"
++extern unsigned long __per_cpu_offset[32];
++# 65 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/percpu.h"
++extern void setup_per_cpu_areas(void);
++# 106 "/d/kernels/linux-2.6.27.10-clickport/include/asm/percpu.h" 2
++
++
++extern __typeof__(unsigned long) per_cpu__this_cpu_off;
++
++
++
++extern void __bad_percpu_size(void);
++# 7 "/d/kernels/linux-2.6.27.10-clickport/include/asm/current.h" 2
++
++struct task_struct;
++
++extern __typeof__(struct task_struct *) per_cpu__current_task;
++static inline __attribute__((always_inline)) __attribute__((always_inline)) struct task_struct *get_current(void)
++{
++ return ({ typeof(per_cpu__current_task) ret__; switch (sizeof(per_cpu__current_task)) { case 1: asm("mov" "b ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__current_task)); break; case 2: asm("mov" "w ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__current_task)); break; case 4: asm("mov" "l ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__current_task)); break; default: __bad_percpu_size(); } ret__; });
++}
++# 16 "/d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/system.h" 1
++
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg.h" 1
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h" 1
++# 14 "/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h"
++struct __xchg_dummy {
++ unsigned long a[100];
++};
++# 33 "/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h"
++static inline __attribute__((always_inline)) void __set_64bit(unsigned long long *ptr,
++          unsigned int low, unsigned int high)
++{
++ asm volatile("\n1:\t"
++       "movl (%0), %%eax\n\t"
++       "movl 4(%0), %%edx\n\t"
++       "lock ; " "cmpxchg8b (%0)\n\t"
++       "jnz 1b"
++       :
++       : "D"(ptr),
++         "b"(low),
++         "c"(high)
++       : "ax", "dx", "memory");
++}
++
++static inline __attribute__((always_inline)) void __set_64bit_constant(unsigned long long *ptr,
++     unsigned long long value)
++{
++ __set_64bit(ptr, (unsigned int)value, (unsigned int)(value >> 32));
++}
++
++
++
++
++static inline __attribute__((always_inline)) void __set_64bit_var(unsigned long long *ptr,
++       unsigned long long value)
++{
++ __set_64bit(ptr, *(((unsigned int *)&(value)) + 0), *(((unsigned int *)&(value)) + 1));
++}
++# 79 "/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h"
++static inline __attribute__((always_inline)) unsigned long __xchg(unsigned long x, volatile void *ptr,
++       int size)
++{
++ switch (size) {
++ case 1:
++  asm volatile("xchgb %b0,%1"
++        : "=q" (x)
++        : "m" (*((struct __xchg_dummy *)(ptr))), "0" (x)
++        : "memory");
++  break;
++ case 2:
++  asm volatile("xchgw %w0,%1"
++        : "=r" (x)
++        : "m" (*((struct __xchg_dummy *)(ptr))), "0" (x)
++        : "memory");
++  break;
++ case 4:
++  asm volatile("xchgl %0,%1"
++        : "=r" (x)
++        : "m" (*((struct __xchg_dummy *)(ptr))), "0" (x)
++        : "memory");
++  break;
++ }
++ return x;
++}
++# 136 "/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h"
++static inline __attribute__((always_inline)) unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
++          unsigned long xxx_new, int size)
++{
++ unsigned long prev;
++ switch (size) {
++ case 1:
++  asm volatile("lock ; " "cmpxchgb %b1,%2"
++        : "=a"(prev)
++        : "q"(xxx_new), "m"(*((struct __xchg_dummy *)(ptr))), "0"(old)
++        : "memory");
++  return prev;
++ case 2:
++  asm volatile("lock ; " "cmpxchgw %w1,%2"
++        : "=a"(prev)
++        : "r"(xxx_new), "m"(*((struct __xchg_dummy *)(ptr))), "0"(old)
++        : "memory");
++  return prev;
++ case 4:
++  asm volatile("lock ; " "cmpxchgl %1,%2"
++        : "=a"(prev)
++        : "r"(xxx_new), "m"(*((struct __xchg_dummy *)(ptr))), "0"(old)
++        : "memory");
++  return prev;
++ }
++ return old;
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) unsigned long __sync_cmpxchg(volatile void *ptr,
++        unsigned long old,
++        unsigned long xxx_new, int size)
++{
++ unsigned long prev;
++ switch (size) {
++ case 1:
++  asm volatile("lock; cmpxchgb %b1,%2"
++        : "=a"(prev)
++        : "q"(xxx_new), "m"(*((struct __xchg_dummy *)(ptr))), "0"(old)
++        : "memory");
++  return prev;
++ case 2:
++  asm volatile("lock; cmpxchgw %w1,%2"
++        : "=a"(prev)
++        : "r"(xxx_new), "m"(*((struct __xchg_dummy *)(ptr))), "0"(old)
++        : "memory");
++  return prev;
++ case 4:
++  asm volatile("lock; cmpxchgl %1,%2"
++        : "=a"(prev)
++        : "r"(xxx_new), "m"(*((struct __xchg_dummy *)(ptr))), "0"(old)
++        : "memory");
++  return prev;
++ }
++ return old;
++}
++
++static inline __attribute__((always_inline)) unsigned long __cmpxchg_local(volatile void *ptr,
++         unsigned long old,
++         unsigned long xxx_new, int size)
++{
++ unsigned long prev;
++ switch (size) {
++ case 1:
++  asm volatile("cmpxchgb %b1,%2"
++        : "=a"(prev)
++        : "q"(xxx_new), "m"(*((struct __xchg_dummy *)(ptr))), "0"(old)
++        : "memory");
++  return prev;
++ case 2:
++  asm volatile("cmpxchgw %w1,%2"
++        : "=a"(prev)
++        : "r"(xxx_new), "m"(*((struct __xchg_dummy *)(ptr))), "0"(old)
++        : "memory");
++  return prev;
++ case 4:
++  asm volatile("cmpxchgl %1,%2"
++        : "=a"(prev)
++        : "r"(xxx_new), "m"(*((struct __xchg_dummy *)(ptr))), "0"(old)
++        : "memory");
++  return prev;
++ }
++ return old;
++}
++
++static inline __attribute__((always_inline)) unsigned long long __cmpxchg64(volatile void *ptr,
++          unsigned long long old,
++          unsigned long long xxx_new)
++{
++ unsigned long long prev;
++ asm volatile("lock ; " "cmpxchg8b %3"
++       : "=A"(prev)
++       : "b"((unsigned long)xxx_new),
++         "c"((unsigned long)(xxx_new >> 32)),
++         "m"(*((struct __xchg_dummy *)(ptr))),
++         "0"(old)
++       : "memory");
++ return prev;
++}
++
++static inline __attribute__((always_inline)) unsigned long long __cmpxchg64_local(volatile void *ptr,
++         unsigned long long old,
++         unsigned long long xxx_new)
++{
++ unsigned long long prev;
++ asm volatile("cmpxchg8b %3"
++       : "=A"(prev)
++       : "b"((unsigned long)xxx_new),
++         "c"((unsigned long)(xxx_new >> 32)),
++         "m"(*((struct __xchg_dummy *)(ptr))),
++         "0"(old)
++       : "memory");
++ return prev;
++}
++# 313 "/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg_32.h"
++extern unsigned long long cmpxchg_486_u64(volatile void *, u64, u64);
++# 3 "/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg.h" 2
++# 8 "/d/kernels/linux-2.6.27.10-clickport/include/asm/system.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/nops.h" 1
++# 9 "/d/kernels/linux-2.6.27.10-clickport/include/asm/system.h" 2
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/irqflags.h" 1
++# 57 "/d/kernels/linux-2.6.27.10-clickport/include/linux/irqflags.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/irqflags.h" 1
++# 11 "/d/kernels/linux-2.6.27.10-clickport/include/asm/irqflags.h"
++static inline __attribute__((always_inline)) unsigned long native_save_fl(void)
++{
++ unsigned long flags;
++
++ asm volatile("# __raw_save_flags\n\t"
++       "pushf ; pop %0"
++       : "=g" (flags)
++       :
++       : "memory");
++
++ return flags;
++}
++
++static inline __attribute__((always_inline)) void native_restore_fl(unsigned long flags)
++{
++ asm volatile("push %0 ; popf"
++       :
++       :"g" (flags)
++       :"memory", "cc");
++}
++
++static inline __attribute__((always_inline)) void native_irq_disable(void)
++{
++ asm volatile("cli": : :"memory");
++}
++
++static inline __attribute__((always_inline)) void native_irq_enable(void)
++{
++ asm volatile("sti": : :"memory");
++}
++
++static inline __attribute__((always_inline)) void native_safe_halt(void)
++{
++ asm volatile("sti; hlt": : :"memory");
++}
++
++static inline __attribute__((always_inline)) void native_halt(void)
++{
++ asm volatile("hlt": : :"memory");
++}
++# 157 "/d/kernels/linux-2.6.27.10-clickport/include/asm/irqflags.h"
++static inline __attribute__((always_inline)) int raw_irqs_disabled_flags(unsigned long flags)
++{
++ return !(flags & 0x00000200);
++}
++
++static inline __attribute__((always_inline)) int raw_irqs_disabled(void)
++{
++ unsigned long flags = __raw_local_save_flags();
++
++ return raw_irqs_disabled_flags(flags);
++}
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void trace_hardirqs_fixup_flags(unsigned long flags)
++{
++ if (raw_irqs_disabled_flags(flags))
++  do { } while (0);
++ else
++  do { } while (0);
++}
++
++static inline __attribute__((always_inline)) void trace_hardirqs_fixup(void)
++{
++ unsigned long flags = __raw_local_save_flags();
++
++ trace_hardirqs_fixup_flags(flags);
++}
++# 58 "/d/kernels/linux-2.6.27.10-clickport/include/linux/irqflags.h" 2
++# 12 "/d/kernels/linux-2.6.27.10-clickport/include/asm/system.h" 2
++# 22 "/d/kernels/linux-2.6.27.10-clickport/include/asm/system.h"
++struct task_struct;
++struct task_struct *__switch_to(struct task_struct *prev,
++    struct task_struct *next);
++# 139 "/d/kernels/linux-2.6.27.10-clickport/include/asm/system.h"
++extern void native_load_gs_index(unsigned);
++# 165 "/d/kernels/linux-2.6.27.10-clickport/include/asm/system.h"
++static inline __attribute__((always_inline)) unsigned long get_limit(unsigned long segment)
++{
++ unsigned long __limit;
++ asm("lsll %1,%0" : "=r" (__limit) : "r" (segment));
++ return __limit + 1;
++}
++
++static inline __attribute__((always_inline)) void native_clts(void)
++{
++ asm volatile("clts");
++}
++# 184 "/d/kernels/linux-2.6.27.10-clickport/include/asm/system.h"
++static unsigned long __force_order;
++
++static inline __attribute__((always_inline)) unsigned long native_read_cr0(void)
++{
++ unsigned long val;
++ asm volatile("mov %%cr0,%0\n\t" : "=r" (val), "=m" (__force_order));
++ return val;
++}
++
++static inline __attribute__((always_inline)) void native_write_cr0(unsigned long val)
++{
++ asm volatile("mov %0,%%cr0": : "r" (val), "m" (__force_order));
++}
++
++static inline __attribute__((always_inline)) unsigned long native_read_cr2(void)
++{
++ unsigned long val;
++ asm volatile("mov %%cr2,%0\n\t" : "=r" (val), "=m" (__force_order));
++ return val;
++}
++
++static inline __attribute__((always_inline)) void native_write_cr2(unsigned long val)
++{
++ asm volatile("mov %0,%%cr2": : "r" (val), "m" (__force_order));
++}
++
++static inline __attribute__((always_inline)) unsigned long native_read_cr3(void)
++{
++ unsigned long val;
++ asm volatile("mov %%cr3,%0\n\t" : "=r" (val), "=m" (__force_order));
++ return val;
++}
++
++static inline __attribute__((always_inline)) void native_write_cr3(unsigned long val)
++{
++ asm volatile("mov %0,%%cr3": : "r" (val), "m" (__force_order));
++}
++
++static inline __attribute__((always_inline)) unsigned long native_read_cr4(void)
++{
++ unsigned long val;
++ asm volatile("mov %%cr4,%0\n\t" : "=r" (val), "=m" (__force_order));
++ return val;
++}
++
++static inline __attribute__((always_inline)) unsigned long native_read_cr4_safe(void)
++{
++ unsigned long val;
++
++
++
++ asm volatile("1: mov %%cr4, %0\n"
++       "2:\n"
++       " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "2b" "\n" " .previous\n"
++       : "=r" (val), "=m" (__force_order) : "0" (0));
++
++
++
++ return val;
++}
++
++static inline __attribute__((always_inline)) void native_write_cr4(unsigned long val)
++{
++ asm volatile("mov %0,%%cr4": : "r" (val), "m" (__force_order));
++}
++# 264 "/d/kernels/linux-2.6.27.10-clickport/include/asm/system.h"
++static inline __attribute__((always_inline)) void native_wbinvd(void)
++{
++ asm volatile("wbinvd": : :"memory");
++}
++# 297 "/d/kernels/linux-2.6.27.10-clickport/include/asm/system.h"
++static inline __attribute__((always_inline)) void clflush(volatile void *__p)
++{
++ asm volatile("clflush %0" : "+m" (*(volatile char *)__p));
++}
++
++
++
++void disable_hlt(void);
++void enable_hlt(void);
++
++void cpu_idle_wait(void);
++
++extern unsigned long arch_align_stack(unsigned long sp);
++extern void free_init_pages(char *what, unsigned long begin, unsigned long end);
++
++void default_idle(void);
++# 416 "/d/kernels/linux-2.6.27.10-clickport/include/asm/system.h"
++static inline __attribute__((always_inline)) void rdtsc_barrier(void)
++{
++ asm volatile ("661:\n\t" ".byte 0x8d,0x76,0x00\n" "\n662:\n" ".section .altinstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "661b\n" " " ".long" " " "663f\n" "         .byte %c0\n" "  .byte 662b-661b\n" "    .byte 664f-663f\n" ".previous\n" ".section .altinstr_replacement,\"ax\"\n" "663:\n\t" "mfence" "\n664:\n" ".previous" :: "i" ((3*32+17)) : "memory");
++ asm volatile ("661:\n\t" ".byte 0x8d,0x76,0x00\n" "\n662:\n" ".section .altinstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "661b\n" " " ".long" " " "663f\n" "         .byte %c0\n" "  .byte 662b-661b\n" "    .byte 664f-663f\n" ".previous\n" ".section .altinstr_replacement,\"ax\"\n" "663:\n\t" "lfence" "\n664:\n" ".previous" :: "i" ((3*32+18)) : "memory");
++}
++# 18 "/d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h" 2
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/msr.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/msr-index.h" 1
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/asm/msr.h" 2
++# 14 "/d/kernels/linux-2.6.27.10-clickport/include/asm/msr.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/errno.h" 1
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/errno.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/errno-base.h" 1
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/errno.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/errno.h" 2
++# 15 "/d/kernels/linux-2.6.27.10-clickport/include/asm/msr.h" 2
++
++static inline __attribute__((always_inline)) unsigned long long native_read_tscp(unsigned int *aux)
++{
++ unsigned long low, high;
++ asm volatile(".byte 0x0f,0x01,0xf9"
++       : "=a" (low), "=d" (high), "=c" (*aux));
++ return low | ((u64)high << 32);
++}
++# 42 "/d/kernels/linux-2.6.27.10-clickport/include/asm/msr.h"
++static inline __attribute__((always_inline)) unsigned long long native_read_msr(unsigned int msr)
++{
++ unsigned long long val;
++
++ asm volatile("rdmsr" : "=A" (val) : "c" (msr));
++ return (val);
++}
++
++static inline __attribute__((always_inline)) unsigned long long native_read_msr_safe(unsigned int msr,
++            int *err)
++{
++ unsigned long long val;
++
++ asm volatile("2: rdmsr ; xor %[err],%[err]\n"
++       "1:\n\t"
++       ".section .fixup,\"ax\"\n\t"
++       "3:  mov %[fault],%[err] ; jmp 1b\n\t"
++       ".previous\n\t"
++       " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "2b" "," "3b" "\n" " .previous\n"
++       : [err] "=r" (*err), "=A" (val)
++       : "c" (msr), [fault] "i" (-14));
++ return (val);
++}
++
++static inline __attribute__((always_inline)) void native_write_msr(unsigned int msr,
++        unsigned low, unsigned high)
++{
++ asm volatile("wrmsr" : : "c" (msr), "a"(low), "d" (high) : "memory");
++}
++
++static inline __attribute__((always_inline)) int native_write_msr_safe(unsigned int msr,
++     unsigned low, unsigned high)
++{
++ int err;
++ asm volatile("2: wrmsr ; xor %[err],%[err]\n"
++       "1:\n\t"
++       ".section .fixup,\"ax\"\n\t"
++       "3:  mov %[fault],%[err] ; jmp 1b\n\t"
++       ".previous\n\t"
++       " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "2b" "," "3b" "\n" " .previous\n"
++       : [err] "=a" (err)
++       : "c" (msr), "0" (low), "d" (high),
++         [fault] "i" (-14)
++       : "memory");
++ return err;
++}
++
++extern unsigned long long native_read_tsc(void);
++
++static inline __attribute__((always_inline)) __attribute__((always_inline)) unsigned long long __native_read_tsc(void)
++{
++ unsigned long long val;
++
++ rdtsc_barrier();
++ asm volatile("rdtsc" : "=A" (val));
++ rdtsc_barrier();
++
++ return (val);
++}
++
++static inline __attribute__((always_inline)) unsigned long long native_read_pmc(int counter)
++{
++ unsigned long long val;
++
++ asm volatile("rdpmc" : "=A" (val) : "c" (counter));
++ return (val);
++}
++# 195 "/d/kernels/linux-2.6.27.10-clickport/include/asm/msr.h"
++int rdmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h);
++int wrmsr_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h);
++int rdmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 *l, u32 *h);
++int wrmsr_safe_on_cpu(unsigned int cpu, u32 msr_no, u32 l, u32 h);
++# 21 "/d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h" 2
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/personality.h" 1
++# 10 "/d/kernels/linux-2.6.27.10-clickport/include/linux/personality.h"
++struct exec_domain;
++struct pt_regs;
++
++extern int register_exec_domain(struct exec_domain *);
++extern int unregister_exec_domain(struct exec_domain *);
++extern int __set_personality(unsigned long);
++# 24 "/d/kernels/linux-2.6.27.10-clickport/include/linux/personality.h"
++enum {
++ ADDR_NO_RANDOMIZE = 0x0040000,
++ FDPIC_FUNCPTRS = 0x0080000,
++
++
++ MMAP_PAGE_ZERO = 0x0100000,
++ ADDR_COMPAT_LAYOUT = 0x0200000,
++ READ_IMPLIES_EXEC = 0x0400000,
++ ADDR_LIMIT_32BIT = 0x0800000,
++ SHORT_INODE = 0x1000000,
++ WHOLE_SECONDS = 0x2000000,
++ STICKY_TIMEOUTS = 0x4000000,
++ ADDR_LIMIT_3GB = 0x8000000,
++};
++# 51 "/d/kernels/linux-2.6.27.10-clickport/include/linux/personality.h"
++enum {
++ PER_LINUX = 0x0000,
++ PER_LINUX_32BIT = 0x0000 | ADDR_LIMIT_32BIT,
++ PER_LINUX_FDPIC = 0x0000 | FDPIC_FUNCPTRS,
++ PER_SVR4 = 0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO,
++ PER_SVR3 = 0x0002 | STICKY_TIMEOUTS | SHORT_INODE,
++ PER_SCOSVR3 = 0x0003 | STICKY_TIMEOUTS |
++      WHOLE_SECONDS | SHORT_INODE,
++ PER_OSR5 = 0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS,
++ PER_WYSEV386 = 0x0004 | STICKY_TIMEOUTS | SHORT_INODE,
++ PER_ISCR4 = 0x0005 | STICKY_TIMEOUTS,
++ PER_BSD = 0x0006,
++ PER_SUNOS = 0x0006 | STICKY_TIMEOUTS,
++ PER_XENIX = 0x0007 | STICKY_TIMEOUTS | SHORT_INODE,
++ PER_LINUX32 = 0x0008,
++ PER_LINUX32_3GB = 0x0008 | ADDR_LIMIT_3GB,
++ PER_IRIX32 = 0x0009 | STICKY_TIMEOUTS,
++ PER_IRIXN32 = 0x000a | STICKY_TIMEOUTS,
++ PER_IRIX64 = 0x000b | STICKY_TIMEOUTS,
++ PER_RISCOS = 0x000c,
++ PER_SOLARIS = 0x000d | STICKY_TIMEOUTS,
++ PER_UW7 = 0x000e | STICKY_TIMEOUTS | MMAP_PAGE_ZERO,
++ PER_OSF4 = 0x000f,
++ PER_HPUX = 0x0010,
++ PER_MASK = 0x00ff,
++};
++# 86 "/d/kernels/linux-2.6.27.10-clickport/include/linux/personality.h"
++typedef void (*handler_t)(int, struct pt_regs *);
++
++struct exec_domain {
++ const char *name;
++ handler_t handler;
++ unsigned char pers_low;
++ unsigned char pers_high;
++ unsigned long *signal_map;
++ unsigned long *signal_invmap;
++ struct map_segment *err_map;
++ struct map_segment *socktype_map;
++ struct map_segment *sockopt_map;
++ struct map_segment *af_map;
++ struct module *module;
++ struct exec_domain *next;
++};
++# 25 "/d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h" 2
++# 34 "/d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h"
++static inline __attribute__((always_inline)) void *current_text_addr(void)
++{
++ void *pc;
++
++ asm volatile("mov $1f, %0; 1:":"=r" (pc));
++
++ return pc;
++}
++# 57 "/d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h"
++struct cpuinfo_x86 {
++ __u8 x86;
++ __u8 x86_vendor;
++ __u8 x86_model;
++ __u8 x86_mask;
++
++ char wp_works_ok;
++
++
++ char hlt_works_ok;
++ char hard_math;
++ char rfu;
++ char fdiv_bug;
++ char f00f_bug;
++ char coma_bug;
++ char pad0;
++# 84 "/d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h"
++ int cpuid_level;
++ __u32 x86_capability[8];
++ char x86_vendor_id[16];
++ char x86_model_id[64];
++
++ int x86_cache_size;
++ int x86_cache_alignment;
++ int x86_power;
++ unsigned long loops_per_jiffy;
++
++
++ cpumask_t llc_shared_map;
++
++
++ u16 x86_max_cores;
++ u16 apicid;
++ u16 initial_apicid;
++ u16 x86_clflush_size;
++
++
++ u16 booted_cores;
++
++ u16 phys_proc_id;
++
++ u16 cpu_core_id;
++
++ u16 cpu_index;
++
++} __attribute__((__aligned__((1 << (7)))));
++# 128 "/d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h"
++extern struct cpuinfo_x86 boot_cpu_data;
++extern struct cpuinfo_x86 new_cpu_data;
++
++extern struct tss_struct doublefault_tss;
++extern __u32 cleared_cpu_caps[8];
++
++
++extern __typeof__(struct cpuinfo_x86) per_cpu__cpu_info;
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) int hlt_works(int cpu)
++{
++
++ return (*({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((&per_cpu__cpu_info))); (typeof((&per_cpu__cpu_info))) (__ptr + (((__per_cpu_offset[cpu])))); })).hlt_works_ok;
++
++
++
++}
++
++
++
++extern void cpu_detect(struct cpuinfo_x86 *c);
++
++extern void early_cpu_init(void);
++extern void identify_boot_cpu(void);
++extern void identify_secondary_cpu(struct cpuinfo_x86 *);
++extern void print_cpu_info(struct cpuinfo_x86 *);
++extern void init_scattered_cpuid_features(struct cpuinfo_x86 *c);
++extern unsigned int init_intel_cacheinfo(struct cpuinfo_x86 *c);
++extern unsigned short num_cache_leaves;
++
++
++extern void detect_ht(struct cpuinfo_x86 *c);
++
++
++
++
++static inline __attribute__((always_inline)) void native_cpuid(unsigned int *eax, unsigned int *ebx,
++    unsigned int *ecx, unsigned int *edx)
++{
++
++ asm("cpuid"
++     : "=a" (*eax),
++       "=b" (*ebx),
++       "=c" (*ecx),
++       "=d" (*edx)
++     : "0" (*eax), "2" (*ecx));
++}
++
++static inline __attribute__((always_inline)) void load_cr3(pgd_t *pgdir)
++{
++ write_cr3((((unsigned long)(pgdir)) - ((unsigned long)(0xC0000000UL))));
++}
++
++
++
++struct x86_hw_tss {
++ unsigned short back_link, __blh;
++ unsigned long sp0;
++ unsigned short ss0, __ss0h;
++ unsigned long sp1;
++
++ unsigned short ss1, __ss1h;
++ unsigned long sp2;
++ unsigned short ss2, __ss2h;
++ unsigned long __cr3;
++ unsigned long ip;
++ unsigned long flags;
++ unsigned long ax;
++ unsigned long cx;
++ unsigned long dx;
++ unsigned long bx;
++ unsigned long sp;
++ unsigned long bp;
++ unsigned long si;
++ unsigned long di;
++ unsigned short es, __esh;
++ unsigned short cs, __csh;
++ unsigned short ss, __ssh;
++ unsigned short ds, __dsh;
++ unsigned short fs, __fsh;
++ unsigned short gs, __gsh;
++ unsigned short ldt, __ldth;
++ unsigned short trace;
++ unsigned short io_bitmap_base;
++
++} __attribute__((packed));
++# 246 "/d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h"
++struct tss_struct {
++
++
++
++ struct x86_hw_tss x86_tss;
++
++
++
++
++
++
++
++ unsigned long io_bitmap[((65536/8)/sizeof(long)) + 1];
++
++
++
++ unsigned long io_bitmap_max;
++ struct thread_struct *io_bitmap_owner;
++
++
++
++
++ unsigned long stack[64];
++
++} __attribute__((__aligned__((1 << (7)))));
++
++extern __typeof__(struct tss_struct) per_cpu__init_tss;
++
++
++
++
++struct orig_ist {
++ unsigned long ist[7];
++};
++
++
++
++struct i387_fsave_struct {
++ u32 cwd;
++ u32 swd;
++ u32 twd;
++ u32 fip;
++ u32 fcs;
++ u32 foo;
++ u32 fos;
++
++
++ u32 st_space[20];
++
++
++ u32 status;
++};
++
++struct i387_fxsave_struct {
++ u16 cwd;
++ u16 swd;
++ u16 twd;
++ u16 fop;
++ union {
++  struct {
++   u64 rip;
++   u64 rdp;
++  };
++  struct {
++   u32 fip;
++   u32 fcs;
++   u32 foo;
++   u32 fos;
++  };
++ };
++ u32 mxcsr;
++ u32 mxcsr_mask;
++
++
++ u32 st_space[32];
++
++
++ u32 xmm_space[64];
++
++ u32 padding[24];
++
++} __attribute__((aligned(16)));
++
++struct i387_soft_struct {
++ u32 cwd;
++ u32 swd;
++ u32 twd;
++ u32 fip;
++ u32 fcs;
++ u32 foo;
++ u32 fos;
++
++ u32 st_space[20];
++ u8 ftop;
++ u8 changed;
++ u8 lookahead;
++ u8 no_update;
++ u8 rm;
++ u8 alimit;
++ struct info *info;
++ u32 entry_eip;
++};
++
++union thread_xstate {
++ struct i387_fsave_struct fsave;
++ struct i387_fxsave_struct fxsave;
++ struct i387_soft_struct soft;
++};
++
++
++
++
++
++extern void print_cpu_info(struct cpuinfo_x86 *);
++extern unsigned int xstate_size;
++extern void free_thread_xstate(struct task_struct *);
++extern struct kmem_cache *task_xstate_cachep;
++extern void init_scattered_cpuid_features(struct cpuinfo_x86 *c);
++extern unsigned int init_intel_cacheinfo(struct cpuinfo_x86 *c);
++extern unsigned short num_cache_leaves;
++
++struct thread_struct {
++
++ struct desc_struct tls_array[3];
++ unsigned long sp0;
++ unsigned long sp;
++
++ unsigned long sysenter_cs;
++
++
++
++
++
++
++
++ unsigned long ip;
++ unsigned long fs;
++ unsigned long gs;
++
++ unsigned long debugreg0;
++ unsigned long debugreg1;
++ unsigned long debugreg2;
++ unsigned long debugreg3;
++ unsigned long debugreg6;
++ unsigned long debugreg7;
++
++ unsigned long cr2;
++ unsigned long trap_no;
++ unsigned long error_code;
++
++ union thread_xstate *xstate;
++
++
++ struct vm86_struct *vm86_info;
++ unsigned long screen_bitmap;
++ unsigned long v86flags;
++ unsigned long v86mask;
++ unsigned long saved_sp0;
++ unsigned int saved_fs;
++ unsigned int saved_gs;
++
++
++ unsigned long *io_bitmap_ptr;
++ unsigned long iopl;
++
++ unsigned io_bitmap_max;
++
++ unsigned long debugctlmsr;
++
++
++ unsigned long ds_area_msr;
++};
++
++static inline __attribute__((always_inline)) unsigned long native_get_debugreg(int regno)
++{
++ unsigned long val = 0;
++
++ switch (regno) {
++ case 0:
++  asm("mov %%db0, %0" :"=r" (val));
++  break;
++ case 1:
++  asm("mov %%db1, %0" :"=r" (val));
++  break;
++ case 2:
++  asm("mov %%db2, %0" :"=r" (val));
++  break;
++ case 3:
++  asm("mov %%db3, %0" :"=r" (val));
++  break;
++ case 6:
++  asm("mov %%db6, %0" :"=r" (val));
++  break;
++ case 7:
++  asm("mov %%db7, %0" :"=r" (val));
++  break;
++ default:
++  do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h"), "i" (443), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0);
++ }
++ return val;
++}
++
++static inline __attribute__((always_inline)) void native_set_debugreg(int regno, unsigned long value)
++{
++ switch (regno) {
++ case 0:
++  asm("mov %0, %%db0" ::"r" (value));
++  break;
++ case 1:
++  asm("mov %0, %%db1" ::"r" (value));
++  break;
++ case 2:
++  asm("mov %0, %%db2" ::"r" (value));
++  break;
++ case 3:
++  asm("mov %0, %%db3" ::"r" (value));
++  break;
++ case 6:
++  asm("mov %0, %%db6" ::"r" (value));
++  break;
++ case 7:
++  asm("mov %0, %%db7" ::"r" (value));
++  break;
++ default:
++  do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h"), "i" (470), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0);
++ }
++}
++
++
++
++
++static inline __attribute__((always_inline)) void native_set_iopl_mask(unsigned mask)
++{
++
++ unsigned int reg;
++
++ asm volatile ("pushfl;"
++        "popl %0;"
++        "andl %1, %0;"
++        "orl %2, %0;"
++        "pushl %0;"
++        "popfl"
++        : "=&r" (reg)
++        : "i" (~0x00003000), "r" (mask));
++
++}
++
++static inline __attribute__((always_inline)) void
++native_load_sp0(struct tss_struct *tss, struct thread_struct *thread)
++{
++ tss->x86_tss.sp0 = thread->sp0;
++
++
++ if (__builtin_expect(!!(tss->x86_tss.ss1 != thread->sysenter_cs), 0)) {
++  tss->x86_tss.ss1 = thread->sysenter_cs;
++  do { paravirt_write_msr(0x00000174, thread->sysenter_cs, 0); } while (0);
++ }
++
++}
++
++static inline __attribute__((always_inline)) void native_swapgs(void)
++{
++
++
++
++}
++# 542 "/d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h"
++extern unsigned long mmu_cr4_features;
++
++static inline __attribute__((always_inline)) void set_in_cr4(unsigned long mask)
++{
++ unsigned cr4;
++
++ mmu_cr4_features |= mask;
++ cr4 = read_cr4();
++ cr4 |= mask;
++ write_cr4(cr4);
++}
++
++static inline __attribute__((always_inline)) void clear_in_cr4(unsigned long mask)
++{
++ unsigned cr4;
++
++ mmu_cr4_features &= ~mask;
++ cr4 = read_cr4();
++ cr4 &= ~mask;
++ write_cr4(cr4);
++}
++
++struct microcode_header {
++ unsigned int hdrver;
++ unsigned int rev;
++ unsigned int date;
++ unsigned int sig;
++ unsigned int cksum;
++ unsigned int ldrver;
++ unsigned int pf;
++ unsigned int datasize;
++ unsigned int totalsize;
++ unsigned int reserved[3];
++};
++
++struct microcode {
++ struct microcode_header hdr;
++ unsigned int bits[0];
++};
++
++typedef struct microcode microcode_t;
++typedef struct microcode_header microcode_header_t;
++
++
++struct extended_signature {
++ unsigned int sig;
++ unsigned int pf;
++ unsigned int cksum;
++};
++
++struct extended_sigtable {
++ unsigned int count;
++ unsigned int cksum;
++ unsigned int reserved[3];
++ struct extended_signature sigs[0];
++};
++
++typedef struct {
++ unsigned long seg;
++} mm_segment_t;
++
++
++
++
++
++extern int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
++
++
++extern void release_thread(struct task_struct *);
++
++
++extern void prepare_to_copy(struct task_struct *tsk);
++
++unsigned long get_wchan(struct task_struct *p);
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void cpuid(unsigned int op,
++    unsigned int *eax, unsigned int *ebx,
++    unsigned int *ecx, unsigned int *edx)
++{
++ *eax = op;
++ *ecx = 0;
++ __cpuid(eax, ebx, ecx, edx);
++}
++
++
++static inline __attribute__((always_inline)) void cpuid_count(unsigned int op, int count,
++          unsigned int *eax, unsigned int *ebx,
++          unsigned int *ecx, unsigned int *edx)
++{
++ *eax = op;
++ *ecx = count;
++ __cpuid(eax, ebx, ecx, edx);
++}
++
++
++
++
++static inline __attribute__((always_inline)) unsigned int cpuid_eax(unsigned int op)
++{
++ unsigned int eax, ebx, ecx, edx;
++
++ cpuid(op, &eax, &ebx, &ecx, &edx);
++
++ return eax;
++}
++
++static inline __attribute__((always_inline)) unsigned int cpuid_ebx(unsigned int op)
++{
++ unsigned int eax, ebx, ecx, edx;
++
++ cpuid(op, &eax, &ebx, &ecx, &edx);
++
++ return ebx;
++}
++
++static inline __attribute__((always_inline)) unsigned int cpuid_ecx(unsigned int op)
++{
++ unsigned int eax, ebx, ecx, edx;
++
++ cpuid(op, &eax, &ebx, &ecx, &edx);
++
++ return ecx;
++}
++
++static inline __attribute__((always_inline)) unsigned int cpuid_edx(unsigned int op)
++{
++ unsigned int eax, ebx, ecx, edx;
++
++ cpuid(op, &eax, &ebx, &ecx, &edx);
++
++ return edx;
++}
++
++
++static inline __attribute__((always_inline)) void rep_nop(void)
++{
++ asm volatile("rep; nop" ::: "memory");
++}
++
++static inline __attribute__((always_inline)) void cpu_relax(void)
++{
++ rep_nop();
++}
++
++
++static inline __attribute__((always_inline)) void sync_core(void)
++{
++ int tmp;
++
++ asm volatile("cpuid" : "=a" (tmp) : "0" (1)
++       : "ebx", "ecx", "edx", "memory");
++}
++
++static inline __attribute__((always_inline)) void __monitor(const void *eax, unsigned long ecx,
++        unsigned long edx)
++{
++
++ asm volatile(".byte 0x0f, 0x01, 0xc8;"
++       :: "a" (eax), "c" (ecx), "d"(edx));
++}
++
++static inline __attribute__((always_inline)) void __mwait(unsigned long eax, unsigned long ecx)
++{
++
++ asm volatile(".byte 0x0f, 0x01, 0xc9;"
++       :: "a" (eax), "c" (ecx));
++}
++
++static inline __attribute__((always_inline)) void __sti_mwait(unsigned long eax, unsigned long ecx)
++{
++ do { } while (0);
++
++ asm volatile("sti; .byte 0x0f, 0x01, 0xc9;"
++       :: "a" (eax), "c" (ecx));
++}
++
++extern void mwait_idle_with_hints(unsigned long eax, unsigned long ecx);
++
++extern void select_idle_routine(const struct cpuinfo_x86 *c);
++
++extern unsigned long boot_option_idle_override;
++extern unsigned long idle_halt;
++extern unsigned long idle_nomwait;
++# 743 "/d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h"
++static inline __attribute__((always_inline)) void wbinvd_halt(void)
++{
++ asm volatile ("661:\n\t" "lock; addl $0,0(%%esp)" "\n662:\n" ".section .altinstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "661b\n" " " ".long" " " "663f\n" "         .byte %c0\n" "  .byte 662b-661b\n" "    .byte 664f-663f\n" ".previous\n" ".section .altinstr_replacement,\"ax\"\n" "663:\n\t" "mfence" "\n664:\n" ".previous" :: "i" ((0*32+26)) : "memory");
++
++ if ((__builtin_constant_p((0*32+19)) && ( ((((0*32+19))>>5)==0 && (1UL<<(((0*32+19))&31) & ((1<<((0*32+ 0) & 31))|0|0|0| 0|0|0|(1<<((0*32+15) & 31))| 0|0))) || ((((0*32+19))>>5)==1 && (1UL<<(((0*32+19))&31) & (0|0))) || ((((0*32+19))>>5)==2 && (1UL<<(((0*32+19))&31) & 0)) || ((((0*32+19))>>5)==3 && (1UL<<(((0*32+19))&31) & (0))) || ((((0*32+19))>>5)==4 && (1UL<<(((0*32+19))&31) & 0)) || ((((0*32+19))>>5)==5 && (1UL<<(((0*32+19))&31) & 0)) || ((((0*32+19))>>5)==6 && (1UL<<(((0*32+19))&31) & 0)) || ((((0*32+19))>>5)==7 && (1UL<<(((0*32+19))&31) & 0)) ) ? 1 : (__builtin_constant_p(((0*32+19))) ? constant_test_bit(((0*32+19)), ((unsigned long *)((&boot_cpu_data)->x86_capability))) : variable_test_bit(((0*32+19)), ((unsigned long *)((&boot_cpu_data)->x86_capability))))))
++  asm volatile("cli; wbinvd; 1: hlt; jmp 1b" : : : "memory");
++ else
++  while (1)
++   halt();
++}
++
++extern void enable_sep_cpu(void);
++extern int sysenter_setup(void);
++
++
++extern struct desc_ptr early_gdt_descr;
++
++extern void cpu_set_gdt(int);
++extern void switch_to_new_gdt(void);
++extern void cpu_init(void);
++extern void init_gdt(int cpu);
++
++static inline __attribute__((always_inline)) void update_debugctlmsr(unsigned long debugctlmsr)
++{
++
++
++
++
++ do { paravirt_write_msr(0x000001d9, (u32)((u64)(debugctlmsr)), ((u64)(debugctlmsr))>>32); } while (0);
++}
++
++
++
++
++
++extern unsigned int machine_id;
++extern unsigned int machine_submodel_id;
++extern unsigned int BIOS_revision;
++
++
++extern int bootloader_type;
++
++extern char ignore_fpu_irq;
++# 804 "/d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h"
++static inline __attribute__((always_inline)) void prefetch(const void *x)
++{
++ asm volatile ("661:\n\t" ".byte 0x8d,0x74,0x26,0x00\n" "\n662:\n" ".section .altinstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "661b\n" " " ".long" " " "663f\n" "    .byte %c0\n" "  .byte 662b-661b\n" "    .byte 664f-663f\n" ".previous\n" ".section .altinstr_replacement,\"ax\"\n" "663:\n\t" "prefetchnta (%1)" "\n664:\n" ".previous" :: "i" ((0*32+25)), "r" (x));
++
++
++
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void prefetchw(const void *x)
++{
++ asm volatile ("661:\n\t" ".byte 0x8d,0x74,0x26,0x00\n" "\n662:\n" ".section .altinstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "661b\n" " " ".long" " " "663f\n" "    .byte %c0\n" "  .byte 662b-661b\n" "    .byte 664f-663f\n" ".previous\n" ".section .altinstr_replacement,\"ax\"\n" "663:\n\t" "prefetchw (%1)" "\n664:\n" ".previous" :: "i" ((1*32+31)), "r" (x));
++
++
++
++}
++
++static inline __attribute__((always_inline)) void spin_lock_prefetch(const void *x)
++{
++ prefetchw(x);
++}
++# 862 "/d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h"
++extern unsigned long thread_saved_pc(struct task_struct *tsk);
++# 928 "/d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h"
++extern void start_thread(struct pt_regs *regs, unsigned long new_ip,
++            unsigned long new_sp);
++# 943 "/d/kernels/linux-2.6.27.10-clickport/include/asm/processor.h"
++extern int get_tsc_mode(unsigned long adr);
++extern int set_tsc_mode(unsigned int val);
++# 23 "/d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h" 2
++
++struct thread_info {
++ struct task_struct *task;
++ struct exec_domain *exec_domain;
++ unsigned long flags;
++ __u32 status;
++ __u32 cpu;
++ int preempt_count;
++
++ mm_segment_t addr_limit;
++ struct restart_block restart_block;
++ void *sysenter_return;
++
++ unsigned long previous_esp;
++
++
++ __u8 supervisor_stack[0];
++
++};
++# 172 "/d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h"
++register unsigned long current_stack_pointer asm("esp") __attribute__((__used__));
++
++
++static inline __attribute__((always_inline)) struct thread_info *current_thread_info(void)
++{
++ return (struct thread_info *)
++  (current_stack_pointer & ~((((1UL) << 12) << 0) - 1));
++}
++# 247 "/d/kernels/linux-2.6.27.10-clickport/include/asm/thread_info.h"
++static inline __attribute__((always_inline)) void set_restore_sigmask(void)
++{
++ struct thread_info *ti = current_thread_info();
++ ti->status |= 0x0008;
++ set_bit(2, (unsigned long *)&ti->flags);
++}
++
++
++
++extern void arch_task_cache_init(void);
++extern void free_thread_info(struct thread_info *ti);
++extern int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src);
++# 48 "/d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h" 2
++# 56 "/d/kernels/linux-2.6.27.10-clickport/include/linux/thread_info.h"
++static inline __attribute__((always_inline)) void set_ti_thread_flag(struct thread_info *ti, int flag)
++{
++ set_bit(flag, (unsigned long *)&ti->flags);
++}
++
++static inline __attribute__((always_inline)) void clear_ti_thread_flag(struct thread_info *ti, int flag)
++{
++ clear_bit(flag, (unsigned long *)&ti->flags);
++}
++
++static inline __attribute__((always_inline)) int test_and_set_ti_thread_flag(struct thread_info *ti, int flag)
++{
++ return test_and_set_bit(flag, (unsigned long *)&ti->flags);
++}
++
++static inline __attribute__((always_inline)) int test_and_clear_ti_thread_flag(struct thread_info *ti, int flag)
++{
++ return test_and_clear_bit(flag, (unsigned long *)&ti->flags);
++}
++
++static inline __attribute__((always_inline)) int test_ti_thread_flag(struct thread_info *ti, int flag)
++{
++ return (__builtin_constant_p((flag)) ? constant_test_bit((flag), ((unsigned long *)&ti->flags)) : variable_test_bit((flag), ((unsigned long *)&ti->flags)));
++}
++# 10 "/d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/list.h" 1
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/poison.h" 1
++# 6 "/d/kernels/linux-2.6.27.10-clickport/include/linux/list.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/prefetch.h" 1
++# 53 "/d/kernels/linux-2.6.27.10-clickport/include/linux/prefetch.h"
++static inline __attribute__((always_inline)) void prefetch_range(void *addr, size_t len)
++{
++
++ char *cp;
++ char *end = (char*)(addr) + len;
++
++ for (cp = (char*)(addr); cp < end; cp += (4*(1 << (7))))
++  prefetch(cp);
++
++}
++# 7 "/d/kernels/linux-2.6.27.10-clickport/include/linux/list.h" 2
++# 19 "/d/kernels/linux-2.6.27.10-clickport/include/linux/list.h"
++struct list_head {
++ struct list_head *next, *prev;
++};
++# 32 "/d/kernels/linux-2.6.27.10-clickport/include/linux/list.h"
++static inline __attribute__((always_inline)) void INIT_LIST_HEAD(struct list_head *list)
++{
++ list->next = list;
++ list->prev = list;
++}
++# 55 "/d/kernels/linux-2.6.27.10-clickport/include/linux/list.h"
++extern void __list_add(struct list_head *xxx_new,
++         struct list_head *prev,
++         struct list_head *next);
++# 68 "/d/kernels/linux-2.6.27.10-clickport/include/linux/list.h"
++static inline __attribute__((always_inline)) void list_add(struct list_head *xxx_new, struct list_head *head)
++{
++ __list_add(xxx_new, head, head->next);
++}
++# 82 "/d/kernels/linux-2.6.27.10-clickport/include/linux/list.h"
++static inline __attribute__((always_inline)) void list_add_tail(struct list_head *xxx_new, struct list_head *head)
++{
++ __list_add(xxx_new, head->prev, head);
++}
++# 94 "/d/kernels/linux-2.6.27.10-clickport/include/linux/list.h"
++static inline __attribute__((always_inline)) void __list_del(struct list_head * prev, struct list_head * next)
++{
++ next->prev = prev;
++ prev->next = next;
++}
++# 114 "/d/kernels/linux-2.6.27.10-clickport/include/linux/list.h"
++extern void list_del(struct list_head *entry);
++# 124 "/d/kernels/linux-2.6.27.10-clickport/include/linux/list.h"
++static inline __attribute__((always_inline)) void list_replace(struct list_head *old,
++    struct list_head *xxx_new)
++{
++ xxx_new->next = old->next;
++ xxx_new->next->prev = xxx_new;
++ xxx_new->prev = old->prev;
++ xxx_new->prev->next = xxx_new;
++}
++
++static inline __attribute__((always_inline)) void list_replace_init(struct list_head *old,
++     struct list_head *xxx_new)
++{
++ list_replace(old, xxx_new);
++ INIT_LIST_HEAD(old);
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) void list_del_init(struct list_head *entry)
++{
++ __list_del(entry->prev, entry->next);
++ INIT_LIST_HEAD(entry);
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void list_move(struct list_head *list, struct list_head *head)
++{
++ __list_del(list->prev, list->next);
++ list_add(list, head);
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void list_move_tail(struct list_head *list,
++      struct list_head *head)
++{
++ __list_del(list->prev, list->next);
++ list_add_tail(list, head);
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) int list_is_last(const struct list_head *list,
++    const struct list_head *head)
++{
++ return list->next == head;
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) int list_empty(const struct list_head *head)
++{
++ return head->next == head;
++}
++# 206 "/d/kernels/linux-2.6.27.10-clickport/include/linux/list.h"
++static inline __attribute__((always_inline)) int list_empty_careful(const struct list_head *head)
++{
++ struct list_head *next = head->next;
++ return (next == head) && (next == head->prev);
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) int list_is_singular(const struct list_head *head)
++{
++ return !list_empty(head) && (head->next == head->prev);
++}
++
++static inline __attribute__((always_inline)) void __list_cut_position(struct list_head *list,
++  struct list_head *head, struct list_head *entry)
++{
++ struct list_head *new_first = entry->next;
++ list->next = head->next;
++ list->next->prev = list;
++ list->prev = entry;
++ entry->next = list;
++ head->next = new_first;
++ new_first->prev = head;
++}
++# 247 "/d/kernels/linux-2.6.27.10-clickport/include/linux/list.h"
++static inline __attribute__((always_inline)) void list_cut_position(struct list_head *list,
++  struct list_head *head, struct list_head *entry)
++{
++ if (list_empty(head))
++  return;
++ if (list_is_singular(head) &&
++  (head->next != entry && head != entry))
++  return;
++ if (entry == head)
++  INIT_LIST_HEAD(list);
++ else
++  __list_cut_position(list, head, entry);
++}
++
++static inline __attribute__((always_inline)) void __list_splice(const struct list_head *list,
++     struct list_head *prev,
++     struct list_head *next)
++{
++ struct list_head *first = list->next;
++ struct list_head *last = list->prev;
++
++ first->prev = prev;
++ prev->next = first;
++
++ last->next = next;
++ next->prev = last;
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void list_splice(const struct list_head *list,
++    struct list_head *head)
++{
++ if (!list_empty(list))
++  __list_splice(list, head, head->next);
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void list_splice_tail(struct list_head *list,
++    struct list_head *head)
++{
++ if (!list_empty(list))
++  __list_splice(list, head->prev, head);
++}
++# 306 "/d/kernels/linux-2.6.27.10-clickport/include/linux/list.h"
++static inline __attribute__((always_inline)) void list_splice_init(struct list_head *list,
++        struct list_head *head)
++{
++ if (!list_empty(list)) {
++  __list_splice(list, head, head->next);
++  INIT_LIST_HEAD(list);
++ }
++}
++# 323 "/d/kernels/linux-2.6.27.10-clickport/include/linux/list.h"
++static inline __attribute__((always_inline)) void list_splice_tail_init(struct list_head *list,
++      struct list_head *head)
++{
++ if (!list_empty(list)) {
++  __list_splice(list, head->prev, head);
++  INIT_LIST_HEAD(list);
++ }
++}
++# 544 "/d/kernels/linux-2.6.27.10-clickport/include/linux/list.h"
++struct hlist_head {
++ struct hlist_node *first;
++};
++
++struct hlist_node {
++ struct hlist_node *next, **pprev;
++};
++
++
++
++
++static inline __attribute__((always_inline)) void INIT_HLIST_NODE(struct hlist_node *h)
++{
++ h->next = 0;
++ h->pprev = 0;
++}
++
++static inline __attribute__((always_inline)) int hlist_unhashed(const struct hlist_node *h)
++{
++ return !h->pprev;
++}
++
++static inline __attribute__((always_inline)) int hlist_empty(const struct hlist_head *h)
++{
++ return !h->first;
++}
++
++static inline __attribute__((always_inline)) void __hlist_del(struct hlist_node *n)
++{
++ struct hlist_node *next = n->next;
++ struct hlist_node **pprev = n->pprev;
++ *pprev = next;
++ if (next)
++  next->pprev = pprev;
++}
++
++static inline __attribute__((always_inline)) void hlist_del(struct hlist_node *n)
++{
++ __hlist_del(n);
++ n->next = (struct hlist_node*)(((void *) 0x00100100));
++ n->pprev = (struct hlist_node**)(((void *) 0x00200200));
++}
++
++static inline __attribute__((always_inline)) void hlist_del_init(struct hlist_node *n)
++{
++ if (!hlist_unhashed(n)) {
++  __hlist_del(n);
++  INIT_HLIST_NODE(n);
++ }
++}
++
++static inline __attribute__((always_inline)) void hlist_add_head(struct hlist_node *n, struct hlist_head *h)
++{
++ struct hlist_node *first = h->first;
++ n->next = first;
++ if (first)
++  first->pprev = &n->next;
++ h->first = n;
++ n->pprev = &h->first;
++}
++
++
++static inline __attribute__((always_inline)) void hlist_add_before(struct hlist_node *n,
++     struct hlist_node *next)
++{
++ n->pprev = next->pprev;
++ n->next = next;
++ next->pprev = &n->next;
++ *(n->pprev) = n;
++}
++
++static inline __attribute__((always_inline)) void hlist_add_after(struct hlist_node *n,
++     struct hlist_node *next)
++{
++ next->next = n->next;
++ n->next = next;
++ next->pprev = &n->next;
++
++ if(next->next)
++  next->next->pprev = &next->next;
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) void hlist_move_list(struct hlist_head *old,
++       struct hlist_head *xxx_new)
++{
++ xxx_new->first = old->first;
++ if (xxx_new->first)
++  xxx_new->first->pprev = &xxx_new->first;
++ old->first = 0;
++}
++# 12 "/d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h" 2
++# 98 "/d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h"
++struct preempt_notifier;
++# 109 "/d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h"
++struct preempt_ops {
++ void (*sched_in)(struct preempt_notifier *notifier, int cpu);
++ void (*sched_out)(struct preempt_notifier *notifier,
++     struct task_struct *next);
++};
++# 122 "/d/kernels/linux-2.6.27.10-clickport/include/linux/preempt.h"
++struct preempt_notifier {
++ struct hlist_node link;
++ struct preempt_ops *ops;
++};
++
++void preempt_notifier_register(struct preempt_notifier *notifier);
++void preempt_notifier_unregister(struct preempt_notifier *notifier);
++
++static inline __attribute__((always_inline)) void preempt_notifier_init(struct preempt_notifier *notifier,
++         struct preempt_ops *ops)
++{
++ INIT_HLIST_NODE(&notifier->link);
++ notifier->ops = ops;
++}
++# 51 "/d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h" 2
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/stringify.h" 1
++# 56 "/d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/bottom_half.h" 1
++
++
++
++extern void local_bh_disable(void);
++extern void __local_bh_enable(void);
++extern void _local_bh_enable(void);
++extern void local_bh_enable(void);
++extern void local_bh_enable_ip(unsigned long ip);
++# 57 "/d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h" 2
++# 81 "/d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock_types.h" 1
++# 13 "/d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock_types.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/spinlock_types.h" 1
++
++
++
++
++
++
++
++typedef struct raw_spinlock {
++ unsigned int slock;
++} raw_spinlock_t;
++
++
++
++
++
++
++
++typedef struct {
++ unsigned int lock;
++} raw_rwlock_t;
++# 14 "/d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock_types.h" 2
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/lockdep.h" 1
++# 12 "/d/kernels/linux-2.6.27.10-clickport/include/linux/lockdep.h"
++struct task_struct;
++struct lockdep_map;
++# 321 "/d/kernels/linux-2.6.27.10-clickport/include/linux/lockdep.h"
++static inline __attribute__((always_inline)) void lockdep_off(void)
++{
++}
++
++static inline __attribute__((always_inline)) void lockdep_on(void)
++{
++}
++# 349 "/d/kernels/linux-2.6.27.10-clickport/include/linux/lockdep.h"
++struct lock_class_key { };
++# 382 "/d/kernels/linux-2.6.27.10-clickport/include/linux/lockdep.h"
++static inline __attribute__((always_inline)) void early_init_irq_lock_class(void)
++{
++}
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void early_boot_irqs_off(void)
++{
++}
++static inline __attribute__((always_inline)) void early_boot_irqs_on(void)
++{
++}
++static inline __attribute__((always_inline)) void print_irqtrace_events(struct task_struct *curr)
++{
++}
++# 19 "/d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock_types.h" 2
++
++typedef struct {
++ raw_spinlock_t raw_lock;
++# 32 "/d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock_types.h"
++} spinlock_t;
++
++
++
++typedef struct {
++ raw_rwlock_t raw_lock;
++# 48 "/d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock_types.h"
++} rwlock_t;
++# 82 "/d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h" 2
++
++extern int __attribute__((section(".spinlock.text"))) generic__raw_read_trylock(raw_rwlock_t *lock);
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/spinlock.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic.h" 1
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic_32.h" 1
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/cmpxchg.h" 1
++# 7 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic_32.h" 2
++# 18 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic_32.h"
++typedef struct {
++ int counter;
++} atomic_t;
++# 48 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic_32.h"
++static inline __attribute__((always_inline)) void atomic_add(int i, atomic_t *v)
++{
++ asm volatile("lock ; " "addl %1,%0"
++       : "+m" (v->counter)
++       : "ir" (i));
++}
++# 62 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic_32.h"
++static inline __attribute__((always_inline)) void atomic_sub(int i, atomic_t *v)
++{
++ asm volatile("lock ; " "subl %1,%0"
++       : "+m" (v->counter)
++       : "ir" (i));
++}
++# 78 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic_32.h"
++static inline __attribute__((always_inline)) int atomic_sub_and_test(int i, atomic_t *v)
++{
++ unsigned char c;
++
++ asm volatile("lock ; " "subl %2,%0; sete %1"
++       : "+m" (v->counter), "=qm" (c)
++       : "ir" (i) : "memory");
++ return c;
++}
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void atomic_inc(atomic_t *v)
++{
++ asm volatile("lock ; " "incl %0"
++       : "+m" (v->counter));
++}
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void atomic_dec(atomic_t *v)
++{
++ asm volatile("lock ; " "decl %0"
++       : "+m" (v->counter));
++}
++# 120 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic_32.h"
++static inline __attribute__((always_inline)) int atomic_dec_and_test(atomic_t *v)
++{
++ unsigned char c;
++
++ asm volatile("lock ; " "decl %0; sete %1"
++       : "+m" (v->counter), "=qm" (c)
++       : : "memory");
++ return c != 0;
++}
++# 138 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic_32.h"
++static inline __attribute__((always_inline)) int atomic_inc_and_test(atomic_t *v)
++{
++ unsigned char c;
++
++ asm volatile("lock ; " "incl %0; sete %1"
++       : "+m" (v->counter), "=qm" (c)
++       : : "memory");
++ return c != 0;
++}
++# 157 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic_32.h"
++static inline __attribute__((always_inline)) int atomic_add_negative(int i, atomic_t *v)
++{
++ unsigned char c;
++
++ asm volatile("lock ; " "addl %2,%0; sets %1"
++       : "+m" (v->counter), "=qm" (c)
++       : "ir" (i) : "memory");
++ return c;
++}
++# 174 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic_32.h"
++static inline __attribute__((always_inline)) int atomic_add_return(int i, atomic_t *v)
++{
++ int __i;
++
++
++
++
++
++
++ __i = i;
++ asm volatile("lock ; " "xaddl %0, %1"
++       : "+r" (i), "+m" (v->counter)
++       : : "memory");
++ return i + __i;
++# 197 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic_32.h"
++}
++# 206 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic_32.h"
++static inline __attribute__((always_inline)) int atomic_sub_return(int i, atomic_t *v)
++{
++ return atomic_add_return(-i, v);
++}
++# 223 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic_32.h"
++static inline __attribute__((always_inline)) int atomic_add_unless(atomic_t *v, int a, int u)
++{
++ int c, old;
++ c = ((v)->counter);
++ for (;;) {
++  if (__builtin_expect(!!(c == (u)), 0))
++   break;
++  old = (((__typeof__(*(&(((v))->counter))))__cmpxchg((&(((v))->counter)), (unsigned long)((c)), (unsigned long)((c + (a))), sizeof(*(&(((v))->counter))))));
++  if (__builtin_expect(!!(old == c), 1))
++   break;
++  c = old;
++ }
++ return c != (u);
++}
++# 258 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic_32.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/atomic.h" 1
++# 141 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/atomic.h"
++typedef atomic_t atomic_long_t;
++
++
++static inline __attribute__((always_inline)) long atomic_long_read(atomic_long_t *l)
++{
++ atomic_t *v = (atomic_t *)l;
++
++ return (long)((v)->counter);
++}
++
++static inline __attribute__((always_inline)) void atomic_long_set(atomic_long_t *l, long i)
++{
++ atomic_t *v = (atomic_t *)l;
++
++ (((v)->counter) = (i));
++}
++
++static inline __attribute__((always_inline)) void atomic_long_inc(atomic_long_t *l)
++{
++ atomic_t *v = (atomic_t *)l;
++
++ atomic_inc(v);
++}
++
++static inline __attribute__((always_inline)) void atomic_long_dec(atomic_long_t *l)
++{
++ atomic_t *v = (atomic_t *)l;
++
++ atomic_dec(v);
++}
++
++static inline __attribute__((always_inline)) void atomic_long_add(long i, atomic_long_t *l)
++{
++ atomic_t *v = (atomic_t *)l;
++
++ atomic_add(i, v);
++}
++
++static inline __attribute__((always_inline)) void atomic_long_sub(long i, atomic_long_t *l)
++{
++ atomic_t *v = (atomic_t *)l;
++
++ atomic_sub(i, v);
++}
++
++static inline __attribute__((always_inline)) int atomic_long_sub_and_test(long i, atomic_long_t *l)
++{
++ atomic_t *v = (atomic_t *)l;
++
++ return atomic_sub_and_test(i, v);
++}
++
++static inline __attribute__((always_inline)) int atomic_long_dec_and_test(atomic_long_t *l)
++{
++ atomic_t *v = (atomic_t *)l;
++
++ return atomic_dec_and_test(v);
++}
++
++static inline __attribute__((always_inline)) int atomic_long_inc_and_test(atomic_long_t *l)
++{
++ atomic_t *v = (atomic_t *)l;
++
++ return atomic_inc_and_test(v);
++}
++
++static inline __attribute__((always_inline)) int atomic_long_add_negative(long i, atomic_long_t *l)
++{
++ atomic_t *v = (atomic_t *)l;
++
++ return atomic_add_negative(i, v);
++}
++
++static inline __attribute__((always_inline)) long atomic_long_add_return(long i, atomic_long_t *l)
++{
++ atomic_t *v = (atomic_t *)l;
++
++ return (long)atomic_add_return(i, v);
++}
++
++static inline __attribute__((always_inline)) long atomic_long_sub_return(long i, atomic_long_t *l)
++{
++ atomic_t *v = (atomic_t *)l;
++
++ return (long)atomic_sub_return(i, v);
++}
++
++static inline __attribute__((always_inline)) long atomic_long_inc_return(atomic_long_t *l)
++{
++ atomic_t *v = (atomic_t *)l;
++
++ return (long)(atomic_add_return(1, v));
++}
++
++static inline __attribute__((always_inline)) long atomic_long_dec_return(atomic_long_t *l)
++{
++ atomic_t *v = (atomic_t *)l;
++
++ return (long)(atomic_sub_return(1, v));
++}
++
++static inline __attribute__((always_inline)) long atomic_long_add_unless(atomic_long_t *l, long a, long u)
++{
++ atomic_t *v = (atomic_t *)l;
++
++ return (long)atomic_add_unless(v, a, u);
++}
++# 259 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic_32.h" 2
++# 3 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic.h" 2
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/asm/spinlock.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/rwlock.h" 1
++# 6 "/d/kernels/linux-2.6.27.10-clickport/include/asm/spinlock.h" 2
++# 57 "/d/kernels/linux-2.6.27.10-clickport/include/asm/spinlock.h"
++static inline __attribute__((always_inline)) int __ticket_spin_is_locked(raw_spinlock_t *lock)
++{
++ int tmp = (*(volatile typeof(lock->slock) *)&(lock->slock));
++
++ return (((tmp >> 8) & 0xff) != (tmp & 0xff));
++}
++
++static inline __attribute__((always_inline)) int __ticket_spin_is_contended(raw_spinlock_t *lock)
++{
++ int tmp = (*(volatile typeof(lock->slock) *)&(lock->slock));
++
++ return (((tmp >> 8) - tmp) & 0xff) > 1;
++}
++
++static inline __attribute__((always_inline)) __attribute__((always_inline)) void __ticket_spin_lock(raw_spinlock_t *lock)
++{
++ short inc = 0x0100;
++
++ asm volatile (
++  "lock ; " "xaddw %w0, %1\n"
++  "1:\t"
++  "cmpb %h0, %b0\n\t"
++  "je 2f\n\t"
++  "rep ; nop\n\t"
++  "movb %1, %b0\n\t"
++
++  "jmp 1b\n"
++  "2:"
++  : "+Q" (inc), "+m" (lock->slock)
++  :
++  : "memory", "cc");
++}
++
++static inline __attribute__((always_inline)) __attribute__((always_inline)) int __ticket_spin_trylock(raw_spinlock_t *lock)
++{
++ int tmp;
++ short xxx_new;
++
++ asm volatile("movw %2,%w0\n\t"
++       "cmpb %h0,%b0\n\t"
++       "jne 1f\n\t"
++       "movw %w0,%w1\n\t"
++       "incb %h1\n\t"
++       "lock ; cmpxchgw %w1,%2\n\t"
++       "1:"
++       "sete %b1\n\t"
++       "movzbl %b1,%0\n\t"
++       : "=&a" (tmp), "=Q" (xxx_new), "+m" (lock->slock)
++       :
++       : "memory", "cc");
++
++ return tmp;
++}
++
++static inline __attribute__((always_inline)) __attribute__((always_inline)) void __ticket_spin_unlock(raw_spinlock_t *lock)
++{
++ asm volatile("lock ; " "incb %0"
++       : "+m" (lock->slock)
++       :
++       : "memory", "cc");
++}
++# 198 "/d/kernels/linux-2.6.27.10-clickport/include/asm/spinlock.h"
++struct __byte_spinlock {
++ s8 lock;
++ s8 spinners;
++};
++
++static inline __attribute__((always_inline)) int __byte_spin_is_locked(raw_spinlock_t *lock)
++{
++ struct __byte_spinlock *bl = (struct __byte_spinlock *)lock;
++ return bl->lock != 0;
++}
++
++static inline __attribute__((always_inline)) int __byte_spin_is_contended(raw_spinlock_t *lock)
++{
++ struct __byte_spinlock *bl = (struct __byte_spinlock *)lock;
++ return bl->spinners != 0;
++}
++
++static inline __attribute__((always_inline)) void __byte_spin_lock(raw_spinlock_t *lock)
++{
++ struct __byte_spinlock *bl = (struct __byte_spinlock *)lock;
++ s8 val = 1;
++
++ asm("1: xchgb %1, %0\n"
++     "   test %1,%1\n"
++     "   jz 3f\n"
++     "   " "lock ; " "incb %2\n"
++     "2: rep;nop\n"
++     "   cmpb $1, %0\n"
++     "   je 2b\n"
++     "   " "lock ; " "decb %2\n"
++     "   jmp 1b\n"
++     "3:"
++     : "+m" (bl->lock), "+q" (val), "+m" (bl->spinners): : "memory");
++}
++
++static inline __attribute__((always_inline)) int __byte_spin_trylock(raw_spinlock_t *lock)
++{
++ struct __byte_spinlock *bl = (struct __byte_spinlock *)lock;
++ u8 old = 1;
++
++ asm("xchgb %1,%0"
++     : "+m" (bl->lock), "+q" (old) : : "memory");
++
++ return old == 0;
++}
++
++static inline __attribute__((always_inline)) void __byte_spin_unlock(raw_spinlock_t *lock)
++{
++ struct __byte_spinlock *bl = (struct __byte_spinlock *)lock;
++ __asm__ __volatile__("": : :"memory");
++ bl->lock = 0;
++}
++# 277 "/d/kernels/linux-2.6.27.10-clickport/include/asm/spinlock.h"
++static inline __attribute__((always_inline)) void __raw_spin_unlock_wait(raw_spinlock_t *lock)
++{
++ while (__raw_spin_is_locked(lock))
++  cpu_relax();
++}
++# 301 "/d/kernels/linux-2.6.27.10-clickport/include/asm/spinlock.h"
++static inline __attribute__((always_inline)) int __raw_read_can_lock(raw_rwlock_t *lock)
++{
++ return (int)(lock)->lock > 0;
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) int __raw_write_can_lock(raw_rwlock_t *lock)
++{
++ return (lock)->lock == 0x01000000;
++}
++
++static inline __attribute__((always_inline)) void __raw_read_lock(raw_rwlock_t *rw)
++{
++ asm volatile("lock ; " " subl $1,(%0)\n\t"
++       "jns 1f\n"
++       "call __read_lock_failed\n\t"
++       "1:\n"
++       ::"a" (rw) : "memory");
++}
++
++static inline __attribute__((always_inline)) void __raw_write_lock(raw_rwlock_t *rw)
++{
++ asm volatile("lock ; " " subl %1,(%0)\n\t"
++       "jz 1f\n"
++       "call __write_lock_failed\n\t"
++       "1:\n"
++       ::"a" (rw), "i" (0x01000000) : "memory");
++}
++
++static inline __attribute__((always_inline)) int __raw_read_trylock(raw_rwlock_t *lock)
++{
++ atomic_t *count = (atomic_t *)lock;
++
++ atomic_dec(count);
++ if (((count)->counter) >= 0)
++  return 1;
++ atomic_inc(count);
++ return 0;
++}
++
++static inline __attribute__((always_inline)) int __raw_write_trylock(raw_rwlock_t *lock)
++{
++ atomic_t *count = (atomic_t *)lock;
++
++ if (atomic_sub_and_test(0x01000000, count))
++  return 1;
++ atomic_add(0x01000000, count);
++ return 0;
++}
++
++static inline __attribute__((always_inline)) void __raw_read_unlock(raw_rwlock_t *rw)
++{
++ asm volatile("lock ; " "incl %0" :"+m" (rw->lock) : : "memory");
++}
++
++static inline __attribute__((always_inline)) void __raw_write_unlock(raw_rwlock_t *rw)
++{
++ asm volatile("lock ; " "addl %1, %0"
++       : "+m" (rw->lock) : "i" (0x01000000) : "memory");
++}
++# 90 "/d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h" 2
++# 141 "/d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock_api_smp.h" 1
++# 18 "/d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock_api_smp.h"
++int in_lock_functions(unsigned long addr);
++
++
++
++void __attribute__((section(".spinlock.text"))) _spin_lock(spinlock_t *lock) ;
++void __attribute__((section(".spinlock.text"))) _spin_lock_nested(spinlock_t *lock, int subclass)
++       ;
++void __attribute__((section(".spinlock.text"))) _spin_lock_nest_lock(spinlock_t *lock, struct lockdep_map *map)
++       ;
++void __attribute__((section(".spinlock.text"))) _read_lock(rwlock_t *lock) ;
++void __attribute__((section(".spinlock.text"))) _write_lock(rwlock_t *lock) ;
++void __attribute__((section(".spinlock.text"))) _spin_lock_bh(spinlock_t *lock) ;
++void __attribute__((section(".spinlock.text"))) _read_lock_bh(rwlock_t *lock) ;
++void __attribute__((section(".spinlock.text"))) _write_lock_bh(rwlock_t *lock) ;
++void __attribute__((section(".spinlock.text"))) _spin_lock_irq(spinlock_t *lock) ;
++void __attribute__((section(".spinlock.text"))) _read_lock_irq(rwlock_t *lock) ;
++void __attribute__((section(".spinlock.text"))) _write_lock_irq(rwlock_t *lock) ;
++unsigned long __attribute__((section(".spinlock.text"))) _spin_lock_irqsave(spinlock_t *lock)
++       ;
++unsigned long __attribute__((section(".spinlock.text"))) _spin_lock_irqsave_nested(spinlock_t *lock, int subclass)
++       ;
++unsigned long __attribute__((section(".spinlock.text"))) _read_lock_irqsave(rwlock_t *lock)
++       ;
++unsigned long __attribute__((section(".spinlock.text"))) _write_lock_irqsave(rwlock_t *lock)
++       ;
++int __attribute__((section(".spinlock.text"))) _spin_trylock(spinlock_t *lock);
++int __attribute__((section(".spinlock.text"))) _read_trylock(rwlock_t *lock);
++int __attribute__((section(".spinlock.text"))) _write_trylock(rwlock_t *lock);
++int __attribute__((section(".spinlock.text"))) _spin_trylock_bh(spinlock_t *lock);
++void __attribute__((section(".spinlock.text"))) _spin_unlock(spinlock_t *lock) ;
++void __attribute__((section(".spinlock.text"))) _read_unlock(rwlock_t *lock) ;
++void __attribute__((section(".spinlock.text"))) _write_unlock(rwlock_t *lock) ;
++void __attribute__((section(".spinlock.text"))) _spin_unlock_bh(spinlock_t *lock) ;
++void __attribute__((section(".spinlock.text"))) _read_unlock_bh(rwlock_t *lock) ;
++void __attribute__((section(".spinlock.text"))) _write_unlock_bh(rwlock_t *lock) ;
++void __attribute__((section(".spinlock.text"))) _spin_unlock_irq(spinlock_t *lock) ;
++void __attribute__((section(".spinlock.text"))) _read_unlock_irq(rwlock_t *lock) ;
++void __attribute__((section(".spinlock.text"))) _write_unlock_irq(rwlock_t *lock) ;
++void __attribute__((section(".spinlock.text"))) _spin_unlock_irqrestore(spinlock_t *lock, unsigned long flags)
++       ;
++void __attribute__((section(".spinlock.text"))) _read_unlock_irqrestore(rwlock_t *lock, unsigned long flags)
++       ;
++void __attribute__((section(".spinlock.text"))) _write_unlock_irqrestore(rwlock_t *lock, unsigned long flags)
++       ;
++# 142 "/d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h" 2
++# 349 "/d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic.h" 1
++# 350 "/d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h" 2
++# 358 "/d/kernels/linux-2.6.27.10-clickport/include/linux/spinlock.h"
++extern int _atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock);
++# 30 "/d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h" 2
++
++
++typedef struct {
++ unsigned sequence;
++ spinlock_t lock;
++} seqlock_t;
++# 60 "/d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h"
++static inline __attribute__((always_inline)) void write_seqlock(seqlock_t *sl)
++{
++ _spin_lock(&sl->lock);
++ ++sl->sequence;
++ __asm__ __volatile__("": : :"memory");
++}
++
++static inline __attribute__((always_inline)) void write_sequnlock(seqlock_t *sl)
++{
++ __asm__ __volatile__("": : :"memory");
++ sl->sequence++;
++ do {__raw_spin_unlock(&(&sl->lock)->raw_lock); (void)0; } while (0);
++}
++
++static inline __attribute__((always_inline)) int write_tryseqlock(seqlock_t *sl)
++{
++ int ret = (_spin_trylock(&sl->lock));
++
++ if (ret) {
++  ++sl->sequence;
++  __asm__ __volatile__("": : :"memory");
++ }
++ return ret;
++}
++
++
++static inline __attribute__((always_inline)) __attribute__((always_inline)) unsigned read_seqbegin(const seqlock_t *sl)
++{
++ unsigned ret;
++
++repeat:
++ ret = sl->sequence;
++ asm volatile ("661:\n\t" "lock; addl $0,0(%%esp)" "\n662:\n" ".section .altinstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "661b\n" " " ".long" " " "663f\n" "         .byte %c0\n" "  .byte 662b-661b\n" "    .byte 664f-663f\n" ".previous\n" ".section .altinstr_replacement,\"ax\"\n" "663:\n\t" "lfence" "\n664:\n" ".previous" :: "i" ((0*32+26)) : "memory");
++ if (__builtin_expect(!!(ret & 1), 0)) {
++  cpu_relax();
++  goto repeat;
++ }
++
++ return ret;
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) __attribute__((always_inline)) int read_seqretry(const seqlock_t *sl, unsigned start)
++{
++ asm volatile ("661:\n\t" "lock; addl $0,0(%%esp)" "\n662:\n" ".section .altinstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "661b\n" " " ".long" " " "663f\n" "         .byte %c0\n" "  .byte 662b-661b\n" "    .byte 664f-663f\n" ".previous\n" ".section .altinstr_replacement,\"ax\"\n" "663:\n\t" "lfence" "\n664:\n" ".previous" :: "i" ((0*32+26)) : "memory");
++
++ return (sl->sequence != start);
++}
++# 121 "/d/kernels/linux-2.6.27.10-clickport/include/linux/seqlock.h"
++typedef struct seqcount {
++ unsigned sequence;
++} seqcount_t;
++
++
++
++
++
++static inline __attribute__((always_inline)) unsigned read_seqcount_begin(const seqcount_t *s)
++{
++ unsigned ret;
++
++repeat:
++ ret = s->sequence;
++ asm volatile ("661:\n\t" "lock; addl $0,0(%%esp)" "\n662:\n" ".section .altinstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "661b\n" " " ".long" " " "663f\n" "         .byte %c0\n" "  .byte 662b-661b\n" "    .byte 664f-663f\n" ".previous\n" ".section .altinstr_replacement,\"ax\"\n" "663:\n\t" "lfence" "\n664:\n" ".previous" :: "i" ((0*32+26)) : "memory");
++ if (__builtin_expect(!!(ret & 1), 0)) {
++  cpu_relax();
++  goto repeat;
++ }
++ return ret;
++}
++
++
++
++
++static inline __attribute__((always_inline)) int read_seqcount_retry(const seqcount_t *s, unsigned start)
++{
++ asm volatile ("661:\n\t" "lock; addl $0,0(%%esp)" "\n662:\n" ".section .altinstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "661b\n" " " ".long" " " "663f\n" "         .byte %c0\n" "  .byte 662b-661b\n" "    .byte 664f-663f\n" ".previous\n" ".section .altinstr_replacement,\"ax\"\n" "663:\n\t" "lfence" "\n664:\n" ".previous" :: "i" ((0*32+26)) : "memory");
++
++ return s->sequence != start;
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void write_seqcount_begin(seqcount_t *s)
++{
++ s->sequence++;
++ __asm__ __volatile__("": : :"memory");
++}
++
++static inline __attribute__((always_inline)) void write_seqcount_end(seqcount_t *s)
++{
++ __asm__ __volatile__("": : :"memory");
++ s->sequence++;
++}
++# 9 "/d/kernels/linux-2.6.27.10-clickport/include/linux/time.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/math64.h" 1
++# 49 "/d/kernels/linux-2.6.27.10-clickport/include/linux/math64.h"
++extern s64 div_s64_rem(s64 dividend, s32 divisor, s32 *remainder);
++
++
++
++extern u64 div64_u64(u64 dividend, u64 divisor);
++# 66 "/d/kernels/linux-2.6.27.10-clickport/include/linux/math64.h"
++static inline __attribute__((always_inline)) u64 div_u64(u64 dividend, u32 divisor)
++{
++ u32 remainder;
++ return div_u64_rem(dividend, divisor, &remainder);
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) s64 div_s64(s64 dividend, s32 divisor)
++{
++ s32 remainder;
++ return div_s64_rem(dividend, divisor, &remainder);
++}
++
++
++u32 iter_div_u64_rem(u64 dividend, u32 divisor, u64 *remainder);
++
++static inline __attribute__((always_inline)) __attribute__((always_inline)) u32
++__iter_div_u64_rem(u64 dividend, u32 divisor, u64 *remainder)
++{
++ u32 ret = 0;
++
++ while (dividend >= divisor) {
++
++
++  asm("" : "+rm"(dividend));
++
++  dividend -= divisor;
++  ret++;
++ }
++
++ *remainder = dividend;
++
++ return ret;
++}
++# 10 "/d/kernels/linux-2.6.27.10-clickport/include/linux/time.h" 2
++
++
++
++
++struct timespec {
++ time_t tv_sec;
++ long tv_nsec;
++};
++
++
++struct timeval {
++ time_t tv_sec;
++ suseconds_t tv_usec;
++};
++
++struct timezone {
++ int tz_minuteswest;
++ int tz_dsttime;
++};
++# 41 "/d/kernels/linux-2.6.27.10-clickport/include/linux/time.h"
++static inline __attribute__((always_inline)) int timespec_equal(const struct timespec *a,
++                                 const struct timespec *b)
++{
++ return (a->tv_sec == b->tv_sec) && (a->tv_nsec == b->tv_nsec);
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) int timespec_compare(const struct timespec *lhs, const struct timespec *rhs)
++{
++ if (lhs->tv_sec < rhs->tv_sec)
++  return -1;
++ if (lhs->tv_sec > rhs->tv_sec)
++  return 1;
++ return lhs->tv_nsec - rhs->tv_nsec;
++}
++
++static inline __attribute__((always_inline)) int timeval_compare(const struct timeval *lhs, const struct timeval *rhs)
++{
++ if (lhs->tv_sec < rhs->tv_sec)
++  return -1;
++ if (lhs->tv_sec > rhs->tv_sec)
++  return 1;
++ return lhs->tv_usec - rhs->tv_usec;
++}
++
++extern unsigned long mktime(const unsigned int year, const unsigned int mon,
++       const unsigned int day, const unsigned int hour,
++       const unsigned int min, const unsigned int sec);
++
++extern void set_normalized_timespec(struct timespec *ts, time_t sec, long nsec);
++
++
++
++
++static inline __attribute__((always_inline)) struct timespec timespec_sub(struct timespec lhs,
++      struct timespec rhs)
++{
++ struct timespec ts_delta;
++ set_normalized_timespec(&ts_delta, lhs.tv_sec - rhs.tv_sec,
++    lhs.tv_nsec - rhs.tv_nsec);
++ return ts_delta;
++}
++
++
++
++
++
++
++
++extern struct timespec xtime;
++extern struct timespec wall_to_monotonic;
++extern seqlock_t xtime_lock;
++
++extern unsigned long read_persistent_clock(void);
++extern int update_persistent_clock(struct timespec now);
++extern int no_sync_cmos_clock __attribute__((__section__(".data.read_mostly")));
++void timekeeping_init(void);
++
++unsigned long get_seconds(void);
++struct timespec current_kernel_time(void);
++
++
++
++
++extern void do_gettimeofday(struct timeval *tv);
++extern int do_settimeofday(struct timespec *tv);
++extern int do_sys_settimeofday(struct timespec *tv, struct timezone *tz);
++
++extern long do_utimes(int dfd, char *filename, struct timespec *times, int flags);
++struct itimerval;
++extern int do_setitimer(int which, struct itimerval *value,
++   struct itimerval *ovalue);
++extern unsigned int alarm_setitimer(unsigned int seconds);
++extern int do_getitimer(int which, struct itimerval *value);
++extern void getnstimeofday(struct timespec *tv);
++extern void getboottime(struct timespec *ts);
++extern void monotonic_to_bootbased(struct timespec *ts);
++
++extern struct timespec timespec_trunc(struct timespec t, unsigned gran);
++extern int timekeeping_valid_for_hres(void);
++extern void update_wall_time(void);
++extern void update_xtime_cache(u64 nsec);
++# 135 "/d/kernels/linux-2.6.27.10-clickport/include/linux/time.h"
++static inline __attribute__((always_inline)) s64 timespec_to_ns(const struct timespec *ts)
++{
++ return ((s64) ts->tv_sec * 1000000000L) + ts->tv_nsec;
++}
++# 147 "/d/kernels/linux-2.6.27.10-clickport/include/linux/time.h"
++static inline __attribute__((always_inline)) s64 timeval_to_ns(const struct timeval *tv)
++{
++ return ((s64) tv->tv_sec * 1000000000L) +
++  tv->tv_usec * 1000L;
++}
++
++
++
++
++
++
++
++extern struct timespec ns_to_timespec(const s64 nsec);
++
++
++
++
++
++
++
++extern struct timeval ns_to_timeval(const s64 nsec);
++# 177 "/d/kernels/linux-2.6.27.10-clickport/include/linux/time.h"
++static inline __attribute__((always_inline)) __attribute__((always_inline)) void timespec_add_ns(struct timespec *a, u64 ns)
++{
++ a->tv_sec += __iter_div_u64_rem(a->tv_nsec + ns, 1000000000L, &ns);
++ a->tv_nsec = ns;
++}
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vs_time.h" 1
++# 184 "/d/kernels/linux-2.6.27.10-clickport/include/linux/time.h" 2
++# 203 "/d/kernels/linux-2.6.27.10-clickport/include/linux/time.h"
++struct itimerspec {
++ struct timespec it_interval;
++ struct timespec it_value;
++};
++
++struct itimerval {
++ struct timeval it_interval;
++ struct timeval it_value;
++};
++# 20 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h" 2
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic.h" 1
++# 23 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h" 2
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/net.h" 1
++# 21 "/d/kernels/linux-2.6.27.10-clickport/include/linux/net.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/socket.h" 1
++# 11 "/d/kernels/linux-2.6.27.10-clickport/include/linux/socket.h"
++struct __kernel_sockaddr_storage {
++ unsigned short ss_family;
++
++ char __data[128 - sizeof(unsigned short)];
++
++
++} __attribute__ ((aligned((__alignof__ (struct sockaddr *)))));
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/socket.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/sockios.h" 1
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/asm/socket.h" 2
++# 22 "/d/kernels/linux-2.6.27.10-clickport/include/linux/socket.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sockios.h" 1
++# 23 "/d/kernels/linux-2.6.27.10-clickport/include/linux/socket.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/uio.h" 1
++# 16 "/d/kernels/linux-2.6.27.10-clickport/include/linux/uio.h"
++struct iovec
++{
++ void *iov_base;
++ __kernel_size_t iov_len;
++};
++
++
++
++struct kvec {
++ void *iov_base;
++ size_t iov_len;
++};
++# 45 "/d/kernels/linux-2.6.27.10-clickport/include/linux/uio.h"
++static inline __attribute__((always_inline)) size_t iov_length(const struct iovec *iov, unsigned long nr_segs)
++{
++ unsigned long seg;
++ size_t ret = 0;
++
++ for (seg = 0; seg < nr_segs; seg++)
++  ret += iov[seg].iov_len;
++ return ret;
++}
++
++unsigned long iov_shorten(struct iovec *iov, unsigned long nr_segs, size_t to);
++# 24 "/d/kernels/linux-2.6.27.10-clickport/include/linux/socket.h" 2
++
++
++
++
++struct seq_file;
++extern void socket_seq_show(struct seq_file *seq);
++
++
++typedef unsigned short sa_family_t;
++
++
++
++
++
++struct sockaddr {
++ sa_family_t sa_family;
++ char sa_data[14];
++};
++
++struct linger {
++ int l_onoff;
++ int l_linger;
++};
++# 56 "/d/kernels/linux-2.6.27.10-clickport/include/linux/socket.h"
++struct msghdr {
++ void * msg_name;
++ int msg_namelen;
++ struct iovec * msg_iov;
++ __kernel_size_t msg_iovlen;
++ void * msg_control;
++ __kernel_size_t msg_controllen;
++ unsigned msg_flags;
++};
++
++
++
++
++
++
++
++struct cmsghdr {
++ __kernel_size_t cmsg_len;
++        int cmsg_level;
++        int cmsg_type;
++};
++# 129 "/d/kernels/linux-2.6.27.10-clickport/include/linux/socket.h"
++static inline __attribute__((always_inline)) struct cmsghdr * __cmsg_nxthdr(void *__ctl, __kernel_size_t __size,
++            struct cmsghdr *__cmsg)
++{
++ struct cmsghdr * __ptr;
++
++ __ptr = (struct cmsghdr*)(((unsigned char *) __cmsg) + ( ((__cmsg->cmsg_len)+sizeof(long)-1) & ~(sizeof(long)-1) ));
++ if ((unsigned long)((char*)(__ptr+1) - (char *) __ctl) > __size)
++  return (struct cmsghdr *)0;
++
++ return __ptr;
++}
++
++static inline __attribute__((always_inline)) struct cmsghdr * cmsg_nxthdr (struct msghdr *__msg, struct cmsghdr *__cmsg)
++{
++ return __cmsg_nxthdr(__msg->msg_control, __msg->msg_controllen, __cmsg);
++}
++
++
++
++
++
++
++
++struct ucred {
++ __u32 pid;
++ __u32 uid;
++ __u32 gid;
++};
++# 303 "/d/kernels/linux-2.6.27.10-clickport/include/linux/socket.h"
++extern int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len);
++extern int memcpy_fromiovecend(unsigned char *kdata, struct iovec *iov,
++    int offset, int len);
++extern int csum_partial_copy_fromiovecend(unsigned char *kdata,
++       struct iovec *iov,
++       int offset,
++       unsigned int len, __wsum *csump);
++
++extern int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr *address, int mode);
++extern int memcpy_toiovec(struct iovec *v, unsigned char *kdata, int len);
++extern int move_addr_to_user(struct sockaddr *kaddr, int klen, void *uaddr, int *ulen);
++extern int move_addr_to_kernel(void *uaddr, int ulen, struct sockaddr *kaddr);
++extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data);
++# 22 "/d/kernels/linux-2.6.27.10-clickport/include/linux/net.h" 2
++# 45 "/d/kernels/linux-2.6.27.10-clickport/include/linux/net.h"
++typedef enum {
++ SS_FREE = 0,
++ SS_UNCONNECTED,
++ SS_CONNECTING,
++ SS_CONNECTED,
++ SS_DISCONNECTING
++} socket_state;
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/random.h" 1
++# 10 "/d/kernels/linux-2.6.27.10-clickport/include/linux/random.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ioctl.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/ioctl.h" 1
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/ioctl.h" 1
++# 73 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/ioctl.h"
++extern unsigned int __invalid_size_argument_for_IOC;
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/ioctl.h" 2
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ioctl.h" 2
++# 11 "/d/kernels/linux-2.6.27.10-clickport/include/linux/random.h" 2
++# 35 "/d/kernels/linux-2.6.27.10-clickport/include/linux/random.h"
++struct rand_pool_info {
++ int entropy_count;
++ int buf_size;
++ __u32 buf[0];
++};
++
++
++
++
++
++extern void rand_initialize_irq(int irq);
++
++extern void add_input_randomness(unsigned int type, unsigned int code,
++     unsigned int value);
++extern void add_interrupt_randomness(int irq);
++
++extern void get_random_bytes(void *buf, int nbytes);
++void generate_random_uuid(unsigned char uuid_out[16]);
++
++extern __u32 secure_ip_id(__be32 daddr);
++extern u32 secure_ipv4_port_ephemeral(__be32 saddr, __be32 daddr, __be16 dport);
++extern u32 secure_ipv6_port_ephemeral(const __be32 *saddr, const __be32 *daddr,
++          __be16 dport);
++extern __u32 secure_tcp_sequence_number(__be32 saddr, __be32 daddr,
++     __be16 sport, __be16 dport);
++extern __u32 secure_tcpv6_sequence_number(__be32 *saddr, __be32 *daddr,
++       __be16 sport, __be16 dport);
++extern u64 secure_dccp_sequence_number(__be32 saddr, __be32 daddr,
++           __be16 sport, __be16 dport);
++
++
++
++
++
++unsigned int get_random_int(void);
++unsigned long randomize_range(unsigned long start, unsigned long end, unsigned long len);
++
++u32 random32(void);
++void srandom32(u32 seed);
++# 58 "/d/kernels/linux-2.6.27.10-clickport/include/linux/net.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h" 1
++# 28 "/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h"
++typedef struct __wait_queue wait_queue_t;
++typedef int (*wait_queue_func_t)(wait_queue_t *wait, unsigned mode, int sync, void *key);
++int default_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
++
++struct __wait_queue {
++ unsigned int flags;
++
++ void *xxx_private;
++ wait_queue_func_t func;
++ struct list_head task_list;
++};
++
++struct wait_bit_key {
++ void *flags;
++ int bit_nr;
++};
++
++struct wait_bit_queue {
++ struct wait_bit_key key;
++ wait_queue_t wait;
++};
++
++struct __wait_queue_head {
++ spinlock_t lock;
++ struct list_head task_list;
++};
++typedef struct __wait_queue_head wait_queue_head_t;
++
++struct task_struct;
++# 80 "/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h"
++extern void init_waitqueue_head(wait_queue_head_t *q);
++# 91 "/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h"
++static inline __attribute__((always_inline)) void init_waitqueue_entry(wait_queue_t *q, struct task_struct *p)
++{
++ q->flags = 0;
++ q->xxx_private = p;
++ q->func = default_wake_function;
++}
++
++static inline __attribute__((always_inline)) void init_waitqueue_func_entry(wait_queue_t *q,
++     wait_queue_func_t func)
++{
++ q->flags = 0;
++ q->xxx_private = 0;
++ q->func = func;
++}
++
++static inline __attribute__((always_inline)) int waitqueue_active(wait_queue_head_t *q)
++{
++ return !list_empty(&q->task_list);
++}
++# 120 "/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h"
++extern void add_wait_queue(wait_queue_head_t *q, wait_queue_t *wait);
++extern void add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t *wait);
++extern void remove_wait_queue(wait_queue_head_t *q, wait_queue_t *wait);
++
++static inline __attribute__((always_inline)) void __add_wait_queue(wait_queue_head_t *head, wait_queue_t *xxx_new)
++{
++ list_add(&xxx_new->task_list, &head->task_list);
++}
++
++
++
++
++static inline __attribute__((always_inline)) void __add_wait_queue_tail(wait_queue_head_t *head,
++      wait_queue_t *xxx_new)
++{
++ list_add_tail(&xxx_new->task_list, &head->task_list);
++}
++
++static inline __attribute__((always_inline)) void __remove_wait_queue(wait_queue_head_t *head,
++       wait_queue_t *old)
++{
++ list_del(&old->task_list);
++}
++
++void __wake_up(wait_queue_head_t *q, unsigned int mode, int nr, void *key);
++extern void __wake_up_locked(wait_queue_head_t *q, unsigned int mode);
++extern void __wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr);
++void __wake_up_bit(wait_queue_head_t *, void *, int);
++int __wait_on_bit(wait_queue_head_t *, struct wait_bit_queue *, int (*)(void *), unsigned);
++int __wait_on_bit_lock(wait_queue_head_t *, struct wait_bit_queue *, int (*)(void *), unsigned);
++void wake_up_bit(void *, int);
++int out_of_line_wait_on_bit(void *, int, int (*)(void *), unsigned);
++int out_of_line_wait_on_bit_lock(void *, int, int (*)(void *), unsigned);
++wait_queue_head_t *bit_waitqueue(void *, int);
++# 409 "/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h"
++static inline __attribute__((always_inline)) void add_wait_queue_exclusive_locked(wait_queue_head_t *q,
++         wait_queue_t * wait)
++{
++ wait->flags |= 0x01;
++ __add_wait_queue_tail(q, wait);
++}
++
++
++
++
++static inline __attribute__((always_inline)) void remove_wait_queue_locked(wait_queue_head_t *q,
++         wait_queue_t * wait)
++{
++ __remove_wait_queue(q, wait);
++}
++
++
++
++
++
++
++extern void sleep_on(wait_queue_head_t *q);
++extern long sleep_on_timeout(wait_queue_head_t *q,
++          signed long timeout);
++extern void interruptible_sleep_on(wait_queue_head_t *q);
++extern long interruptible_sleep_on_timeout(wait_queue_head_t *q,
++        signed long timeout);
++
++
++
++
++void prepare_to_wait(wait_queue_head_t *q, wait_queue_t *wait, int state);
++void prepare_to_wait_exclusive(wait_queue_head_t *q, wait_queue_t *wait, int state);
++void finish_wait(wait_queue_head_t *q, wait_queue_t *wait);
++int autoremove_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
++int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
++# 485 "/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h"
++static inline __attribute__((always_inline)) int wait_on_bit(void *word, int bit,
++    int (*action)(void *), unsigned mode)
++{
++ if (!(__builtin_constant_p((bit)) ? constant_test_bit((bit), ((volatile unsigned long *) word)) : variable_test_bit((bit), ((volatile unsigned long *) word))))
++  return 0;
++ return out_of_line_wait_on_bit(word, bit, action, mode);
++}
++# 509 "/d/kernels/linux-2.6.27.10-clickport/include/linux/wait.h"
++static inline __attribute__((always_inline)) int wait_on_bit_lock(void *word, int bit,
++    int (*action)(void *), unsigned mode)
++{
++ if (!test_and_set_bit(bit, (volatile unsigned long *) word))
++  return 0;
++ return out_of_line_wait_on_bit_lock(word, bit, action, mode);
++}
++# 59 "/d/kernels/linux-2.6.27.10-clickport/include/linux/net.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/fcntl.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/fcntl.h" 1
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/fcntl.h" 1
++# 117 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/fcntl.h"
++struct flock {
++ short l_type;
++ short l_whence;
++ off_t l_start;
++ off_t l_len;
++ pid_t l_pid;
++
++};
++# 140 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/fcntl.h"
++struct flock64 {
++ short l_type;
++ short l_whence;
++ loff_t l_start;
++ loff_t l_len;
++ pid_t l_pid;
++
++};
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/fcntl.h" 2
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/linux/fcntl.h" 2
++# 60 "/d/kernels/linux-2.6.27.10-clickport/include/linux/net.h" 2
++
++struct poll_table_struct;
++struct pipe_inode_info;
++struct inode;
++struct net;
++# 89 "/d/kernels/linux-2.6.27.10-clickport/include/linux/net.h"
++enum sock_type {
++ SOCK_STREAM = 1,
++ SOCK_DGRAM = 2,
++ SOCK_RAW = 3,
++ SOCK_RDM = 4,
++ SOCK_SEQPACKET = 5,
++ SOCK_DCCP = 6,
++ SOCK_PACKET = 10,
++};
++# 112 "/d/kernels/linux-2.6.27.10-clickport/include/linux/net.h"
++enum sock_shutdown_cmd {
++ SHUT_RD = 0,
++ SHUT_WR = 1,
++ SHUT_RDWR = 2,
++};
++# 129 "/d/kernels/linux-2.6.27.10-clickport/include/linux/net.h"
++struct socket {
++ socket_state state;
++ short type;
++ unsigned long flags;
++ const struct proto_ops *ops;
++ struct fasync_struct *fasync_list;
++ struct file *file;
++ struct sock *sk;
++ wait_queue_head_t wait;
++};
++
++struct vm_area_struct;
++struct page;
++struct kiocb;
++struct sockaddr;
++struct msghdr;
++struct module;
++
++struct proto_ops {
++ int family;
++ struct module *owner;
++ int (*release) (struct socket *sock);
++ int (*bind) (struct socket *sock,
++          struct sockaddr *myaddr,
++          int sockaddr_len);
++ int (*connect) (struct socket *sock,
++          struct sockaddr *vaddr,
++          int sockaddr_len, int flags);
++ int (*socketpair)(struct socket *sock1,
++          struct socket *sock2);
++ int (*accept) (struct socket *sock,
++          struct socket *newsock, int flags);
++ int (*getname) (struct socket *sock,
++          struct sockaddr *addr,
++          int *sockaddr_len, int peer);
++ unsigned int (*poll) (struct file *file, struct socket *sock,
++          struct poll_table_struct *wait);
++ int (*ioctl) (struct socket *sock, unsigned int cmd,
++          unsigned long arg);
++ int (*compat_ioctl) (struct socket *sock, unsigned int cmd,
++          unsigned long arg);
++ int (*listen) (struct socket *sock, int len);
++ int (*shutdown) (struct socket *sock, int flags);
++ int (*setsockopt)(struct socket *sock, int level,
++          int optname, char *optval, int optlen);
++ int (*getsockopt)(struct socket *sock, int level,
++          int optname, char *optval, int *optlen);
++ int (*compat_setsockopt)(struct socket *sock, int level,
++          int optname, char *optval, int optlen);
++ int (*compat_getsockopt)(struct socket *sock, int level,
++          int optname, char *optval, int *optlen);
++ int (*sendmsg) (struct kiocb *iocb, struct socket *sock,
++          struct msghdr *m, size_t total_len);
++ int (*recvmsg) (struct kiocb *iocb, struct socket *sock,
++          struct msghdr *m, size_t total_len,
++          int flags);
++ int (*mmap) (struct file *file, struct socket *sock,
++          struct vm_area_struct * vma);
++ ssize_t (*sendpage) (struct socket *sock, struct page *page,
++          int offset, size_t size, int flags);
++ ssize_t (*splice_read)(struct socket *sock, loff_t *ppos,
++           struct pipe_inode_info *pipe, size_t len, unsigned int flags);
++};
++
++struct net_proto_family {
++ int family;
++ int (*create)(struct net *net, struct socket *sock, int protocol);
++ struct module *owner;
++};
++
++struct iovec;
++struct kvec;
++
++enum {
++ SOCK_WAKE_IO,
++ SOCK_WAKE_WAITD,
++ SOCK_WAKE_SPACE,
++ SOCK_WAKE_URG,
++};
++
++extern int sock_wake_async(struct socket *sk, int how, int band);
++extern int sock_register(const struct net_proto_family *fam);
++extern void sock_unregister(int family);
++extern int sock_create(int family, int type, int proto,
++     struct socket **res);
++extern int sock_create_kern(int family, int type, int proto,
++          struct socket **res);
++extern int sock_create_lite(int family, int type, int proto,
++          struct socket **res);
++extern void sock_release(struct socket *sock);
++extern int sock_sendmsg(struct socket *sock, struct msghdr *msg,
++      size_t len);
++extern int sock_recvmsg(struct socket *sock, struct msghdr *msg,
++      size_t size, int flags);
++extern int sock_map_fd(struct socket *sock, int flags);
++extern struct socket *sockfd_lookup(int fd, int *err);
++
++extern int net_ratelimit(void);
++extern long do_accept(int fd, struct sockaddr *upeer_sockaddr,
++          int *upeer_addrlen, int flags);
++
++
++
++
++extern int kernel_sendmsg(struct socket *sock, struct msghdr *msg,
++        struct kvec *vec, size_t num, size_t len);
++extern int kernel_recvmsg(struct socket *sock, struct msghdr *msg,
++        struct kvec *vec, size_t num,
++        size_t len, int flags);
++
++extern int kernel_bind(struct socket *sock, struct sockaddr *addr,
++         int addrlen);
++extern int kernel_listen(struct socket *sock, int backlog);
++extern int kernel_accept(struct socket *sock, struct socket **newsock,
++    int flags);
++extern int kernel_connect(struct socket *sock, struct sockaddr *addr,
++     int addrlen, int flags);
++extern int kernel_getsockname(struct socket *sock, struct sockaddr *addr,
++         int *addrlen);
++extern int kernel_getpeername(struct socket *sock, struct sockaddr *addr,
++         int *addrlen);
++extern int kernel_getsockopt(struct socket *sock, int level, int optname,
++        char *optval, int *optlen);
++extern int kernel_setsockopt(struct socket *sock, int level, int optname,
++        char *optval, int optlen);
++extern int kernel_sendpage(struct socket *sock, struct page *page, int offset,
++      size_t size, int flags);
++extern int kernel_sock_ioctl(struct socket *sock, int cmd, unsigned long arg);
++extern int kernel_sock_shutdown(struct socket *sock,
++    enum sock_shutdown_cmd how);
++# 354 "/d/kernels/linux-2.6.27.10-clickport/include/linux/net.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sysctl.h" 1
++# 32 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sysctl.h"
++struct file;
++struct completion;
++
++
++
++
++
++
++struct __sysctl_args {
++ int *name;
++ int nlen;
++ void *oldval;
++ size_t *oldlenp;
++ void *newval;
++ size_t newlen;
++ unsigned long __unused[4];
++};
++# 60 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sysctl.h"
++enum
++{
++ CTL_KERN=1,
++ CTL_VM=2,
++ CTL_NET=3,
++ CTL_PROC=4,
++ CTL_FS=5,
++ CTL_DEBUG=6,
++ CTL_DEV=7,
++ CTL_BUS=8,
++ CTL_ABI=9,
++ CTL_CPU=10,
++ CTL_ARLAN=254,
++ CTL_VSERVER=4242,
++ CTL_S390DBF=5677,
++ CTL_SUNRPC=7249,
++ CTL_PM=9899,
++ CTL_FRV=9898,
++};
++
++
++enum
++{
++ CTL_BUS_ISA=1
++};
++
++
++enum
++{
++ INOTIFY_MAX_USER_INSTANCES=1,
++ INOTIFY_MAX_USER_WATCHES=2,
++ INOTIFY_MAX_QUEUED_EVENTS=3
++};
++
++
++enum
++{
++ KERN_OSTYPE=1,
++ KERN_OSRELEASE=2,
++ KERN_OSREV=3,
++ KERN_VERSION=4,
++ KERN_SECUREMASK=5,
++ KERN_PROF=6,
++ KERN_NODENAME=7,
++ KERN_DOMAINNAME=8,
++
++ KERN_PANIC=15,
++ KERN_REALROOTDEV=16,
++ KERN_VSHELPER=17,
++
++ KERN_SPARC_REBOOT=21,
++ KERN_CTLALTDEL=22,
++ KERN_PRINTK=23,
++ KERN_NAMETRANS=24,
++ KERN_PPC_HTABRECLAIM=25,
++ KERN_PPC_ZEROPAGED=26,
++ KERN_PPC_POWERSAVE_NAP=27,
++ KERN_MODPROBE=28,
++ KERN_SG_BIG_BUFF=29,
++ KERN_ACCT=30,
++ KERN_PPC_L2CR=31,
++
++ KERN_RTSIGNR=32,
++ KERN_RTSIGMAX=33,
++
++ KERN_SHMMAX=34,
++ KERN_MSGMAX=35,
++ KERN_MSGMNB=36,
++ KERN_MSGPOOL=37,
++ KERN_SYSRQ=38,
++ KERN_MAX_THREADS=39,
++  KERN_RANDOM=40,
++  KERN_SHMALL=41,
++  KERN_MSGMNI=42,
++  KERN_SEM=43,
++  KERN_SPARC_STOP_A=44,
++  KERN_SHMMNI=45,
++ KERN_OVERFLOWUID=46,
++ KERN_OVERFLOWGID=47,
++ KERN_SHMPATH=48,
++ KERN_HOTPLUG=49,
++ KERN_IEEE_EMULATION_WARNINGS=50,
++ KERN_S390_USER_DEBUG_LOGGING=51,
++ KERN_CORE_USES_PID=52,
++ KERN_TAINTED=53,
++ KERN_CADPID=54,
++ KERN_PIDMAX=55,
++   KERN_CORE_PATTERN=56,
++ KERN_PANIC_ON_OOPS=57,
++ KERN_HPPA_PWRSW=58,
++ KERN_HPPA_UNALIGNED=59,
++ KERN_PRINTK_RATELIMIT=60,
++ KERN_PRINTK_RATELIMIT_BURST=61,
++ KERN_PTY=62,
++ KERN_NGROUPS_MAX=63,
++ KERN_SPARC_SCONS_PWROFF=64,
++ KERN_HZ_TIMER=65,
++ KERN_UNKNOWN_NMI_PANIC=66,
++ KERN_BOOTLOADER_TYPE=67,
++ KERN_RANDOMIZE=68,
++ KERN_SETUID_DUMPABLE=69,
++ KERN_SPIN_RETRY=70,
++ KERN_ACPI_VIDEO_FLAGS=71,
++ KERN_IA64_UNALIGNED=72,
++ KERN_COMPAT_LOG=73,
++ KERN_MAX_LOCK_DEPTH=74,
++ KERN_NMI_WATCHDOG=75,
++ KERN_PANIC_ON_NMI=76,
++};
++
++
++
++
++enum
++{
++ VM_UNUSED1=1,
++ VM_UNUSED2=2,
++ VM_UNUSED3=3,
++ VM_UNUSED4=4,
++ VM_OVERCOMMIT_MEMORY=5,
++ VM_UNUSED5=6,
++ VM_UNUSED7=7,
++ VM_UNUSED8=8,
++ VM_UNUSED9=9,
++ VM_PAGE_CLUSTER=10,
++ VM_DIRTY_BACKGROUND=11,
++ VM_DIRTY_RATIO=12,
++ VM_DIRTY_WB_CS=13,
++ VM_DIRTY_EXPIRE_CS=14,
++ VM_NR_PDFLUSH_THREADS=15,
++ VM_OVERCOMMIT_RATIO=16,
++ VM_PAGEBUF=17,
++ VM_HUGETLB_PAGES=18,
++ VM_SWAPPINESS=19,
++ VM_LOWMEM_RESERVE_RATIO=20,
++ VM_MIN_FREE_KBYTES=21,
++ VM_MAX_MAP_COUNT=22,
++ VM_LAPTOP_MODE=23,
++ VM_BLOCK_DUMP=24,
++ VM_HUGETLB_GROUP=25,
++ VM_VFS_CACHE_PRESSURE=26,
++ VM_LEGACY_VA_LAYOUT=27,
++ VM_SWAP_TOKEN_TIMEOUT=28,
++ VM_DROP_PAGECACHE=29,
++ VM_PERCPU_PAGELIST_FRACTION=30,
++ VM_ZONE_RECLAIM_MODE=31,
++ VM_MIN_UNMAPPED=32,
++ VM_PANIC_ON_OOM=33,
++ VM_VDSO_ENABLED=34,
++ VM_MIN_SLAB=35,
++};
++
++
++
++enum
++{
++ NET_CORE=1,
++ NET_ETHER=2,
++ NET_802=3,
++ NET_UNIX=4,
++ NET_IPV4=5,
++ NET_IPX=6,
++ NET_ATALK=7,
++ NET_NETROM=8,
++ NET_AX25=9,
++ NET_BRIDGE=10,
++ NET_ROSE=11,
++ NET_IPV6=12,
++ NET_X25=13,
++ NET_TR=14,
++ NET_DECNET=15,
++ NET_ECONET=16,
++ NET_SCTP=17,
++ NET_LLC=18,
++ NET_NETFILTER=19,
++ NET_DCCP=20,
++ NET_IRDA=412,
++};
++
++
++enum
++{
++ RANDOM_POOLSIZE=1,
++ RANDOM_ENTROPY_COUNT=2,
++ RANDOM_READ_THRESH=3,
++ RANDOM_WRITE_THRESH=4,
++ RANDOM_BOOT_ID=5,
++ RANDOM_UUID=6
++};
++
++
++enum
++{
++ PTY_MAX=1,
++ PTY_NR=2
++};
++
++
++enum
++{
++ BUS_ISA_MEM_BASE=1,
++ BUS_ISA_PORT_BASE=2,
++ BUS_ISA_PORT_SHIFT=3
++};
++
++
++enum
++{
++ NET_CORE_WMEM_MAX=1,
++ NET_CORE_RMEM_MAX=2,
++ NET_CORE_WMEM_DEFAULT=3,
++ NET_CORE_RMEM_DEFAULT=4,
++
++ NET_CORE_MAX_BACKLOG=6,
++ NET_CORE_FASTROUTE=7,
++ NET_CORE_MSG_COST=8,
++ NET_CORE_MSG_BURST=9,
++ NET_CORE_OPTMEM_MAX=10,
++ NET_CORE_HOT_LIST_LENGTH=11,
++ NET_CORE_DIVERT_VERSION=12,
++ NET_CORE_NO_CONG_THRESH=13,
++ NET_CORE_NO_CONG=14,
++ NET_CORE_LO_CONG=15,
++ NET_CORE_MOD_CONG=16,
++ NET_CORE_DEV_WEIGHT=17,
++ NET_CORE_SOMAXCONN=18,
++ NET_CORE_BUDGET=19,
++ NET_CORE_AEVENT_ETIME=20,
++ NET_CORE_AEVENT_RSEQTH=21,
++ NET_CORE_WARNINGS=22,
++};
++
++
++
++
++
++
++
++enum
++{
++ NET_UNIX_DESTROY_DELAY=1,
++ NET_UNIX_DELETE_DELAY=2,
++ NET_UNIX_MAX_DGRAM_QLEN=3,
++};
++
++
++enum
++{
++ NET_NF_CONNTRACK_MAX=1,
++ NET_NF_CONNTRACK_TCP_TIMEOUT_SYN_SENT=2,
++ NET_NF_CONNTRACK_TCP_TIMEOUT_SYN_RECV=3,
++ NET_NF_CONNTRACK_TCP_TIMEOUT_ESTABLISHED=4,
++ NET_NF_CONNTRACK_TCP_TIMEOUT_FIN_WAIT=5,
++ NET_NF_CONNTRACK_TCP_TIMEOUT_CLOSE_WAIT=6,
++ NET_NF_CONNTRACK_TCP_TIMEOUT_LAST_ACK=7,
++ NET_NF_CONNTRACK_TCP_TIMEOUT_TIME_WAIT=8,
++ NET_NF_CONNTRACK_TCP_TIMEOUT_CLOSE=9,
++ NET_NF_CONNTRACK_UDP_TIMEOUT=10,
++ NET_NF_CONNTRACK_UDP_TIMEOUT_STREAM=11,
++ NET_NF_CONNTRACK_ICMP_TIMEOUT=12,
++ NET_NF_CONNTRACK_GENERIC_TIMEOUT=13,
++ NET_NF_CONNTRACK_BUCKETS=14,
++ NET_NF_CONNTRACK_LOG_INVALID=15,
++ NET_NF_CONNTRACK_TCP_TIMEOUT_MAX_RETRANS=16,
++ NET_NF_CONNTRACK_TCP_LOOSE=17,
++ NET_NF_CONNTRACK_TCP_BE_LIBERAL=18,
++ NET_NF_CONNTRACK_TCP_MAX_RETRANS=19,
++ NET_NF_CONNTRACK_SCTP_TIMEOUT_CLOSED=20,
++ NET_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_WAIT=21,
++ NET_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_ECHOED=22,
++ NET_NF_CONNTRACK_SCTP_TIMEOUT_ESTABLISHED=23,
++ NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_SENT=24,
++ NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_RECD=25,
++ NET_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_ACK_SENT=26,
++ NET_NF_CONNTRACK_COUNT=27,
++ NET_NF_CONNTRACK_ICMPV6_TIMEOUT=28,
++ NET_NF_CONNTRACK_FRAG6_TIMEOUT=29,
++ NET_NF_CONNTRACK_FRAG6_LOW_THRESH=30,
++ NET_NF_CONNTRACK_FRAG6_HIGH_THRESH=31,
++ NET_NF_CONNTRACK_CHECKSUM=32,
++};
++
++
++enum
++{
++
++ NET_IPV4_FORWARD=8,
++ NET_IPV4_DYNADDR=9,
++
++ NET_IPV4_CONF=16,
++ NET_IPV4_NEIGH=17,
++ NET_IPV4_ROUTE=18,
++ NET_IPV4_FIB_HASH=19,
++ NET_IPV4_NETFILTER=20,
++
++ NET_IPV4_TCP_TIMESTAMPS=33,
++ NET_IPV4_TCP_WINDOW_SCALING=34,
++ NET_IPV4_TCP_SACK=35,
++ NET_IPV4_TCP_RETRANS_COLLAPSE=36,
++ NET_IPV4_DEFAULT_TTL=37,
++ NET_IPV4_AUTOCONFIG=38,
++ NET_IPV4_NO_PMTU_DISC=39,
++ NET_IPV4_TCP_SYN_RETRIES=40,
++ NET_IPV4_IPFRAG_HIGH_THRESH=41,
++ NET_IPV4_IPFRAG_LOW_THRESH=42,
++ NET_IPV4_IPFRAG_TIME=43,
++ NET_IPV4_TCP_MAX_KA_PROBES=44,
++ NET_IPV4_TCP_KEEPALIVE_TIME=45,
++ NET_IPV4_TCP_KEEPALIVE_PROBES=46,
++ NET_IPV4_TCP_RETRIES1=47,
++ NET_IPV4_TCP_RETRIES2=48,
++ NET_IPV4_TCP_FIN_TIMEOUT=49,
++ NET_IPV4_IP_MASQ_DEBUG=50,
++ NET_TCP_SYNCOOKIES=51,
++ NET_TCP_STDURG=52,
++ NET_TCP_RFC1337=53,
++ NET_TCP_SYN_TAILDROP=54,
++ NET_TCP_MAX_SYN_BACKLOG=55,
++ NET_IPV4_LOCAL_PORT_RANGE=56,
++ NET_IPV4_ICMP_ECHO_IGNORE_ALL=57,
++ NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS=58,
++ NET_IPV4_ICMP_SOURCEQUENCH_RATE=59,
++ NET_IPV4_ICMP_DESTUNREACH_RATE=60,
++ NET_IPV4_ICMP_TIMEEXCEED_RATE=61,
++ NET_IPV4_ICMP_PARAMPROB_RATE=62,
++ NET_IPV4_ICMP_ECHOREPLY_RATE=63,
++ NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES=64,
++ NET_IPV4_IGMP_MAX_MEMBERSHIPS=65,
++ NET_TCP_TW_RECYCLE=66,
++ NET_IPV4_ALWAYS_DEFRAG=67,
++ NET_IPV4_TCP_KEEPALIVE_INTVL=68,
++ NET_IPV4_INET_PEER_THRESHOLD=69,
++ NET_IPV4_INET_PEER_MINTTL=70,
++ NET_IPV4_INET_PEER_MAXTTL=71,
++ NET_IPV4_INET_PEER_GC_MINTIME=72,
++ NET_IPV4_INET_PEER_GC_MAXTIME=73,
++ NET_TCP_ORPHAN_RETRIES=74,
++ NET_TCP_ABORT_ON_OVERFLOW=75,
++ NET_TCP_SYNACK_RETRIES=76,
++ NET_TCP_MAX_ORPHANS=77,
++ NET_TCP_MAX_TW_BUCKETS=78,
++ NET_TCP_FACK=79,
++ NET_TCP_REORDERING=80,
++ NET_TCP_ECN=81,
++ NET_TCP_DSACK=82,
++ NET_TCP_MEM=83,
++ NET_TCP_WMEM=84,
++ NET_TCP_RMEM=85,
++ NET_TCP_APP_WIN=86,
++ NET_TCP_ADV_WIN_SCALE=87,
++ NET_IPV4_NONLOCAL_BIND=88,
++ NET_IPV4_ICMP_RATELIMIT=89,
++ NET_IPV4_ICMP_RATEMASK=90,
++ NET_TCP_TW_REUSE=91,
++ NET_TCP_FRTO=92,
++ NET_TCP_LOW_LATENCY=93,
++ NET_IPV4_IPFRAG_SECRET_INTERVAL=94,
++ NET_IPV4_IGMP_MAX_MSF=96,
++ NET_TCP_NO_METRICS_SAVE=97,
++ NET_TCP_DEFAULT_WIN_SCALE=105,
++ NET_TCP_MODERATE_RCVBUF=106,
++ NET_TCP_TSO_WIN_DIVISOR=107,
++ NET_TCP_BIC_BETA=108,
++ NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR=109,
++ NET_TCP_CONG_CONTROL=110,
++ NET_TCP_ABC=111,
++ NET_IPV4_IPFRAG_MAX_DIST=112,
++  NET_TCP_MTU_PROBING=113,
++ NET_TCP_BASE_MSS=114,
++ NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS=115,
++ NET_TCP_DMA_COPYBREAK=116,
++ NET_TCP_SLOW_START_AFTER_IDLE=117,
++ NET_CIPSOV4_CACHE_ENABLE=118,
++ NET_CIPSOV4_CACHE_BUCKET_SIZE=119,
++ NET_CIPSOV4_RBM_OPTFMT=120,
++ NET_CIPSOV4_RBM_STRICTVALID=121,
++ NET_TCP_AVAIL_CONG_CONTROL=122,
++ NET_TCP_ALLOWED_CONG_CONTROL=123,
++ NET_TCP_MAX_SSTHRESH=124,
++ NET_TCP_FRTO_RESPONSE=125,
++};
++
++enum {
++ NET_IPV4_ROUTE_FLUSH=1,
++ NET_IPV4_ROUTE_MIN_DELAY=2,
++ NET_IPV4_ROUTE_MAX_DELAY=3,
++ NET_IPV4_ROUTE_GC_THRESH=4,
++ NET_IPV4_ROUTE_MAX_SIZE=5,
++ NET_IPV4_ROUTE_GC_MIN_INTERVAL=6,
++ NET_IPV4_ROUTE_GC_TIMEOUT=7,
++ NET_IPV4_ROUTE_GC_INTERVAL=8,
++ NET_IPV4_ROUTE_REDIRECT_LOAD=9,
++ NET_IPV4_ROUTE_REDIRECT_NUMBER=10,
++ NET_IPV4_ROUTE_REDIRECT_SILENCE=11,
++ NET_IPV4_ROUTE_ERROR_COST=12,
++ NET_IPV4_ROUTE_ERROR_BURST=13,
++ NET_IPV4_ROUTE_GC_ELASTICITY=14,
++ NET_IPV4_ROUTE_MTU_EXPIRES=15,
++ NET_IPV4_ROUTE_MIN_PMTU=16,
++ NET_IPV4_ROUTE_MIN_ADVMSS=17,
++ NET_IPV4_ROUTE_SECRET_INTERVAL=18,
++ NET_IPV4_ROUTE_GC_MIN_INTERVAL_MS=19,
++};
++
++enum
++{
++ NET_PROTO_CONF_ALL=-2,
++ NET_PROTO_CONF_DEFAULT=-3
++
++
++};
++
++enum
++{
++ NET_IPV4_CONF_FORWARDING=1,
++ NET_IPV4_CONF_MC_FORWARDING=2,
++ NET_IPV4_CONF_PROXY_ARP=3,
++ NET_IPV4_CONF_ACCEPT_REDIRECTS=4,
++ NET_IPV4_CONF_SECURE_REDIRECTS=5,
++ NET_IPV4_CONF_SEND_REDIRECTS=6,
++ NET_IPV4_CONF_SHARED_MEDIA=7,
++ NET_IPV4_CONF_RP_FILTER=8,
++ NET_IPV4_CONF_ACCEPT_SOURCE_ROUTE=9,
++ NET_IPV4_CONF_BOOTP_RELAY=10,
++ NET_IPV4_CONF_LOG_MARTIANS=11,
++ NET_IPV4_CONF_TAG=12,
++ NET_IPV4_CONF_ARPFILTER=13,
++ NET_IPV4_CONF_MEDIUM_ID=14,
++ NET_IPV4_CONF_NOXFRM=15,
++ NET_IPV4_CONF_NOPOLICY=16,
++ NET_IPV4_CONF_FORCE_IGMP_VERSION=17,
++ NET_IPV4_CONF_ARP_ANNOUNCE=18,
++ NET_IPV4_CONF_ARP_IGNORE=19,
++ NET_IPV4_CONF_PROMOTE_SECONDARIES=20,
++ NET_IPV4_CONF_ARP_ACCEPT=21,
++ __NET_IPV4_CONF_MAX
++};
++
++
++enum
++{
++ NET_IPV4_NF_CONNTRACK_MAX=1,
++ NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_SYN_SENT=2,
++ NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_SYN_RECV=3,
++ NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_ESTABLISHED=4,
++ NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_FIN_WAIT=5,
++ NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_CLOSE_WAIT=6,
++ NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_LAST_ACK=7,
++ NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_TIME_WAIT=8,
++ NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_CLOSE=9,
++ NET_IPV4_NF_CONNTRACK_UDP_TIMEOUT=10,
++ NET_IPV4_NF_CONNTRACK_UDP_TIMEOUT_STREAM=11,
++ NET_IPV4_NF_CONNTRACK_ICMP_TIMEOUT=12,
++ NET_IPV4_NF_CONNTRACK_GENERIC_TIMEOUT=13,
++ NET_IPV4_NF_CONNTRACK_BUCKETS=14,
++ NET_IPV4_NF_CONNTRACK_LOG_INVALID=15,
++ NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_MAX_RETRANS=16,
++ NET_IPV4_NF_CONNTRACK_TCP_LOOSE=17,
++ NET_IPV4_NF_CONNTRACK_TCP_BE_LIBERAL=18,
++ NET_IPV4_NF_CONNTRACK_TCP_MAX_RETRANS=19,
++  NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_CLOSED=20,
++  NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_WAIT=21,
++  NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_COOKIE_ECHOED=22,
++  NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_ESTABLISHED=23,
++  NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_SENT=24,
++  NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_RECD=25,
++  NET_IPV4_NF_CONNTRACK_SCTP_TIMEOUT_SHUTDOWN_ACK_SENT=26,
++ NET_IPV4_NF_CONNTRACK_COUNT=27,
++ NET_IPV4_NF_CONNTRACK_CHECKSUM=28,
++};
++
++
++enum {
++ NET_IPV6_CONF=16,
++ NET_IPV6_NEIGH=17,
++ NET_IPV6_ROUTE=18,
++ NET_IPV6_ICMP=19,
++ NET_IPV6_BINDV6ONLY=20,
++ NET_IPV6_IP6FRAG_HIGH_THRESH=21,
++ NET_IPV6_IP6FRAG_LOW_THRESH=22,
++ NET_IPV6_IP6FRAG_TIME=23,
++ NET_IPV6_IP6FRAG_SECRET_INTERVAL=24,
++ NET_IPV6_MLD_MAX_MSF=25,
++};
++
++enum {
++ NET_IPV6_ROUTE_FLUSH=1,
++ NET_IPV6_ROUTE_GC_THRESH=2,
++ NET_IPV6_ROUTE_MAX_SIZE=3,
++ NET_IPV6_ROUTE_GC_MIN_INTERVAL=4,
++ NET_IPV6_ROUTE_GC_TIMEOUT=5,
++ NET_IPV6_ROUTE_GC_INTERVAL=6,
++ NET_IPV6_ROUTE_GC_ELASTICITY=7,
++ NET_IPV6_ROUTE_MTU_EXPIRES=8,
++ NET_IPV6_ROUTE_MIN_ADVMSS=9,
++ NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS=10
++};
++
++enum {
++ NET_IPV6_FORWARDING=1,
++ NET_IPV6_HOP_LIMIT=2,
++ NET_IPV6_MTU=3,
++ NET_IPV6_ACCEPT_RA=4,
++ NET_IPV6_ACCEPT_REDIRECTS=5,
++ NET_IPV6_AUTOCONF=6,
++ NET_IPV6_DAD_TRANSMITS=7,
++ NET_IPV6_RTR_SOLICITS=8,
++ NET_IPV6_RTR_SOLICIT_INTERVAL=9,
++ NET_IPV6_RTR_SOLICIT_DELAY=10,
++ NET_IPV6_USE_TEMPADDR=11,
++ NET_IPV6_TEMP_VALID_LFT=12,
++ NET_IPV6_TEMP_PREFERED_LFT=13,
++ NET_IPV6_REGEN_MAX_RETRY=14,
++ NET_IPV6_MAX_DESYNC_FACTOR=15,
++ NET_IPV6_MAX_ADDRESSES=16,
++ NET_IPV6_FORCE_MLD_VERSION=17,
++ NET_IPV6_ACCEPT_RA_DEFRTR=18,
++ NET_IPV6_ACCEPT_RA_PINFO=19,
++ NET_IPV6_ACCEPT_RA_RTR_PREF=20,
++ NET_IPV6_RTR_PROBE_INTERVAL=21,
++ NET_IPV6_ACCEPT_RA_RT_INFO_MAX_PLEN=22,
++ NET_IPV6_PROXY_NDP=23,
++ NET_IPV6_ACCEPT_SOURCE_ROUTE=25,
++ __NET_IPV6_MAX
++};
++
++
++enum {
++ NET_IPV6_ICMP_RATELIMIT=1
++};
++
++
++enum {
++ NET_NEIGH_MCAST_SOLICIT=1,
++ NET_NEIGH_UCAST_SOLICIT=2,
++ NET_NEIGH_APP_SOLICIT=3,
++ NET_NEIGH_RETRANS_TIME=4,
++ NET_NEIGH_REACHABLE_TIME=5,
++ NET_NEIGH_DELAY_PROBE_TIME=6,
++ NET_NEIGH_GC_STALE_TIME=7,
++ NET_NEIGH_UNRES_QLEN=8,
++ NET_NEIGH_PROXY_QLEN=9,
++ NET_NEIGH_ANYCAST_DELAY=10,
++ NET_NEIGH_PROXY_DELAY=11,
++ NET_NEIGH_LOCKTIME=12,
++ NET_NEIGH_GC_INTERVAL=13,
++ NET_NEIGH_GC_THRESH1=14,
++ NET_NEIGH_GC_THRESH2=15,
++ NET_NEIGH_GC_THRESH3=16,
++ NET_NEIGH_RETRANS_TIME_MS=17,
++ NET_NEIGH_REACHABLE_TIME_MS=18,
++ __NET_NEIGH_MAX
++};
++
++
++enum {
++ NET_DCCP_DEFAULT=1,
++};
++
++
++enum {
++ NET_IPX_PPROP_BROADCASTING=1,
++ NET_IPX_FORWARDING=2
++};
++
++
++enum {
++ NET_LLC2=1,
++ NET_LLC_STATION=2,
++};
++
++
++enum {
++ NET_LLC2_TIMEOUT=1,
++};
++
++
++enum {
++ NET_LLC_STATION_ACK_TIMEOUT=1,
++};
++
++
++enum {
++ NET_LLC2_ACK_TIMEOUT=1,
++ NET_LLC2_P_TIMEOUT=2,
++ NET_LLC2_REJ_TIMEOUT=3,
++ NET_LLC2_BUSY_TIMEOUT=4,
++};
++
++
++enum {
++ NET_ATALK_AARP_EXPIRY_TIME=1,
++ NET_ATALK_AARP_TICK_TIME=2,
++ NET_ATALK_AARP_RETRANSMIT_LIMIT=3,
++ NET_ATALK_AARP_RESOLVE_TIME=4
++};
++
++
++
++enum {
++ NET_NETROM_DEFAULT_PATH_QUALITY=1,
++ NET_NETROM_OBSOLESCENCE_COUNT_INITIALISER=2,
++ NET_NETROM_NETWORK_TTL_INITIALISER=3,
++ NET_NETROM_TRANSPORT_TIMEOUT=4,
++ NET_NETROM_TRANSPORT_MAXIMUM_TRIES=5,
++ NET_NETROM_TRANSPORT_ACKNOWLEDGE_DELAY=6,
++ NET_NETROM_TRANSPORT_BUSY_DELAY=7,
++ NET_NETROM_TRANSPORT_REQUESTED_WINDOW_SIZE=8,
++ NET_NETROM_TRANSPORT_NO_ACTIVITY_TIMEOUT=9,
++ NET_NETROM_ROUTING_CONTROL=10,
++ NET_NETROM_LINK_FAILS_COUNT=11,
++ NET_NETROM_RESET=12
++};
++
++
++enum {
++ NET_AX25_IP_DEFAULT_MODE=1,
++ NET_AX25_DEFAULT_MODE=2,
++ NET_AX25_BACKOFF_TYPE=3,
++ NET_AX25_CONNECT_MODE=4,
++ NET_AX25_STANDARD_WINDOW=5,
++ NET_AX25_EXTENDED_WINDOW=6,
++ NET_AX25_T1_TIMEOUT=7,
++ NET_AX25_T2_TIMEOUT=8,
++ NET_AX25_T3_TIMEOUT=9,
++ NET_AX25_IDLE_TIMEOUT=10,
++ NET_AX25_N2=11,
++ NET_AX25_PACLEN=12,
++ NET_AX25_PROTOCOL=13,
++ NET_AX25_DAMA_SLAVE_TIMEOUT=14
++};
++
++
++enum {
++ NET_ROSE_RESTART_REQUEST_TIMEOUT=1,
++ NET_ROSE_CALL_REQUEST_TIMEOUT=2,
++ NET_ROSE_RESET_REQUEST_TIMEOUT=3,
++ NET_ROSE_CLEAR_REQUEST_TIMEOUT=4,
++ NET_ROSE_ACK_HOLD_BACK_TIMEOUT=5,
++ NET_ROSE_ROUTING_CONTROL=6,
++ NET_ROSE_LINK_FAIL_TIMEOUT=7,
++ NET_ROSE_MAX_VCS=8,
++ NET_ROSE_WINDOW_SIZE=9,
++ NET_ROSE_NO_ACTIVITY_TIMEOUT=10
++};
++
++
++enum {
++ NET_X25_RESTART_REQUEST_TIMEOUT=1,
++ NET_X25_CALL_REQUEST_TIMEOUT=2,
++ NET_X25_RESET_REQUEST_TIMEOUT=3,
++ NET_X25_CLEAR_REQUEST_TIMEOUT=4,
++ NET_X25_ACK_HOLD_BACK_TIMEOUT=5,
++ NET_X25_FORWARD=6
++};
++
++
++enum
++{
++ NET_TR_RIF_TIMEOUT=1
++};
++
++
++enum {
++ NET_DECNET_NODE_TYPE = 1,
++ NET_DECNET_NODE_ADDRESS = 2,
++ NET_DECNET_NODE_NAME = 3,
++ NET_DECNET_DEFAULT_DEVICE = 4,
++ NET_DECNET_TIME_WAIT = 5,
++ NET_DECNET_DN_COUNT = 6,
++ NET_DECNET_DI_COUNT = 7,
++ NET_DECNET_DR_COUNT = 8,
++ NET_DECNET_DST_GC_INTERVAL = 9,
++ NET_DECNET_CONF = 10,
++ NET_DECNET_NO_FC_MAX_CWND = 11,
++ NET_DECNET_MEM = 12,
++ NET_DECNET_RMEM = 13,
++ NET_DECNET_WMEM = 14,
++ NET_DECNET_DEBUG_LEVEL = 255
++};
++
++
++enum {
++ NET_DECNET_CONF_LOOPBACK = -2,
++ NET_DECNET_CONF_DDCMP = -3,
++ NET_DECNET_CONF_PPP = -4,
++ NET_DECNET_CONF_X25 = -5,
++ NET_DECNET_CONF_GRE = -6,
++ NET_DECNET_CONF_ETHER = -7
++
++
++};
++
++
++enum {
++ NET_DECNET_CONF_DEV_PRIORITY = 1,
++ NET_DECNET_CONF_DEV_T1 = 2,
++ NET_DECNET_CONF_DEV_T2 = 3,
++ NET_DECNET_CONF_DEV_T3 = 4,
++ NET_DECNET_CONF_DEV_FORWARDING = 5,
++ NET_DECNET_CONF_DEV_BLKSIZE = 6,
++ NET_DECNET_CONF_DEV_STATE = 7
++};
++
++
++enum {
++ NET_SCTP_RTO_INITIAL = 1,
++ NET_SCTP_RTO_MIN = 2,
++ NET_SCTP_RTO_MAX = 3,
++ NET_SCTP_RTO_ALPHA = 4,
++ NET_SCTP_RTO_BETA = 5,
++ NET_SCTP_VALID_COOKIE_LIFE = 6,
++ NET_SCTP_ASSOCIATION_MAX_RETRANS = 7,
++ NET_SCTP_PATH_MAX_RETRANS = 8,
++ NET_SCTP_MAX_INIT_RETRANSMITS = 9,
++ NET_SCTP_HB_INTERVAL = 10,
++ NET_SCTP_PRESERVE_ENABLE = 11,
++ NET_SCTP_MAX_BURST = 12,
++ NET_SCTP_ADDIP_ENABLE = 13,
++ NET_SCTP_PRSCTP_ENABLE = 14,
++ NET_SCTP_SNDBUF_POLICY = 15,
++ NET_SCTP_SACK_TIMEOUT = 16,
++ NET_SCTP_RCVBUF_POLICY = 17,
++};
++
++
++enum {
++ NET_BRIDGE_NF_CALL_ARPTABLES = 1,
++ NET_BRIDGE_NF_CALL_IPTABLES = 2,
++ NET_BRIDGE_NF_CALL_IP6TABLES = 3,
++ NET_BRIDGE_NF_FILTER_VLAN_TAGGED = 4,
++ NET_BRIDGE_NF_FILTER_PPPOE_TAGGED = 5,
++};
++
++
++enum {
++ NET_IRDA_DISCOVERY=1,
++ NET_IRDA_DEVNAME=2,
++ NET_IRDA_DEBUG=3,
++ NET_IRDA_FAST_POLL=4,
++ NET_IRDA_DISCOVERY_SLOTS=5,
++ NET_IRDA_DISCOVERY_TIMEOUT=6,
++ NET_IRDA_SLOT_TIMEOUT=7,
++ NET_IRDA_MAX_BAUD_RATE=8,
++ NET_IRDA_MIN_TX_TURN_TIME=9,
++ NET_IRDA_MAX_TX_DATA_SIZE=10,
++ NET_IRDA_MAX_TX_WINDOW=11,
++ NET_IRDA_MAX_NOREPLY_TIME=12,
++ NET_IRDA_WARN_NOREPLY_TIME=13,
++ NET_IRDA_LAP_KEEPALIVE_TIME=14,
++};
++
++
++
++enum
++{
++ FS_NRINODE=1,
++ FS_STATINODE=2,
++ FS_MAXINODE=3,
++ FS_NRDQUOT=4,
++ FS_MAXDQUOT=5,
++ FS_NRFILE=6,
++ FS_MAXFILE=7,
++ FS_DENTRY=8,
++ FS_NRSUPER=9,
++ FS_MAXSUPER=10,
++ FS_OVERFLOWUID=11,
++ FS_OVERFLOWGID=12,
++ FS_LEASES=13,
++ FS_DIR_NOTIFY=14,
++ FS_LEASE_TIME=15,
++ FS_DQSTATS=16,
++ FS_XFS=17,
++ FS_AIO_NR=18,
++ FS_AIO_MAX_NR=19,
++ FS_INOTIFY=20,
++ FS_OCFS2=988,
++};
++
++
++enum {
++ FS_DQ_LOOKUPS = 1,
++ FS_DQ_DROPS = 2,
++ FS_DQ_READS = 3,
++ FS_DQ_WRITES = 4,
++ FS_DQ_CACHE_HITS = 5,
++ FS_DQ_ALLOCATED = 6,
++ FS_DQ_FREE = 7,
++ FS_DQ_SYNCS = 8,
++ FS_DQ_WARNINGS = 9,
++};
++
++
++
++
++enum {
++ DEV_CDROM=1,
++ DEV_HWMON=2,
++ DEV_PARPORT=3,
++ DEV_RAID=4,
++ DEV_MAC_HID=5,
++ DEV_SCSI=6,
++ DEV_IPMI=7,
++};
++
++
++enum {
++ DEV_CDROM_INFO=1,
++ DEV_CDROM_AUTOCLOSE=2,
++ DEV_CDROM_AUTOEJECT=3,
++ DEV_CDROM_DEBUG=4,
++ DEV_CDROM_LOCK=5,
++ DEV_CDROM_CHECK_MEDIA=6
++};
++
++
++enum {
++ DEV_PARPORT_DEFAULT=-3
++};
++
++
++enum {
++ DEV_RAID_SPEED_LIMIT_MIN=1,
++ DEV_RAID_SPEED_LIMIT_MAX=2
++};
++
++
++enum {
++ DEV_PARPORT_DEFAULT_TIMESLICE=1,
++ DEV_PARPORT_DEFAULT_SPINTIME=2
++};
++
++
++enum {
++ DEV_PARPORT_SPINTIME=1,
++ DEV_PARPORT_BASE_ADDR=2,
++ DEV_PARPORT_IRQ=3,
++ DEV_PARPORT_DMA=4,
++ DEV_PARPORT_MODES=5,
++ DEV_PARPORT_DEVICES=6,
++ DEV_PARPORT_AUTOPROBE=16
++};
++
++
++enum {
++ DEV_PARPORT_DEVICES_ACTIVE=-3,
++};
++
++
++enum {
++ DEV_PARPORT_DEVICE_TIMESLICE=1,
++};
++
++
++enum {
++ DEV_MAC_HID_KEYBOARD_SENDS_LINUX_KEYCODES=1,
++ DEV_MAC_HID_KEYBOARD_LOCK_KEYCODES=2,
++ DEV_MAC_HID_MOUSE_BUTTON_EMULATION=3,
++ DEV_MAC_HID_MOUSE_BUTTON2_KEYCODE=4,
++ DEV_MAC_HID_MOUSE_BUTTON3_KEYCODE=5,
++ DEV_MAC_HID_ADB_MOUSE_SENDS_KEYCODES=6
++};
++
++
++enum {
++ DEV_SCSI_LOGGING_LEVEL=1,
++};
++
++
++enum {
++ DEV_IPMI_POWEROFF_POWERCYCLE=1,
++};
++
++
++enum
++{
++ ABI_DEFHANDLER_COFF=1,
++ ABI_DEFHANDLER_ELF=2,
++ ABI_DEFHANDLER_LCALL7=3,
++ ABI_DEFHANDLER_LIBCSO=4,
++ ABI_TRACE=5,
++ ABI_FAKE_UTSNAME=6,
++};
++
++
++
++
++
++struct ctl_table;
++struct nsproxy;
++struct ctl_table_root;
++
++struct ctl_table_set {
++ struct list_head list;
++ struct ctl_table_set *parent;
++ int (*is_seen)(struct ctl_table_set *);
++};
++
++extern void setup_sysctl_set(struct ctl_table_set *p,
++ struct ctl_table_set *parent,
++ int (*is_seen)(struct ctl_table_set *));
++
++struct ctl_table_header;
++
++extern void sysctl_head_get(struct ctl_table_header *);
++extern void sysctl_head_put(struct ctl_table_header *);
++extern int sysctl_is_seen(struct ctl_table_header *);
++extern struct ctl_table_header *sysctl_head_grab(struct ctl_table_header *);
++extern struct ctl_table_header *sysctl_head_next(struct ctl_table_header *prev);
++extern struct ctl_table_header *__sysctl_head_next(struct nsproxy *namespaces,
++      struct ctl_table_header *prev);
++extern void sysctl_head_finish(struct ctl_table_header *prev);
++extern int sysctl_perm(struct ctl_table_root *root,
++  struct ctl_table *table, int op);
++
++typedef struct ctl_table ctl_table;
++
++typedef int ctl_handler (struct ctl_table *table, int *name, int nlen,
++    void *oldval, size_t *oldlenp,
++    void *newval, size_t newlen);
++
++typedef int proc_handler_t (struct ctl_table *ctl, int write, struct file * filp,
++     void *buffer, size_t *lenp, loff_t *ppos);
++
++extern int proc_dostring(struct ctl_table *, int, struct file *,
++    void *, size_t *, loff_t *);
++extern int proc_dointvec(struct ctl_table *, int, struct file *,
++    void *, size_t *, loff_t *);
++extern int proc_dointvec_minmax(struct ctl_table *, int, struct file *,
++    void *, size_t *, loff_t *);
++extern int proc_dointvec_jiffies(struct ctl_table *, int, struct file *,
++     void *, size_t *, loff_t *);
++extern int proc_dointvec_userhz_jiffies(struct ctl_table *, int, struct file *,
++     void *, size_t *, loff_t *);
++extern int proc_dointvec_ms_jiffies(struct ctl_table *, int, struct file *,
++        void *, size_t *, loff_t *);
++extern int proc_doulongvec_minmax(struct ctl_table *, int, struct file *,
++      void *, size_t *, loff_t *);
++extern int proc_doulongvec_ms_jiffies_minmax(struct ctl_table *table, int,
++          struct file *, void *, size_t *, loff_t *);
++
++extern int do_sysctl (int *name, int nlen,
++        void *oldval, size_t *oldlenp,
++        void *newval, size_t newlen);
++
++extern ctl_handler sysctl_data;
++extern ctl_handler sysctl_string;
++extern ctl_handler sysctl_intvec;
++extern ctl_handler sysctl_jiffies;
++extern ctl_handler sysctl_ms_jiffies;
++# 1053 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sysctl.h"
++struct ctl_table
++{
++ int ctl_name;
++ const char *procname;
++ void *data;
++ int maxlen;
++ mode_t mode;
++ struct ctl_table *child;
++ struct ctl_table *parent;
++ proc_handler_t *proc_handler;
++ ctl_handler *strategy;
++ void *extra1;
++ void *extra2;
++};
++
++struct ctl_table_root {
++ struct list_head root_list;
++ struct ctl_table_set default_set;
++ struct ctl_table_set *(*lookup)(struct ctl_table_root *root,
++        struct nsproxy *namespaces);
++ int (*permissions)(struct ctl_table_root *root,
++   struct nsproxy *namespaces, struct ctl_table *table);
++};
++
++
++
++struct ctl_table_header
++{
++ struct ctl_table *ctl_table;
++ struct list_head ctl_entry;
++ int used;
++ int count;
++ struct completion *unregistering;
++ struct ctl_table *ctl_table_arg;
++ struct ctl_table_root *root;
++ struct ctl_table_set *set;
++ struct ctl_table *attached_by;
++ struct ctl_table *attached_to;
++ struct ctl_table_header *parent;
++};
++
++
++struct ctl_path {
++ const char *procname;
++ int ctl_name;
++};
++
++void register_sysctl_root(struct ctl_table_root *root);
++struct ctl_table_header *__register_sysctl_paths(
++ struct ctl_table_root *root, struct nsproxy *namespaces,
++ const struct ctl_path *path, struct ctl_table *table);
++struct ctl_table_header *register_sysctl_table(struct ctl_table * table);
++struct ctl_table_header *register_sysctl_paths(const struct ctl_path *path,
++      struct ctl_table *table);
++
++void unregister_sysctl_table(struct ctl_table_header * table);
++int sysctl_check_table(struct nsproxy *namespaces, struct ctl_table *table);
++# 355 "/d/kernels/linux-2.6.27.10-clickport/include/linux/net.h" 2
++extern struct ratelimit_state net_ratelimit_state;
++# 26 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h" 1
++
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/module.h" 1
++# 10 "/d/kernels/linux-2.6.27.10-clickport/include/linux/module.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/stat.h" 1
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/stat.h" 1
++
++
++
++
++
++
++struct stat {
++ unsigned long st_dev;
++ unsigned long st_ino;
++ unsigned short st_mode;
++ unsigned short st_nlink;
++ unsigned short st_uid;
++ unsigned short st_gid;
++ unsigned long st_rdev;
++ unsigned long st_size;
++ unsigned long st_blksize;
++ unsigned long st_blocks;
++ unsigned long st_atime;
++ unsigned long st_atime_nsec;
++ unsigned long st_mtime;
++ unsigned long st_mtime_nsec;
++ unsigned long st_ctime;
++ unsigned long st_ctime_nsec;
++ unsigned long __unused4;
++ unsigned long __unused5;
++};
++
++
++
++
++
++
++struct stat64 {
++ unsigned long long st_dev;
++ unsigned char __pad0[4];
++
++ unsigned long __st_ino;
++
++ unsigned int st_mode;
++ unsigned int st_nlink;
++
++ unsigned long st_uid;
++ unsigned long st_gid;
++
++ unsigned long long st_rdev;
++ unsigned char __pad3[4];
++
++ long long st_size;
++ unsigned long st_blksize;
++
++
++ unsigned long long st_blocks;
++
++ unsigned long st_atime;
++ unsigned long st_atime_nsec;
++
++ unsigned long st_mtime;
++ unsigned int st_mtime_nsec;
++
++ unsigned long st_ctime;
++ unsigned long st_ctime_nsec;
++
++ unsigned long long st_ino;
++};
++# 93 "/d/kernels/linux-2.6.27.10-clickport/include/asm/stat.h"
++struct __old_kernel_stat {
++ unsigned short st_dev;
++ unsigned short st_ino;
++ unsigned short st_mode;
++ unsigned short st_nlink;
++ unsigned short st_uid;
++ unsigned short st_gid;
++ unsigned short st_rdev;
++
++ unsigned long st_size;
++ unsigned long st_atime;
++ unsigned long st_mtime;
++ unsigned long st_ctime;
++
++
++
++
++
++
++};
++# 7 "/d/kernels/linux-2.6.27.10-clickport/include/linux/stat.h" 2
++# 62 "/d/kernels/linux-2.6.27.10-clickport/include/linux/stat.h"
++struct kstat {
++ u64 ino;
++ dev_t dev;
++ umode_t mode;
++ unsigned int nlink;
++ uid_t uid;
++ gid_t gid;
++ tag_t tag;
++ dev_t rdev;
++ loff_t size;
++ struct timespec atime;
++ struct timespec mtime;
++ struct timespec ctime;
++ unsigned long blksize;
++ unsigned long long blocks;
++};
++# 11 "/d/kernels/linux-2.6.27.10-clickport/include/linux/module.h" 2
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h" 1
++# 22 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h" 1
++# 13 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/numa.h" 1
++# 14 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h" 2
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h" 1
++# 92 "/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h"
++typedef struct { unsigned long bits[((((1 << 0)) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))]; } nodemask_t;
++extern nodemask_t _unused_nodemask_arg_;
++
++
++static inline __attribute__((always_inline)) void __node_set(int node, volatile nodemask_t *dstp)
++{
++ set_bit(node, dstp->bits);
++}
++
++
++static inline __attribute__((always_inline)) void __node_clear(int node, volatile nodemask_t *dstp)
++{
++ clear_bit(node, dstp->bits);
++}
++
++
++static inline __attribute__((always_inline)) void __nodes_setall(nodemask_t *dstp, int nbits)
++{
++ bitmap_fill(dstp->bits, nbits);
++}
++
++
++static inline __attribute__((always_inline)) void __nodes_clear(nodemask_t *dstp, int nbits)
++{
++ bitmap_zero(dstp->bits, nbits);
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) int __node_test_and_set(int node, nodemask_t *addr)
++{
++ return test_and_set_bit(node, addr->bits);
++}
++
++
++
++static inline __attribute__((always_inline)) void __nodes_and(nodemask_t *dstp, const nodemask_t *src1p,
++     const nodemask_t *src2p, int nbits)
++{
++ bitmap_and(dstp->bits, src1p->bits, src2p->bits, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) void __nodes_or(nodemask_t *dstp, const nodemask_t *src1p,
++     const nodemask_t *src2p, int nbits)
++{
++ bitmap_or(dstp->bits, src1p->bits, src2p->bits, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) void __nodes_xor(nodemask_t *dstp, const nodemask_t *src1p,
++     const nodemask_t *src2p, int nbits)
++{
++ bitmap_xor(dstp->bits, src1p->bits, src2p->bits, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) void __nodes_andnot(nodemask_t *dstp, const nodemask_t *src1p,
++     const nodemask_t *src2p, int nbits)
++{
++ bitmap_andnot(dstp->bits, src1p->bits, src2p->bits, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) void __nodes_complement(nodemask_t *dstp,
++     const nodemask_t *srcp, int nbits)
++{
++ bitmap_complement(dstp->bits, srcp->bits, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) int __nodes_equal(const nodemask_t *src1p,
++     const nodemask_t *src2p, int nbits)
++{
++ return bitmap_equal(src1p->bits, src2p->bits, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) int __nodes_intersects(const nodemask_t *src1p,
++     const nodemask_t *src2p, int nbits)
++{
++ return bitmap_intersects(src1p->bits, src2p->bits, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) int __nodes_subset(const nodemask_t *src1p,
++     const nodemask_t *src2p, int nbits)
++{
++ return bitmap_subset(src1p->bits, src2p->bits, nbits);
++}
++
++
++static inline __attribute__((always_inline)) int __nodes_empty(const nodemask_t *srcp, int nbits)
++{
++ return bitmap_empty(srcp->bits, nbits);
++}
++
++
++static inline __attribute__((always_inline)) int __nodes_full(const nodemask_t *srcp, int nbits)
++{
++ return bitmap_full(srcp->bits, nbits);
++}
++
++
++static inline __attribute__((always_inline)) int __nodes_weight(const nodemask_t *srcp, int nbits)
++{
++ return bitmap_weight(srcp->bits, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) void __nodes_shift_right(nodemask_t *dstp,
++     const nodemask_t *srcp, int n, int nbits)
++{
++ bitmap_shift_right(dstp->bits, srcp->bits, n, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) void __nodes_shift_left(nodemask_t *dstp,
++     const nodemask_t *srcp, int n, int nbits)
++{
++ bitmap_shift_left(dstp->bits, srcp->bits, n, nbits);
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) int __first_node(const nodemask_t *srcp)
++{
++ return ({ int __min1 = ((1 << 0)); int __min2 = (find_first_bit(srcp->bits, (1 << 0))); __min1 < __min2 ? __min1: __min2; });
++}
++
++
++static inline __attribute__((always_inline)) int __next_node(int n, const nodemask_t *srcp)
++{
++ return ({ int __min1 = ((1 << 0)); int __min2 = (find_next_bit(srcp->bits, (1 << 0), n+1)); __min1 < __min2 ? __min1: __min2; });
++}
++# 255 "/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h"
++static inline __attribute__((always_inline)) int __first_unset_node(const nodemask_t *maskp)
++{
++ return ({ int __min1 = ((1 << 0)); int __min2 = (find_first_zero_bit(maskp->bits, (1 << 0))); __min1 < __min2 ? __min1: __min2; });
++
++}
++# 289 "/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h"
++static inline __attribute__((always_inline)) int __nodemask_scnprintf(char *buf, int len,
++     const nodemask_t *srcp, int nbits)
++{
++ return bitmap_scnprintf(buf, len, srcp->bits, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) int __nodemask_parse_user(const char *buf, int len,
++     nodemask_t *dstp, int nbits)
++{
++ return bitmap_parse_user(buf, len, dstp->bits, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) int __nodelist_scnprintf(char *buf, int len,
++     const nodemask_t *srcp, int nbits)
++{
++ return bitmap_scnlistprintf(buf, len, srcp->bits, nbits);
++}
++
++
++static inline __attribute__((always_inline)) int __nodelist_parse(const char *buf, nodemask_t *dstp, int nbits)
++{
++ return bitmap_parselist(buf, dstp->bits, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) int __node_remap(int oldbit,
++  const nodemask_t *oldp, const nodemask_t *newp, int nbits)
++{
++ return bitmap_bitremap(oldbit, oldp->bits, newp->bits, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) void __nodes_remap(nodemask_t *dstp, const nodemask_t *srcp,
++  const nodemask_t *oldp, const nodemask_t *newp, int nbits)
++{
++ bitmap_remap(dstp->bits, srcp->bits, oldp->bits, newp->bits, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) void __nodes_onto(nodemask_t *dstp, const nodemask_t *origp,
++  const nodemask_t *relmapp, int nbits)
++{
++ bitmap_onto(dstp->bits, origp->bits, relmapp->bits, nbits);
++}
++
++
++
++static inline __attribute__((always_inline)) void __nodes_fold(nodemask_t *dstp, const nodemask_t *origp,
++  int sz, int nbits)
++{
++ bitmap_fold(dstp->bits, origp->bits, sz, nbits);
++}
++# 363 "/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h"
++enum node_states {
++ N_POSSIBLE,
++ N_ONLINE,
++ N_NORMAL_MEMORY,
++
++ N_HIGH_MEMORY,
++
++
++
++ N_CPU,
++ NR_NODE_STATES
++};
++
++
++
++
++
++
++extern nodemask_t node_states[NR_NODE_STATES];
++# 413 "/d/kernels/linux-2.6.27.10-clickport/include/linux/nodemask.h"
++static inline __attribute__((always_inline)) int node_state(int node, enum node_states state)
++{
++ return node == 0;
++}
++
++static inline __attribute__((always_inline)) void node_set_state(int node, enum node_states state)
++{
++}
++
++static inline __attribute__((always_inline)) void node_clear_state(int node, enum node_states state)
++{
++}
++
++static inline __attribute__((always_inline)) int num_node_state(enum node_states state)
++{
++ return 1;
++}
++# 17 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/pageblock-flags.h" 1
++# 29 "/d/kernels/linux-2.6.27.10-clickport/include/linux/pageblock-flags.h"
++enum pageblock_bits {
++ PB_migrate,
++ PB_migrate_end = PB_migrate + 3 - 1,
++
++ NR_PAGEBLOCK_BITS
++};
++# 60 "/d/kernels/linux-2.6.27.10-clickport/include/linux/pageblock-flags.h"
++struct page;
++
++
++unsigned long get_pageblock_flags_group(struct page *page,
++     int start_bitidx, int end_bitidx);
++void set_pageblock_flags_group(struct page *page, unsigned long flags,
++     int start_bitidx, int end_bitidx);
++# 18 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/bounds.h" 1
++# 19 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic.h" 1
++# 20 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h" 2
++# 49 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++extern int page_group_by_mobility_disabled;
++
++static inline __attribute__((always_inline)) int get_pageblock_migratetype(struct page *page)
++{
++ if (__builtin_expect(!!(page_group_by_mobility_disabled), 0))
++  return 0;
++
++ return get_pageblock_flags_group(page, PB_migrate, PB_migrate_end);
++}
++
++struct free_area {
++ struct list_head free_list[5];
++ unsigned long nr_free;
++};
++
++struct pglist_data;
++# 73 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++struct zone_padding {
++ char x[0];
++} __attribute__((__aligned__(1 << ((7)))));
++
++
++
++
++
++enum zone_stat_item {
++
++ NR_FREE_PAGES,
++ NR_INACTIVE,
++ NR_ACTIVE,
++ NR_ANON_PAGES,
++ NR_FILE_MAPPED,
++
++ NR_FILE_PAGES,
++ NR_FILE_DIRTY,
++ NR_WRITEBACK,
++
++ NR_SLAB_RECLAIMABLE,
++ NR_SLAB_UNRECLAIMABLE,
++ NR_PAGETABLE,
++ NR_UNSTABLE_NFS,
++ NR_BOUNCE,
++ NR_VMSCAN_WRITE,
++ NR_WRITEBACK_TEMP,
++# 108 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++ NR_VM_ZONE_STAT_ITEMS };
++
++struct per_cpu_pages {
++ int count;
++ int high;
++ int batch;
++ struct list_head list;
++};
++
++struct per_cpu_pageset {
++ struct per_cpu_pages pcp;
++
++
++
++
++ s8 stat_threshold;
++ s8 vm_stat_diff[NR_VM_ZONE_STAT_ITEMS];
++
++} __attribute__((__aligned__((1 << (7)))));
++# 136 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++enum zone_type {
++# 156 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++ ZONE_DMA,
++# 171 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++ ZONE_NORMAL,
++# 181 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++ ZONE_HIGHMEM,
++
++ ZONE_MOVABLE,
++ __MAX_NR_ZONES
++};
++# 207 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++struct zone {
++
++ unsigned long pages_min, pages_low, pages_high;
++# 218 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++ unsigned long lowmem_reserve[4];
++# 229 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++ struct per_cpu_pageset pageset[32];
++
++
++
++
++ spinlock_t lock;
++
++
++
++
++ struct free_area free_area[11];
++
++
++
++
++
++
++ unsigned long *pageblock_flags;
++
++
++
++ struct zone_padding _pad1_;
++
++
++ spinlock_t lru_lock;
++ struct list_head active_list;
++ struct list_head inactive_list;
++ unsigned long nr_scan_active;
++ unsigned long nr_scan_inactive;
++ unsigned long pages_scanned;
++ unsigned long flags;
++
++
++ atomic_long_t vm_stat[NR_VM_ZONE_STAT_ITEMS];
++# 277 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++ int prev_priority;
++
++
++ struct zone_padding _pad2_;
++# 307 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++ wait_queue_head_t * wait_table;
++ unsigned long wait_table_hash_nr_entries;
++ unsigned long wait_table_bits;
++
++
++
++
++ struct pglist_data *zone_pgdat;
++
++ unsigned long zone_start_pfn;
++# 328 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++ unsigned long spanned_pages;
++ unsigned long present_pages;
++
++
++
++
++ const char *name;
++} __attribute__((__aligned__(1 << ((7)))));
++
++typedef enum {
++ ZONE_ALL_UNRECLAIMABLE,
++ ZONE_RECLAIM_LOCKED,
++ ZONE_OOM_LOCKED,
++} zone_flags_t;
++
++static inline __attribute__((always_inline)) void zone_set_flag(struct zone *zone, zone_flags_t flag)
++{
++ set_bit(flag, &zone->flags);
++}
++
++static inline __attribute__((always_inline)) int zone_test_and_set_flag(struct zone *zone, zone_flags_t flag)
++{
++ return test_and_set_bit(flag, &zone->flags);
++}
++
++static inline __attribute__((always_inline)) void zone_clear_flag(struct zone *zone, zone_flags_t flag)
++{
++ clear_bit(flag, &zone->flags);
++}
++
++static inline __attribute__((always_inline)) int zone_is_all_unreclaimable(const struct zone *zone)
++{
++ return (__builtin_constant_p((ZONE_ALL_UNRECLAIMABLE)) ? constant_test_bit((ZONE_ALL_UNRECLAIMABLE), (&zone->flags)) : variable_test_bit((ZONE_ALL_UNRECLAIMABLE), (&zone->flags)));
++}
++
++static inline __attribute__((always_inline)) int zone_is_reclaim_locked(const struct zone *zone)
++{
++ return (__builtin_constant_p((ZONE_RECLAIM_LOCKED)) ? constant_test_bit((ZONE_RECLAIM_LOCKED), (&zone->flags)) : variable_test_bit((ZONE_RECLAIM_LOCKED), (&zone->flags)));
++}
++
++static inline __attribute__((always_inline)) int zone_is_oom_locked(const struct zone *zone)
++{
++ return (__builtin_constant_p((ZONE_OOM_LOCKED)) ? constant_test_bit((ZONE_OOM_LOCKED), (&zone->flags)) : variable_test_bit((ZONE_OOM_LOCKED), (&zone->flags)));
++}
++# 461 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++struct zonelist_cache;
++
++
++
++
++
++
++struct zoneref {
++ struct zone *zone;
++ int zone_idx;
++};
++# 490 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++struct zonelist {
++ struct zonelist_cache *zlcache_ptr;
++ struct zoneref _zonerefs[((1 << 0) * 4) + 1];
++
++
++
++};
++
++
++struct node_active_region {
++ unsigned long start_pfn;
++ unsigned long end_pfn;
++ int nid;
++};
++
++
++
++
++extern struct page *mem_map;
++# 522 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++struct bootmem_data;
++typedef struct pglist_data {
++ struct zone node_zones[4];
++ struct zonelist node_zonelists[1];
++ int nr_zones;
++
++ struct page *node_mem_map;
++
++ struct bootmem_data *bdata;
++# 541 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++ unsigned long node_start_pfn;
++ unsigned long node_present_pages;
++ unsigned long node_spanned_pages;
++
++ int node_id;
++ wait_queue_head_t kswapd_wait;
++ struct task_struct *kswapd;
++ int kswapd_max_order;
++} pg_data_t;
++# 560 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h" 1
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/notifier.h" 1
++# 12 "/d/kernels/linux-2.6.27.10-clickport/include/linux/notifier.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/errno.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/errno.h" 1
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/linux/errno.h" 2
++# 13 "/d/kernels/linux-2.6.27.10-clickport/include/linux/notifier.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mutex.h" 1
++# 18 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mutex.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic.h" 1
++# 19 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mutex.h" 2
++# 48 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mutex.h"
++struct mutex {
++
++ atomic_t count;
++ spinlock_t wait_lock;
++ struct list_head wait_list;
++# 61 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mutex.h"
++};
++
++
++
++
++
++struct mutex_waiter {
++ struct list_head list;
++ struct task_struct *task;
++
++
++
++
++};
++# 106 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mutex.h"
++extern void __mutex_init(struct mutex *lock, const char *name,
++    struct lock_class_key *key);
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) int mutex_is_locked(struct mutex *lock)
++{
++ return ((&lock->count)->counter) != 1;
++}
++# 135 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mutex.h"
++extern void mutex_lock(struct mutex *lock);
++extern int __attribute__((warn_unused_result)) mutex_lock_interruptible(struct mutex *lock);
++extern int __attribute__((warn_unused_result)) mutex_lock_killable(struct mutex *lock);
++# 148 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mutex.h"
++extern int mutex_trylock(struct mutex *lock);
++extern void mutex_unlock(struct mutex *lock);
++# 14 "/d/kernels/linux-2.6.27.10-clickport/include/linux/notifier.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rwsem.h" 1
++# 15 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rwsem.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic.h" 1
++# 16 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rwsem.h" 2
++
++struct rw_semaphore;
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/rwsem.h" 1
++# 45 "/d/kernels/linux-2.6.27.10-clickport/include/asm/rwsem.h"
++struct rwsem_waiter;
++
++extern __attribute__((regparm(3))) struct rw_semaphore *
++ rwsem_down_read_failed(struct rw_semaphore *sem);
++extern __attribute__((regparm(3))) struct rw_semaphore *
++ rwsem_down_write_failed(struct rw_semaphore *sem);
++extern __attribute__((regparm(3))) struct rw_semaphore *
++ rwsem_wake(struct rw_semaphore *);
++extern __attribute__((regparm(3))) struct rw_semaphore *
++ rwsem_downgrade_wake(struct rw_semaphore *sem);
++# 67 "/d/kernels/linux-2.6.27.10-clickport/include/asm/rwsem.h"
++struct rw_semaphore {
++ signed long count;
++ spinlock_t wait_lock;
++ struct list_head wait_list;
++
++
++
++};
++# 92 "/d/kernels/linux-2.6.27.10-clickport/include/asm/rwsem.h"
++extern void __init_rwsem(struct rw_semaphore *sem, const char *name,
++    struct lock_class_key *key);
++# 105 "/d/kernels/linux-2.6.27.10-clickport/include/asm/rwsem.h"
++static inline __attribute__((always_inline)) void __down_read(struct rw_semaphore *sem)
++{
++ asm volatile("# beginning down_read\n\t"
++       "lock ; " "  incl      (%%eax)\n\t"
++
++       "  jns        1f\n"
++       "  call call_rwsem_down_read_failed\n"
++       "1:\n\t"
++       "# ending down_read\n\t"
++       : "+m" (sem->count)
++       : "a" (sem)
++       : "memory", "cc");
++}
++
++
++
++
++static inline __attribute__((always_inline)) int __down_read_trylock(struct rw_semaphore *sem)
++{
++ __s32 result, tmp;
++ asm volatile("# beginning __down_read_trylock\n\t"
++       "  movl      %0,%1\n\t"
++       "1:\n\t"
++       "  movl             %1,%2\n\t"
++       "  addl      %3,%2\n\t"
++       "  jle      2f\n\t"
++       "lock ; " "  cmpxchgl  %2,%0\n\t"
++       "  jnz      1b\n\t"
++       "2:\n\t"
++       "# ending __down_read_trylock\n\t"
++       : "+m" (sem->count), "=&a" (result), "=&r" (tmp)
++       : "i" (0x00000001)
++       : "memory", "cc");
++ return result >= 0 ? 1 : 0;
++}
++
++
++
++
++static inline __attribute__((always_inline)) void __down_write_nested(struct rw_semaphore *sem, int subclass)
++{
++ int tmp;
++
++ tmp = ((-0x00010000) + 0x00000001);
++ asm volatile("# beginning down_write\n\t"
++       "lock ; " "  xadd      %%edx,(%%eax)\n\t"
++
++       "  testl     %%edx,%%edx\n\t"
++
++       "  jz        1f\n"
++       "  call call_rwsem_down_write_failed\n"
++       "1:\n"
++       "# ending down_write"
++       : "+m" (sem->count), "=d" (tmp)
++       : "a" (sem), "1" (tmp)
++       : "memory", "cc");
++}
++
++static inline __attribute__((always_inline)) void __down_write(struct rw_semaphore *sem)
++{
++ __down_write_nested(sem, 0);
++}
++
++
++
++
++static inline __attribute__((always_inline)) int __down_write_trylock(struct rw_semaphore *sem)
++{
++ signed long ret = ((__typeof__(*(&sem->count)))__cmpxchg((&sem->count), (unsigned long)(0x00000000), (unsigned long)(((-0x00010000) + 0x00000001)), sizeof(*(&sem->count))));
++
++
++ if (ret == 0x00000000)
++  return 1;
++ return 0;
++}
++
++
++
++
++static inline __attribute__((always_inline)) void __up_read(struct rw_semaphore *sem)
++{
++ __s32 tmp = -0x00000001;
++ asm volatile("# beginning __up_read\n\t"
++       "lock ; " "  xadd      %%edx,(%%eax)\n\t"
++
++       "  jns        1f\n\t"
++       "  call call_rwsem_wake\n"
++       "1:\n"
++       "# ending __up_read\n"
++       : "+m" (sem->count), "=d" (tmp)
++       : "a" (sem), "1" (tmp)
++       : "memory", "cc");
++}
++
++
++
++
++static inline __attribute__((always_inline)) void __up_write(struct rw_semaphore *sem)
++{
++ asm volatile("# beginning __up_write\n\t"
++       "  movl      %2,%%edx\n\t"
++       "lock ; " "  xaddl     %%edx,(%%eax)\n\t"
++
++
++       "  jz       1f\n"
++       "  call call_rwsem_wake\n"
++       "1:\n\t"
++       "# ending __up_write\n"
++       : "+m" (sem->count)
++       : "a" (sem), "i" (-((-0x00010000) + 0x00000001))
++       : "memory", "cc", "edx");
++}
++
++
++
++
++static inline __attribute__((always_inline)) void __downgrade_write(struct rw_semaphore *sem)
++{
++ asm volatile("# beginning __downgrade_write\n\t"
++       "lock ; " "  addl      %2,(%%eax)\n\t"
++
++       "  jns       1f\n\t"
++       "  call call_rwsem_downgrade_wake\n"
++       "1:\n\t"
++       "# ending __downgrade_write\n"
++       : "+m" (sem->count)
++       : "a" (sem), "i" (-(-0x00010000))
++       : "memory", "cc");
++}
++
++
++
++
++static inline __attribute__((always_inline)) void rwsem_atomic_add(int delta, struct rw_semaphore *sem)
++{
++ asm volatile("lock ; " "addl %1,%0"
++       : "+m" (sem->count)
++       : "ir" (delta));
++}
++
++
++
++
++static inline __attribute__((always_inline)) int rwsem_atomic_update(int delta, struct rw_semaphore *sem)
++{
++ int tmp = delta;
++
++ asm volatile("lock ; " "xadd %0,%1"
++       : "+r" (tmp), "+m" (sem->count)
++       : : "memory");
++
++ return tmp + delta;
++}
++
++static inline __attribute__((always_inline)) int rwsem_is_locked(struct rw_semaphore *sem)
++{
++ return (sem->count != 0);
++}
++# 23 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rwsem.h" 2
++
++
++
++
++
++extern void down_read(struct rw_semaphore *sem);
++
++
++
++
++extern int down_read_trylock(struct rw_semaphore *sem);
++
++
++
++
++extern void down_write(struct rw_semaphore *sem);
++
++
++
++
++extern int down_write_trylock(struct rw_semaphore *sem);
++
++
++
++
++extern void up_read(struct rw_semaphore *sem);
++
++
++
++
++extern void up_write(struct rw_semaphore *sem);
++
++
++
++
++extern void downgrade_write(struct rw_semaphore *sem);
++# 15 "/d/kernels/linux-2.6.27.10-clickport/include/linux/notifier.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/srcu.h" 1
++# 30 "/d/kernels/linux-2.6.27.10-clickport/include/linux/srcu.h"
++struct srcu_struct_array {
++ int c[2];
++};
++
++struct srcu_struct {
++ int completed;
++ struct srcu_struct_array *per_cpu_ref;
++ struct mutex mutex;
++};
++
++
++
++
++
++
++
++int init_srcu_struct(struct srcu_struct *sp);
++void cleanup_srcu_struct(struct srcu_struct *sp);
++int srcu_read_lock(struct srcu_struct *sp) ;
++void srcu_read_unlock(struct srcu_struct *sp, int idx) ;
++void synchronize_srcu(struct srcu_struct *sp);
++long srcu_batches_completed(struct srcu_struct *sp);
++# 16 "/d/kernels/linux-2.6.27.10-clickport/include/linux/notifier.h" 2
++# 50 "/d/kernels/linux-2.6.27.10-clickport/include/linux/notifier.h"
++struct notifier_block {
++ int (*notifier_call)(struct notifier_block *, unsigned long, void *);
++ struct notifier_block *next;
++ int priority;
++};
++
++struct atomic_notifier_head {
++ spinlock_t lock;
++ struct notifier_block *head;
++};
++
++struct blocking_notifier_head {
++ struct rw_semaphore rwsem;
++ struct notifier_block *head;
++};
++
++struct raw_notifier_head {
++ struct notifier_block *head;
++};
++
++struct srcu_notifier_head {
++ struct mutex mutex;
++ struct srcu_struct srcu;
++ struct notifier_block *head;
++};
++# 89 "/d/kernels/linux-2.6.27.10-clickport/include/linux/notifier.h"
++extern void srcu_init_notifier_head(struct srcu_notifier_head *nh);
++# 115 "/d/kernels/linux-2.6.27.10-clickport/include/linux/notifier.h"
++extern int atomic_notifier_chain_register(struct atomic_notifier_head *nh,
++  struct notifier_block *nb);
++extern int blocking_notifier_chain_register(struct blocking_notifier_head *nh,
++  struct notifier_block *nb);
++extern int raw_notifier_chain_register(struct raw_notifier_head *nh,
++  struct notifier_block *nb);
++extern int srcu_notifier_chain_register(struct srcu_notifier_head *nh,
++  struct notifier_block *nb);
++
++extern int blocking_notifier_chain_cond_register(
++  struct blocking_notifier_head *nh,
++  struct notifier_block *nb);
++
++extern int atomic_notifier_chain_unregister(struct atomic_notifier_head *nh,
++  struct notifier_block *nb);
++extern int blocking_notifier_chain_unregister(struct blocking_notifier_head *nh,
++  struct notifier_block *nb);
++extern int raw_notifier_chain_unregister(struct raw_notifier_head *nh,
++  struct notifier_block *nb);
++extern int srcu_notifier_chain_unregister(struct srcu_notifier_head *nh,
++  struct notifier_block *nb);
++
++extern int atomic_notifier_call_chain(struct atomic_notifier_head *nh,
++  unsigned long val, void *v);
++extern int __atomic_notifier_call_chain(struct atomic_notifier_head *nh,
++ unsigned long val, void *v, int nr_to_call, int *nr_calls);
++extern int blocking_notifier_call_chain(struct blocking_notifier_head *nh,
++  unsigned long val, void *v);
++extern int __blocking_notifier_call_chain(struct blocking_notifier_head *nh,
++ unsigned long val, void *v, int nr_to_call, int *nr_calls);
++extern int raw_notifier_call_chain(struct raw_notifier_head *nh,
++  unsigned long val, void *v);
++extern int __raw_notifier_call_chain(struct raw_notifier_head *nh,
++ unsigned long val, void *v, int nr_to_call, int *nr_calls);
++extern int srcu_notifier_call_chain(struct srcu_notifier_head *nh,
++  unsigned long val, void *v);
++extern int __srcu_notifier_call_chain(struct srcu_notifier_head *nh,
++ unsigned long val, void *v, int nr_to_call, int *nr_calls);
++# 165 "/d/kernels/linux-2.6.27.10-clickport/include/linux/notifier.h"
++static inline __attribute__((always_inline)) int notifier_from_errno(int err)
++{
++ return 0x8000 | (0x0001 - err);
++}
++
++
++static inline __attribute__((always_inline)) int notifier_to_errno(int ret)
++{
++ ret &= ~0x8000;
++ return ret > 0x0001 ? 0x0001 - ret : 0;
++}
++# 250 "/d/kernels/linux-2.6.27.10-clickport/include/linux/notifier.h"
++extern struct blocking_notifier_head reboot_notifier_list;
++# 7 "/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h" 2
++
++struct page;
++struct zone;
++struct pglist_data;
++struct mem_section;
++# 165 "/d/kernels/linux-2.6.27.10-clickport/include/linux/memory_hotplug.h"
++static inline __attribute__((always_inline)) void pgdat_resize_lock(struct pglist_data *p, unsigned long *f) {}
++static inline __attribute__((always_inline)) void pgdat_resize_unlock(struct pglist_data *p, unsigned long *f) {}
++static inline __attribute__((always_inline)) void pgdat_resize_init(struct pglist_data *pgdat) {}
++
++static inline __attribute__((always_inline)) unsigned zone_span_seqbegin(struct zone *zone)
++{
++ return 0;
++}
++static inline __attribute__((always_inline)) int zone_span_seqretry(struct zone *zone, unsigned iv)
++{
++ return 0;
++}
++static inline __attribute__((always_inline)) void zone_span_writelock(struct zone *zone) {}
++static inline __attribute__((always_inline)) void zone_span_writeunlock(struct zone *zone) {}
++static inline __attribute__((always_inline)) void zone_seqlock_init(struct zone *zone) {}
++
++static inline __attribute__((always_inline)) int mhp_notimplemented(const char *func)
++{
++ printk("<4>" "%s() called, with CONFIG_MEMORY_HOTPLUG disabled\n", func);
++ dump_stack();
++ return -38;
++}
++
++static inline __attribute__((always_inline)) void register_page_bootmem_info_node(struct pglist_data *pgdat)
++{
++}
++
++
++
++
++
++
++
++extern int walk_memory_resource(unsigned long start_pfn,
++   unsigned long nr_pages, void *arg,
++   int (*func)(unsigned long, unsigned long, void *));
++
++
++
++
++
++
++static inline __attribute__((always_inline)) int is_mem_section_removable(unsigned long pfn,
++     unsigned long nr_pages)
++{
++ return 0;
++}
++
++
++extern int add_memory(int nid, u64 start, u64 size);
++extern int arch_add_memory(int nid, u64 start, u64 size);
++extern int remove_memory(u64 start, u64 size);
++extern int sparse_add_one_section(struct zone *zone, unsigned long start_pfn,
++        int nr_pages);
++extern void sparse_remove_one_section(struct zone *zone, struct mem_section *ms);
++extern struct page *sparse_decode_mem_map(unsigned long coded_mem_map,
++       unsigned long pnum);
++# 561 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h" 2
++
++void get_zone_counts(unsigned long *active, unsigned long *inactive,
++   unsigned long *free);
++void build_all_zonelists(void);
++void wakeup_kswapd(struct zone *zone, int order);
++int zone_watermark_ok(struct zone *z, int order, unsigned long mark,
++  int classzone_idx, int alloc_flags);
++enum memmap_context {
++ MEMMAP_EARLY,
++ MEMMAP_HOTPLUG,
++};
++extern int init_currently_empty_zone(struct zone *zone, unsigned long start_pfn,
++         unsigned long size,
++         enum memmap_context context);
++
++
++
++
++static inline __attribute__((always_inline)) void memory_present(int nid, unsigned long start, unsigned long end) {}
++# 591 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++static inline __attribute__((always_inline)) int populated_zone(struct zone *zone)
++{
++ return (!!zone->present_pages);
++}
++
++extern int movable_zone;
++
++static inline __attribute__((always_inline)) int zone_movable_is_highmem(void)
++{
++
++ return movable_zone == ZONE_HIGHMEM;
++
++
++
++}
++
++static inline __attribute__((always_inline)) int is_highmem_idx(enum zone_type idx)
++{
++
++ return (idx == ZONE_HIGHMEM ||
++  (idx == ZONE_MOVABLE && zone_movable_is_highmem()));
++
++
++
++}
++
++static inline __attribute__((always_inline)) int is_normal_idx(enum zone_type idx)
++{
++ return (idx == ZONE_NORMAL);
++}
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) int is_highmem(struct zone *zone)
++{
++
++ int zone_off = (char *)zone - (char *)zone->zone_pgdat->node_zones;
++ return zone_off == ZONE_HIGHMEM * sizeof(*zone) ||
++        (zone_off == ZONE_MOVABLE * sizeof(*zone) &&
++  zone_movable_is_highmem());
++
++
++
++}
++
++static inline __attribute__((always_inline)) int is_normal(struct zone *zone)
++{
++ return zone == zone->zone_pgdat->node_zones + ZONE_NORMAL;
++}
++
++static inline __attribute__((always_inline)) int is_dma32(struct zone *zone)
++{
++
++
++
++ return 0;
++
++}
++
++static inline __attribute__((always_inline)) int is_dma(struct zone *zone)
++{
++
++ return zone == zone->zone_pgdat->node_zones + ZONE_DMA;
++
++
++
++}
++
++
++struct ctl_table;
++struct file;
++int min_free_kbytes_sysctl_handler(struct ctl_table *, int, struct file *,
++     void *, size_t *, loff_t *);
++extern int sysctl_lowmem_reserve_ratio[4 -1];
++int lowmem_reserve_ratio_sysctl_handler(struct ctl_table *, int, struct file *,
++     void *, size_t *, loff_t *);
++int percpu_pagelist_fraction_sysctl_handler(struct ctl_table *, int, struct file *,
++     void *, size_t *, loff_t *);
++int sysctl_min_unmapped_ratio_sysctl_handler(struct ctl_table *, int,
++   struct file *, void *, size_t *, loff_t *);
++int sysctl_min_slab_ratio_sysctl_handler(struct ctl_table *, int,
++   struct file *, void *, size_t *, loff_t *);
++
++extern int numa_zonelist_order_handler(struct ctl_table *, int,
++   struct file *, void *, size_t *, loff_t *);
++extern char numa_zonelist_order[];
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h" 1
++# 33 "/d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/smp.h" 1
++# 13 "/d/kernels/linux-2.6.27.10-clickport/include/linux/smp.h"
++extern void cpu_idle(void);
++
++struct call_single_data {
++ struct list_head list;
++ void (*func) (void *info);
++ void *info;
++ unsigned int flags;
++};
++
++
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/smp.h" 1
++# 12 "/d/kernels/linux-2.6.27.10-clickport/include/asm/smp.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/mpspec.h" 1
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/mpspec_def.h" 1
++# 27 "/d/kernels/linux-2.6.27.10-clickport/include/asm/mpspec_def.h"
++struct intel_mp_floating {
++ char mpf_signature[4];
++ unsigned int mpf_physptr;
++ unsigned char mpf_length;
++ unsigned char mpf_specification;
++ unsigned char mpf_checksum;
++ unsigned char mpf_feature1;
++ unsigned char mpf_feature2;
++ unsigned char mpf_feature3;
++ unsigned char mpf_feature4;
++ unsigned char mpf_feature5;
++};
++
++
++
++struct mp_config_table {
++ char mpc_signature[4];
++ unsigned short mpc_length;
++ char mpc_spec;
++ char mpc_checksum;
++ char mpc_oem[8];
++ char mpc_productid[12];
++ unsigned int mpc_oemptr;
++ unsigned short mpc_oemsize;
++ unsigned short mpc_oemcount;
++ unsigned int mpc_lapic;
++ unsigned int reserved;
++};
++# 73 "/d/kernels/linux-2.6.27.10-clickport/include/asm/mpspec_def.h"
++struct mpc_config_processor {
++ unsigned char mpc_type;
++ unsigned char mpc_apicid;
++ unsigned char mpc_apicver;
++ unsigned char mpc_cpuflag;
++ unsigned int mpc_cpufeature;
++ unsigned int mpc_featureflag;
++ unsigned int mpc_reserved[2];
++};
++
++struct mpc_config_bus {
++ unsigned char mpc_type;
++ unsigned char mpc_busid;
++ unsigned char mpc_bustype[6];
++};
++# 111 "/d/kernels/linux-2.6.27.10-clickport/include/asm/mpspec_def.h"
++struct mpc_config_ioapic {
++ unsigned char mpc_type;
++ unsigned char mpc_apicid;
++ unsigned char mpc_apicver;
++ unsigned char mpc_flags;
++ unsigned int mpc_apicaddr;
++};
++
++struct mpc_config_intsrc {
++ unsigned char mpc_type;
++ unsigned char mpc_irqtype;
++ unsigned short mpc_irqflag;
++ unsigned char mpc_srcbus;
++ unsigned char mpc_srcbusirq;
++ unsigned char mpc_dstapic;
++ unsigned char mpc_dstirq;
++};
++
++enum mp_irq_source_types {
++ mp_INT = 0,
++ mp_NMI = 1,
++ mp_SMI = 2,
++ mp_ExtINT = 3
++};
++
++
++
++
++
++
++
++struct mpc_config_lintsrc {
++ unsigned char mpc_type;
++ unsigned char mpc_irqtype;
++ unsigned short mpc_irqflag;
++ unsigned char mpc_srcbusid;
++ unsigned char mpc_srcbusirq;
++ unsigned char mpc_destapic;
++ unsigned char mpc_destapiclint;
++};
++
++
++
++struct mp_config_oemtable {
++ char oem_signature[4];
++ unsigned short oem_length;
++ char oem_rev;
++ char oem_checksum;
++ char mpc_oem[8];
++};
++# 174 "/d/kernels/linux-2.6.27.10-clickport/include/asm/mpspec_def.h"
++enum mp_bustype {
++ MP_BUS_ISA = 1,
++ MP_BUS_EISA,
++ MP_BUS_PCI,
++ MP_BUS_MCA,
++};
++# 7 "/d/kernels/linux-2.6.27.10-clickport/include/asm/mpspec.h" 2
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/mach-default/mach_mpspec.h" 1
++# 10 "/d/kernels/linux-2.6.27.10-clickport/include/asm/mpspec.h" 2
++
++extern unsigned int def_to_bigsmp;
++extern int apic_version[256];
++extern u8 apicid_2_node[];
++extern int pic_mode;
++# 32 "/d/kernels/linux-2.6.27.10-clickport/include/asm/mpspec.h"
++extern void early_find_smp_config(void);
++extern void early_get_smp_config(void);
++
++
++
++
++
++extern unsigned long mp_bus_not_pci[(((256) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))];
++
++extern unsigned int boot_cpu_physical_apicid;
++extern unsigned int max_physical_apicid;
++extern int smp_found_config;
++extern int mpc_default_type;
++extern unsigned long mp_lapic_addr;
++
++extern void find_smp_config(void);
++extern void get_smp_config(void);
++
++extern void early_reserve_e820_mpc_new(void);
++
++
++
++
++void __attribute__ ((__section__(".cpuinit.text"))) generic_processor_info(int apicid, int version);
++
++extern void mp_register_ioapic(int id, u32 address, u32 gsi_base);
++extern void mp_override_legacy_irq(u8 bus_irq, u8 polarity, u8 trigger,
++       u32 gsi);
++extern void mp_config_acpi_legacy_irqs(void);
++extern int mp_register_gsi(u32 gsi, int edge_level, int active_high_low);
++
++extern int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin,
++    u32 gsi, int triggering, int polarity);
++# 77 "/d/kernels/linux-2.6.27.10-clickport/include/asm/mpspec.h"
++struct physid_mask {
++ unsigned long mask[(((256) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))];
++};
++
++typedef struct physid_mask physid_mask_t;
++# 133 "/d/kernels/linux-2.6.27.10-clickport/include/asm/mpspec.h"
++static inline __attribute__((always_inline)) void physid_set_mask_of_physid(int physid, physid_mask_t *map)
++{
++ bitmap_zero((*map).mask, 256);
++ set_bit(physid, (*map).mask);
++}
++
++
++
++
++extern physid_mask_t phys_cpu_present_map;
++# 13 "/d/kernels/linux-2.6.27.10-clickport/include/asm/smp.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/apic.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/pm.h" 1
++# 29 "/d/kernels/linux-2.6.27.10-clickport/include/linux/pm.h"
++extern void (*pm_idle)(void);
++extern void (*pm_power_off)(void);
++extern void (*pm_power_off_prepare)(void);
++
++
++
++
++
++struct device;
++
++typedef struct pm_message {
++ int event;
++} pm_message_t;
++# 145 "/d/kernels/linux-2.6.27.10-clickport/include/linux/pm.h"
++struct pm_ops {
++ int (*prepare)(struct device *dev);
++ void (*complete)(struct device *dev);
++ int (*suspend)(struct device *dev);
++ int (*resume)(struct device *dev);
++ int (*freeze)(struct device *dev);
++ int (*thaw)(struct device *dev);
++ int (*poweroff)(struct device *dev);
++ int (*restore)(struct device *dev);
++};
++# 203 "/d/kernels/linux-2.6.27.10-clickport/include/linux/pm.h"
++struct pm_ext_ops {
++ struct pm_ops base;
++ int (*suspend_noirq)(struct device *dev);
++ int (*resume_noirq)(struct device *dev);
++ int (*freeze_noirq)(struct device *dev);
++ int (*thaw_noirq)(struct device *dev);
++ int (*poweroff_noirq)(struct device *dev);
++ int (*restore_noirq)(struct device *dev);
++};
++# 334 "/d/kernels/linux-2.6.27.10-clickport/include/linux/pm.h"
++enum dpm_state {
++ DPM_INVALID,
++ DPM_ON,
++ DPM_PREPARING,
++ DPM_RESUMING,
++ DPM_SUSPENDING,
++ DPM_OFF,
++ DPM_OFF_IRQ,
++};
++
++struct dev_pm_info {
++ pm_message_t power_state;
++ unsigned can_wakeup:1;
++ unsigned should_wakeup:1;
++ enum dpm_state status;
++
++ struct list_head entry;
++
++};
++# 409 "/d/kernels/linux-2.6.27.10-clickport/include/linux/pm.h"
++extern void device_pm_lock(void);
++extern void device_power_up(pm_message_t state);
++extern void device_resume(pm_message_t state);
++
++extern void device_pm_unlock(void);
++extern int device_power_down(pm_message_t state);
++extern int device_suspend(pm_message_t state);
++extern int device_prepare_suspend(pm_message_t state);
++
++extern void __suspend_report_result(const char *function, void *fn, int ret);
++# 440 "/d/kernels/linux-2.6.27.10-clickport/include/linux/pm.h"
++extern unsigned int pm_flags;
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/asm/apic.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/delay.h" 1
++# 12 "/d/kernels/linux-2.6.27.10-clickport/include/linux/delay.h"
++extern unsigned long loops_per_jiffy;
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/delay.h" 1
++# 11 "/d/kernels/linux-2.6.27.10-clickport/include/asm/delay.h"
++extern void __bad_udelay(void);
++extern void __bad_ndelay(void);
++
++extern void __udelay(unsigned long usecs);
++extern void __ndelay(unsigned long nsecs);
++extern void __const_udelay(unsigned long xloops);
++extern void __delay(unsigned long loops);
++# 29 "/d/kernels/linux-2.6.27.10-clickport/include/asm/delay.h"
++void use_tsc_delay(void);
++# 15 "/d/kernels/linux-2.6.27.10-clickport/include/linux/delay.h" 2
++# 44 "/d/kernels/linux-2.6.27.10-clickport/include/linux/delay.h"
++extern unsigned long lpj_fine;
++void calibrate_delay(void);
++void msleep(unsigned int msecs);
++unsigned long msleep_interruptible(unsigned int msecs);
++
++static inline __attribute__((always_inline)) void ssleep(unsigned int seconds)
++{
++ msleep(seconds * 1000);
++}
++# 6 "/d/kernels/linux-2.6.27.10-clickport/include/asm/apic.h" 2
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap.h" 1
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap_32.h" 1
++# 22 "/d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap_32.h"
++extern unsigned long __FIXADDR_TOP;
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h" 1
++# 26 "/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/acpi/pdc_intel.h" 1
++# 27 "/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/numa.h" 1
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/numa_32.h" 1
++
++
++
++extern int pxm_to_nid(int pxm);
++extern void numa_remove_cpu(int cpu);
++# 3 "/d/kernels/linux-2.6.27.10-clickport/include/asm/numa.h" 2
++# 29 "/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/mmu.h" 1
++# 13 "/d/kernels/linux-2.6.27.10-clickport/include/asm/mmu.h"
++typedef struct {
++ void *ldt;
++
++
++
++ int size;
++ struct mutex lock;
++ void *vdso;
++} mm_context_t;
++
++
++void leave_mm(int cpu);
++# 31 "/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h" 2
++# 57 "/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h"
++int __acpi_acquire_global_lock(unsigned int *lock);
++int __acpi_release_global_lock(unsigned int *lock);
++# 83 "/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h"
++extern int acpi_lapic;
++extern int acpi_ioapic;
++extern int acpi_noirq;
++extern int acpi_strict;
++extern int acpi_disabled;
++extern int acpi_ht;
++extern int acpi_pci_disabled;
++extern int acpi_skip_timer_override;
++extern int acpi_use_timer_override;
++
++extern u8 acpi_sci_flags;
++extern int acpi_sci_override_gsi;
++void acpi_pic_sci_set_trigger(unsigned int, u16);
++
++static inline __attribute__((always_inline)) void disable_acpi(void)
++{
++ acpi_disabled = 1;
++ acpi_ht = 0;
++ acpi_pci_disabled = 1;
++ acpi_noirq = 1;
++}
++
++
++
++
++extern int acpi_gsi_to_irq(u32 gsi, unsigned int *irq);
++
++static inline __attribute__((always_inline)) void acpi_noirq_set(void) { acpi_noirq = 1; }
++static inline __attribute__((always_inline)) void acpi_disable_pci(void)
++{
++ acpi_pci_disabled = 1;
++ acpi_noirq_set();
++}
++extern int acpi_irq_balance_set(char *str);
++
++
++extern int acpi_save_state_mem(void);
++extern void acpi_restore_state_mem(void);
++
++extern unsigned long acpi_wakeup_address;
++
++
++extern void acpi_reserve_bootmem(void);
++
++
++
++
++static inline __attribute__((always_inline)) unsigned int acpi_processor_cstate_check(unsigned int max_cstate)
++{
++
++
++
++
++
++
++ if (boot_cpu_data.x86 == 0x0F &&
++     boot_cpu_data.x86_vendor == 2 &&
++     boot_cpu_data.x86_model <= 0x05 &&
++     boot_cpu_data.x86_mask < 0x0A)
++  return 1;
++ else if ((__builtin_constant_p((3*32+21)) && ( ((((3*32+21))>>5)==0 && (1UL<<(((3*32+21))&31) & ((1<<((0*32+ 0) & 31))|0|0|0| 0|0|0|(1<<((0*32+15) & 31))| 0|0))) || ((((3*32+21))>>5)==1 && (1UL<<(((3*32+21))&31) & (0|0))) || ((((3*32+21))>>5)==2 && (1UL<<(((3*32+21))&31) & 0)) || ((((3*32+21))>>5)==3 && (1UL<<(((3*32+21))&31) & (0))) || ((((3*32+21))>>5)==4 && (1UL<<(((3*32+21))&31) & 0)) || ((((3*32+21))>>5)==5 && (1UL<<(((3*32+21))&31) & 0)) || ((((3*32+21))>>5)==6 && (1UL<<(((3*32+21))&31) & 0)) || ((((3*32+21))>>5)==7 && (1UL<<(((3*32+21))&31) & 0)) ) ? 1 : (__builtin_constant_p(((3*32+21))) ? constant_test_bit(((3*32+21)), ((unsigned long *)((&boot_cpu_data)->x86_capability))) : variable_test_bit(((3*32+21)), ((unsigned long *)((&boot_cpu_data)->x86_capability))))))
++  return 1;
++ else
++  return max_cstate;
++}
++# 161 "/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h"
++struct bootnode;
++# 170 "/d/kernels/linux-2.6.27.10-clickport/include/asm/acpi.h"
++static inline __attribute__((always_inline)) void acpi_fake_nodes(const struct bootnode *fake_nodes,
++       int num_nodes)
++{
++}
++# 29 "/d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap_32.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/apicdef.h" 1
++# 159 "/d/kernels/linux-2.6.27.10-clickport/include/asm/apicdef.h"
++struct local_apic {
++
++        struct { unsigned int __reserved[4]; } __reserved_01;
++
++        struct { unsigned int __reserved[4]; } __reserved_02;
++
++        struct {
++  unsigned int __reserved_1 : 24,
++   phys_apic_id : 4,
++   __reserved_2 : 4;
++  unsigned int __reserved[3];
++ } id;
++
++        const
++ struct {
++  unsigned int version : 8,
++   __reserved_1 : 8,
++   max_lvt : 8,
++   __reserved_2 : 8;
++  unsigned int __reserved[3];
++ } version;
++
++        struct { unsigned int __reserved[4]; } __reserved_03;
++
++        struct { unsigned int __reserved[4]; } __reserved_04;
++
++        struct { unsigned int __reserved[4]; } __reserved_05;
++
++        struct { unsigned int __reserved[4]; } __reserved_06;
++
++        struct {
++  unsigned int priority : 8,
++   __reserved_1 : 24;
++  unsigned int __reserved_2[3];
++ } tpr;
++
++        const
++ struct {
++  unsigned int priority : 8,
++   __reserved_1 : 24;
++  unsigned int __reserved_2[3];
++ } apr;
++
++        const
++ struct {
++  unsigned int priority : 8,
++   __reserved_1 : 24;
++  unsigned int __reserved_2[3];
++ } ppr;
++
++        struct {
++  unsigned int eoi;
++  unsigned int __reserved[3];
++ } eoi;
++
++        struct { unsigned int __reserved[4]; } __reserved_07;
++
++        struct {
++  unsigned int __reserved_1 : 24,
++   logical_dest : 8;
++  unsigned int __reserved_2[3];
++ } ldr;
++
++        struct {
++  unsigned int __reserved_1 : 28,
++   model : 4;
++  unsigned int __reserved_2[3];
++ } dfr;
++
++        struct {
++  unsigned int spurious_vector : 8,
++   apic_enabled : 1,
++   focus_cpu : 1,
++   __reserved_2 : 22;
++  unsigned int __reserved_3[3];
++ } svr;
++
++        struct {
++         unsigned int bitfield;
++  unsigned int __reserved[3];
++ } isr [8];
++
++        struct {
++         unsigned int bitfield;
++  unsigned int __reserved[3];
++ } tmr [8];
++
++        struct {
++         unsigned int bitfield;
++  unsigned int __reserved[3];
++ } irr [8];
++
++        union {
++  struct {
++   unsigned int send_cs_error : 1,
++    receive_cs_error : 1,
++    send_accept_error : 1,
++    receive_accept_error : 1,
++    __reserved_1 : 1,
++    send_illegal_vector : 1,
++    receive_illegal_vector : 1,
++    illegal_register_address : 1,
++    __reserved_2 : 24;
++   unsigned int __reserved_3[3];
++  } error_bits;
++  struct {
++   unsigned int errors;
++   unsigned int __reserved_3[3];
++  } all_errors;
++ } esr;
++
++        struct { unsigned int __reserved[4]; } __reserved_08;
++
++        struct { unsigned int __reserved[4]; } __reserved_09;
++
++        struct { unsigned int __reserved[4]; } __reserved_10;
++
++        struct { unsigned int __reserved[4]; } __reserved_11;
++
++        struct { unsigned int __reserved[4]; } __reserved_12;
++
++        struct { unsigned int __reserved[4]; } __reserved_13;
++
++        struct { unsigned int __reserved[4]; } __reserved_14;
++
++        struct {
++  unsigned int vector : 8,
++   delivery_mode : 3,
++   destination_mode : 1,
++   delivery_status : 1,
++   __reserved_1 : 1,
++   level : 1,
++   trigger : 1,
++   __reserved_2 : 2,
++   shorthand : 2,
++   __reserved_3 : 12;
++  unsigned int __reserved_4[3];
++ } icr1;
++
++        struct {
++  union {
++   unsigned int __reserved_1 : 24,
++    phys_dest : 4,
++    __reserved_2 : 4;
++   unsigned int __reserved_3 : 24,
++    logical_dest : 8;
++  } dest;
++  unsigned int __reserved_4[3];
++ } icr2;
++
++        struct {
++  unsigned int vector : 8,
++   __reserved_1 : 4,
++   delivery_status : 1,
++   __reserved_2 : 3,
++   mask : 1,
++   timer_mode : 1,
++   __reserved_3 : 14;
++  unsigned int __reserved_4[3];
++ } lvt_timer;
++
++        struct {
++  unsigned int vector : 8,
++   delivery_mode : 3,
++   __reserved_1 : 1,
++   delivery_status : 1,
++   __reserved_2 : 3,
++   mask : 1,
++   __reserved_3 : 15;
++  unsigned int __reserved_4[3];
++ } lvt_thermal;
++
++        struct {
++  unsigned int vector : 8,
++   delivery_mode : 3,
++   __reserved_1 : 1,
++   delivery_status : 1,
++   __reserved_2 : 3,
++   mask : 1,
++   __reserved_3 : 15;
++  unsigned int __reserved_4[3];
++ } lvt_pc;
++
++        struct {
++  unsigned int vector : 8,
++   delivery_mode : 3,
++   __reserved_1 : 1,
++   delivery_status : 1,
++   polarity : 1,
++   remote_irr : 1,
++   trigger : 1,
++   mask : 1,
++   __reserved_2 : 15;
++  unsigned int __reserved_3[3];
++ } lvt_lint0;
++
++        struct {
++  unsigned int vector : 8,
++   delivery_mode : 3,
++   __reserved_1 : 1,
++   delivery_status : 1,
++   polarity : 1,
++   remote_irr : 1,
++   trigger : 1,
++   mask : 1,
++   __reserved_2 : 15;
++  unsigned int __reserved_3[3];
++ } lvt_lint1;
++
++        struct {
++  unsigned int vector : 8,
++   __reserved_1 : 4,
++   delivery_status : 1,
++   __reserved_2 : 3,
++   mask : 1,
++   __reserved_3 : 15;
++  unsigned int __reserved_4[3];
++ } lvt_error;
++
++        struct {
++  unsigned int initial_count;
++  unsigned int __reserved_2[3];
++ } timer_icr;
++
++        const
++ struct {
++  unsigned int curr_count;
++  unsigned int __reserved_2[3];
++ } timer_ccr;
++
++        struct { unsigned int __reserved[4]; } __reserved_16;
++
++        struct { unsigned int __reserved[4]; } __reserved_17;
++
++        struct { unsigned int __reserved[4]; } __reserved_18;
++
++        struct { unsigned int __reserved[4]; } __reserved_19;
++
++        struct {
++  unsigned int divisor : 4,
++   __reserved_1 : 28;
++  unsigned int __reserved_2[3];
++ } timer_dcr;
++
++        struct { unsigned int __reserved[4]; } __reserved_20;
++
++} __attribute__ ((packed));
++# 30 "/d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap_32.h" 2
++# 54 "/d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap_32.h"
++enum fixed_addresses {
++ FIX_HOLE,
++ FIX_VDSO,
++ FIX_DBGP_BASE,
++ FIX_EARLYCON_MEM_BASE,
++
++ FIX_APIC_BASE,
++
++
++ FIX_IO_APIC_BASE_0,
++ FIX_IO_APIC_BASE_END = FIX_IO_APIC_BASE_0 + 64 -1,
++# 76 "/d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap_32.h"
++ FIX_CYCLONE_TIMER,
++
++
++ FIX_KMAP_BEGIN,
++ FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*32)-1,
++
++
++ FIX_PCIE_MCFG,
++
++
++ FIX_PARAVIRT_BOOTMAP,
++
++ __end_of_permanent_fixed_addresses,
++# 98 "/d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap_32.h"
++ FIX_BTMAP_END = __end_of_permanent_fixed_addresses + 256 -
++   (__end_of_permanent_fixed_addresses & 255),
++ FIX_BTMAP_BEGIN = FIX_BTMAP_END + 64*4 - 1,
++ FIX_WP_TEST,
++
++ FIX_ACPI_BEGIN,
++ FIX_ACPI_END = FIX_ACPI_BEGIN + 4 - 1,
++
++
++
++
++ __end_of_fixed_addresses
++};
++
++extern void reserve_top_address(unsigned long reserve);
++# 6 "/d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap.h" 2
++
++
++
++
++extern int fixmaps_set;
++
++void __native_set_fixmap(enum fixed_addresses idx, pte_t pte);
++void native_set_fixmap(enum fixed_addresses idx,
++         unsigned long phys, pgprot_t flags);
++# 39 "/d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap.h"
++extern void __this_fixmap_does_not_exist(void);
++
++
++
++
++
++
++static inline __attribute__((always_inline)) __attribute__((always_inline)) unsigned long fix_to_virt(const unsigned int idx)
++{
++# 57 "/d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap.h"
++ if (idx >= __end_of_fixed_addresses)
++  __this_fixmap_does_not_exist();
++
++ return (((unsigned long)__FIXADDR_TOP) - ((idx) << 12));
++}
++
++static inline __attribute__((always_inline)) unsigned long virt_to_fix(const unsigned long vaddr)
++{
++ do { if (__builtin_expect(!!(vaddr >= ((unsigned long)__FIXADDR_TOP) || vaddr < (((unsigned long)__FIXADDR_TOP) - (__end_of_permanent_fixed_addresses << 12))), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/asm/fixmap.h"), "i" (65), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++ return ((((unsigned long)__FIXADDR_TOP) - ((vaddr)&(~(((1UL) << 12)-1)))) >> 12);
++}
++# 9 "/d/kernels/linux-2.6.27.10-clickport/include/asm/apic.h" 2
++# 34 "/d/kernels/linux-2.6.27.10-clickport/include/asm/apic.h"
++extern void generic_apic_probe(void);
++
++
++
++extern unsigned int apic_verbosity;
++extern int local_apic_timer_c2_ok;
++
++extern int ioapic_force;
++
++extern int disable_apic;
++# 56 "/d/kernels/linux-2.6.27.10-clickport/include/asm/apic.h"
++extern int is_vsmp_box(void);
++
++static inline __attribute__((always_inline)) void native_apic_write(unsigned long reg, u32 v)
++{
++ volatile u32 *addr = (volatile u32 *)((fix_to_virt(FIX_APIC_BASE)) + reg);
++
++ asm volatile ("661:\n\t" "movl %0, %1" "\n662:\n" ".section .altinstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "661b\n" " " ".long" " " "663f\n" "    .byte %c[feat]\n" "     .byte 662b-661b\n" "    .byte 664f-663f\n" ".previous\n" ".section .altinstr_replacement,\"ax\"\n" "663:\n\t" "xchgl %0, %1" "\n664:\n" ".previous" : "=r" (v), "=m" (*addr) : [feat] "i" ((3*32+19)), "0" (v), "m" (*addr));
++
++
++}
++
++static inline __attribute__((always_inline)) u32 native_apic_read(unsigned long reg)
++{
++ return *((volatile u32 *)((fix_to_virt(FIX_APIC_BASE)) + reg));
++}
++
++extern void apic_wait_icr_idle(void);
++extern u32 safe_apic_wait_icr_idle(void);
++extern int get_physical_broadcast(void);
++
++static inline __attribute__((always_inline)) void ack_APIC_irq(void)
++{
++# 86 "/d/kernels/linux-2.6.27.10-clickport/include/asm/apic.h"
++ apic_write(0xB0, 0);
++}
++
++extern int lapic_get_maxlvt(void);
++extern void clear_local_APIC(void);
++extern void connect_bsp_APIC(void);
++extern void disconnect_bsp_APIC(int virt_wire_setup);
++extern void disable_local_APIC(void);
++extern void lapic_shutdown(void);
++extern int verify_local_APIC(void);
++extern void cache_APIC_registers(void);
++extern void sync_Arb_IDs(void);
++extern void init_bsp_APIC(void);
++extern void setup_local_APIC(void);
++extern void end_local_APIC_setup(void);
++extern void init_apic_mappings(void);
++extern void setup_boot_APIC_clock(void);
++extern void setup_secondary_APIC_clock(void);
++extern int APIC_init_uniprocessor(void);
++extern void enable_NMI_through_LVT0(void);
++# 114 "/d/kernels/linux-2.6.27.10-clickport/include/asm/apic.h"
++static inline __attribute__((always_inline)) int apic_is_clustered_box(void)
++{
++ return 0;
++}
++
++
++extern u8 setup_APIC_eilvt_mce(u8 vector, u8 msg_type, u8 mask);
++extern u8 setup_APIC_eilvt_ibs(u8 vector, u8 msg_type, u8 mask);
++# 14 "/d/kernels/linux-2.6.27.10-clickport/include/asm/smp.h" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/io_apic.h" 1
++# 26 "/d/kernels/linux-2.6.27.10-clickport/include/asm/io_apic.h"
++union IO_APIC_reg_00 {
++ u32 raw;
++ struct {
++  u32 __reserved_2 : 14,
++   LTS : 1,
++   delivery_type : 1,
++   __reserved_1 : 8,
++   ID : 8;
++ } __attribute__ ((packed)) bits;
++};
++
++union IO_APIC_reg_01 {
++ u32 raw;
++ struct {
++  u32 version : 8,
++   __reserved_2 : 7,
++   PRQ : 1,
++   entries : 8,
++   __reserved_1 : 8;
++ } __attribute__ ((packed)) bits;
++};
++
++union IO_APIC_reg_02 {
++ u32 raw;
++ struct {
++  u32 __reserved_2 : 24,
++   arbitration : 4,
++   __reserved_1 : 4;
++ } __attribute__ ((packed)) bits;
++};
++
++union IO_APIC_reg_03 {
++ u32 raw;
++ struct {
++  u32 boot_DT : 1,
++   __reserved_1 : 31;
++ } __attribute__ ((packed)) bits;
++};
++
++enum ioapic_irq_destination_types {
++ dest_Fixed = 0,
++ dest_LowestPrio = 1,
++ dest_SMI = 2,
++ dest__reserved_1 = 3,
++ dest_NMI = 4,
++ dest_INIT = 5,
++ dest__reserved_2 = 6,
++ dest_ExtINT = 7
++};
++
++struct IO_APIC_route_entry {
++ __u32 vector : 8,
++  delivery_mode : 3,
++
++
++
++  dest_mode : 1,
++  delivery_status : 1,
++  polarity : 1,
++  irr : 1,
++  trigger : 1,
++  mask : 1,
++  __reserved_2 : 15;
++
++
++ union {
++  struct {
++   __u32 __reserved_1 : 24,
++    physical_dest : 4,
++    __reserved_2 : 4;
++  } physical;
++
++  struct {
++   __u32 __reserved_1 : 24,
++    logical_dest : 8;
++  } logical;
++ } dest;
++
++
++
++
++
++} __attribute__ ((packed));
++
++
++
++
++
++
++extern int nr_ioapics;
++extern int nr_ioapic_registers[64];
++
++
++
++
++
++
++
++struct mp_config_ioapic {
++ unsigned long mp_apicaddr;
++ unsigned int mp_apicid;
++ unsigned char mp_type;
++ unsigned char mp_apicver;
++ unsigned char mp_flags;
++};
++
++struct mp_config_intsrc {
++ unsigned int mp_dstapic;
++ unsigned char mp_type;
++ unsigned char mp_irqtype;
++ unsigned short mp_irqflag;
++ unsigned char mp_srcbus;
++ unsigned char mp_srcbusirq;
++ unsigned char mp_dstirq;
++};
++
++
++extern struct mp_config_ioapic mp_ioapics[64];
++
++
++extern int mp_irq_entries;
++
++
++extern struct mp_config_intsrc mp_irqs[256];
++
++
++extern int mpc_default_type;
++
++
++extern int sis_apic_bug;
++
++
++extern int skip_ioapic_setup;
++
++
++extern int timer_through_8259;
++
++static inline __attribute__((always_inline)) void disable_ioapic_setup(void)
++{
++ skip_ioapic_setup = 1;
++}
++# 176 "/d/kernels/linux-2.6.27.10-clickport/include/asm/io_apic.h"
++extern int io_apic_get_unique_id(int ioapic, int apic_id);
++extern int io_apic_get_version(int ioapic);
++extern int io_apic_get_redir_entries(int ioapic);
++extern int io_apic_set_pci_routing(int ioapic, int pin, int irq,
++       int edge_level, int active_high_low);
++
++
++extern int (*ioapic_renumber_irq)(int ioapic, int irq);
++extern void ioapic_init_mappings(void);
++# 16 "/d/kernels/linux-2.6.27.10-clickport/include/asm/smp.h" 2
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pda.h" 1
++# 11 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pda.h"
++struct x8664_pda {
++ struct task_struct *pcurrent;
++ unsigned long data_offset;
++
++ unsigned long kernelstack;
++ unsigned long oldrsp;
++ int irqcount;
++ unsigned int cpunumber;
++
++
++
++
++
++ char *irqstackptr;
++ short nodenumber;
++ short in_bootmem;
++ unsigned int __softirq_pending;
++ unsigned int __nmi_count;
++ short mmu_state;
++ short isidle;
++ struct mm_struct *active_mm;
++ unsigned apic_timer_irqs;
++ unsigned irq0_irqs;
++ unsigned irq_resched_count;
++ unsigned irq_call_count;
++ unsigned irq_tlb_count;
++ unsigned irq_thermal_count;
++ unsigned irq_threshold_count;
++ unsigned irq_spurious_count;
++} __attribute__((__aligned__((1 << (7)))));
++
++extern struct x8664_pda **_cpu_pda;
++extern void pda_init(int);
++
++
++
++
++
++
++
++extern void __bad_pda_field(void) __attribute__((noreturn));
++
++
++
++
++
++extern struct x8664_pda _proxy_pda;
++# 19 "/d/kernels/linux-2.6.27.10-clickport/include/asm/smp.h" 2
++
++
++extern cpumask_t cpu_callout_map;
++extern cpumask_t cpu_initialized;
++extern cpumask_t cpu_callin_map;
++
++extern void (*mtrr_hook)(void);
++extern void zap_low_mappings(void);
++
++extern int __attribute__ ((__section__(".cpuinit.text"))) get_local_pda(int cpu);
++
++extern int smp_num_siblings;
++extern unsigned int num_processors;
++extern cpumask_t cpu_initialized;
++
++extern __typeof__(cpumask_t) per_cpu__cpu_sibling_map;
++extern __typeof__(cpumask_t) per_cpu__cpu_core_map;
++extern __typeof__(u16) per_cpu__cpu_llc_id;
++
++extern __typeof__(u16) per_cpu__x86_cpu_to_apicid; extern __typeof__(u16) *x86_cpu_to_apicid_early_ptr; extern __typeof__(u16) x86_cpu_to_apicid_early_map[];
++extern __typeof__(u16) per_cpu__x86_bios_cpu_apicid; extern __typeof__(u16) *x86_bios_cpu_apicid_early_ptr; extern __typeof__(u16) x86_bios_cpu_apicid_early_map[];
++
++
++extern struct {
++ void *sp;
++ unsigned short ss;
++} stack_start;
++
++struct smp_ops {
++ void (*smp_prepare_boot_cpu)(void);
++ void (*smp_prepare_cpus)(unsigned max_cpus);
++ int (*cpu_up)(unsigned cpu);
++ void (*smp_cpus_done)(unsigned max_cpus);
++
++ void (*smp_send_stop)(void);
++ void (*smp_send_reschedule)(int cpu);
++
++ void (*send_call_func_ipi)(cpumask_t mask);
++ void (*send_call_func_single_ipi)(int cpu);
++};
++
++
++extern void set_cpu_sibling_map(int cpu);
++
++
++
++
++
++extern struct smp_ops smp_ops;
++
++static inline __attribute__((always_inline)) void smp_send_stop(void)
++{
++ smp_ops.smp_send_stop();
++}
++
++static inline __attribute__((always_inline)) void smp_prepare_boot_cpu(void)
++{
++ smp_ops.smp_prepare_boot_cpu();
++}
++
++static inline __attribute__((always_inline)) void smp_prepare_cpus(unsigned int max_cpus)
++{
++ smp_ops.smp_prepare_cpus(max_cpus);
++}
++
++static inline __attribute__((always_inline)) void smp_cpus_done(unsigned int max_cpus)
++{
++ smp_ops.smp_cpus_done(max_cpus);
++}
++
++static inline __attribute__((always_inline)) int __cpu_up(unsigned int cpu)
++{
++ return smp_ops.cpu_up(cpu);
++}
++
++static inline __attribute__((always_inline)) void smp_send_reschedule(int cpu)
++{
++ smp_ops.smp_send_reschedule(cpu);
++}
++
++static inline __attribute__((always_inline)) void arch_send_call_function_single_ipi(int cpu)
++{
++ smp_ops.send_call_func_single_ipi(cpu);
++}
++
++static inline __attribute__((always_inline)) void arch_send_call_function_ipi(cpumask_t mask)
++{
++ smp_ops.send_call_func_ipi(mask);
++}
++
++void native_smp_prepare_boot_cpu(void);
++void native_smp_prepare_cpus(unsigned int max_cpus);
++void native_smp_cpus_done(unsigned int max_cpus);
++int native_cpu_up(unsigned int cpunum);
++void native_send_call_func_ipi(cpumask_t mask);
++void native_send_call_func_single_ipi(int cpu);
++
++extern int __cpu_disable(void);
++extern void __cpu_die(unsigned int cpu);
++
++void smp_store_cpu_info(int id);
++
++
++
++static inline __attribute__((always_inline)) int num_booting_cpus(void)
++{
++ return __cpus_weight(&(cpu_callout_map), 32);
++}
++
++
++
++extern void prefill_possible_map(void);
++
++
++
++
++
++
++extern unsigned disabled_cpus __attribute__ ((__section__(".cpuinit.data")));
++
++
++
++
++
++
++
++extern __typeof__(int) per_cpu__cpu_number;
++
++extern int safe_smp_processor_id(void);
++# 168 "/d/kernels/linux-2.6.27.10-clickport/include/asm/smp.h"
++static inline __attribute__((always_inline)) int logical_smp_processor_id(void)
++{
++
++ return (((*(u32 *)((fix_to_virt(FIX_APIC_BASE)) + 0xD0)) >> 24) & 0xFFu);
++}
++
++
++static inline __attribute__((always_inline)) unsigned int read_apic_id(void)
++{
++ return *(u32 *)((fix_to_virt(FIX_APIC_BASE)) + 0x20);
++}
++# 187 "/d/kernels/linux-2.6.27.10-clickport/include/asm/smp.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/mach-default/mach_apicdef.h" 1
++# 12 "/d/kernels/linux-2.6.27.10-clickport/include/asm/mach-default/mach_apicdef.h"
++static inline __attribute__((always_inline)) unsigned get_apic_id(unsigned long x)
++{
++ unsigned int ver = ((apic_read(0x30)) & 0xFFu);
++ if (((ver) >= 0x14))
++  return (((x)>>24)&0xFF);
++ else
++  return (((x)>>24)&0xF);
++}
++# 188 "/d/kernels/linux-2.6.27.10-clickport/include/asm/smp.h" 2
++static inline __attribute__((always_inline)) int hard_smp_processor_id(void)
++{
++
++ return get_apic_id(read_apic_id());
++}
++# 204 "/d/kernels/linux-2.6.27.10-clickport/include/asm/smp.h"
++extern void cpu_uninit(void);
++# 29 "/d/kernels/linux-2.6.27.10-clickport/include/linux/smp.h" 2
++# 38 "/d/kernels/linux-2.6.27.10-clickport/include/linux/smp.h"
++extern void smp_send_stop(void);
++
++
++
++
++extern void smp_send_reschedule(int cpu);
++
++
++
++
++
++extern void smp_prepare_cpus(unsigned int max_cpus);
++
++
++
++
++extern int __cpu_up(unsigned int cpunum);
++
++
++
++
++extern void smp_cpus_done(unsigned int max_cpus);
++
++
++
++
++int smp_call_function(void(*func)(void *info), void *info, int wait);
++int smp_call_function_mask(cpumask_t mask, void(*func)(void *info), void *info,
++    int wait);
++int smp_call_function_single(int cpuid, void (*func) (void *info), void *info,
++    int wait);
++void __smp_call_function_single(int cpuid, struct call_single_data *data);
++
++
++
++
++
++void generic_smp_call_function_single_interrupt(void);
++void generic_smp_call_function_interrupt(void);
++void ipi_call_lock(void);
++void ipi_call_unlock(void);
++void ipi_call_lock_irq(void);
++void ipi_call_unlock_irq(void);
++
++
++
++
++
++int on_each_cpu(void (*func) (void *info), void *info, int wait);
++# 102 "/d/kernels/linux-2.6.27.10-clickport/include/linux/smp.h"
++void smp_prepare_boot_cpu(void);
++
++extern unsigned int setup_max_cpus;
++# 169 "/d/kernels/linux-2.6.27.10-clickport/include/linux/smp.h"
++void smp_setup_processor_id(void);
++# 34 "/d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h" 1
++# 189 "/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h"
++static inline __attribute__((always_inline)) const cpumask_t *_node_to_cpumask_ptr(int node)
++{
++ return &cpu_online_map;
++}
++static inline __attribute__((always_inline)) cpumask_t node_to_cpumask(int node)
++{
++ return cpu_online_map;
++}
++static inline __attribute__((always_inline)) int node_to_first_cpu(int node)
++{
++ return __first_cpu(&(cpu_online_map));
++}
++# 210 "/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/topology.h" 1
++# 211 "/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h" 2
++# 221 "/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h"
++extern cpumask_t cpu_coregroup_map(int cpu);
++# 233 "/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h"
++static inline __attribute__((always_inline)) void arch_fix_phys_package_id(int num, u32 slot)
++{
++}
++
++struct pci_bus;
++void set_pci_bus_resources_arch_default(struct pci_bus *b);
++# 249 "/d/kernels/linux-2.6.27.10-clickport/include/asm/topology.h"
++static inline __attribute__((always_inline)) int get_mp_bus_to_node(int busnum)
++{
++ return 0;
++}
++static inline __attribute__((always_inline)) void set_mp_bus_to_node(int busnum, int node)
++{
++}
++# 35 "/d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h" 2
++# 52 "/d/kernels/linux-2.6.27.10-clickport/include/linux/topology.h"
++void arch_update_cpu_topology(void);
++# 684 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h" 2
++
++
++
++
++
++
++
++extern struct pglist_data contig_page_data;
++# 701 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++extern struct pglist_data *first_online_pgdat(void);
++extern struct pglist_data *next_online_pgdat(struct pglist_data *pgdat);
++extern struct zone *next_zone(struct zone *zone);
++# 725 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++static inline __attribute__((always_inline)) struct zone *zonelist_zone(struct zoneref *zoneref)
++{
++ return zoneref->zone;
++}
++
++static inline __attribute__((always_inline)) int zonelist_zone_idx(struct zoneref *zoneref)
++{
++ return zoneref->zone_idx;
++}
++
++static inline __attribute__((always_inline)) int zonelist_node_idx(struct zoneref *zoneref)
++{
++
++
++
++
++ return 0;
++
++}
++# 758 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++struct zoneref *next_zones_zonelist(struct zoneref *z,
++     enum zone_type highest_zoneidx,
++     nodemask_t *nodes,
++     struct zone **zone);
++# 775 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++static inline __attribute__((always_inline)) struct zoneref *first_zones_zonelist(struct zonelist *zonelist,
++     enum zone_type highest_zoneidx,
++     nodemask_t *nodes,
++     struct zone **zone)
++{
++ return next_zones_zonelist(zonelist->_zonerefs, highest_zoneidx, nodes,
++        zone);
++}
++# 990 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mmzone.h"
++void memory_present(int nid, unsigned long start, unsigned long end);
++unsigned long __attribute__ ((__section__(".init.text"))) node_memmap_size_bytes(int, unsigned long, unsigned long);
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h" 2
++
++
++
++struct vm_area_struct;
++# 108 "/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h"
++static inline __attribute__((always_inline)) int allocflags_to_migratetype(gfp_t gfp_flags)
++{
++ ({ int __ret_warn_on = !!((gfp_flags & ((( gfp_t)0x80000u)|(( gfp_t)0x100000u))) == ((( gfp_t)0x80000u)|(( gfp_t)0x100000u))); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_on_slowpath("/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h", 110); __builtin_expect(!!(__ret_warn_on), 0); });
++
++ if (__builtin_expect(!!(page_group_by_mobility_disabled), 0))
++  return 0;
++
++
++ return (((gfp_flags & (( gfp_t)0x100000u)) != 0) << 1) |
++  ((gfp_flags & (( gfp_t)0x80000u)) != 0);
++}
++
++static inline __attribute__((always_inline)) enum zone_type gfp_zone(gfp_t flags)
++{
++
++ if (flags & (( gfp_t)0x01u))
++  return ZONE_DMA;
++
++
++
++
++
++ if ((flags & ((( gfp_t)0x02u) | (( gfp_t)0x100000u))) ==
++   ((( gfp_t)0x02u) | (( gfp_t)0x100000u)))
++  return ZONE_MOVABLE;
++
++ if (flags & (( gfp_t)0x02u))
++  return ZONE_HIGHMEM;
++
++ return ZONE_NORMAL;
++}
++# 147 "/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h"
++static inline __attribute__((always_inline)) int gfp_zonelist(gfp_t flags)
++{
++ if (0 && __builtin_expect(!!(flags & (( gfp_t)0x40000u)), 0))
++  return 1;
++
++ return 0;
++}
++# 164 "/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h"
++static inline __attribute__((always_inline)) struct zonelist *node_zonelist(int nid, gfp_t flags)
++{
++ return (&contig_page_data)->node_zonelists + gfp_zonelist(flags);
++}
++
++
++static inline __attribute__((always_inline)) void arch_free_page(struct page *page, int order) { }
++
++
++static inline __attribute__((always_inline)) void arch_alloc_page(struct page *page, int order) { }
++
++
++struct page *
++__alloc_pages_internal(gfp_t gfp_mask, unsigned int order,
++         struct zonelist *zonelist, nodemask_t *nodemask);
++
++static inline __attribute__((always_inline)) struct page *
++__alloc_pages(gfp_t gfp_mask, unsigned int order,
++  struct zonelist *zonelist)
++{
++ return __alloc_pages_internal(gfp_mask, order, zonelist, 0);
++}
++
++static inline __attribute__((always_inline)) struct page *
++__alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order,
++  struct zonelist *zonelist, nodemask_t *nodemask)
++{
++ return __alloc_pages_internal(gfp_mask, order, zonelist, nodemask);
++}
++
++
++static inline __attribute__((always_inline)) struct page *alloc_pages_node(int nid, gfp_t gfp_mask,
++      unsigned int order)
++{
++ if (__builtin_expect(!!(order >= 11), 0))
++  return 0;
++
++
++ if (nid < 0)
++  nid = 0;
++
++ return __alloc_pages(gfp_mask, order, node_zonelist(nid, gfp_mask));
++}
++# 228 "/d/kernels/linux-2.6.27.10-clickport/include/linux/gfp.h"
++extern unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order);
++extern unsigned long get_zeroed_page(gfp_t gfp_mask);
++
++void *alloc_pages_exact(size_t size, gfp_t gfp_mask);
++void free_pages_exact(void *virt, size_t size);
++
++
++
++
++
++
++
++extern void __free_pages(struct page *page, unsigned int order);
++extern void free_pages(unsigned long addr, unsigned int order);
++extern void free_hot_page(struct page *page);
++extern void free_cold_page(struct page *page);
++
++
++
++
++void page_alloc_init(void);
++void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp);
++void drain_all_pages(void);
++void drain_local_pages(void *dummy);
++# 23 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h" 2
++# 32 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kmod.h"
++extern int request_module(const char * name, ...) __attribute__ ((format (printf, 1, 2)));
++
++
++
++
++
++
++
++struct key;
++struct file;
++struct subprocess_info;
++
++
++struct subprocess_info *call_usermodehelper_setup(char *path, char **argv,
++        char **envp, gfp_t gfp_mask);
++
++
++void call_usermodehelper_setkeys(struct subprocess_info *info,
++     struct key *session_keyring);
++int call_usermodehelper_stdinpipe(struct subprocess_info *sub_info,
++      struct file **filp);
++void call_usermodehelper_setcleanup(struct subprocess_info *info,
++        void (*cleanup)(char **argv, char **envp));
++
++enum umh_wait {
++ UMH_NO_WAIT = -1,
++ UMH_WAIT_EXEC = 0,
++ UMH_WAIT_PROC = 1,
++};
++
++
++int call_usermodehelper_exec(struct subprocess_info *info, enum umh_wait wait);
++
++
++
++void call_usermodehelper_freeinfo(struct subprocess_info *info);
++
++static inline __attribute__((always_inline)) int
++call_usermodehelper(char *path, char **argv, char **envp, enum umh_wait wait)
++{
++ struct subprocess_info *info;
++ gfp_t gfp_mask = (wait == UMH_NO_WAIT) ? ((( gfp_t)0x20u)) : ((( gfp_t)0x10u) | (( gfp_t)0x40u) | (( gfp_t)0x80u));
++
++ info = call_usermodehelper_setup(path, argv, envp, gfp_mask);
++ if (info == 0)
++  return -12;
++ return call_usermodehelper_exec(info, wait);
++}
++
++static inline __attribute__((always_inline)) int
++call_usermodehelper_keys(char *path, char **argv, char **envp,
++    struct key *session_keyring, enum umh_wait wait)
++{
++ struct subprocess_info *info;
++ gfp_t gfp_mask = (wait == UMH_NO_WAIT) ? ((( gfp_t)0x20u)) : ((( gfp_t)0x10u) | (( gfp_t)0x40u) | (( gfp_t)0x80u));
++
++ info = call_usermodehelper_setup(path, argv, envp, gfp_mask);
++ if (info == 0)
++  return -12;
++
++ call_usermodehelper_setkeys(info, session_keyring);
++ return call_usermodehelper_exec(info, wait);
++}
++
++extern void usermodehelper_init(void);
++
++struct file;
++extern int call_usermodehelper_pipe(char *path, char *argv[], char *envp[],
++        struct file **filp);
++# 14 "/d/kernels/linux-2.6.27.10-clickport/include/linux/module.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h" 1
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/elf-em.h" 1
++# 6 "/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/elf.h" 1
++# 9 "/d/kernels/linux-2.6.27.10-clickport/include/asm/elf.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/user.h" 1
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/user_32.h" 1
++# 44 "/d/kernels/linux-2.6.27.10-clickport/include/asm/user_32.h"
++struct user_i387_struct {
++ long cwd;
++ long swd;
++ long twd;
++ long fip;
++ long fcs;
++ long foo;
++ long fos;
++ long st_space[20];
++};
++
++struct user_fxsr_struct {
++ unsigned short cwd;
++ unsigned short swd;
++ unsigned short twd;
++ unsigned short fop;
++ long fip;
++ long fcs;
++ long foo;
++ long fos;
++ long mxcsr;
++ long reserved;
++ long st_space[32];
++ long xmm_space[32];
++ long padding[56];
++};
++
++
++
++
++
++
++
++struct user_regs_struct {
++ unsigned long bx;
++ unsigned long cx;
++ unsigned long dx;
++ unsigned long si;
++ unsigned long di;
++ unsigned long bp;
++ unsigned long ax;
++ unsigned long ds;
++ unsigned long es;
++ unsigned long fs;
++ unsigned long gs;
++ unsigned long orig_ax;
++ unsigned long ip;
++ unsigned long cs;
++ unsigned long flags;
++ unsigned long sp;
++ unsigned long ss;
++};
++
++
++
++
++struct user{
++
++
++  struct user_regs_struct regs;
++
++  int u_fpvalid;
++
++  struct user_i387_struct i387;
++
++  unsigned long int u_tsize;
++  unsigned long int u_dsize;
++  unsigned long int u_ssize;
++  unsigned long start_code;
++  unsigned long start_stack;
++
++
++
++  long int signal;
++  int reserved;
++  unsigned long u_ar0;
++
++  struct user_i387_struct *u_fpstate;
++  unsigned long magic;
++  char u_comm[32];
++  int u_debugreg[8];
++};
++# 3 "/d/kernels/linux-2.6.27.10-clickport/include/asm/user.h" 2
++# 10 "/d/kernels/linux-2.6.27.10-clickport/include/asm/elf.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/auxvec.h" 1
++# 11 "/d/kernels/linux-2.6.27.10-clickport/include/asm/elf.h" 2
++
++typedef unsigned long elf_greg_t;
++
++
++typedef elf_greg_t elf_gregset_t[(sizeof(struct user_regs_struct) / sizeof(elf_greg_t))];
++
++typedef struct user_i387_struct elf_fpregset_t;
++
++
++
++typedef struct user_fxsr_struct elf_fpxregset_t;
++# 75 "/d/kernels/linux-2.6.27.10-clickport/include/asm/elf.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/vdso.h" 1
++# 19 "/d/kernels/linux-2.6.27.10-clickport/include/asm/vdso.h"
++extern const char VDSO32_PRELINK[];
++# 36 "/d/kernels/linux-2.6.27.10-clickport/include/asm/vdso.h"
++extern void* __kernel_sigreturn;
++extern void* __kernel_rt_sigreturn;
++
++
++
++
++
++extern const char vdso32_int80_start, vdso32_int80_end;
++extern const char vdso32_syscall_start, vdso32_syscall_end;
++extern const char vdso32_sysenter_start, vdso32_sysenter_end;
++# 76 "/d/kernels/linux-2.6.27.10-clickport/include/asm/elf.h" 2
++
++extern unsigned int vdso_enabled;
++# 89 "/d/kernels/linux-2.6.27.10-clickport/include/asm/elf.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h" 1
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/ldt.h" 1
++# 20 "/d/kernels/linux-2.6.27.10-clickport/include/asm/ldt.h"
++struct user_desc {
++ unsigned int entry_number;
++ unsigned int base_addr;
++ unsigned int limit;
++ unsigned int seg_32bit:1;
++ unsigned int contents:2;
++ unsigned int read_exec_only:1;
++ unsigned int limit_in_pages:1;
++ unsigned int seg_not_present:1;
++ unsigned int useable:1;
++
++
++
++};
++# 7 "/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h" 2
++
++
++
++static inline __attribute__((always_inline)) void fill_ldt(struct desc_struct *desc,
++       const struct user_desc *info)
++{
++ desc->limit0 = info->limit & 0x0ffff;
++ desc->base0 = info->base_addr & 0x0000ffff;
++
++ desc->base1 = (info->base_addr & 0x00ff0000) >> 16;
++ desc->type = (info->read_exec_only ^ 1) << 1;
++ desc->type |= info->contents << 2;
++ desc->s = 1;
++ desc->dpl = 0x3;
++ desc->p = info->seg_not_present ^ 1;
++ desc->limit = (info->limit & 0xf0000) >> 16;
++ desc->avl = info->useable;
++ desc->d = info->seg_32bit;
++ desc->g = info->limit_in_pages;
++ desc->base2 = (info->base_addr & 0xff000000) >> 24;
++}
++
++extern struct desc_ptr idt_descr;
++extern gate_desc idt_table[];
++
++struct gdt_page {
++ struct desc_struct gdt[32];
++} __attribute__((aligned(((1UL) << 12))));
++extern __typeof__(struct gdt_page) per_cpu__gdt_page;
++
++static inline __attribute__((always_inline)) struct desc_struct *get_cpu_gdt_table(unsigned int cpu)
++{
++ return (*({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((&per_cpu__gdt_page))); (typeof((&per_cpu__gdt_page))) (__ptr + (((__per_cpu_offset[cpu])))); })).gdt;
++}
++# 60 "/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h"
++static inline __attribute__((always_inline)) void pack_gate(gate_desc *gate, unsigned char type,
++        unsigned long base, unsigned dpl, unsigned flags,
++        unsigned short seg)
++{
++ gate->a = (seg << 16) | (base & 0xffff);
++ gate->b = (base & 0xffff0000) |
++    (((0x80 | type | (dpl << 5)) & 0xff) << 8);
++}
++
++
++
++static inline __attribute__((always_inline)) int desc_empty(const void *ptr)
++{
++ const u32 *desc = (const u32 *) ptr;
++ return !(desc[0] | desc[1]);
++}
++# 102 "/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h"
++static inline __attribute__((always_inline)) void native_write_idt_entry(gate_desc *idt, int entry,
++       const gate_desc *gate)
++{
++ (__builtin_constant_p((sizeof(*gate))) ? __constant_memcpy((&idt[entry]), (gate), (sizeof(*gate))) : __memcpy((&idt[entry]), (gate), (sizeof(*gate))));
++}
++
++static inline __attribute__((always_inline)) void native_write_ldt_entry(struct desc_struct *ldt, int entry,
++       const void *desc)
++{
++ (__builtin_constant_p((8)) ? __constant_memcpy((&ldt[entry]), (desc), (8)) : __memcpy((&ldt[entry]), (desc), (8)));
++}
++
++static inline __attribute__((always_inline)) void native_write_gdt_entry(struct desc_struct *gdt, int entry,
++       const void *desc, int type)
++{
++ unsigned int size;
++ switch (type) {
++ case DESC_TSS:
++  size = sizeof(tss_desc);
++  break;
++ case DESC_LDT:
++  size = sizeof(ldt_desc);
++  break;
++ default:
++  size = sizeof(struct desc_struct);
++  break;
++ }
++ (__builtin_constant_p((size)) ? __constant_memcpy((&gdt[entry]), (desc), (size)) : __memcpy((&gdt[entry]), (desc), (size)));
++}
++
++static inline __attribute__((always_inline)) void pack_descriptor(struct desc_struct *desc, unsigned long base,
++       unsigned long limit, unsigned char type,
++       unsigned char flags)
++{
++ desc->a = ((base & 0xffff) << 16) | (limit & 0xffff);
++ desc->b = (base & 0xff000000) | ((base & 0xff0000) >> 16) |
++  (limit & 0x000f0000) | ((type & 0xff) << 8) |
++  ((flags & 0xf) << 20);
++ desc->p = 1;
++}
++
++
++static inline __attribute__((always_inline)) void set_tssldt_descriptor(void *d, unsigned long addr,
++      unsigned type, unsigned size)
++{
++# 159 "/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h"
++ pack_descriptor((struct desc_struct *)d, addr, size, 0x80 | type, 0);
++
++}
++
++static inline __attribute__((always_inline)) void __set_tss_desc(unsigned cpu, unsigned int entry, void *addr)
++{
++ struct desc_struct *d = get_cpu_gdt_table(cpu);
++ tss_desc tss;
++# 175 "/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h"
++ set_tssldt_descriptor(&tss, (unsigned long)addr, DESC_TSS,
++         __builtin_offsetof(struct tss_struct,io_bitmap) + (65536/8) +
++         sizeof(unsigned long) - 1);
++ write_gdt_entry(d, entry, &tss, DESC_TSS);
++}
++
++
++
++static inline __attribute__((always_inline)) void native_set_ldt(const void *addr, unsigned int entries)
++{
++ if (__builtin_expect(!!(entries == 0), 1))
++  asm volatile("lldt %w0"::"q" (0));
++ else {
++  unsigned cpu = (({ typeof(per_cpu__cpu_number) ret__; switch (sizeof(per_cpu__cpu_number)) { case 1: asm("mov" "b ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__cpu_number)); break; case 2: asm("mov" "w ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__cpu_number)); break; case 4: asm("mov" "l ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__cpu_number)); break; default: __bad_percpu_size(); } ret__; }));
++  ldt_desc ldt;
++
++  set_tssldt_descriptor(&ldt, (unsigned long)addr, DESC_LDT,
++          entries * 8 - 1);
++  write_gdt_entry(get_cpu_gdt_table(cpu), (12 + 5),
++    &ldt, DESC_LDT);
++  asm volatile("lldt %w0"::"q" ((12 + 5)*8));
++ }
++}
++
++static inline __attribute__((always_inline)) void native_load_tr_desc(void)
++{
++ asm volatile("ltr %w0"::"q" ((12 + 4)*8));
++}
++
++static inline __attribute__((always_inline)) void native_load_gdt(const struct desc_ptr *dtr)
++{
++ asm volatile("lgdt %0"::"m" (*dtr));
++}
++
++static inline __attribute__((always_inline)) void native_load_idt(const struct desc_ptr *dtr)
++{
++ asm volatile("lidt %0"::"m" (*dtr));
++}
++
++static inline __attribute__((always_inline)) void native_store_gdt(struct desc_ptr *dtr)
++{
++ asm volatile("sgdt %0":"=m" (*dtr));
++}
++
++static inline __attribute__((always_inline)) void native_store_idt(struct desc_ptr *dtr)
++{
++ asm volatile("sidt %0":"=m" (*dtr));
++}
++
++static inline __attribute__((always_inline)) unsigned long native_store_tr(void)
++{
++ unsigned long tr;
++ asm volatile("str %0":"=r" (tr));
++ return tr;
++}
++
++static inline __attribute__((always_inline)) void native_load_tls(struct thread_struct *t, unsigned int cpu)
++{
++ unsigned int i;
++ struct desc_struct *gdt = get_cpu_gdt_table(cpu);
++
++ for (i = 0; i < 3; i++)
++  gdt[6 + i] = t->tls_array[i];
++}
++# 256 "/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h"
++static inline __attribute__((always_inline)) void clear_LDT(void)
++{
++ set_ldt(0, 0);
++}
++
++
++
++
++static inline __attribute__((always_inline)) void load_LDT_nolock(mm_context_t *pc)
++{
++ set_ldt(pc->ldt, pc->size);
++}
++
++static inline __attribute__((always_inline)) void load_LDT(mm_context_t *pc)
++{
++ do { } while (0);
++ load_LDT_nolock(pc);
++ do { } while (0);
++}
++
++static inline __attribute__((always_inline)) unsigned long get_desc_base(const struct desc_struct *desc)
++{
++ return desc->base0 | ((desc->base1) << 16) | ((desc->base2) << 24);
++}
++
++static inline __attribute__((always_inline)) unsigned long get_desc_limit(const struct desc_struct *desc)
++{
++ return desc->limit0 | (desc->limit << 16);
++}
++
++static inline __attribute__((always_inline)) void _set_gate(int gate, unsigned type, void *addr,
++        unsigned dpl, unsigned ist, unsigned seg)
++{
++ gate_desc s;
++ pack_gate(&s, type, (unsigned long)addr, dpl, ist, seg);
++
++
++
++
++ write_idt_entry(idt_table, gate, &s);
++}
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void set_intr_gate(unsigned int n, void *addr)
++{
++ do { if (__builtin_expect(!!((unsigned)n > 0xFF), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h"), "i" (306), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++ _set_gate(n, GATE_INTERRUPT, addr, 0, 0, ((12 + 0) * 8));
++}
++
++
++
++
++extern int first_system_vector;
++extern char system_vectors[];
++
++static inline __attribute__((always_inline)) void alloc_system_vector(int vector)
++{
++ if (system_vectors[vector] == 0) {
++  system_vectors[vector] = 1;
++  if (first_system_vector > vector)
++   first_system_vector = vector;
++ } else
++  do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h"), "i" (323), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0);
++}
++
++static inline __attribute__((always_inline)) void alloc_intr_gate(unsigned int n, void *addr)
++{
++ alloc_system_vector(n);
++ set_intr_gate(n, addr);
++}
++
++
++
++
++static inline __attribute__((always_inline)) void set_system_intr_gate(unsigned int n, void *addr)
++{
++ do { if (__builtin_expect(!!((unsigned)n > 0xFF), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h"), "i" (337), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++ _set_gate(n, GATE_INTERRUPT, addr, 0x3, 0, ((12 + 0) * 8));
++}
++
++static inline __attribute__((always_inline)) void set_trap_gate(unsigned int n, void *addr)
++{
++ do { if (__builtin_expect(!!((unsigned)n > 0xFF), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h"), "i" (343), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++ _set_gate(n, GATE_TRAP, addr, 0, 0, ((12 + 0) * 8));
++}
++
++static inline __attribute__((always_inline)) void set_system_gate(unsigned int n, void *addr)
++{
++ do { if (__builtin_expect(!!((unsigned)n > 0xFF), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h"), "i" (349), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++
++ _set_gate(n, GATE_TRAP, addr, 0x3, 0, ((12 + 0) * 8));
++
++
++
++}
++
++static inline __attribute__((always_inline)) void set_task_gate(unsigned int n, unsigned int gdt_entry)
++{
++ do { if (__builtin_expect(!!((unsigned)n > 0xFF), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h"), "i" (359), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++ _set_gate(n, GATE_TASK, (void *)0, 0, 0, (gdt_entry<<3));
++}
++
++static inline __attribute__((always_inline)) void set_intr_gate_ist(int n, void *addr, unsigned ist)
++{
++ do { if (__builtin_expect(!!((unsigned)n > 0xFF), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h"), "i" (365), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++ _set_gate(n, GATE_INTERRUPT, addr, 0, ist, ((12 + 0) * 8));
++}
++
++static inline __attribute__((always_inline)) void set_system_gate_ist(int n, void *addr, unsigned ist)
++{
++ do { if (__builtin_expect(!!((unsigned)n > 0xFF), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/asm/desc.h"), "i" (371), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++ _set_gate(n, GATE_INTERRUPT, addr, 0x3, ist, ((12 + 0) * 8));
++}
++# 90 "/d/kernels/linux-2.6.27.10-clickport/include/asm/elf.h" 2
++# 278 "/d/kernels/linux-2.6.27.10-clickport/include/asm/elf.h"
++struct task_struct;
++# 323 "/d/kernels/linux-2.6.27.10-clickport/include/asm/elf.h"
++struct linux_binprm;
++
++
++extern int arch_setup_additional_pages(struct linux_binprm *bprm,
++           int executable_stack);
++
++extern int syscall32_setup_pages(struct linux_binprm *, int exstack);
++
++
++extern unsigned long arch_randomize_brk(struct mm_struct *mm);
++# 8 "/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h" 2
++
++
++struct file;
++# 20 "/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h"
++typedef __u32 Elf32_Addr;
++typedef __u16 Elf32_Half;
++typedef __u32 Elf32_Off;
++typedef __s32 Elf32_Sword;
++typedef __u32 Elf32_Word;
++
++
++typedef __u64 Elf64_Addr;
++typedef __u16 Elf64_Half;
++typedef __s16 Elf64_SHalf;
++typedef __u64 Elf64_Off;
++typedef __s32 Elf64_Sword;
++typedef __u32 Elf64_Word;
++typedef __u64 Elf64_Xword;
++typedef __s64 Elf64_Sxword;
++# 127 "/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h"
++typedef struct dynamic{
++  Elf32_Sword d_tag;
++  union{
++    Elf32_Sword d_val;
++    Elf32_Addr d_ptr;
++  } d_un;
++} Elf32_Dyn;
++
++typedef struct {
++  Elf64_Sxword d_tag;
++  union {
++    Elf64_Xword d_val;
++    Elf64_Addr d_ptr;
++  } d_un;
++} Elf64_Dyn;
++# 150 "/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h"
++typedef struct elf32_rel {
++  Elf32_Addr r_offset;
++  Elf32_Word r_info;
++} Elf32_Rel;
++
++typedef struct elf64_rel {
++  Elf64_Addr r_offset;
++  Elf64_Xword r_info;
++} Elf64_Rel;
++
++typedef struct elf32_rela{
++  Elf32_Addr r_offset;
++  Elf32_Word r_info;
++  Elf32_Sword r_addend;
++} Elf32_Rela;
++
++typedef struct elf64_rela {
++  Elf64_Addr r_offset;
++  Elf64_Xword r_info;
++  Elf64_Sxword r_addend;
++} Elf64_Rela;
++
++typedef struct elf32_sym{
++  Elf32_Word st_name;
++  Elf32_Addr st_value;
++  Elf32_Word st_size;
++  unsigned char st_info;
++  unsigned char st_other;
++  Elf32_Half st_shndx;
++} Elf32_Sym;
++
++typedef struct elf64_sym {
++  Elf64_Word st_name;
++  unsigned char st_info;
++  unsigned char st_other;
++  Elf64_Half st_shndx;
++  Elf64_Addr st_value;
++  Elf64_Xword st_size;
++} Elf64_Sym;
++
++
++
++
++typedef struct elf32_hdr{
++  unsigned char e_ident[16];
++  Elf32_Half e_type;
++  Elf32_Half e_machine;
++  Elf32_Word e_version;
++  Elf32_Addr e_entry;
++  Elf32_Off e_phoff;
++  Elf32_Off e_shoff;
++  Elf32_Word e_flags;
++  Elf32_Half e_ehsize;
++  Elf32_Half e_phentsize;
++  Elf32_Half e_phnum;
++  Elf32_Half e_shentsize;
++  Elf32_Half e_shnum;
++  Elf32_Half e_shstrndx;
++} Elf32_Ehdr;
++
++typedef struct elf64_hdr {
++  unsigned char e_ident[16];
++  Elf64_Half e_type;
++  Elf64_Half e_machine;
++  Elf64_Word e_version;
++  Elf64_Addr e_entry;
++  Elf64_Off e_phoff;
++  Elf64_Off e_shoff;
++  Elf64_Word e_flags;
++  Elf64_Half e_ehsize;
++  Elf64_Half e_phentsize;
++  Elf64_Half e_phnum;
++  Elf64_Half e_shentsize;
++  Elf64_Half e_shnum;
++  Elf64_Half e_shstrndx;
++} Elf64_Ehdr;
++
++
++
++
++
++
++
++typedef struct elf32_phdr{
++  Elf32_Word p_type;
++  Elf32_Off p_offset;
++  Elf32_Addr p_vaddr;
++  Elf32_Addr p_paddr;
++  Elf32_Word p_filesz;
++  Elf32_Word p_memsz;
++  Elf32_Word p_flags;
++  Elf32_Word p_align;
++} Elf32_Phdr;
++
++typedef struct elf64_phdr {
++  Elf64_Word p_type;
++  Elf64_Word p_flags;
++  Elf64_Off p_offset;
++  Elf64_Addr p_vaddr;
++  Elf64_Addr p_paddr;
++  Elf64_Xword p_filesz;
++  Elf64_Xword p_memsz;
++  Elf64_Xword p_align;
++} Elf64_Phdr;
++# 289 "/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h"
++typedef struct {
++  Elf32_Word sh_name;
++  Elf32_Word sh_type;
++  Elf32_Word sh_flags;
++  Elf32_Addr sh_addr;
++  Elf32_Off sh_offset;
++  Elf32_Word sh_size;
++  Elf32_Word sh_link;
++  Elf32_Word sh_info;
++  Elf32_Word sh_addralign;
++  Elf32_Word sh_entsize;
++} Elf32_Shdr;
++
++typedef struct elf64_shdr {
++  Elf64_Word sh_name;
++  Elf64_Word sh_type;
++  Elf64_Xword sh_flags;
++  Elf64_Addr sh_addr;
++  Elf64_Off sh_offset;
++  Elf64_Xword sh_size;
++  Elf64_Word sh_link;
++  Elf64_Word sh_info;
++  Elf64_Xword sh_addralign;
++  Elf64_Xword sh_entsize;
++} Elf64_Shdr;
++# 366 "/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h"
++typedef struct elf32_note {
++  Elf32_Word n_namesz;
++  Elf32_Word n_descsz;
++  Elf32_Word n_type;
++} Elf32_Nhdr;
++
++
++typedef struct elf64_note {
++  Elf64_Word n_namesz;
++  Elf64_Word n_descsz;
++  Elf64_Word n_type;
++} Elf64_Nhdr;
++
++
++
++extern Elf32_Dyn _DYNAMIC [];
++# 399 "/d/kernels/linux-2.6.27.10-clickport/include/linux/elf.h"
++static inline __attribute__((always_inline)) int elf_coredump_extra_notes_size(void) { return 0; }
++static inline __attribute__((always_inline)) int elf_coredump_extra_notes_write(struct file *file,
++   loff_t *foffset) { return 0; }
++# 15 "/d/kernels/linux-2.6.27.10-clickport/include/linux/module.h" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kobject.h" 1
++# 21 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kobject.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sysfs.h" 1
++# 18 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sysfs.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic.h" 1
++# 19 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sysfs.h" 2
++
++
++
++struct kobject;
++struct module;
++
++
++
++
++
++struct attribute {
++ const char *name;
++ struct module *owner;
++ mode_t mode;
++};
++
++struct attribute_group {
++ const char *name;
++ mode_t (*is_visible)(struct kobject *,
++           struct attribute *, int);
++ struct attribute **attrs;
++};
++# 64 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sysfs.h"
++struct vm_area_struct;
++
++struct bin_attribute {
++ struct attribute attr;
++ size_t size;
++ void *xxx_private;
++ ssize_t (*read)(struct kobject *, struct bin_attribute *,
++   char *, loff_t, size_t);
++ ssize_t (*write)(struct kobject *, struct bin_attribute *,
++    char *, loff_t, size_t);
++ int (*mmap)(struct kobject *, struct bin_attribute *attr,
++      struct vm_area_struct *vma);
++};
++
++struct sysfs_ops {
++ ssize_t (*show)(struct kobject *, struct attribute *,char *);
++ ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t);
++};
++
++
++
++int sysfs_schedule_callback(struct kobject *kobj, void (*func)(void *),
++       void *data, struct module *owner);
++
++int __attribute__((warn_unused_result)) sysfs_create_dir(struct kobject *kobj);
++void sysfs_remove_dir(struct kobject *kobj);
++int __attribute__((warn_unused_result)) sysfs_rename_dir(struct kobject *kobj, const char *new_name);
++int __attribute__((warn_unused_result)) sysfs_move_dir(struct kobject *kobj,
++    struct kobject *new_parent_kobj);
++
++int __attribute__((warn_unused_result)) sysfs_create_file(struct kobject *kobj,
++       const struct attribute *attr);
++int __attribute__((warn_unused_result)) sysfs_chmod_file(struct kobject *kobj, struct attribute *attr,
++      mode_t mode);
++void sysfs_remove_file(struct kobject *kobj, const struct attribute *attr);
++
++int __attribute__((warn_unused_result)) sysfs_create_bin_file(struct kobject *kobj,
++           struct bin_attribute *attr);
++void sysfs_remove_bin_file(struct kobject *kobj, struct bin_attribute *attr);
++
++int __attribute__((warn_unused_result)) sysfs_create_link(struct kobject *kobj, struct kobject *target,
++       const char *name);
++int __attribute__((warn_unused_result)) sysfs_create_link_nowarn(struct kobject *kobj,
++       struct kobject *target,
++       const char *name);
++void sysfs_remove_link(struct kobject *kobj, const char *name);
++
++int __attribute__((warn_unused_result)) sysfs_create_group(struct kobject *kobj,
++        const struct attribute_group *grp);
++int sysfs_update_group(struct kobject *kobj,
++         const struct attribute_group *grp);
++void sysfs_remove_group(struct kobject *kobj,
++   const struct attribute_group *grp);
++int sysfs_add_file_to_group(struct kobject *kobj,
++   const struct attribute *attr, const char *group);
++void sysfs_remove_file_from_group(struct kobject *kobj,
++   const struct attribute *attr, const char *group);
++
++void sysfs_notify(struct kobject *kobj, char *dir, char *attr);
++
++extern int __attribute__((warn_unused_result)) sysfs_init(void);
++# 22 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kobject.h" 2
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kref.h" 1
++# 19 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kref.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic.h" 1
++# 20 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kref.h" 2
++
++struct kref {
++ atomic_t refcount;
++};
++
++void kref_set(struct kref *kref, int num);
++void kref_init(struct kref *kref);
++void kref_get(struct kref *kref);
++int kref_put(struct kref *kref, void (*release) (struct kref *kref));
++# 25 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kobject.h" 2
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic.h" 1
++# 28 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kobject.h" 2
++
++
++
++
++
++
++extern char uevent_helper[];
++
++
++extern u64 uevent_seqnum;
++# 49 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kobject.h"
++enum kobject_action {
++ KOBJ_ADD,
++ KOBJ_REMOVE,
++ KOBJ_CHANGE,
++ KOBJ_MOVE,
++ KOBJ_ONLINE,
++ KOBJ_OFFLINE,
++ KOBJ_MAX
++};
++
++struct kobject {
++ const char *name;
++ struct list_head entry;
++ struct kobject *parent;
++ struct kset *kset;
++ struct kobj_type *ktype;
++ struct sysfs_dirent *sd;
++ struct kref kref;
++ unsigned int state_initialized:1;
++ unsigned int state_in_sysfs:1;
++ unsigned int state_add_uevent_sent:1;
++ unsigned int state_remove_uevent_sent:1;
++};
++
++extern int kobject_set_name(struct kobject *kobj, const char *name, ...)
++       __attribute__((format(printf, 2, 3)));
++
++static inline __attribute__((always_inline)) const char *kobject_name(const struct kobject *kobj)
++{
++ return kobj->name;
++}
++
++extern void kobject_init(struct kobject *kobj, struct kobj_type *ktype);
++extern int __attribute__((warn_unused_result)) kobject_add(struct kobject *kobj,
++        struct kobject *parent,
++        const char *fmt, ...);
++extern int __attribute__((warn_unused_result)) kobject_init_and_add(struct kobject *kobj,
++          struct kobj_type *ktype,
++          struct kobject *parent,
++          const char *fmt, ...);
++
++extern void kobject_del(struct kobject *kobj);
++
++extern struct kobject * __attribute__((warn_unused_result)) kobject_create(void);
++extern struct kobject * __attribute__((warn_unused_result)) kobject_create_and_add(const char *name,
++      struct kobject *parent);
++
++extern int __attribute__((warn_unused_result)) kobject_rename(struct kobject *, const char *new_name);
++extern int __attribute__((warn_unused_result)) kobject_move(struct kobject *, struct kobject *);
++
++extern struct kobject *kobject_get(struct kobject *kobj);
++extern void kobject_put(struct kobject *kobj);
++
++extern char *kobject_get_path(struct kobject *kobj, gfp_t flag);
++
++struct kobj_type {
++ void (*release)(struct kobject *kobj);
++ struct sysfs_ops *sysfs_ops;
++ struct attribute **default_attrs;
++};
++
++struct kobj_uevent_env {
++ char *envp[32];
++ int envp_idx;
++ char buf[2048];
++ int buflen;
++};
++
++struct kset_uevent_ops {
++ int (*filter)(struct kset *kset, struct kobject *kobj);
++ const char *(*name)(struct kset *kset, struct kobject *kobj);
++ int (*uevent)(struct kset *kset, struct kobject *kobj,
++        struct kobj_uevent_env *env);
++};
++
++struct kobj_attribute {
++ struct attribute attr;
++ ssize_t (*show)(struct kobject *kobj, struct kobj_attribute *attr,
++   char *buf);
++ ssize_t (*store)(struct kobject *kobj, struct kobj_attribute *attr,
++    const char *buf, size_t count);
++};
++
++extern struct sysfs_ops kobj_sysfs_ops;
++# 151 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kobject.h"
++struct kset {
++ struct list_head list;
++ spinlock_t list_lock;
++ struct kobject kobj;
++ struct kset_uevent_ops *uevent_ops;
++};
++
++extern void kset_init(struct kset *kset);
++extern int __attribute__((warn_unused_result)) kset_register(struct kset *kset);
++extern void kset_unregister(struct kset *kset);
++extern struct kset * __attribute__((warn_unused_result)) kset_create_and_add(const char *name,
++      struct kset_uevent_ops *u,
++      struct kobject *parent_kobj);
++
++static inline __attribute__((always_inline)) struct kset *to_kset(struct kobject *kobj)
++{
++ return kobj ? ({ const typeof( ((struct kset *)0)->kobj ) *__mptr = (kobj); (struct kset *)( (char *)__mptr - __builtin_offsetof(struct kset,kobj) );}) : 0;
++}
++
++static inline __attribute__((always_inline)) struct kset *kset_get(struct kset *k)
++{
++ return k ? to_kset(kobject_get(&k->kobj)) : 0;
++}
++
++static inline __attribute__((always_inline)) void kset_put(struct kset *k)
++{
++ kobject_put(&k->kobj);
++}
++
++static inline __attribute__((always_inline)) struct kobj_type *get_ktype(struct kobject *kobj)
++{
++ return kobj->ktype;
++}
++
++extern struct kobject *kset_find_obj(struct kset *, const char *);
++
++
++extern struct kobject *kernel_kobj;
++
++extern struct kobject *mm_kobj;
++
++extern struct kobject *hypervisor_kobj;
++
++extern struct kobject *power_kobj;
++
++extern struct kobject *firmware_kobj;
++
++
++int kobject_uevent(struct kobject *kobj, enum kobject_action action);
++int kobject_uevent_env(struct kobject *kobj, enum kobject_action action,
++   char *envp[]);
++
++int add_uevent_var(struct kobj_uevent_env *env, const char *format, ...)
++ __attribute__((format (printf, 2, 3)));
++
++int kobject_action_type(const char *buf, size_t count,
++   enum kobject_action *type);
++# 17 "/d/kernels/linux-2.6.27.10-clickport/include/linux/module.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/moduleparam.h" 1
++# 29 "/d/kernels/linux-2.6.27.10-clickport/include/linux/moduleparam.h"
++struct kernel_param;
++
++
++typedef int (*param_set_fn)(const char *val, struct kernel_param *kp);
++
++typedef int (*param_get_fn)(char *buffer, struct kernel_param *kp);
++
++struct kernel_param {
++ const char *name;
++ unsigned int perm;
++ param_set_fn set;
++ param_get_fn get;
++ union {
++  void *arg;
++  const struct kparam_string *str;
++  const struct kparam_array *arr;
++ };
++};
++
++
++struct kparam_string {
++ unsigned int maxlen;
++ char *string;
++};
++
++
++struct kparam_array
++{
++ unsigned int max;
++ unsigned int *num;
++ param_set_fn set;
++ param_get_fn get;
++ unsigned int elemsize;
++ void *elem;
++};
++# 112 "/d/kernels/linux-2.6.27.10-clickport/include/linux/moduleparam.h"
++extern int parse_args(const char *name,
++        char *args,
++        struct kernel_param *params,
++        unsigned num,
++        int (*unknown)(char *param, char *val));
++
++
++
++
++
++
++
++extern int param_set_byte(const char *val, struct kernel_param *kp);
++extern int param_get_byte(char *buffer, struct kernel_param *kp);
++
++
++extern int param_set_short(const char *val, struct kernel_param *kp);
++extern int param_get_short(char *buffer, struct kernel_param *kp);
++
++
++extern int param_set_ushort(const char *val, struct kernel_param *kp);
++extern int param_get_ushort(char *buffer, struct kernel_param *kp);
++
++
++extern int param_set_int(const char *val, struct kernel_param *kp);
++extern int param_get_int(char *buffer, struct kernel_param *kp);
++
++
++extern int param_set_uint(const char *val, struct kernel_param *kp);
++extern int param_get_uint(char *buffer, struct kernel_param *kp);
++
++
++extern int param_set_long(const char *val, struct kernel_param *kp);
++extern int param_get_long(char *buffer, struct kernel_param *kp);
++
++
++extern int param_set_ulong(const char *val, struct kernel_param *kp);
++extern int param_get_ulong(char *buffer, struct kernel_param *kp);
++
++
++extern int param_set_charp(const char *val, struct kernel_param *kp);
++extern int param_get_charp(char *buffer, struct kernel_param *kp);
++
++
++extern int param_set_bool(const char *val, struct kernel_param *kp);
++extern int param_get_bool(char *buffer, struct kernel_param *kp);
++
++
++extern int param_set_invbool(const char *val, struct kernel_param *kp);
++extern int param_get_invbool(char *buffer, struct kernel_param *kp);
++# 176 "/d/kernels/linux-2.6.27.10-clickport/include/linux/moduleparam.h"
++extern int param_array_set(const char *val, struct kernel_param *kp);
++extern int param_array_get(char *buffer, struct kernel_param *kp);
++
++extern int param_set_copystring(const char *val, struct kernel_param *kp);
++extern int param_get_string(char *buffer, struct kernel_param *kp);
++
++
++
++struct module;
++
++
++extern int module_param_sysfs_setup(struct module *mod,
++        struct kernel_param *kparam,
++        unsigned int num_params);
++
++extern void module_param_sysfs_remove(struct module *mod);
++# 18 "/d/kernels/linux-2.6.27.10-clickport/include/linux/module.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h" 1
++# 17 "/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h"
++struct module;
++struct marker;
++# 32 "/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h"
++typedef void marker_probe_func(void *probe_private, void *call_private,
++  const char *fmt, va_list *args);
++
++struct marker_probe_closure {
++ marker_probe_func *func;
++ void *probe_private;
++};
++
++struct marker {
++ const char *name;
++ const char *format;
++
++
++ char state;
++ char ptype;
++
++ void (*call)(const struct marker *mdata, void *call_private, ...);
++ struct marker_probe_closure single;
++ struct marker_probe_closure *multi;
++} __attribute__((aligned(8)));
++# 88 "/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h"
++static inline __attribute__((always_inline)) void marker_update_probe_range(struct marker *begin,
++ struct marker *end)
++{ }
++# 125 "/d/kernels/linux-2.6.27.10-clickport/include/linux/marker.h"
++static inline __attribute__((always_inline)) void __attribute__((format(printf,1,2))) ___mark_check_format(const char *fmt, ...)
++{
++}
++
++
++
++
++
++
++
++extern marker_probe_func __mark_empty_function;
++
++extern void marker_probe_cb(const struct marker *mdata,
++ void *call_private, ...);
++extern void marker_probe_cb_noarg(const struct marker *mdata,
++ void *call_private, ...);
++
++
++
++
++
++extern int marker_probe_register(const char *name, const char *format,
++    marker_probe_func *probe, void *probe_private);
++
++
++
++
++extern int marker_probe_unregister(const char *name,
++ marker_probe_func *probe, void *probe_private);
++
++
++
++extern int marker_probe_unregister_private_data(marker_probe_func *probe,
++ void *probe_private);
++
++extern void *marker_get_private_data(const char *name, marker_probe_func *probe,
++ int num);
++# 19 "/d/kernels/linux-2.6.27.10-clickport/include/linux/module.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/local.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/percpu.h" 1
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h" 1
++# 56 "/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h"
++void __attribute__ ((__section__(".init.text"))) kmem_cache_init(void);
++int slab_is_available(void);
++
++struct kmem_cache *kmem_cache_create(const char *, size_t, size_t,
++   unsigned long,
++   void (*)(void *));
++void kmem_cache_destroy(struct kmem_cache *);
++int kmem_cache_shrink(struct kmem_cache *);
++void kmem_cache_free(struct kmem_cache *, void *);
++unsigned int kmem_cache_size(struct kmem_cache *);
++const char *kmem_cache_name(struct kmem_cache *);
++int kmem_ptr_validate(struct kmem_cache *cachep, const void *ptr);
++# 99 "/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h"
++void * __attribute__((warn_unused_result)) __krealloc(const void *, size_t, gfp_t);
++void * __attribute__((warn_unused_result)) krealloc(const void *, size_t, gfp_t);
++void kfree(const void *);
++size_t ksize(const void *);
++# 128 "/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/slab_def.h" 1
++# 19 "/d/kernels/linux-2.6.27.10-clickport/include/linux/slab_def.h"
++struct cache_sizes {
++ size_t cs_size;
++ struct kmem_cache *cs_cachep;
++
++ struct kmem_cache *cs_dmacachep;
++
++};
++extern struct cache_sizes malloc_sizes[];
++
++void *kmem_cache_alloc(struct kmem_cache *, gfp_t);
++void *__kmalloc(size_t size, gfp_t flags);
++
++static inline __attribute__((always_inline)) void *kmalloc(size_t size, gfp_t flags)
++{
++ if (__builtin_constant_p(size)) {
++  int i = 0;
++
++  if (!size)
++   return ((void *)16);
++
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/kmalloc_sizes.h" 1
++
++ if (size <= 32) goto found; else i++;
++
++ if (size <= 64) goto found; else i++;
++
++
++
++ if (size <= 128) goto found; else i++;
++
++
++
++ if (size <= 256) goto found; else i++;
++ if (size <= 512) goto found; else i++;
++ if (size <= 1024) goto found; else i++;
++ if (size <= 2048) goto found; else i++;
++ if (size <= 4096) goto found; else i++;
++ if (size <= 8192) goto found; else i++;
++ if (size <= 16384) goto found; else i++;
++ if (size <= 32768) goto found; else i++;
++ if (size <= 65536) goto found; else i++;
++ if (size <= 131072) goto found; else i++;
++
++ if (size <= 262144) goto found; else i++;
++
++
++ if (size <= 524288) goto found; else i++;
++
++
++ if (size <= 1048576) goto found; else i++;
++
++
++ if (size <= 2097152) goto found; else i++;
++
++
++ if (size <= 4194304) goto found; else i++;
++# 45 "/d/kernels/linux-2.6.27.10-clickport/include/linux/slab_def.h" 2
++
++  {
++   extern void __you_cannot_kmalloc_that_much(void);
++   __you_cannot_kmalloc_that_much();
++  }
++found:
++
++  if (flags & (( gfp_t)0x01u))
++   return kmem_cache_alloc(malloc_sizes[i].cs_dmacachep,
++      flags);
++
++  return kmem_cache_alloc(malloc_sizes[i].cs_cachep, flags);
++ }
++ return __kmalloc(size, flags);
++}
++# 129 "/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h" 2
++# 182 "/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h"
++static inline __attribute__((always_inline)) void *kcalloc(size_t n, size_t size, gfp_t flags)
++{
++ if (size != 0 && n > (~0UL) / size)
++  return 0;
++ return __kmalloc(n * size, flags | (( gfp_t)0x8000u));
++}
++# 200 "/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h"
++static inline __attribute__((always_inline)) void *kmalloc_node(size_t size, gfp_t flags, int node)
++{
++ return kmalloc(size, flags);
++}
++
++static inline __attribute__((always_inline)) void *__kmalloc_node(size_t size, gfp_t flags, int node)
++{
++ return __kmalloc(size, flags);
++}
++
++void *kmem_cache_alloc(struct kmem_cache *, gfp_t);
++
++static inline __attribute__((always_inline)) void *kmem_cache_alloc_node(struct kmem_cache *cachep,
++     gfp_t flags, int node)
++{
++ return kmem_cache_alloc(cachep, flags);
++}
++# 265 "/d/kernels/linux-2.6.27.10-clickport/include/linux/slab.h"
++static inline __attribute__((always_inline)) void *kmem_cache_zalloc(struct kmem_cache *k, gfp_t flags)
++{
++ return kmem_cache_alloc(k, flags | (( gfp_t)0x8000u));
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void *kzalloc(size_t size, gfp_t flags)
++{
++ return kmalloc(size, flags | (( gfp_t)0x8000u));
++}
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void *kzalloc_node(size_t size, gfp_t flags, int node)
++{
++ return kmalloc_node(size, flags | (( gfp_t)0x8000u), node);
++}
++
++
++extern const struct seq_operations slabinfo_op;
++ssize_t slabinfo_write(struct file *, const char *, size_t, loff_t *);
++# 6 "/d/kernels/linux-2.6.27.10-clickport/include/linux/percpu.h" 2
++# 61 "/d/kernels/linux-2.6.27.10-clickport/include/linux/percpu.h"
++struct percpu_data {
++ void *ptrs[1];
++};
++# 77 "/d/kernels/linux-2.6.27.10-clickport/include/linux/percpu.h"
++extern void *__percpu_alloc_mask(size_t size, gfp_t gfp, cpumask_t *mask);
++extern void percpu_free(void *__pdata);
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/asm/local.h" 2
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic.h" 1
++# 8 "/d/kernels/linux-2.6.27.10-clickport/include/asm/local.h" 2
++
++
++typedef struct {
++ atomic_long_t a;
++} local_t;
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void local_inc(local_t *l)
++{
++ asm volatile(" " "incl" " " "%0"
++       : "+m" (l->a.counter));
++}
++
++static inline __attribute__((always_inline)) void local_dec(local_t *l)
++{
++ asm volatile(" " "decl" " " "%0"
++       : "+m" (l->a.counter));
++}
++
++static inline __attribute__((always_inline)) void local_add(long i, local_t *l)
++{
++ asm volatile(" " "addl" " " "%1,%0"
++       : "+m" (l->a.counter)
++       : "ir" (i));
++}
++
++static inline __attribute__((always_inline)) void local_sub(long i, local_t *l)
++{
++ asm volatile(" " "subl" " " "%1,%0"
++       : "+m" (l->a.counter)
++       : "ir" (i));
++}
++# 54 "/d/kernels/linux-2.6.27.10-clickport/include/asm/local.h"
++static inline __attribute__((always_inline)) int local_sub_and_test(long i, local_t *l)
++{
++ unsigned char c;
++
++ asm volatile(" " "subl" " " "%2,%0; sete %1"
++       : "+m" (l->a.counter), "=qm" (c)
++       : "ir" (i) : "memory");
++ return c;
++}
++# 72 "/d/kernels/linux-2.6.27.10-clickport/include/asm/local.h"
++static inline __attribute__((always_inline)) int local_dec_and_test(local_t *l)
++{
++ unsigned char c;
++
++ asm volatile(" " "decl" " " "%0; sete %1"
++       : "+m" (l->a.counter), "=qm" (c)
++       : : "memory");
++ return c != 0;
++}
++# 90 "/d/kernels/linux-2.6.27.10-clickport/include/asm/local.h"
++static inline __attribute__((always_inline)) int local_inc_and_test(local_t *l)
++{
++ unsigned char c;
++
++ asm volatile(" " "incl" " " "%0; sete %1"
++       : "+m" (l->a.counter), "=qm" (c)
++       : : "memory");
++ return c != 0;
++}
++# 109 "/d/kernels/linux-2.6.27.10-clickport/include/asm/local.h"
++static inline __attribute__((always_inline)) int local_add_negative(long i, local_t *l)
++{
++ unsigned char c;
++
++ asm volatile(" " "addl" " " "%2,%0; sets %1"
++       : "+m" (l->a.counter), "=qm" (c)
++       : "ir" (i) : "memory");
++ return c;
++}
++# 126 "/d/kernels/linux-2.6.27.10-clickport/include/asm/local.h"
++static inline __attribute__((always_inline)) long local_add_return(long i, local_t *l)
++{
++ long __i;
++
++
++
++
++
++
++ __i = i;
++ asm volatile(" " "xaddl" " " "%0, %1;"
++       : "+r" (i), "+m" (l->a.counter)
++       : : "memory");
++ return i + __i;
++# 149 "/d/kernels/linux-2.6.27.10-clickport/include/asm/local.h"
++}
++
++static inline __attribute__((always_inline)) long local_sub_return(long i, local_t *l)
++{
++ return local_add_return(-i, l);
++}
++# 20 "/d/kernels/linux-2.6.27.10-clickport/include/linux/module.h" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/module.h" 1
++
++
++
++
++struct mod_arch_specific {};
++# 22 "/d/kernels/linux-2.6.27.10-clickport/include/linux/module.h" 2
++# 33 "/d/kernels/linux-2.6.27.10-clickport/include/linux/module.h"
++struct kernel_symbol
++{
++ unsigned long value;
++ const char *name;
++};
++
++struct modversion_info
++{
++ unsigned long crc;
++ char name[(64 - sizeof(unsigned long))];
++};
++
++struct module;
++
++struct module_attribute {
++        struct attribute attr;
++        ssize_t (*show)(struct module_attribute *, struct module *, char *);
++        ssize_t (*store)(struct module_attribute *, struct module *,
++    const char *, size_t count);
++ void (*setup)(struct module *, const char *);
++ int (*test)(struct module *);
++ void (*free)(struct module *);
++};
++
++struct module_kobject
++{
++ struct kobject kobj;
++ struct module *mod;
++ struct kobject *drivers_dir;
++};
++
++
++extern int init_module(void);
++extern void cleanup_module(void);
++
++
++struct exception_table_entry;
++
++const struct exception_table_entry *
++search_extable(const struct exception_table_entry *first,
++        const struct exception_table_entry *last,
++        unsigned long value);
++void sort_extable(struct exception_table_entry *start,
++    struct exception_table_entry *finish);
++void sort_main_extable(void);
++
++
++
++
++
++
++extern struct module __this_module;
++# 163 "/d/kernels/linux-2.6.27.10-clickport/include/linux/module.h"
++const struct exception_table_entry *search_exception_tables(unsigned long add);
++
++struct notifier_block;
++
++
++
++
++void *__symbol_get(const char *symbol);
++void *__symbol_get_gpl(const char *symbol);
++# 220 "/d/kernels/linux-2.6.27.10-clickport/include/linux/module.h"
++struct module_ref
++{
++ local_t count;
++} __attribute__((__aligned__((1 << (7)))));
++
++enum module_state
++{
++ MODULE_STATE_LIVE,
++ MODULE_STATE_COMING,
++ MODULE_STATE_GOING,
++};
++
++struct module
++{
++ enum module_state state;
++
++
++ struct list_head list;
++
++
++ char name[(64 - sizeof(unsigned long))];
++
++
++ struct module_kobject mkobj;
++ struct module_param_attrs *param_attrs;
++ struct module_attribute *modinfo_attrs;
++ const char *version;
++ const char *srcversion;
++ struct kobject *holders_dir;
++
++
++ const struct kernel_symbol *syms;
++ const unsigned long *crcs;
++ unsigned int num_syms;
++
++
++ unsigned int num_gpl_syms;
++ const struct kernel_symbol *gpl_syms;
++ const unsigned long *gpl_crcs;
++# 273 "/d/kernels/linux-2.6.27.10-clickport/include/linux/module.h"
++ const struct kernel_symbol *gpl_future_syms;
++ const unsigned long *gpl_future_crcs;
++ unsigned int num_gpl_future_syms;
++
++
++ unsigned int num_exentries;
++ const struct exception_table_entry *extable;
++
++
++ int (*init)(void);
++
++
++ void *module_init;
++
++
++ void *module_core;
++
++
++ unsigned int init_size, core_size;
++
++
++ unsigned int init_text_size, core_text_size;
++
++
++ void *unwind_info;
++
++
++ struct mod_arch_specific arch;
++
++ unsigned int taints;
++
++
++
++ unsigned num_bugs;
++ struct list_head bug_list;
++ struct bug_entry *bug_table;
++
++
++
++
++ Elf32_Sym *symtab;
++ unsigned int num_symtab;
++ char *strtab;
++
++
++ struct module_sect_attrs *sect_attrs;
++
++
++ struct module_notes_attrs *notes_attrs;
++
++
++
++ void *percpu;
++
++
++
++ char *args;
++
++
++
++
++
++
++
++ struct list_head modules_which_use_me;
++
++
++ struct task_struct *waiter;
++
++
++ void (*exit)(void);
++
++
++ struct module_ref ref[32];
++
++
++};
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) int module_is_live(struct module *mod)
++{
++ return mod->state != MODULE_STATE_GOING;
++}
++
++
++struct module *module_text_address(unsigned long addr);
++struct module *__module_text_address(unsigned long addr);
++int is_module_address(unsigned long addr);
++
++
++
++int module_get_kallsym(unsigned int symnum, unsigned long *value, char *type,
++   char *name, char *module_name, int *exported);
++
++
++unsigned long module_kallsyms_lookup_name(const char *name);
++
++extern void __module_put_and_exit(struct module *mod, long code)
++ __attribute__((noreturn));
++
++
++
++unsigned int module_refcount(struct module *mod);
++void __symbol_put(const char *symbol);
++
++void symbol_put_addr(void *addr);
++
++
++
++static inline __attribute__((always_inline)) void __module_get(struct module *module)
++{
++ if (module) {
++  do { if (__builtin_expect(!!(module_refcount(module) == 0), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/linux/module.h"), "i" (390), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++  local_inc(&module->ref[({ do { } while (0); (({ typeof(per_cpu__cpu_number) ret__; switch (sizeof(per_cpu__cpu_number)) { case 1: asm("mov" "b ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__cpu_number)); break; case 2: asm("mov" "w ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__cpu_number)); break; case 4: asm("mov" "l ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__cpu_number)); break; default: __bad_percpu_size(); } ret__; })); })].count);
++  do { } while (0);
++ }
++}
++
++static inline __attribute__((always_inline)) int try_module_get(struct module *module)
++{
++ int ret = 1;
++
++ if (module) {
++  unsigned int cpu = ({ do { } while (0); (({ typeof(per_cpu__cpu_number) ret__; switch (sizeof(per_cpu__cpu_number)) { case 1: asm("mov" "b ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__cpu_number)); break; case 2: asm("mov" "w ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__cpu_number)); break; case 4: asm("mov" "l ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__cpu_number)); break; default: __bad_percpu_size(); } ret__; })); });
++  if (__builtin_expect(!!(module_is_live(module)), 1))
++   local_inc(&module->ref[cpu].count);
++  else
++   ret = 0;
++  do { } while (0);
++ }
++ return ret;
++}
++
++extern void module_put(struct module *module);
++# 439 "/d/kernels/linux-2.6.27.10-clickport/include/linux/module.h"
++const char *module_address_lookup(unsigned long addr,
++       unsigned long *symbolsize,
++       unsigned long *offset,
++       char **modname,
++       char *namebuf);
++int lookup_module_symbol_name(unsigned long addr, char *symname);
++int lookup_module_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name);
++
++
++const struct exception_table_entry *search_module_extables(unsigned long addr);
++
++int register_module_notifier(struct notifier_block * nb);
++int unregister_module_notifier(struct notifier_block * nb);
++
++extern void print_modules(void);
++
++extern void module_update_markers(void);
++# 563 "/d/kernels/linux-2.6.27.10-clickport/include/linux/module.h"
++struct device_driver;
++
++struct module;
++
++extern struct kset *module_kset;
++extern struct kobj_type module_ktype;
++extern int module_sysfs_initialized;
++
++int mod_sysfs_init(struct module *mod);
++int mod_sysfs_setup(struct module *mod,
++      struct kernel_param *kparam,
++      unsigned int num_params);
++int module_add_modinfo_attrs(struct module *mod);
++void module_remove_modinfo_attrs(struct module *mod);
++# 8 "/d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/err.h" 1
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/errno.h" 1
++# 7 "/d/kernels/linux-2.6.27.10-clickport/include/linux/err.h" 2
++# 22 "/d/kernels/linux-2.6.27.10-clickport/include/linux/err.h"
++static inline __attribute__((always_inline)) void *ERR_PTR(long error)
++{
++ return (void *) error;
++}
++
++static inline __attribute__((always_inline)) long PTR_ERR(const void *ptr)
++{
++ return (long) ptr;
++}
++
++static inline __attribute__((always_inline)) long IS_ERR(const void *ptr)
++{
++ return __builtin_expect(!!(((unsigned long)ptr) >= (unsigned long)-4095), 0);
++}
++# 44 "/d/kernels/linux-2.6.27.10-clickport/include/linux/err.h"
++static inline __attribute__((always_inline)) void *ERR_CAST(const void *ptr)
++{
++
++ return (void *) ptr;
++}
++# 9 "/d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h" 2
++
++
++struct ts_config;
++# 21 "/d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h"
++struct ts_state
++{
++ unsigned int offset;
++ char cb[40];
++};
++# 37 "/d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h"
++struct ts_ops
++{
++ const char *name;
++ struct ts_config * (*init)(const void *, unsigned int, gfp_t, int);
++ unsigned int (*find)(struct ts_config *,
++     struct ts_state *);
++ void (*destroy)(struct ts_config *);
++ void * (*get_pattern)(struct ts_config *);
++ unsigned int (*get_pattern_len)(struct ts_config *);
++ struct module *owner;
++ struct list_head list;
++};
++# 57 "/d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h"
++struct ts_config
++{
++ struct ts_ops *ops;
++ int flags;
++# 74 "/d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h"
++ unsigned int (*get_next_block)(unsigned int consumed,
++        const u8 **dst,
++        struct ts_config *conf,
++        struct ts_state *state);
++# 87 "/d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h"
++ void (*finish)(struct ts_config *conf,
++       struct ts_state *state);
++};
++# 103 "/d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h"
++static inline __attribute__((always_inline)) unsigned int textsearch_next(struct ts_config *conf,
++        struct ts_state *state)
++{
++ unsigned int ret = conf->ops->find(conf, state);
++
++ if (conf->finish)
++  conf->finish(conf, state);
++
++ return ret;
++}
++# 122 "/d/kernels/linux-2.6.27.10-clickport/include/linux/textsearch.h"
++static inline __attribute__((always_inline)) unsigned int textsearch_find(struct ts_config *conf,
++        struct ts_state *state)
++{
++ state->offset = 0;
++ return textsearch_next(conf, state);
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) void *textsearch_get_pattern(struct ts_config *conf)
++{
++ return conf->ops->get_pattern(conf);
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) unsigned int textsearch_get_pattern_len(struct ts_config *conf)
++{
++ return conf->ops->get_pattern_len(conf);
++}
++
++extern int textsearch_register(struct ts_ops *);
++extern int textsearch_unregister(struct ts_ops *);
++extern struct ts_config *textsearch_prepare(const char *, const void *,
++         unsigned int, gfp_t, int);
++extern void textsearch_destroy(struct ts_config *conf);
++extern unsigned int textsearch_find_continuous(struct ts_config *,
++            struct ts_state *,
++            const void *, unsigned int);
++
++
++
++
++
++static inline __attribute__((always_inline)) struct ts_config *alloc_ts_config(size_t payload,
++      gfp_t gfp_mask)
++{
++ struct ts_config *conf;
++
++ conf = (struct ts_config *) kzalloc((((sizeof(*conf)) + 8 -1) & ~(8 -1)) + payload, gfp_mask);
++ if (conf == 0)
++  return (struct ts_config *) ERR_PTR(-12);
++
++ return conf;
++}
++
++static inline __attribute__((always_inline)) void *ts_config_priv(struct ts_config *conf)
++{
++ return ((u8 *) conf + (((sizeof(struct ts_config)) + 8 -1) & ~(8 -1)));
++}
++# 27 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/net/checksum.h" 1
++# 25 "/d/kernels/linux-2.6.27.10-clickport/include/net/checksum.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/uaccess.h" 1
++# 95 "/d/kernels/linux-2.6.27.10-clickport/include/asm/uaccess.h"
++struct exception_table_entry {
++ unsigned long insn, fixup;
++};
++
++extern int fixup_exception(struct pt_regs *regs);
++# 116 "/d/kernels/linux-2.6.27.10-clickport/include/asm/uaccess.h"
++extern int __get_user_1(void);
++extern int __get_user_2(void);
++extern int __get_user_4(void);
++extern int __get_user_8(void);
++extern int __get_user_bad(void);
++# 210 "/d/kernels/linux-2.6.27.10-clickport/include/asm/uaccess.h"
++extern void __put_user_bad(void);
++
++
++
++
++
++extern void __put_user_1(void);
++extern void __put_user_2(void);
++extern void __put_user_4(void);
++extern void __put_user_8(void);
++# 368 "/d/kernels/linux-2.6.27.10-clickport/include/asm/uaccess.h"
++struct __large_struct { unsigned long buf[100]; };
++# 439 "/d/kernels/linux-2.6.27.10-clickport/include/asm/uaccess.h"
++extern struct movsl_mask {
++ int mask;
++} __attribute__((__aligned__((1 << (7))))) movsl_mask;
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/uaccess_32.h" 1
++# 14 "/d/kernels/linux-2.6.27.10-clickport/include/asm/uaccess_32.h"
++unsigned long __attribute__((warn_unused_result)) __copy_to_user_ll
++  (void *to, const void *from, unsigned long n);
++unsigned long __attribute__((warn_unused_result)) __copy_from_user_ll
++  (void *to, const void *from, unsigned long n);
++unsigned long __attribute__((warn_unused_result)) __copy_from_user_ll_nozero
++  (void *to, const void *from, unsigned long n);
++unsigned long __attribute__((warn_unused_result)) __copy_from_user_ll_nocache
++  (void *to, const void *from, unsigned long n);
++unsigned long __attribute__((warn_unused_result)) __copy_from_user_ll_nocache_nozero
++  (void *to, const void *from, unsigned long n);
++# 44 "/d/kernels/linux-2.6.27.10-clickport/include/asm/uaccess_32.h"
++static inline __attribute__((always_inline)) __attribute__((always_inline)) unsigned long __attribute__((warn_unused_result))
++__copy_to_user_inatomic(void *to, const void *from, unsigned long n)
++{
++ if (__builtin_constant_p(n)) {
++  unsigned long ret;
++
++  switch (n) {
++  case 1:
++   do { ret = 0; (void)0; switch (1) { case 1: asm volatile("1:       mov""b"" %""b""1,%2\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r"(ret) : "iq"(*(u8 *)from), "m" ((*(struct __large_struct *)((u8 *)to))), "i" (1), "0" (ret)); break; case 2: asm volatile("1:   mov""w"" %""w""1,%2\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r"(ret) : "ir"(*(u8 *)from), "m" ((*(struct __large_struct *)((u8 *)to))), "i" (1), "0" (ret)); break; case 4: asm volatile("1:   mov""l"" %""k""1,%2\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r"(ret) : "ir"(*(u8 *)from), "m" ((*(struct __large_struct *)((u8 *)to))), "i" (1), "0" (ret)); break; case 8: asm volatile("1:   movl %%eax,0(%2)\n" "2: movl %%edx,4(%2)\n" "3:\n" ".section .fixup,\"ax\"\n" "4:       movl %3,%0\n" " jmp 3b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "4b" "\n" " .previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "2b" "," "4b" "\n" " .previous\n" : "=r" (ret) : "A" ((__typeof__(*(u8 *)to))(*(u8 *)from)), "r" ((u8 *)to), "i" (-14), "0" (ret)); break; default: __put_user_bad(); } } while (0);
++
++   return ret;
++  case 2:
++   do { ret = 0; (void)0; switch (2) { case 1: asm volatile("1:       mov""b"" %""b""1,%2\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r"(ret) : "iq"(*(u16 *)from), "m" ((*(struct __large_struct *)((u16 *)to))), "i" (2), "0" (ret)); break; case 2: asm volatile("1: mov""w"" %""w""1,%2\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r"(ret) : "ir"(*(u16 *)from), "m" ((*(struct __large_struct *)((u16 *)to))), "i" (2), "0" (ret)); break; case 4: asm volatile("1: mov""l"" %""k""1,%2\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r"(ret) : "ir"(*(u16 *)from), "m" ((*(struct __large_struct *)((u16 *)to))), "i" (2), "0" (ret)); break; case 8: asm volatile("1: movl %%eax,0(%2)\n" "2: movl %%edx,4(%2)\n" "3:\n" ".section .fixup,\"ax\"\n" "4:       movl %3,%0\n" " jmp 3b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "4b" "\n" " .previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "2b" "," "4b" "\n" " .previous\n" : "=r" (ret) : "A" ((__typeof__(*(u16 *)to))(*(u16 *)from)), "r" ((u16 *)to), "i" (-14), "0" (ret)); break; default: __put_user_bad(); } } while (0);
++
++   return ret;
++  case 4:
++   do { ret = 0; (void)0; switch (4) { case 1: asm volatile("1:       mov""b"" %""b""1,%2\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r"(ret) : "iq"(*(u32 *)from), "m" ((*(struct __large_struct *)((u32 *)to))), "i" (4), "0" (ret)); break; case 2: asm volatile("1: mov""w"" %""w""1,%2\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r"(ret) : "ir"(*(u32 *)from), "m" ((*(struct __large_struct *)((u32 *)to))), "i" (4), "0" (ret)); break; case 4: asm volatile("1: mov""l"" %""k""1,%2\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r"(ret) : "ir"(*(u32 *)from), "m" ((*(struct __large_struct *)((u32 *)to))), "i" (4), "0" (ret)); break; case 8: asm volatile("1: movl %%eax,0(%2)\n" "2: movl %%edx,4(%2)\n" "3:\n" ".section .fixup,\"ax\"\n" "4:       movl %3,%0\n" " jmp 3b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "4b" "\n" " .previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "2b" "," "4b" "\n" " .previous\n" : "=r" (ret) : "A" ((__typeof__(*(u32 *)to))(*(u32 *)from)), "r" ((u32 *)to), "i" (-14), "0" (ret)); break; default: __put_user_bad(); } } while (0);
++
++   return ret;
++  }
++ }
++ return __copy_to_user_ll(to, from, n);
++}
++# 82 "/d/kernels/linux-2.6.27.10-clickport/include/asm/uaccess_32.h"
++static inline __attribute__((always_inline)) __attribute__((always_inline)) unsigned long __attribute__((warn_unused_result))
++__copy_to_user(void *to, const void *from, unsigned long n)
++{
++       do { __might_sleep("/d/kernels/linux-2.6.27.10-clickport/include/asm/uaccess_32.h", 85); do { } while (0); } while (0);
++       return __copy_to_user_inatomic(to, from, n);
++}
++
++static inline __attribute__((always_inline)) __attribute__((always_inline)) unsigned long
++__copy_from_user_inatomic(void *to, const void *from, unsigned long n)
++{
++
++
++
++
++
++ if (__builtin_constant_p(n)) {
++  unsigned long ret;
++
++  switch (n) {
++  case 1:
++   do { ret = 0; (void)0; switch (1) { case 1: asm volatile("1:       mov""b"" %2,%""b""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""b"" %""b""1,%""b""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=q"(*(u8 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (1), "0" (ret)); break; case 2: asm volatile("1:        mov""w"" %2,%""w""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""w"" %""w""1,%""w""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=r"(*(u8 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (1), "0" (ret)); break; case 4: asm volatile("1:        mov""l"" %2,%""k""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""l"" %""k""1,%""k""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=r"(*(u8 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (1), "0" (ret)); break; case 8: (*(u8 *)to) = __get_user_bad(); break; default: (*(u8 *)to) = __get_user_bad(); } } while (0);
++   return ret;
++  case 2:
++   do { ret = 0; (void)0; switch (2) { case 1: asm volatile("1:       mov""b"" %2,%""b""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""b"" %""b""1,%""b""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=q"(*(u16 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (2), "0" (ret)); break; case 2: asm volatile("1:       mov""w"" %2,%""w""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""w"" %""w""1,%""w""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=r"(*(u16 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (2), "0" (ret)); break; case 4: asm volatile("1:       mov""l"" %2,%""k""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""l"" %""k""1,%""k""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=r"(*(u16 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (2), "0" (ret)); break; case 8: (*(u16 *)to) = __get_user_bad(); break; default: (*(u16 *)to) = __get_user_bad(); } } while (0);
++   return ret;
++  case 4:
++   do { ret = 0; (void)0; switch (4) { case 1: asm volatile("1:       mov""b"" %2,%""b""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""b"" %""b""1,%""b""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=q"(*(u32 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (4), "0" (ret)); break; case 2: asm volatile("1:       mov""w"" %2,%""w""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""w"" %""w""1,%""w""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=r"(*(u32 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (4), "0" (ret)); break; case 4: asm volatile("1:       mov""l"" %2,%""k""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""l"" %""k""1,%""k""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=r"(*(u32 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (4), "0" (ret)); break; case 8: (*(u32 *)to) = __get_user_bad(); break; default: (*(u32 *)to) = __get_user_bad(); } } while (0);
++   return ret;
++  }
++ }
++ return __copy_from_user_ll_nozero(to, from, n);
++}
++# 137 "/d/kernels/linux-2.6.27.10-clickport/include/asm/uaccess_32.h"
++static inline __attribute__((always_inline)) __attribute__((always_inline)) unsigned long
++__copy_from_user(void *to, const void *from, unsigned long n)
++{
++ do { __might_sleep("/d/kernels/linux-2.6.27.10-clickport/include/asm/uaccess_32.h", 140); do { } while (0); } while (0);
++ if (__builtin_constant_p(n)) {
++  unsigned long ret;
++
++  switch (n) {
++  case 1:
++   do { ret = 0; (void)0; switch (1) { case 1: asm volatile("1:       mov""b"" %2,%""b""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""b"" %""b""1,%""b""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=q"(*(u8 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (1), "0" (ret)); break; case 2: asm volatile("1:        mov""w"" %2,%""w""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""w"" %""w""1,%""w""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=r"(*(u8 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (1), "0" (ret)); break; case 4: asm volatile("1:        mov""l"" %2,%""k""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""l"" %""k""1,%""k""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=r"(*(u8 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (1), "0" (ret)); break; case 8: (*(u8 *)to) = __get_user_bad(); break; default: (*(u8 *)to) = __get_user_bad(); } } while (0);
++   return ret;
++  case 2:
++   do { ret = 0; (void)0; switch (2) { case 1: asm volatile("1:       mov""b"" %2,%""b""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""b"" %""b""1,%""b""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=q"(*(u16 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (2), "0" (ret)); break; case 2: asm volatile("1:       mov""w"" %2,%""w""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""w"" %""w""1,%""w""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=r"(*(u16 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (2), "0" (ret)); break; case 4: asm volatile("1:       mov""l"" %2,%""k""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""l"" %""k""1,%""k""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=r"(*(u16 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (2), "0" (ret)); break; case 8: (*(u16 *)to) = __get_user_bad(); break; default: (*(u16 *)to) = __get_user_bad(); } } while (0);
++   return ret;
++  case 4:
++   do { ret = 0; (void)0; switch (4) { case 1: asm volatile("1:       mov""b"" %2,%""b""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""b"" %""b""1,%""b""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=q"(*(u32 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (4), "0" (ret)); break; case 2: asm volatile("1:       mov""w"" %2,%""w""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""w"" %""w""1,%""w""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=r"(*(u32 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (4), "0" (ret)); break; case 4: asm volatile("1:       mov""l"" %2,%""k""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""l"" %""k""1,%""k""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=r"(*(u32 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (4), "0" (ret)); break; case 8: (*(u32 *)to) = __get_user_bad(); break; default: (*(u32 *)to) = __get_user_bad(); } } while (0);
++   return ret;
++  }
++ }
++ return __copy_from_user_ll(to, from, n);
++}
++
++static inline __attribute__((always_inline)) __attribute__((always_inline)) unsigned long __copy_from_user_nocache(void *to,
++    const void *from, unsigned long n)
++{
++ do { __might_sleep("/d/kernels/linux-2.6.27.10-clickport/include/asm/uaccess_32.h", 162); do { } while (0); } while (0);
++ if (__builtin_constant_p(n)) {
++  unsigned long ret;
++
++  switch (n) {
++  case 1:
++   do { ret = 0; (void)0; switch (1) { case 1: asm volatile("1:       mov""b"" %2,%""b""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""b"" %""b""1,%""b""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=q"(*(u8 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (1), "0" (ret)); break; case 2: asm volatile("1:        mov""w"" %2,%""w""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""w"" %""w""1,%""w""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=r"(*(u8 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (1), "0" (ret)); break; case 4: asm volatile("1:        mov""l"" %2,%""k""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""l"" %""k""1,%""k""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=r"(*(u8 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (1), "0" (ret)); break; case 8: (*(u8 *)to) = __get_user_bad(); break; default: (*(u8 *)to) = __get_user_bad(); } } while (0);
++   return ret;
++  case 2:
++   do { ret = 0; (void)0; switch (2) { case 1: asm volatile("1:       mov""b"" %2,%""b""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""b"" %""b""1,%""b""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=q"(*(u16 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (2), "0" (ret)); break; case 2: asm volatile("1:       mov""w"" %2,%""w""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""w"" %""w""1,%""w""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=r"(*(u16 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (2), "0" (ret)); break; case 4: asm volatile("1:       mov""l"" %2,%""k""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""l"" %""k""1,%""k""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=r"(*(u16 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (2), "0" (ret)); break; case 8: (*(u16 *)to) = __get_user_bad(); break; default: (*(u16 *)to) = __get_user_bad(); } } while (0);
++   return ret;
++  case 4:
++   do { ret = 0; (void)0; switch (4) { case 1: asm volatile("1:       mov""b"" %2,%""b""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""b"" %""b""1,%""b""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=q"(*(u32 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (4), "0" (ret)); break; case 2: asm volatile("1:       mov""w"" %2,%""w""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""w"" %""w""1,%""w""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=r"(*(u32 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (4), "0" (ret)); break; case 4: asm volatile("1:       mov""l"" %2,%""k""1\n" "2:\n" ".section .fixup,\"ax\"\n" "3:    mov %3,%0\n" "  xor""l"" %""k""1,%""k""1\n" "   jmp 2b\n" ".previous\n" " .section __ex_table,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "1b" "," "3b" "\n" " .previous\n" : "=r" (ret), "=r"(*(u32 *)to) : "m" ((*(struct __large_struct *)(from))), "i" (4), "0" (ret)); break; case 8: (*(u32 *)to) = __get_user_bad(); break; default: (*(u32 *)to) = __get_user_bad(); } } while (0);
++   return ret;
++  }
++ }
++ return __copy_from_user_ll_nocache(to, from, n);
++}
++
++static inline __attribute__((always_inline)) __attribute__((always_inline)) unsigned long
++__copy_from_user_inatomic_nocache(void *to, const void *from,
++      unsigned long n)
++{
++       return __copy_from_user_ll_nocache_nozero(to, from, n);
++}
++
++unsigned long __attribute__((warn_unused_result)) copy_to_user(void *to,
++     const void *from, unsigned long n);
++unsigned long __attribute__((warn_unused_result)) copy_from_user(void *to,
++       const void *from,
++       unsigned long n);
++long __attribute__((warn_unused_result)) strncpy_from_user(char *dst, const char *src,
++        long count);
++long __attribute__((warn_unused_result)) __strncpy_from_user(char *dst,
++          const char *src, long count);
++# 214 "/d/kernels/linux-2.6.27.10-clickport/include/asm/uaccess_32.h"
++long strnlen_user(const char *str, long n);
++unsigned long __attribute__((warn_unused_result)) clear_user(void *mem, unsigned long len);
++unsigned long __attribute__((warn_unused_result)) __clear_user(void *mem, unsigned long len);
++# 448 "/d/kernels/linux-2.6.27.10-clickport/include/asm/uaccess.h" 2
++# 26 "/d/kernels/linux-2.6.27.10-clickport/include/net/checksum.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/checksum.h" 1
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/checksum_32.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/in6.h" 1
++# 30 "/d/kernels/linux-2.6.27.10-clickport/include/linux/in6.h"
++struct in6_addr
++{
++ union
++ {
++  __u8 u6_addr8[16];
++  __be16 u6_addr16[8];
++  __be32 u6_addr32[4];
++ } in6_u;
++
++
++
++};
++
++
++
++
++
++extern const struct in6_addr in6addr_any;
++
++extern const struct in6_addr in6addr_loopback;
++
++
++extern const struct in6_addr in6addr_linklocal_allnodes;
++
++
++extern const struct in6_addr in6addr_linklocal_allrouters;
++
++
++
++
++struct sockaddr_in6 {
++ unsigned short int sin6_family;
++ __be16 sin6_port;
++ __be32 sin6_flowinfo;
++ struct in6_addr sin6_addr;
++ __u32 sin6_scope_id;
++};
++
++struct ipv6_mreq {
++
++ struct in6_addr ipv6mr_multiaddr;
++
++
++ int ipv6mr_ifindex;
++};
++
++
++
++struct in6_flowlabel_req
++{
++ struct in6_addr flr_dst;
++ __be32 flr_label;
++ __u8 flr_action;
++ __u8 flr_share;
++ __u16 flr_flags;
++ __u16 flr_expires;
++ __u16 flr_linger;
++ __u32 __flr_pad;
++
++};
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/asm/checksum_32.h" 2
++# 20 "/d/kernels/linux-2.6.27.10-clickport/include/asm/checksum_32.h"
++extern "C" __attribute__((regparm(0))) __wsum csum_partial(const void *buff, int len, __wsum sum);
++# 30 "/d/kernels/linux-2.6.27.10-clickport/include/asm/checksum_32.h"
++extern "C" __attribute__((regparm(0))) __wsum csum_partial_copy_generic(const void *src, void *dst,
++         int len, __wsum sum,
++         int *src_err_ptr, int *dst_err_ptr);
++# 41 "/d/kernels/linux-2.6.27.10-clickport/include/asm/checksum_32.h"
++static inline __attribute__((always_inline)) __wsum csum_partial_copy_nocheck(const void *src, void *dst,
++            int len, __wsum sum)
++{
++ return csum_partial_copy_generic(src, dst, len, sum, 0, 0);
++}
++
++static inline __attribute__((always_inline)) __wsum csum_partial_copy_from_user(const void *src,
++       void *dst,
++       int len, __wsum sum,
++       int *err_ptr)
++{
++ do { __might_sleep("/d/kernels/linux-2.6.27.10-clickport/include/asm/checksum_32.h", 52); do { } while (0); } while (0);
++ return csum_partial_copy_generic(( void *)src, dst,
++      len, sum, err_ptr, 0);
++}
++# 64 "/d/kernels/linux-2.6.27.10-clickport/include/asm/checksum_32.h"
++static inline __attribute__((always_inline)) __sum16 ip_fast_csum(const void *iph, unsigned int ihl)
++{
++ unsigned int sum;
++
++ asm volatile("movl (%1), %0  ;\n"
++       "subl $4, %2   ;\n"
++       "jbe 2f                ;\n"
++       "addl 4(%1), %0        ;\n"
++       "adcl 8(%1), %0        ;\n"
++       "adcl 12(%1), %0;\n"
++       "1:    adcl 16(%1), %0 ;\n"
++       "lea 4(%1), %1 ;\n"
++       "decl %2       ;\n"
++       "jne 1b                ;\n"
++       "adcl $0, %0   ;\n"
++       "movl %0, %2   ;\n"
++       "shrl $16, %0  ;\n"
++       "addw %w2, %w0 ;\n"
++       "adcl $0, %0   ;\n"
++       "notl %0       ;\n"
++       "2:            ;\n"
++
++
++
++       : "=r" (sum), "=r" (iph), "=r" (ihl)
++       : "1" (iph), "2" (ihl)
++       : "memory");
++ return ( __sum16)sum;
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) __sum16 csum_fold(__wsum sum)
++{
++ asm("addl %1, %0             ;\n"
++     "adcl $0xffff, %0        ;\n"
++     : "=r" (sum)
++     : "r" (( u32)sum << 16),
++       "0" (( u32)sum & 0xffff0000));
++ return ( __sum16)(~( u32)sum >> 16);
++}
++
++static inline __attribute__((always_inline)) __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr,
++     unsigned short len,
++     unsigned short proto,
++     __wsum sum)
++{
++ asm("addl %1, %0     ;\n"
++     "adcl %2, %0     ;\n"
++     "adcl %3, %0     ;\n"
++     "adcl $0, %0     ;\n"
++     : "=r" (sum)
++     : "g" (daddr), "g"(saddr),
++       "g" ((len + proto) << 8), "0" (sum));
++ return sum;
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) __sum16 csum_tcpudp_magic(__be32 saddr, __be32 daddr,
++     unsigned short len,
++     unsigned short proto,
++     __wsum sum)
++{
++ return csum_fold(csum_tcpudp_nofold(saddr, daddr, len, proto, sum));
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) __sum16 ip_compute_csum(const void *buff, int len)
++{
++    return csum_fold(csum_partial(buff, len, 0));
++}
++
++
++static inline __attribute__((always_inline)) __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
++          const struct in6_addr *daddr,
++          __u32 len, unsigned short proto,
++          __wsum sum)
++{
++ asm("addl 0(%1), %0  ;\n"
++     "adcl 4(%1), %0  ;\n"
++     "adcl 8(%1), %0  ;\n"
++     "adcl 12(%1), %0 ;\n"
++     "adcl 0(%2), %0  ;\n"
++     "adcl 4(%2), %0  ;\n"
++     "adcl 8(%2), %0  ;\n"
++     "adcl 12(%2), %0 ;\n"
++     "adcl %3, %0     ;\n"
++     "adcl %4, %0     ;\n"
++     "adcl $0, %0     ;\n"
++     : "=&r" (sum)
++     : "r" (saddr), "r" (daddr),
++       "r" ((( __be32)(__builtin_constant_p((__u32)((len))) ? ((__u32)( (((__u32)(((len))) & (__u32)0x000000ffUL) << 24) | (((__u32)(((len))) & (__u32)0x0000ff00UL) << 8) | (((__u32)(((len))) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(((len))) & (__u32)0xff000000UL) >> 24) )) : __fswab32(((len)))))), "r" ((( __be32)(__builtin_constant_p((__u32)((proto))) ? ((__u32)( (((__u32)(((proto))) & (__u32)0x000000ffUL) << 24) | (((__u32)(((proto))) & (__u32)0x0000ff00UL) << 8) | (((__u32)(((proto))) & (__u32)0x00ff0000UL) >> 8) | (((__u32)(((proto))) & (__u32)0xff000000UL) >> 24) )) : __fswab32(((proto)))))), "0" (sum));
++
++ return csum_fold(sum);
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) __wsum csum_and_copy_to_user(const void *src,
++        void *dst,
++        int len, __wsum sum,
++        int *err_ptr)
++{
++ do { __might_sleep("/d/kernels/linux-2.6.27.10-clickport/include/asm/checksum_32.h", 178); do { } while (0); } while (0);
++ if ((__builtin_expect(!!(({ unsigned long flag, roksum; (void)0; asm("add %3,%1 ; sbb %0,%0 ; cmp %1,%4 ; sbb $0,%0" : "=&r" (flag), "=r" (roksum) : "1" (dst), "g" ((long)(len)), "rm" (current_thread_info()->addr_limit.seg)); flag; }) == 0), 1)))
++  return csum_partial_copy_generic(src, ( void *)dst,
++       len, sum, 0, err_ptr);
++
++ if (len)
++  *err_ptr = -14;
++
++ return ( __wsum)-1;
++}
++# 3 "/d/kernels/linux-2.6.27.10-clickport/include/asm/checksum.h" 2
++# 27 "/d/kernels/linux-2.6.27.10-clickport/include/net/checksum.h" 2
++
++
++static inline __attribute__((always_inline))
++__wsum csum_and_copy_from_user (const void *src, void *dst,
++          int len, __wsum sum, int *err_ptr)
++{
++ if ((__builtin_expect(!!(({ unsigned long flag, roksum; (void)0; asm("add %3,%1 ; sbb %0,%0 ; cmp %1,%4 ; sbb $0,%0" : "=&r" (flag), "=r" (roksum) : "1" (src), "g" ((long)(len)), "rm" (current_thread_info()->addr_limit.seg)); flag; }) == 0), 1)))
++  return csum_partial_copy_from_user(src, dst, len, sum, err_ptr);
++
++ if (len)
++  *err_ptr = -14;
++
++ return sum;
++}
++# 60 "/d/kernels/linux-2.6.27.10-clickport/include/net/checksum.h"
++static inline __attribute__((always_inline)) __wsum csum_add(__wsum csum, __wsum addend)
++{
++ u32 res = ( u32)csum;
++ res += ( u32)addend;
++ return ( __wsum)(res + (res < ( u32)addend));
++}
++
++static inline __attribute__((always_inline)) __wsum csum_sub(__wsum csum, __wsum addend)
++{
++ return csum_add(csum, ~addend);
++}
++
++static inline __attribute__((always_inline)) __wsum
++csum_block_add(__wsum csum, __wsum csum2, int offset)
++{
++ u32 sum = ( u32)csum2;
++ if (offset&1)
++  sum = ((sum&0xFF00FF)<<8)+((sum>>8)&0xFF00FF);
++ return csum_add(csum, ( __wsum)sum);
++}
++
++static inline __attribute__((always_inline)) __wsum
++csum_block_sub(__wsum csum, __wsum csum2, int offset)
++{
++ u32 sum = ( u32)csum2;
++ if (offset&1)
++  sum = ((sum&0xFF00FF)<<8)+((sum>>8)&0xFF00FF);
++ return csum_sub(csum, ( __wsum)sum);
++}
++
++static inline __attribute__((always_inline)) __wsum csum_unfold(__sum16 n)
++{
++ return ( __wsum)n;
++}
++
++
++
++static inline __attribute__((always_inline)) void csum_replace4(__sum16 *sum, __be32 from, __be32 to)
++{
++ __be32 diff[] = { ~from, to };
++
++ *sum = csum_fold(csum_partial((char *)diff, sizeof(diff), ~csum_unfold(*sum)));
++}
++
++static inline __attribute__((always_inline)) void csum_replace2(__sum16 *sum, __be16 from, __be16 to)
++{
++ csum_replace4(sum, ( __be32)from, ( __be32)to);
++}
++
++struct sk_buff;
++extern void inet_proto_csum_replace4(__sum16 *sum, struct sk_buff *skb,
++         __be32 from, __be32 to, int pseudohdr);
++
++static inline __attribute__((always_inline)) void inet_proto_csum_replace2(__sum16 *sum, struct sk_buff *skb,
++         __be16 from, __be16 to,
++         int pseudohdr)
++{
++ inet_proto_csum_replace4(sum, skb, ( __be32)from,
++     ( __be32)to, pseudohdr);
++}
++# 28 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rcupdate.h" 1
++# 43 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rcupdate.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/completion.h" 1
++# 13 "/d/kernels/linux-2.6.27.10-clickport/include/linux/completion.h"
++struct completion {
++ unsigned int done;
++ wait_queue_head_t wait;
++};
++# 39 "/d/kernels/linux-2.6.27.10-clickport/include/linux/completion.h"
++static inline __attribute__((always_inline)) void init_completion(struct completion *x)
++{
++ x->done = 0;
++ init_waitqueue_head(&x->wait);
++}
++
++extern void wait_for_completion(struct completion *);
++extern int wait_for_completion_interruptible(struct completion *x);
++extern int wait_for_completion_killable(struct completion *x);
++extern unsigned long wait_for_completion_timeout(struct completion *x,
++         unsigned long timeout);
++extern unsigned long wait_for_completion_interruptible_timeout(
++   struct completion *x, unsigned long timeout);
++extern bool try_wait_for_completion(struct completion *x);
++extern bool completion_done(struct completion *x);
++
++extern void complete(struct completion *);
++extern void complete_all(struct completion *);
++# 44 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rcupdate.h" 2
++
++
++
++
++
++
++struct rcu_head {
++ struct rcu_head *next;
++ void (*func)(struct rcu_head *head);
++};
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rcuclassic.h" 1
++# 45 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rcuclassic.h"
++struct rcu_ctrlblk {
++ long cur;
++ long completed;
++ int next_pending;
++
++ int signaled;
++
++ spinlock_t lock __attribute__((__aligned__(1 << ((7)))));
++ cpumask_t cpumask;
++
++} __attribute__((__aligned__(1 << ((7)))));
++
++
++static inline __attribute__((always_inline)) int rcu_batch_before(long a, long b)
++{
++ return (a - b) < 0;
++}
++
++
++static inline __attribute__((always_inline)) int rcu_batch_after(long a, long b)
++{
++ return (a - b) > 0;
++}
++
++
++
++
++
++
++struct rcu_data {
++
++ long quiescbatch;
++ int passed_quiesc;
++ int qs_pending;
++
++
++ long batch;
++ struct rcu_head *nxtlist;
++ struct rcu_head **nxttail;
++ long qlen;
++ struct rcu_head *curlist;
++ struct rcu_head **curtail;
++ struct rcu_head *donelist;
++ struct rcu_head **donetail;
++ long blimit;
++ int cpu;
++ struct rcu_head barrier;
++};
++
++extern __typeof__(struct rcu_data) per_cpu__rcu_data;
++extern __typeof__(struct rcu_data) per_cpu__rcu_bh_data;
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void rcu_qsctr_inc(int cpu)
++{
++ struct rcu_data *rdp = &(*({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((&per_cpu__rcu_data))); (typeof((&per_cpu__rcu_data))) (__ptr + (((__per_cpu_offset[cpu])))); }));
++ rdp->passed_quiesc = 1;
++}
++static inline __attribute__((always_inline)) void rcu_bh_qsctr_inc(int cpu)
++{
++ struct rcu_data *rdp = &(*({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((&per_cpu__rcu_bh_data))); (typeof((&per_cpu__rcu_bh_data))) (__ptr + (((__per_cpu_offset[cpu])))); }));
++ rdp->passed_quiesc = 1;
++}
++
++extern int rcu_pending(int cpu);
++extern int rcu_needs_cpu(int cpu);
++# 156 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rcuclassic.h"
++extern void __rcu_init(void);
++
++extern void rcu_check_callbacks(int cpu, int user);
++extern void rcu_restart_cpu(int cpu);
++
++extern long rcu_batches_completed(void);
++extern long rcu_batches_completed_bh(void);
++# 57 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rcupdate.h" 2
++# 174 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rcupdate.h"
++struct rcu_synchronize {
++ struct rcu_head head;
++ struct completion completion;
++};
++
++extern void wakeme_after_rcu(struct rcu_head *head);
++# 222 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rcupdate.h"
++extern void call_rcu(struct rcu_head *head,
++         void (*func)(struct rcu_head *head));
++# 243 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rcupdate.h"
++extern void call_rcu_bh(struct rcu_head *head,
++   void (*func)(struct rcu_head *head));
++
++
++extern void synchronize_rcu(void);
++extern void rcu_barrier(void);
++extern void rcu_barrier_bh(void);
++extern void rcu_barrier_sched(void);
++
++
++extern void rcu_init(void);
++extern int rcu_needs_cpu(int cpu);
++# 29 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h" 1
++# 24 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h" 1
++# 15 "/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ioport.h" 1
++# 18 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ioport.h"
++struct resource {
++ resource_size_t start;
++ resource_size_t end;
++ const char *name;
++ unsigned long flags;
++ struct resource *parent, *sibling, *child;
++};
++
++struct resource_list {
++ struct resource_list *next;
++ struct resource *res;
++ struct pci_dev *dev;
++};
++# 106 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ioport.h"
++extern struct resource ioport_resource;
++extern struct resource iomem_resource;
++
++extern int request_resource(struct resource *root, struct resource *xxx_new);
++extern int release_resource(struct resource *xxx_new);
++extern int insert_resource(struct resource *parent, struct resource *xxx_new);
++extern void insert_resource_expand_to_fit(struct resource *root, struct resource *xxx_new);
++extern int allocate_resource(struct resource *root, struct resource *xxx_new,
++        resource_size_t size, resource_size_t min,
++        resource_size_t max, resource_size_t align,
++        void (*alignf)(void *, struct resource *,
++         resource_size_t, resource_size_t),
++        void *alignf_data);
++int adjust_resource(struct resource *res, resource_size_t start,
++      resource_size_t size);
++resource_size_t resource_alignment(struct resource *res);
++static inline __attribute__((always_inline)) resource_size_t resource_size(struct resource *res)
++{
++ return res->end - res->start + 1;
++}
++
++
++
++
++
++
++extern struct resource * __request_region(struct resource *,
++     resource_size_t start,
++     resource_size_t n, const char *name);
++
++
++
++
++
++
++extern int __check_region(struct resource *, resource_size_t, resource_size_t);
++extern void __release_region(struct resource *, resource_size_t,
++    resource_size_t);
++
++static inline __attribute__((always_inline)) int __attribute__((deprecated)) check_region(resource_size_t s,
++      resource_size_t n)
++{
++ return __check_region(&ioport_resource, s, n);
++}
++
++
++struct device;
++
++
++
++
++
++extern struct resource * __devm_request_region(struct device *dev,
++    struct resource *parent, resource_size_t start,
++    resource_size_t n, const char *name);
++
++
++
++
++
++
++extern void __devm_release_region(struct device *dev, struct resource *parent,
++      resource_size_t start, resource_size_t n);
++# 16 "/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/klist.h" 1
++# 20 "/d/kernels/linux-2.6.27.10-clickport/include/linux/klist.h"
++struct klist_node;
++struct klist {
++ spinlock_t k_lock;
++ struct list_head k_list;
++ void (*get)(struct klist_node *);
++ void (*put)(struct klist_node *);
++};
++# 37 "/d/kernels/linux-2.6.27.10-clickport/include/linux/klist.h"
++extern void klist_init(struct klist *k, void (*get)(struct klist_node *),
++         void (*put)(struct klist_node *));
++
++struct klist_node {
++ struct klist *n_klist;
++ struct list_head n_node;
++ struct kref n_ref;
++ struct completion n_removed;
++};
++
++extern void klist_add_tail(struct klist_node *n, struct klist *k);
++extern void klist_add_head(struct klist_node *n, struct klist *k);
++extern void klist_add_after(struct klist_node *n, struct klist_node *pos);
++extern void klist_add_before(struct klist_node *n, struct klist_node *pos);
++
++extern void klist_del(struct klist_node *n);
++extern void klist_remove(struct klist_node *n);
++
++extern int klist_node_attached(struct klist_node *n);
++
++
++struct klist_iter {
++ struct klist *i_klist;
++ struct list_head *i_head;
++ struct klist_node *i_cur;
++};
++
++
++extern void klist_iter_init(struct klist *k, struct klist_iter *i);
++extern void klist_iter_init_node(struct klist *k, struct klist_iter *i,
++     struct klist_node *n);
++extern void klist_iter_exit(struct klist_iter *i);
++extern struct klist_node *klist_next(struct klist_iter *i);
++# 18 "/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h" 2
++
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/semaphore.h" 1
++# 16 "/d/kernels/linux-2.6.27.10-clickport/include/linux/semaphore.h"
++struct semaphore {
++ spinlock_t lock;
++ unsigned int count;
++ struct list_head wait_list;
++};
++# 41 "/d/kernels/linux-2.6.27.10-clickport/include/linux/semaphore.h"
++static inline __attribute__((always_inline)) void sema_init(struct semaphore *sem, int val)
++{
++ static struct lock_class_key __key;
++ *sem = (struct semaphore) ({ struct semaphore duh; duh.lock = (spinlock_t) { ({raw_spinlock_t duh; duh.slock=0;duh;}), }, duh.count = val, duh.wait_list = ({struct list_head duh;duh.next=&((*sem).wait_list);duh.prev=&((*sem).wait_list);duh;}), duh;});
++ do { (void)(&__key); } while (0);
++}
++
++
++
++
++extern void down(struct semaphore *sem);
++extern int __attribute__((warn_unused_result)) down_interruptible(struct semaphore *sem);
++extern int __attribute__((warn_unused_result)) down_killable(struct semaphore *sem);
++extern int __attribute__((warn_unused_result)) down_trylock(struct semaphore *sem);
++extern int __attribute__((warn_unused_result)) down_timeout(struct semaphore *sem, long jiffies);
++extern void up(struct semaphore *sem);
++# 25 "/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic.h" 1
++# 26 "/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/device.h" 1
++
++
++
++struct dev_archdata {
++
++ void *acpi_handle;
++
++
++
++
++
++
++
++};
++# 27 "/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h" 2
++
++
++
++struct device;
++struct device_driver;
++struct driver_private;
++struct xxx_class;
++struct class_private;
++struct bus_type;
++struct bus_type_private;
++
++struct bus_attribute {
++ struct attribute attr;
++ ssize_t (*show)(struct bus_type *bus, char *buf);
++ ssize_t (*store)(struct bus_type *bus, const char *buf, size_t count);
++};
++
++
++
++
++extern int __attribute__((warn_unused_result)) bus_create_file(struct bus_type *,
++     struct bus_attribute *);
++extern void bus_remove_file(struct bus_type *, struct bus_attribute *);
++
++struct bus_type {
++ const char *name;
++ struct bus_attribute *bus_attrs;
++ struct device_attribute *dev_attrs;
++ struct driver_attribute *drv_attrs;
++
++ int (*match)(struct device *dev, struct device_driver *drv);
++ int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
++ int (*probe)(struct device *dev);
++ int (*remove)(struct device *dev);
++ void (*shutdown)(struct device *dev);
++
++ int (*suspend)(struct device *dev, pm_message_t state);
++ int (*suspend_late)(struct device *dev, pm_message_t state);
++ int (*resume_early)(struct device *dev);
++ int (*resume)(struct device *dev);
++
++ struct pm_ext_ops *pm;
++
++ struct bus_type_private *p;
++};
++
++extern int __attribute__((warn_unused_result)) bus_register(struct bus_type *bus);
++extern void bus_unregister(struct bus_type *bus);
++
++extern int __attribute__((warn_unused_result)) bus_rescan_devices(struct bus_type *bus);
++
++
++
++int bus_for_each_dev(struct bus_type *bus, struct device *start, void *data,
++       int (*fn)(struct device *dev, void *data));
++struct device *bus_find_device(struct bus_type *bus, struct device *start,
++          void *data,
++          int (*match)(struct device *dev, void *data));
++struct device *bus_find_device_by_name(struct bus_type *bus,
++           struct device *start,
++           const char *name);
++
++int __attribute__((warn_unused_result)) bus_for_each_drv(struct bus_type *bus,
++      struct device_driver *start, void *data,
++      int (*fn)(struct device_driver *, void *));
++
++
++
++
++
++
++
++struct notifier_block;
++
++extern int bus_register_notifier(struct bus_type *bus,
++     struct notifier_block *nb);
++extern int bus_unregister_notifier(struct bus_type *bus,
++       struct notifier_block *nb);
++# 116 "/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h"
++extern struct kset *bus_get_kset(struct bus_type *bus);
++extern struct klist *bus_get_device_klist(struct bus_type *bus);
++
++struct device_driver {
++ const char *name;
++ struct bus_type *bus;
++
++ struct module *owner;
++ const char *mod_name;
++
++ int (*probe) (struct device *dev);
++ int (*remove) (struct device *dev);
++ void (*shutdown) (struct device *dev);
++ int (*suspend) (struct device *dev, pm_message_t state);
++ int (*resume) (struct device *dev);
++ struct attribute_group **groups;
++
++ struct pm_ops *pm;
++
++ struct driver_private *p;
++};
++
++
++extern int __attribute__((warn_unused_result)) driver_register(struct device_driver *drv);
++extern void driver_unregister(struct device_driver *drv);
++
++extern struct device_driver *get_driver(struct device_driver *drv);
++extern void put_driver(struct device_driver *drv);
++extern struct device_driver *driver_find(const char *name,
++      struct bus_type *bus);
++extern int driver_probe_done(void);
++
++
++
++struct driver_attribute {
++ struct attribute attr;
++ ssize_t (*show)(struct device_driver *driver, char *buf);
++ ssize_t (*store)(struct device_driver *driver, const char *buf,
++    size_t count);
++};
++
++
++
++
++
++extern int __attribute__((warn_unused_result)) driver_create_file(struct device_driver *driver,
++        struct driver_attribute *attr);
++extern void driver_remove_file(struct device_driver *driver,
++          struct driver_attribute *attr);
++
++extern int __attribute__((warn_unused_result)) driver_add_kobj(struct device_driver *drv,
++     struct kobject *kobj,
++     const char *fmt, ...);
++
++extern int __attribute__((warn_unused_result)) driver_for_each_device(struct device_driver *drv,
++            struct device *start,
++            void *data,
++            int (*fn)(struct device *dev,
++        void *));
++struct device *driver_find_device(struct device_driver *drv,
++      struct device *start, void *data,
++      int (*match)(struct device *dev, void *data));
++
++
++
++
++struct xxx_class {
++ const char *name;
++ struct module *owner;
++
++ struct class_attribute *class_attrs;
++ struct device_attribute *dev_attrs;
++ struct kobject *dev_kobj;
++
++ int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env);
++
++ void (*class_release)(struct xxx_class *xxx_class);
++ void (*dev_release)(struct device *dev);
++
++ int (*suspend)(struct device *dev, pm_message_t state);
++ int (*resume)(struct device *dev);
++
++ struct pm_ops *pm;
++ struct class_private *p;
++};
++
++extern struct kobject *sysfs_dev_block_kobj;
++extern struct kobject *sysfs_dev_char_kobj;
++extern int __attribute__((warn_unused_result)) __class_register(struct xxx_class *xxx_class,
++      struct lock_class_key *key);
++extern void class_unregister(struct xxx_class *xxx_class);
++# 216 "/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h"
++extern int class_for_each_device(struct xxx_class *xxx_class, struct device *start,
++     void *data,
++     int (*fn)(struct device *dev, void *data));
++extern struct device *class_find_device(struct xxx_class *xxx_class,
++     struct device *start, void *data,
++     int (*match)(struct device *, void *));
++
++struct class_attribute {
++ struct attribute attr;
++ ssize_t (*show)(struct xxx_class *xxx_class, char *buf);
++ ssize_t (*store)(struct xxx_class *xxx_class, const char *buf, size_t count);
++};
++
++
++
++
++extern int __attribute__((warn_unused_result)) class_create_file(struct xxx_class *xxx_class,
++       const struct class_attribute *attr);
++extern void class_remove_file(struct xxx_class *xxx_class,
++         const struct class_attribute *attr);
++
++struct class_interface {
++ struct list_head node;
++ struct xxx_class *xxx_class;
++
++ int (*add_dev) (struct device *, struct class_interface *);
++ void (*remove_dev) (struct device *, struct class_interface *);
++};
++
++extern int __attribute__((warn_unused_result)) class_interface_register(struct class_interface *);
++extern void class_interface_unregister(struct class_interface *);
++
++extern struct xxx_class * __attribute__((warn_unused_result)) __class_create(struct module *owner,
++        const char *name,
++        struct lock_class_key *key);
++extern void class_destroy(struct xxx_class *cls);
++# 270 "/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h"
++struct device_type {
++ const char *name;
++ struct attribute_group **groups;
++ int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
++ void (*release)(struct device *dev);
++
++ int (*suspend)(struct device *dev, pm_message_t state);
++ int (*resume)(struct device *dev);
++
++ struct pm_ops *pm;
++};
++
++
++struct device_attribute {
++ struct attribute attr;
++ ssize_t (*show)(struct device *dev, struct device_attribute *attr,
++   char *buf);
++ ssize_t (*store)(struct device *dev, struct device_attribute *attr,
++    const char *buf, size_t count);
++};
++
++
++
++
++extern int __attribute__((warn_unused_result)) device_create_file(struct device *device,
++        struct device_attribute *entry);
++extern void device_remove_file(struct device *dev,
++          struct device_attribute *attr);
++extern int __attribute__((warn_unused_result)) device_create_bin_file(struct device *dev,
++            struct bin_attribute *attr);
++extern void device_remove_bin_file(struct device *dev,
++       struct bin_attribute *attr);
++extern int device_schedule_callback_owner(struct device *dev,
++  void (*func)(struct device *dev), struct module *owner);
++
++
++
++
++
++
++typedef void (*dr_release_t)(struct device *dev, void *res);
++typedef int (*dr_match_t)(struct device *dev, void *res, void *match_data);
++
++
++extern void *__devres_alloc(dr_release_t release, size_t size, gfp_t gfp,
++        const char *name);
++
++
++
++
++
++extern void devres_free(void *res);
++extern void devres_add(struct device *dev, void *res);
++extern void *devres_find(struct device *dev, dr_release_t release,
++    dr_match_t match, void *match_data);
++extern void *devres_get(struct device *dev, void *new_res,
++   dr_match_t match, void *match_data);
++extern void *devres_remove(struct device *dev, dr_release_t release,
++      dr_match_t match, void *match_data);
++extern int devres_destroy(struct device *dev, dr_release_t release,
++     dr_match_t match, void *match_data);
++
++
++extern void * __attribute__((warn_unused_result)) devres_open_group(struct device *dev, void *id,
++          gfp_t gfp);
++extern void devres_close_group(struct device *dev, void *id);
++extern void devres_remove_group(struct device *dev, void *id);
++extern int devres_release_group(struct device *dev, void *id);
++
++
++extern void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp);
++extern void devm_kfree(struct device *dev, void *p);
++
++struct device_dma_parameters {
++
++
++
++
++ unsigned int max_segment_size;
++ unsigned long segment_boundary_mask;
++};
++
++struct device {
++ struct klist klist_children;
++ struct klist_node knode_parent;
++ struct klist_node knode_driver;
++ struct klist_node knode_bus;
++ struct device *parent;
++
++ struct kobject kobj;
++ char bus_id[20];
++ const char *init_name;
++ struct device_type *type;
++ unsigned uevent_suppress:1;
++
++ struct semaphore sem;
++
++
++
++ struct bus_type *bus;
++ struct device_driver *driver;
++
++ void *driver_data;
++ void *platform_data;
++
++ struct dev_pm_info power;
++
++
++
++
++ u64 *dma_mask;
++ u64 coherent_dma_mask;
++
++
++
++
++
++ struct device_dma_parameters *dma_parms;
++
++ struct list_head dma_pools;
++
++ struct dma_coherent_mem *dma_mem;
++
++
++ struct dev_archdata archdata;
++
++ spinlock_t devres_lock;
++ struct list_head devres_head;
++
++ struct list_head node;
++ struct xxx_class *xxx_class;
++ dev_t devt;
++ struct attribute_group **groups;
++
++ void (*release)(struct device *dev);
++};
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/pm_wakeup.h" 1
++# 33 "/d/kernels/linux-2.6.27.10-clickport/include/linux/pm_wakeup.h"
++static inline __attribute__((always_inline)) void device_init_wakeup(struct device *dev, int val)
++{
++ dev->power.can_wakeup = dev->power.should_wakeup = !!val;
++}
++
++static inline __attribute__((always_inline)) void device_set_wakeup_capable(struct device *dev, int val)
++{
++ dev->power.can_wakeup = !!val;
++}
++
++static inline __attribute__((always_inline)) int device_can_wakeup(struct device *dev)
++{
++ return dev->power.can_wakeup;
++}
++
++static inline __attribute__((always_inline)) void device_set_wakeup_enable(struct device *dev, int val)
++{
++ dev->power.should_wakeup = !!val;
++}
++
++static inline __attribute__((always_inline)) int device_may_wakeup(struct device *dev)
++{
++ return dev->power.can_wakeup && dev->power.should_wakeup;
++}
++# 409 "/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h" 2
++
++static inline __attribute__((always_inline)) const char *dev_name(const struct device *dev)
++{
++
++ return dev->bus_id;
++}
++
++extern int dev_set_name(struct device *dev, const char *name, ...)
++   __attribute__((format(printf, 2, 3)));
++# 429 "/d/kernels/linux-2.6.27.10-clickport/include/linux/device.h"
++static inline __attribute__((always_inline)) int dev_to_node(struct device *dev)
++{
++ return -1;
++}
++static inline __attribute__((always_inline)) void set_dev_node(struct device *dev, int node)
++{
++}
++
++
++static inline __attribute__((always_inline)) void *dev_get_drvdata(struct device *dev)
++{
++ return dev->driver_data;
++}
++
++static inline __attribute__((always_inline)) void dev_set_drvdata(struct device *dev, void *data)
++{
++ dev->driver_data = data;
++}
++
++static inline __attribute__((always_inline)) int device_is_registered(struct device *dev)
++{
++ return dev->kobj.state_in_sysfs;
++}
++
++void driver_init(void);
++
++
++
++
++extern int __attribute__((warn_unused_result)) device_register(struct device *dev);
++extern void device_unregister(struct device *dev);
++extern void device_initialize(struct device *dev);
++extern int __attribute__((warn_unused_result)) device_add(struct device *dev);
++extern void device_del(struct device *dev);
++extern int device_for_each_child(struct device *dev, void *data,
++       int (*fn)(struct device *dev, void *data));
++extern struct device *device_find_child(struct device *dev, void *data,
++    int (*match)(struct device *dev, void *data));
++extern int device_rename(struct device *dev, char *new_name);
++extern int device_move(struct device *dev, struct device *new_parent);
++
++
++
++
++
++extern int __attribute__((warn_unused_result)) device_bind_driver(struct device *dev);
++extern void device_release_driver(struct device *dev);
++extern int __attribute__((warn_unused_result)) device_attach(struct device *dev);
++extern int __attribute__((warn_unused_result)) driver_attach(struct device_driver *drv);
++extern int __attribute__((warn_unused_result)) device_reprobe(struct device *dev);
++
++
++
++
++extern struct device *device_create_vargs(struct xxx_class *cls,
++       struct device *parent,
++       dev_t devt,
++       void *drvdata,
++       const char *fmt,
++       va_list vargs);
++extern struct device *device_create(struct xxx_class *cls, struct device *parent,
++        dev_t devt, void *drvdata,
++        const char *fmt, ...)
++        __attribute__((format(printf, 5, 6)));
++
++extern void device_destroy(struct xxx_class *cls, dev_t devt);
++
++
++
++
++
++
++
++extern int (*platform_notify)(struct device *dev);
++
++extern int (*platform_notify_remove)(struct device *dev);
++
++
++
++
++
++
++extern struct device *get_device(struct device *dev);
++extern void put_device(struct device *dev);
++
++
++
++extern void device_shutdown(void);
++
++
++extern void sysdev_shutdown(void);
++
++
++extern const char *dev_driver_string(const struct device *dev);
++# 25 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h" 2
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h" 1
++# 9 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h"
++enum dma_data_direction {
++ DMA_BIDIRECTIONAL = 0,
++ DMA_TO_DEVICE = 1,
++ DMA_FROM_DEVICE = 2,
++ DMA_NONE = 3,
++};
++# 39 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h"
++static inline __attribute__((always_inline)) int valid_dma_direction(int dma_direction)
++{
++ return ((dma_direction == DMA_BIDIRECTIONAL) ||
++  (dma_direction == DMA_TO_DEVICE) ||
++  (dma_direction == DMA_FROM_DEVICE));
++}
++
++static inline __attribute__((always_inline)) int is_device_dma_capable(struct device *dev)
++{
++ return dev->dma_mask != 0 && *dev->dma_mask != 0x0ULL;
++}
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h" 1
++# 9 "/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h" 1
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/scatterlist.h" 1
++
++
++
++
++
++struct scatterlist {
++
++
++
++ unsigned long page_link;
++ unsigned int offset;
++ unsigned int length;
++ dma_addr_t dma_address;
++ unsigned int dma_length;
++};
++# 6 "/d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h" 1
++# 11 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rbtree.h" 1
++# 100 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rbtree.h"
++struct rb_node
++{
++ unsigned long rb_parent_color;
++
++
++ struct rb_node *rb_right;
++ struct rb_node *rb_left;
++} __attribute__((aligned(sizeof(long))));
++
++
++struct rb_root
++{
++ struct rb_node *rb_node;
++};
++# 123 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rbtree.h"
++static inline __attribute__((always_inline)) void rb_set_parent(struct rb_node *rb, struct rb_node *p)
++{
++ rb->rb_parent_color = (rb->rb_parent_color & 3) | (unsigned long)p;
++}
++static inline __attribute__((always_inline)) void rb_set_color(struct rb_node *rb, int color)
++{
++ rb->rb_parent_color = (rb->rb_parent_color & ~1) | color;
++}
++# 139 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rbtree.h"
++extern void rb_insert_color(struct rb_node *, struct rb_root *);
++extern void rb_erase(struct rb_node *, struct rb_root *);
++
++
++extern struct rb_node *rb_next(struct rb_node *);
++extern struct rb_node *rb_prev(struct rb_node *);
++extern struct rb_node *rb_first(struct rb_root *);
++extern struct rb_node *rb_last(struct rb_root *);
++
++
++extern void rb_replace_node(struct rb_node *victim, struct rb_node *xxx_new,
++       struct rb_root *root);
++
++static inline __attribute__((always_inline)) void rb_link_node(struct rb_node * node, struct rb_node * parent,
++    struct rb_node ** rb_link)
++{
++ node->rb_parent_color = (unsigned long )parent;
++ node->rb_left = node->rb_right = 0;
++
++ *rb_link = node;
++}
++# 12 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/prio_tree.h" 1
++# 14 "/d/kernels/linux-2.6.27.10-clickport/include/linux/prio_tree.h"
++struct raw_prio_tree_node {
++ struct prio_tree_node *left;
++ struct prio_tree_node *right;
++ struct prio_tree_node *parent;
++};
++
++struct prio_tree_node {
++ struct prio_tree_node *left;
++ struct prio_tree_node *right;
++ struct prio_tree_node *parent;
++ unsigned long start;
++ unsigned long last;
++};
++
++struct prio_tree_root {
++ struct prio_tree_node *prio_tree_node;
++ unsigned short index_bits;
++ unsigned short raw;
++
++
++
++
++};
++
++struct prio_tree_iter {
++ struct prio_tree_node *cur;
++ unsigned long mask;
++ unsigned long value;
++ int size_level;
++
++ struct prio_tree_root *root;
++ unsigned long r_index;
++ unsigned long h_index;
++};
++
++static inline __attribute__((always_inline)) void prio_tree_iter_init(struct prio_tree_iter *iter,
++  struct prio_tree_root *root, unsigned long r_index, unsigned long h_index)
++{
++ iter->root = root;
++ iter->r_index = r_index;
++ iter->h_index = h_index;
++ iter->cur = 0;
++}
++# 84 "/d/kernels/linux-2.6.27.10-clickport/include/linux/prio_tree.h"
++static inline __attribute__((always_inline)) int prio_tree_empty(const struct prio_tree_root *root)
++{
++ return root->prio_tree_node == 0;
++}
++
++static inline __attribute__((always_inline)) int prio_tree_root(const struct prio_tree_node *node)
++{
++ return node->parent == node;
++}
++
++static inline __attribute__((always_inline)) int prio_tree_left_empty(const struct prio_tree_node *node)
++{
++ return node->left == node;
++}
++
++static inline __attribute__((always_inline)) int prio_tree_right_empty(const struct prio_tree_node *node)
++{
++ return node->right == node;
++}
++
++
++struct prio_tree_node *prio_tree_replace(struct prio_tree_root *root,
++                struct prio_tree_node *old, struct prio_tree_node *node);
++struct prio_tree_node *prio_tree_insert(struct prio_tree_root *root,
++                struct prio_tree_node *node);
++void prio_tree_remove(struct prio_tree_root *root, struct prio_tree_node *node);
++struct prio_tree_node *prio_tree_next(struct prio_tree_iter *iter);
++# 13 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h" 1
++
++
++
++
++
++struct task_struct;
++
++extern int debug_locks;
++extern int debug_locks_silent;
++
++
++
++
++extern int debug_locks_off(void);
++# 40 "/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h"
++struct task_struct;
++# 49 "/d/kernels/linux-2.6.27.10-clickport/include/linux/debug_locks.h"
++static inline __attribute__((always_inline)) void debug_show_all_locks(void)
++{
++}
++
++static inline __attribute__((always_inline)) void __debug_show_held_locks(struct task_struct *task)
++{
++}
++
++static inline __attribute__((always_inline)) void debug_show_held_locks(struct task_struct *task)
++{
++}
++
++static inline __attribute__((always_inline)) void
++debug_check_no_locks_freed(const void *from, unsigned long len)
++{
++}
++
++static inline __attribute__((always_inline)) void
++debug_check_no_locks_held(struct task_struct *task)
++{
++}
++# 14 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm_types.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/auxvec.h" 1
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm_types.h" 2
++# 22 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm_types.h"
++struct address_space;
++
++
++typedef atomic_long_t mm_counter_t;
++# 37 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm_types.h"
++struct page {
++ unsigned long flags;
++
++ atomic_t _count;
++ union {
++  atomic_t _mapcount;
++
++
++
++  struct {
++   u16 inuse;
++   u16 objects;
++  };
++ };
++ union {
++     struct {
++  unsigned long xxx_private;
++
++
++
++
++
++
++  struct address_space *mapping;
++
++
++
++
++
++
++     };
++
++     spinlock_t ptl;
++
++     struct kmem_cache *slab;
++     struct page *first_page;
++ };
++ union {
++  unsigned long index;
++  void *freelist;
++ };
++ struct list_head lru;
++# 98 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm_types.h"
++};
++
++
++
++
++
++
++
++struct vm_area_struct {
++ struct mm_struct * vm_mm;
++ unsigned long vm_start;
++ unsigned long vm_end;
++
++
++
++ struct vm_area_struct *vm_next;
++
++ pgprot_t vm_page_prot;
++ unsigned long vm_flags;
++
++ struct rb_node vm_rb;
++
++
++
++
++
++
++
++ union {
++  struct {
++   struct list_head list;
++   void *parent;
++   struct vm_area_struct *head;
++  } vm_set;
++
++  struct raw_prio_tree_node prio_tree_node;
++ } shared;
++
++
++
++
++
++
++
++ struct list_head anon_vma_node;
++ struct anon_vma *anon_vma;
++
++
++ struct vm_operations_struct * vm_ops;
++
++
++ unsigned long vm_pgoff;
++
++ struct file * vm_file;
++ void * vm_private_data;
++ unsigned long vm_truncate_count;
++
++
++
++
++
++
++
++};
++
++struct core_thread {
++ struct task_struct *task;
++ struct core_thread *next;
++};
++
++struct core_state {
++ atomic_t nr_threads;
++ struct core_thread dumper;
++ struct completion startup;
++};
++
++struct mm_struct {
++ struct vm_area_struct * mmap;
++ struct rb_root mm_rb;
++ struct vm_area_struct * mmap_cache;
++ unsigned long (*get_unmapped_area) (struct file *filp,
++    unsigned long addr, unsigned long len,
++    unsigned long pgoff, unsigned long flags);
++ void (*unmap_area) (struct mm_struct *mm, unsigned long addr);
++ unsigned long mmap_base;
++ unsigned long task_size;
++ unsigned long cached_hole_size;
++ unsigned long free_area_cache;
++ pgd_t * pgd;
++ atomic_t mm_users;
++ atomic_t mm_count;
++ int map_count;
++ struct rw_semaphore mmap_sem;
++ spinlock_t page_table_lock;
++
++ struct list_head mmlist;
++
++
++
++
++
++
++
++ mm_counter_t _file_rss;
++ mm_counter_t _anon_rss;
++
++ unsigned long hiwater_rss;
++ unsigned long hiwater_vm;
++
++ unsigned long total_vm, locked_vm, shared_vm, exec_vm;
++ unsigned long stack_vm, reserved_vm, def_flags, nr_ptes;
++ unsigned long start_code, end_code, start_data, end_data;
++ unsigned long start_brk, brk, start_stack;
++ unsigned long arg_start, arg_end, env_start, env_end;
++
++ unsigned long saved_auxv[(2*(1 + 18 + 1))];
++
++ cpumask_t cpu_vm_mask;
++
++
++ mm_context_t context;
++ struct vx_info *mm_vx_info;
++# 228 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm_types.h"
++ unsigned int faultstamp;
++ unsigned int token_priority;
++ unsigned int last_interval;
++
++ unsigned long flags;
++
++ struct core_state *core_state;
++
++
++ rwlock_t ioctx_list_lock;
++ struct kioctx *ioctx_list;
++# 255 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm_types.h"
++ struct file *exe_file;
++ unsigned long num_exe_file_vmas;
++
++
++ struct mmu_notifier_mm *mmu_notifier_mm;
++
++};
++# 15 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h" 2
++
++struct mempolicy;
++struct anon_vma;
++struct file_ra_state;
++struct user_struct;
++struct writeback_control;
++
++
++extern unsigned long max_mapnr;
++
++
++extern unsigned long num_physpages;
++extern void * high_memory;
++extern int page_cluster;
++
++
++extern int sysctl_legacy_va_layout;
++
++
++
++
++extern unsigned long mmap_min_addr;
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h" 1
++# 139 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h"
++extern unsigned long empty_zero_page[((1UL) << 12) / sizeof(unsigned long)];
++
++
++extern spinlock_t pgd_lock;
++extern struct list_head pgd_list;
++
++
++
++
++
++static inline __attribute__((always_inline)) int pte_dirty(pte_t pte)
++{
++ return pte_flags(pte) & (((pteval_t)(1)) << 6);
++}
++
++static inline __attribute__((always_inline)) int pte_young(pte_t pte)
++{
++ return pte_flags(pte) & (((pteval_t)(1)) << 5);
++}
++
++static inline __attribute__((always_inline)) int pte_write(pte_t pte)
++{
++ return pte_flags(pte) & (((pteval_t)(1)) << 1);
++}
++
++static inline __attribute__((always_inline)) int pte_file(pte_t pte)
++{
++ return pte_flags(pte) & (((pteval_t)(1)) << 6);
++}
++
++static inline __attribute__((always_inline)) int pte_huge(pte_t pte)
++{
++ return pte_flags(pte) & (((pteval_t)(1)) << 7);
++}
++
++static inline __attribute__((always_inline)) int pte_global(pte_t pte)
++{
++ return pte_flags(pte) & (((pteval_t)(1)) << 8);
++}
++
++static inline __attribute__((always_inline)) int pte_exec(pte_t pte)
++{
++ return !(pte_flags(pte) & (((pteval_t)(0))));
++}
++
++static inline __attribute__((always_inline)) int pte_special(pte_t pte)
++{
++ return pte_val(pte) & (((pteval_t)(1)) << 9);
++}
++
++static inline __attribute__((always_inline)) int pmd_large(pmd_t pte)
++{
++ return (((pgd_val(((pte).pud).pgd))) & ((((pteval_t)(1)) << 7) | (((pteval_t)(1)) << 0))) ==
++  ((((pteval_t)(1)) << 7) | (((pteval_t)(1)) << 0));
++}
++
++static inline __attribute__((always_inline)) pte_t pte_mkclean(pte_t pte)
++{
++ return __pte(pte_val(pte) & ~(((pteval_t)(1)) << 6));
++}
++
++static inline __attribute__((always_inline)) pte_t pte_mkold(pte_t pte)
++{
++ return __pte(pte_val(pte) & ~(((pteval_t)(1)) << 5));
++}
++
++static inline __attribute__((always_inline)) pte_t pte_wrprotect(pte_t pte)
++{
++ return __pte(pte_val(pte) & ~(((pteval_t)(1)) << 1));
++}
++
++static inline __attribute__((always_inline)) pte_t pte_mkexec(pte_t pte)
++{
++ return __pte(pte_val(pte) & ~(((pteval_t)(0))));
++}
++
++static inline __attribute__((always_inline)) pte_t pte_mkdirty(pte_t pte)
++{
++ return __pte(pte_val(pte) | (((pteval_t)(1)) << 6));
++}
++
++static inline __attribute__((always_inline)) pte_t pte_mkyoung(pte_t pte)
++{
++ return __pte(pte_val(pte) | (((pteval_t)(1)) << 5));
++}
++
++static inline __attribute__((always_inline)) pte_t pte_mkwrite(pte_t pte)
++{
++ return __pte(pte_val(pte) | (((pteval_t)(1)) << 1));
++}
++
++static inline __attribute__((always_inline)) pte_t pte_mkhuge(pte_t pte)
++{
++ return __pte(pte_val(pte) | (((pteval_t)(1)) << 7));
++}
++
++static inline __attribute__((always_inline)) pte_t pte_clrhuge(pte_t pte)
++{
++ return __pte(pte_val(pte) & ~(((pteval_t)(1)) << 7));
++}
++
++static inline __attribute__((always_inline)) pte_t pte_mkglobal(pte_t pte)
++{
++ return __pte(pte_val(pte) | (((pteval_t)(1)) << 8));
++}
++
++static inline __attribute__((always_inline)) pte_t pte_clrglobal(pte_t pte)
++{
++ return __pte(pte_val(pte) & ~(((pteval_t)(1)) << 8));
++}
++
++static inline __attribute__((always_inline)) pte_t pte_mkspecial(pte_t pte)
++{
++ return __pte(pte_val(pte) | (((pteval_t)(1)) << 9));
++}
++
++extern pteval_t __supported_pte_mask;
++
++static inline __attribute__((always_inline)) pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot)
++{
++ return __pte((((phys_addr_t)page_nr << 12) |
++        ((pgprot).pgprot)) & __supported_pte_mask);
++}
++# 271 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h"
++static inline __attribute__((always_inline)) pte_t pte_modify(pte_t pte, pgprot_t newprot)
++{
++ pteval_t val = pte_val(pte);
++
++
++
++
++
++ val &= (((pteval_t)(((signed long)(~(((1UL) << 12)-1))) & ((phys_addr_t)(1ULL << 32) - 1))) | (((pteval_t)(1)) << 4) | (((pteval_t)(1)) << 3) | (((pteval_t)(1)) << 9) | (((pteval_t)(1)) << 5) | (((pteval_t)(1)) << 6));
++ val |= ((newprot).pgprot) & (~(((pteval_t)(((signed long)(~(((1UL) << 12)-1))) & ((phys_addr_t)(1ULL << 32) - 1))) | (((pteval_t)(1)) << 4) | (((pteval_t)(1)) << 3) | (((pteval_t)(1)) << 9) | (((pteval_t)(1)) << 5) | (((pteval_t)(1)) << 6))) & __supported_pte_mask;
++
++ return __pte(val);
++}
++
++
++
++static inline __attribute__((always_inline)) pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)
++{
++ pgprotval_t preservebits = ((oldprot).pgprot) & (((pteval_t)(((signed long)(~(((1UL) << 12)-1))) & ((phys_addr_t)(1ULL << 32) - 1))) | (((pteval_t)(1)) << 4) | (((pteval_t)(1)) << 3) | (((pteval_t)(1)) << 9) | (((pteval_t)(1)) << 5) | (((pteval_t)(1)) << 6));
++ pgprotval_t addbits = ((newprot).pgprot);
++ return ((pgprot_t) { (preservebits | addbits) } );
++}
++
++
++
++
++
++
++
++struct file;
++pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
++                              unsigned long size, pgprot_t vma_prot);
++int phys_mem_access_prot_allowed(struct file *file, unsigned long pfn,
++                              unsigned long size, pgprot_t *vma_prot);
++
++
++
++void set_pte_vaddr(unsigned long vaddr, pte_t pte);
++
++
++extern void native_pagetable_setup_start(pgd_t *base);
++extern void native_pagetable_setup_done(pgd_t *base);
++# 364 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h" 1
++# 25 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h"
++struct mm_struct;
++struct vm_area_struct;
++
++extern pgd_t swapper_pg_dir[1024];
++
++static inline __attribute__((always_inline)) void pgtable_cache_init(void) { }
++static inline __attribute__((always_inline)) void check_pgt_cache(void) { }
++void paging_init(void);
++# 45 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level-defs.h" 1
++# 46 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h" 2
++# 84 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h"
++extern unsigned long pg0[];
++# 98 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h" 1
++# 14 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h"
++static inline __attribute__((always_inline)) void native_set_pte(pte_t *ptep , pte_t pte)
++{
++ *ptep = pte;
++}
++
++static inline __attribute__((always_inline)) void native_set_pmd(pmd_t *pmdp, pmd_t pmd)
++{
++ *pmdp = pmd;
++}
++
++static inline __attribute__((always_inline)) void native_set_pte_atomic(pte_t *ptep, pte_t pte)
++{
++ native_set_pte(ptep, pte);
++}
++
++static inline __attribute__((always_inline)) void native_set_pte_present(struct mm_struct *mm,
++       unsigned long addr,
++       pte_t *ptep, pte_t pte)
++{
++ native_set_pte(ptep, pte);
++}
++# 43 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable-2level.h"
++static inline __attribute__((always_inline)) void native_pte_clear(struct mm_struct *mm,
++        unsigned long addr, pte_t *xp)
++{
++ *xp = native_make_pte(0);
++}
++
++
++static inline __attribute__((always_inline)) pte_t native_ptep_get_and_clear(pte_t *xp)
++{
++ return __pte(((__typeof__(*(&xp->pte_low)))__xchg((unsigned long)(0), (&xp->pte_low), sizeof(*(&xp->pte_low)))));
++}
++# 99 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h" 2
++# 117 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable_32.h"
++static inline __attribute__((always_inline)) int pud_large(pud_t pud) { return 0; }
++# 365 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h" 2
++# 394 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h"
++enum {
++ PG_LEVEL_NONE,
++ PG_LEVEL_4K,
++ PG_LEVEL_2M,
++ PG_LEVEL_1G,
++ PG_LEVEL_NUM
++};
++
++
++extern void update_page_count(int level, unsigned long pages);
++# 414 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h"
++extern pte_t *lookup_address(unsigned long address, unsigned int *level);
++
++
++static inline __attribute__((always_inline)) pte_t native_local_ptep_get_and_clear(pte_t *ptep)
++{
++ pte_t res = *ptep;
++
++
++ native_pte_clear(0, 0, ptep);
++ return res;
++}
++
++static inline __attribute__((always_inline)) void native_set_pte_at(struct mm_struct *mm, unsigned long addr,
++         pte_t *ptep , pte_t pte)
++{
++ native_set_pte(ptep, pte);
++}
++# 457 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h"
++struct vm_area_struct;
++
++
++extern int ptep_set_access_flags(struct vm_area_struct *vma,
++     unsigned long address, pte_t *ptep,
++     pte_t entry, int dirty);
++
++
++extern int ptep_test_and_clear_young(struct vm_area_struct *vma,
++         unsigned long addr, pte_t *ptep);
++
++
++extern int ptep_clear_flush_young(struct vm_area_struct *vma,
++      unsigned long address, pte_t *ptep);
++
++
++static inline __attribute__((always_inline)) pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr,
++           pte_t *ptep)
++{
++ pte_t pte = native_ptep_get_and_clear(ptep);
++ pte_update(mm, addr, ptep);
++ return pte;
++}
++
++
++static inline __attribute__((always_inline)) pte_t ptep_get_and_clear_full(struct mm_struct *mm,
++         unsigned long addr, pte_t *ptep,
++         int full)
++{
++ pte_t pte;
++ if (full) {
++
++
++
++
++  pte = native_local_ptep_get_and_clear(ptep);
++ } else {
++  pte = ptep_get_and_clear(mm, addr, ptep);
++ }
++ return pte;
++}
++
++
++static inline __attribute__((always_inline)) void ptep_set_wrprotect(struct mm_struct *mm,
++          unsigned long addr, pte_t *ptep)
++{
++ clear_bit(1, (unsigned long *)&ptep->pte);
++ pte_update(mm, addr, ptep);
++}
++# 517 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h"
++static inline __attribute__((always_inline)) void clone_pgd_range(pgd_t *dst, pgd_t *src, int count)
++{
++       (__builtin_constant_p((count * sizeof(pgd_t))) ? __constant_memcpy((dst), (src), (count * sizeof(pgd_t))) : __memcpy((dst), (src), (count * sizeof(pgd_t))));
++}
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable.h" 1
++# 162 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/pgtable.h"
++void pgd_clear_bad(pgd_t *);
++void pud_clear_bad(pud_t *);
++void pmd_clear_bad(pmd_t *);
++
++static inline __attribute__((always_inline)) int pgd_none_or_clear_bad(pgd_t *pgd)
++{
++ if (pgd_none(*pgd))
++  return 1;
++ if (__builtin_expect(!!(pgd_bad(*pgd)), 0)) {
++  pgd_clear_bad(pgd);
++  return 1;
++ }
++ return 0;
++}
++
++static inline __attribute__((always_inline)) int pud_none_or_clear_bad(pud_t *pud)
++{
++ if (pud_none(*pud))
++  return 1;
++ if (__builtin_expect(!!(pud_bad(*pud)), 0)) {
++  pud_clear_bad(pud);
++  return 1;
++ }
++ return 0;
++}
++
++static inline __attribute__((always_inline)) int pmd_none_or_clear_bad(pmd_t *pmd)
++{
++ if ((!(unsigned long)((pgd_val((((*pmd)).pud).pgd)))))
++  return 1;
++ if (__builtin_expect(!!(((((pgd_val(((*pmd).pud).pgd))) & ((~((pteval_t)(((signed long)(~(((1UL) << 12)-1))) & ((phys_addr_t)(1ULL << 32) - 1)))) & ~(((pteval_t)(1)) << 2))) != ((((pteval_t)(1)) << 0) | (((pteval_t)(1)) << 1) | (((pteval_t)(1)) << 5) | (((pteval_t)(1)) << 6)))), 0)) {
++  pmd_clear_bad(pmd);
++  return 1;
++ }
++ return 0;
++}
++
++static inline __attribute__((always_inline)) pte_t __ptep_modify_prot_start(struct mm_struct *mm,
++          unsigned long addr,
++          pte_t *ptep)
++{
++
++
++
++
++
++ return ptep_get_and_clear(mm, addr, ptep);
++}
++
++static inline __attribute__((always_inline)) void __ptep_modify_prot_commit(struct mm_struct *mm,
++          unsigned long addr,
++          pte_t *ptep, pte_t pte)
++{
++
++
++
++
++ set_pte_at(mm, addr, ptep, pte);
++}
++# 524 "/d/kernels/linux-2.6.27.10-clickport/include/asm/pgtable.h" 2
++# 40 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h" 2
++# 56 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++extern struct kmem_cache *vm_area_cachep;
++
++
++
++
++
++
++struct vm_list_struct {
++ struct vm_list_struct *next;
++ struct vm_area_struct *vma;
++};
++# 137 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++extern pgprot_t protection_map[16];
++# 152 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++struct vm_fault {
++ unsigned int flags;
++ unsigned long pgoff;
++ void *virtual_address;
++
++ struct page *page;
++
++
++
++
++};
++
++
++
++
++
++
++struct vm_operations_struct {
++ void (*open)(struct vm_area_struct * area);
++ void (*close)(struct vm_area_struct * area);
++ int (*fault)(struct vm_area_struct *vma, struct vm_fault *vmf);
++
++
++
++ int (*page_mkwrite)(struct vm_area_struct *vma, struct page *page);
++
++
++
++
++ int (*access)(struct vm_area_struct *vma, unsigned long addr,
++        void *buf, int len, int write);
++# 208 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++};
++
++struct mmu_gather;
++struct inode;
++# 220 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h" 1
++# 72 "/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h"
++enum pageflags {
++ PG_locked,
++ PG_error,
++ PG_referenced,
++ PG_uptodate,
++ PG_dirty,
++ PG_lru,
++ PG_active,
++ PG_slab,
++ PG_owner_priv_1,
++ PG_arch_1,
++ PG_reserved,
++ PG_private,
++ PG_writeback,
++
++ PG_head,
++ PG_tail,
++
++
++
++ PG_swapcache,
++ PG_mappedtodisk,
++ PG_reclaim,
++ PG_buddy,
++
++
++
++ __NR_PAGEFLAGS,
++
++
++ PG_checked = PG_owner_priv_1,
++
++
++ PG_pinned = PG_owner_priv_1,
++ PG_savepinned = PG_dirty,
++
++
++ PG_slob_page = PG_active,
++ PG_slob_free = PG_private,
++
++
++ PG_slub_frozen = PG_active,
++ PG_slub_debug = PG_error,
++};
++# 164 "/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h"
++struct page;
++
++static inline __attribute__((always_inline)) int PageLocked(struct page *page) { return (__builtin_constant_p((PG_locked)) ? constant_test_bit((PG_locked), (&page->flags)) : variable_test_bit((PG_locked), (&page->flags))); }
++static inline __attribute__((always_inline)) int PageError(struct page *page) { return (__builtin_constant_p((PG_error)) ? constant_test_bit((PG_error), (&page->flags)) : variable_test_bit((PG_error), (&page->flags))); } static inline __attribute__((always_inline)) void SetPageError(struct page *page) { set_bit(PG_error, &page->flags); } static inline __attribute__((always_inline)) void ClearPageError(struct page *page) { clear_bit(PG_error, &page->flags); }
++static inline __attribute__((always_inline)) int PageReferenced(struct page *page) { return (__builtin_constant_p((PG_referenced)) ? constant_test_bit((PG_referenced), (&page->flags)) : variable_test_bit((PG_referenced), (&page->flags))); } static inline __attribute__((always_inline)) void SetPageReferenced(struct page *page) { set_bit(PG_referenced, &page->flags); } static inline __attribute__((always_inline)) void ClearPageReferenced(struct page *page) { clear_bit(PG_referenced, &page->flags); } static inline __attribute__((always_inline)) int TestClearPageReferenced(struct page *page) { return test_and_clear_bit(PG_referenced, &page->flags); }
++static inline __attribute__((always_inline)) int PageDirty(struct page *page) { return (__builtin_constant_p((PG_dirty)) ? constant_test_bit((PG_dirty), (&page->flags)) : variable_test_bit((PG_dirty), (&page->flags))); } static inline __attribute__((always_inline)) void SetPageDirty(struct page *page) { set_bit(PG_dirty, &page->flags); } static inline __attribute__((always_inline)) void ClearPageDirty(struct page *page) { clear_bit(PG_dirty, &page->flags); } static inline __attribute__((always_inline)) int TestSetPageDirty(struct page *page) { return test_and_set_bit(PG_dirty, &page->flags); } static inline __attribute__((always_inline)) int TestClearPageDirty(struct page *page) { return test_and_clear_bit(PG_dirty, &page->flags); } static inline __attribute__((always_inline)) void __ClearPageDirty(struct page *page) { __clear_bit(PG_dirty, &page->flags); }
++static inline __attribute__((always_inline)) int PageLRU(struct page *page) { return (__builtin_constant_p((PG_lru)) ? constant_test_bit((PG_lru), (&page->flags)) : variable_test_bit((PG_lru), (&page->flags))); } static inline __attribute__((always_inline)) void SetPageLRU(struct page *page) { set_bit(PG_lru, &page->flags); } static inline __attribute__((always_inline)) void ClearPageLRU(struct page *page) { clear_bit(PG_lru, &page->flags); } static inline __attribute__((always_inline)) void __ClearPageLRU(struct page *page) { __clear_bit(PG_lru, &page->flags); }
++static inline __attribute__((always_inline)) int PageActive(struct page *page) { return (__builtin_constant_p((PG_active)) ? constant_test_bit((PG_active), (&page->flags)) : variable_test_bit((PG_active), (&page->flags))); } static inline __attribute__((always_inline)) void SetPageActive(struct page *page) { set_bit(PG_active, &page->flags); } static inline __attribute__((always_inline)) void ClearPageActive(struct page *page) { clear_bit(PG_active, &page->flags); } static inline __attribute__((always_inline)) void __ClearPageActive(struct page *page) { __clear_bit(PG_active, &page->flags); }
++static inline __attribute__((always_inline)) int PageSlab(struct page *page) { return (__builtin_constant_p((PG_slab)) ? constant_test_bit((PG_slab), (&page->flags)) : variable_test_bit((PG_slab), (&page->flags))); } static inline __attribute__((always_inline)) void __SetPageSlab(struct page *page) { __set_bit(PG_slab, &page->flags); } static inline __attribute__((always_inline)) void __ClearPageSlab(struct page *page) { __clear_bit(PG_slab, &page->flags); }
++static inline __attribute__((always_inline)) int PageChecked(struct page *page) { return (__builtin_constant_p((PG_checked)) ? constant_test_bit((PG_checked), (&page->flags)) : variable_test_bit((PG_checked), (&page->flags))); } static inline __attribute__((always_inline)) void SetPageChecked(struct page *page) { set_bit(PG_checked, &page->flags); } static inline __attribute__((always_inline)) void ClearPageChecked(struct page *page) { clear_bit(PG_checked, &page->flags); }
++static inline __attribute__((always_inline)) int PagePinned(struct page *page) { return (__builtin_constant_p((PG_pinned)) ? constant_test_bit((PG_pinned), (&page->flags)) : variable_test_bit((PG_pinned), (&page->flags))); } static inline __attribute__((always_inline)) void SetPagePinned(struct page *page) { set_bit(PG_pinned, &page->flags); } static inline __attribute__((always_inline)) void ClearPagePinned(struct page *page) { clear_bit(PG_pinned, &page->flags); } static inline __attribute__((always_inline)) int TestSetPagePinned(struct page *page) { return test_and_set_bit(PG_pinned, &page->flags); } static inline __attribute__((always_inline)) int TestClearPagePinned(struct page *page) { return test_and_clear_bit(PG_pinned, &page->flags); }
++static inline __attribute__((always_inline)) int PageSavePinned(struct page *page) { return (__builtin_constant_p((PG_savepinned)) ? constant_test_bit((PG_savepinned), (&page->flags)) : variable_test_bit((PG_savepinned), (&page->flags))); } static inline __attribute__((always_inline)) void SetPageSavePinned(struct page *page) { set_bit(PG_savepinned, &page->flags); } static inline __attribute__((always_inline)) void ClearPageSavePinned(struct page *page) { clear_bit(PG_savepinned, &page->flags); };
++static inline __attribute__((always_inline)) int PageReserved(struct page *page) { return (__builtin_constant_p((PG_reserved)) ? constant_test_bit((PG_reserved), (&page->flags)) : variable_test_bit((PG_reserved), (&page->flags))); } static inline __attribute__((always_inline)) void SetPageReserved(struct page *page) { set_bit(PG_reserved, &page->flags); } static inline __attribute__((always_inline)) void ClearPageReserved(struct page *page) { clear_bit(PG_reserved, &page->flags); } static inline __attribute__((always_inline)) void __ClearPageReserved(struct page *page) { __clear_bit(PG_reserved, &page->flags); }
++
++
++
++
++
++static inline __attribute__((always_inline)) int PageSlobPage(struct page *page) { return (__builtin_constant_p((PG_slob_page)) ? constant_test_bit((PG_slob_page), (&page->flags)) : variable_test_bit((PG_slob_page), (&page->flags))); } static inline __attribute__((always_inline)) void __SetPageSlobPage(struct page *page) { __set_bit(PG_slob_page, &page->flags); } static inline __attribute__((always_inline)) void __ClearPageSlobPage(struct page *page) { __clear_bit(PG_slob_page, &page->flags); }
++static inline __attribute__((always_inline)) int PageSlobFree(struct page *page) { return (__builtin_constant_p((PG_slob_free)) ? constant_test_bit((PG_slob_free), (&page->flags)) : variable_test_bit((PG_slob_free), (&page->flags))); } static inline __attribute__((always_inline)) void __SetPageSlobFree(struct page *page) { __set_bit(PG_slob_free, &page->flags); } static inline __attribute__((always_inline)) void __ClearPageSlobFree(struct page *page) { __clear_bit(PG_slob_free, &page->flags); }
++
++static inline __attribute__((always_inline)) int PageSlubFrozen(struct page *page) { return (__builtin_constant_p((PG_slub_frozen)) ? constant_test_bit((PG_slub_frozen), (&page->flags)) : variable_test_bit((PG_slub_frozen), (&page->flags))); } static inline __attribute__((always_inline)) void __SetPageSlubFrozen(struct page *page) { __set_bit(PG_slub_frozen, &page->flags); } static inline __attribute__((always_inline)) void __ClearPageSlubFrozen(struct page *page) { __clear_bit(PG_slub_frozen, &page->flags); }
++static inline __attribute__((always_inline)) int PageSlubDebug(struct page *page) { return (__builtin_constant_p((PG_slub_debug)) ? constant_test_bit((PG_slub_debug), (&page->flags)) : variable_test_bit((PG_slub_debug), (&page->flags))); } static inline __attribute__((always_inline)) void __SetPageSlubDebug(struct page *page) { __set_bit(PG_slub_debug, &page->flags); } static inline __attribute__((always_inline)) void __ClearPageSlubDebug(struct page *page) { __clear_bit(PG_slub_debug, &page->flags); }
++
++
++
++
++
++static inline __attribute__((always_inline)) int PageWriteback(struct page *page) { return (__builtin_constant_p((PG_writeback)) ? constant_test_bit((PG_writeback), (&page->flags)) : variable_test_bit((PG_writeback), (&page->flags))); } static inline __attribute__((always_inline)) int TestSetPageWriteback(struct page *page) { return test_and_set_bit(PG_writeback, &page->flags); } static inline __attribute__((always_inline)) int TestClearPageWriteback(struct page *page) { return test_and_clear_bit(PG_writeback, &page->flags); }
++static inline __attribute__((always_inline)) int PageBuddy(struct page *page) { return (__builtin_constant_p((PG_buddy)) ? constant_test_bit((PG_buddy), (&page->flags)) : variable_test_bit((PG_buddy), (&page->flags))); } static inline __attribute__((always_inline)) void __SetPageBuddy(struct page *page) { __set_bit(PG_buddy, &page->flags); } static inline __attribute__((always_inline)) void __ClearPageBuddy(struct page *page) { __clear_bit(PG_buddy, &page->flags); }
++static inline __attribute__((always_inline)) int PageMappedToDisk(struct page *page) { return (__builtin_constant_p((PG_mappedtodisk)) ? constant_test_bit((PG_mappedtodisk), (&page->flags)) : variable_test_bit((PG_mappedtodisk), (&page->flags))); } static inline __attribute__((always_inline)) void SetPageMappedToDisk(struct page *page) { set_bit(PG_mappedtodisk, &page->flags); } static inline __attribute__((always_inline)) void ClearPageMappedToDisk(struct page *page) { clear_bit(PG_mappedtodisk, &page->flags); }
++
++
++static inline __attribute__((always_inline)) int PageReclaim(struct page *page) { return (__builtin_constant_p((PG_reclaim)) ? constant_test_bit((PG_reclaim), (&page->flags)) : variable_test_bit((PG_reclaim), (&page->flags))); } static inline __attribute__((always_inline)) void SetPageReclaim(struct page *page) { set_bit(PG_reclaim, &page->flags); } static inline __attribute__((always_inline)) void ClearPageReclaim(struct page *page) { clear_bit(PG_reclaim, &page->flags); } static inline __attribute__((always_inline)) int TestClearPageReclaim(struct page *page) { return test_and_clear_bit(PG_reclaim, &page->flags); }
++static inline __attribute__((always_inline)) int PageReadahead(struct page *page) { return (__builtin_constant_p((PG_reclaim)) ? constant_test_bit((PG_reclaim), (&page->flags)) : variable_test_bit((PG_reclaim), (&page->flags))); } static inline __attribute__((always_inline)) void SetPageReadahead(struct page *page) { set_bit(PG_reclaim, &page->flags); } static inline __attribute__((always_inline)) void ClearPageReadahead(struct page *page) { clear_bit(PG_reclaim, &page->flags); }
++# 211 "/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h"
++static inline __attribute__((always_inline)) int PageSwapCache(struct page *page) { return (__builtin_constant_p((PG_swapcache)) ? constant_test_bit((PG_swapcache), (&page->flags)) : variable_test_bit((PG_swapcache), (&page->flags))); } static inline __attribute__((always_inline)) void SetPageSwapCache(struct page *page) { set_bit(PG_swapcache, &page->flags); } static inline __attribute__((always_inline)) void ClearPageSwapCache(struct page *page) { clear_bit(PG_swapcache, &page->flags); }
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) int PageUncached(struct page *page) { return 0; }
++
++
++static inline __attribute__((always_inline)) int PageUptodate(struct page *page)
++{
++ int ret = (__builtin_constant_p((PG_uptodate)) ? constant_test_bit((PG_uptodate), (&(page)->flags)) : variable_test_bit((PG_uptodate), (&(page)->flags)));
++# 234 "/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h"
++ if (ret)
++  asm volatile ("661:\n\t" "lock; addl $0,0(%%esp)" "\n662:\n" ".section .altinstructions,\"a\"\n" " " ".balign 4" " " "\n" " " ".long" " " "661b\n" " " ".long" " " "663f\n" "        .byte %c0\n" "  .byte 662b-661b\n" "    .byte 664f-663f\n" ".previous\n" ".section .altinstr_replacement,\"ax\"\n" "663:\n\t" "lfence" "\n664:\n" ".previous" :: "i" ((0*32+26)) : "memory");
++
++ return ret;
++}
++
++static inline __attribute__((always_inline)) void __SetPageUptodate(struct page *page)
++{
++ __asm__ __volatile__("": : :"memory");
++ __set_bit(PG_uptodate, &(page)->flags);
++}
++
++static inline __attribute__((always_inline)) void SetPageUptodate(struct page *page)
++{
++# 260 "/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h"
++ __asm__ __volatile__("": : :"memory");
++ set_bit(PG_uptodate, &(page)->flags);
++
++}
++
++static inline __attribute__((always_inline)) void ClearPageUptodate(struct page *page) { clear_bit(PG_uptodate, &page->flags); }
++
++extern void cancel_dirty_page(struct page *page, unsigned int account_size);
++
++int test_clear_page_writeback(struct page *page);
++int test_set_page_writeback(struct page *page);
++
++static inline __attribute__((always_inline)) void set_page_writeback(struct page *page)
++{
++ test_set_page_writeback(page);
++}
++# 284 "/d/kernels/linux-2.6.27.10-clickport/include/linux/page-flags.h"
++static inline __attribute__((always_inline)) int PageHead(struct page *page) { return (__builtin_constant_p((PG_head)) ? constant_test_bit((PG_head), (&page->flags)) : variable_test_bit((PG_head), (&page->flags))); } static inline __attribute__((always_inline)) void __SetPageHead(struct page *page) { __set_bit(PG_head, &page->flags); } static inline __attribute__((always_inline)) void __ClearPageHead(struct page *page) { __clear_bit(PG_head, &page->flags); }
++static inline __attribute__((always_inline)) int PageTail(struct page *page) { return (__builtin_constant_p((PG_tail)) ? constant_test_bit((PG_tail), (&page->flags)) : variable_test_bit((PG_tail), (&page->flags))); } static inline __attribute__((always_inline)) void __SetPageTail(struct page *page) { __set_bit(PG_tail, &page->flags); } static inline __attribute__((always_inline)) void __ClearPageTail(struct page *page) { __clear_bit(PG_tail, &page->flags); }
++
++static inline __attribute__((always_inline)) int PageCompound(struct page *page)
++{
++ return page->flags & ((1L << PG_head) | (1L << PG_tail));
++
++}
++# 221 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h" 2
++# 244 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++static inline __attribute__((always_inline)) int put_page_testzero(struct page *page)
++{
++ do { } while(0);
++ return atomic_dec_and_test(&page->_count);
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) int get_page_unless_zero(struct page *page)
++{
++ do { } while(0);
++ return atomic_add_unless((&page->_count), 1, 0);
++}
++
++
++struct page *vmalloc_to_page(const void *addr);
++unsigned long vmalloc_to_pfn(const void *addr);
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) int is_vmalloc_addr(const void *x)
++{
++
++ unsigned long addr = (unsigned long)x;
++
++ return addr >= (((unsigned long)high_memory + 2 * (8 * 1024 * 1024) - 1) & ~((8 * 1024 * 1024) - 1)) && addr < ((((((unsigned long)__FIXADDR_TOP) - (__end_of_fixed_addresses << 12)) - ((1UL) << 12) * (1024 + 1)) & (~((1UL << 22)-1))) - 2 * ((1UL) << 12));
++
++
++
++}
++
++static inline __attribute__((always_inline)) struct page *compound_head(struct page *page)
++{
++ if (__builtin_expect(!!(PageTail(page)), 0))
++  return page->first_page;
++ return page;
++}
++
++static inline __attribute__((always_inline)) int page_count(struct page *page)
++{
++ return ((&compound_head(page)->_count)->counter);
++}
++
++static inline __attribute__((always_inline)) void get_page(struct page *page)
++{
++ page = compound_head(page);
++ do { } while(0);
++ atomic_inc(&page->_count);
++}
++
++static inline __attribute__((always_inline)) struct page *virt_to_head_page(const void *x)
++{
++ struct page *page = (mem_map + (((((unsigned long)(x)) - ((unsigned long)(0xC0000000UL))) >> 12) - (0UL)));
++ return compound_head(page);
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) void init_page_count(struct page *page)
++{
++ (((&page->_count)->counter) = (1));
++}
++
++void put_page(struct page *page);
++void put_pages_list(struct list_head *pages);
++
++void split_page(struct page *page, unsigned int order);
++
++
++
++
++
++
++typedef void compound_page_dtor(struct page *);
++
++static inline __attribute__((always_inline)) void set_compound_page_dtor(struct page *page,
++      compound_page_dtor *dtor)
++{
++ page[1].lru.next = (struct list_head *)dtor;
++}
++
++static inline __attribute__((always_inline)) compound_page_dtor *get_compound_page_dtor(struct page *page)
++{
++ return (compound_page_dtor *)page[1].lru.next;
++}
++
++static inline __attribute__((always_inline)) int compound_order(struct page *page)
++{
++ if (!PageHead(page))
++  return 0;
++ return (unsigned long)page[1].lru.prev;
++}
++
++static inline __attribute__((always_inline)) void set_compound_order(struct page *page, unsigned long order)
++{
++ page[1].lru.prev = (struct list_head *)order;
++}
++# 495 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++static inline __attribute__((always_inline)) enum zone_type page_zonenum(struct page *page)
++{
++ return (enum zone_type) ((page->flags >> (((((sizeof(unsigned long)*8) - 0) - 0) - 2) * (2 != 0))) & ((1UL << 2) - 1));
++}
++# 508 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++static inline __attribute__((always_inline)) int page_zone_id(struct page *page)
++{
++ return (page->flags >> ((((((sizeof(unsigned long)*8) - 0) - 0) < ((((sizeof(unsigned long)*8) - 0) - 0) - 2))? (((sizeof(unsigned long)*8) - 0) - 0) : ((((sizeof(unsigned long)*8) - 0) - 0) - 2)) * ((0 + 2) != 0))) & ((1UL << (0 + 2)) - 1);
++}
++
++static inline __attribute__((always_inline)) int zone_to_nid(struct zone *zone)
++{
++
++
++
++ return 0;
++
++}
++
++
++
++
++static inline __attribute__((always_inline)) int page_to_nid(struct page *page)
++{
++ return (page->flags >> ((((sizeof(unsigned long)*8) - 0) - 0) * (0 != 0))) & ((1UL << 0) - 1);
++}
++
++
++static inline __attribute__((always_inline)) struct zone *page_zone(struct page *page)
++{
++ return &(&contig_page_data)->node_zones[page_zonenum(page)];
++}
++# 543 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++static inline __attribute__((always_inline)) void set_page_zone(struct page *page, enum zone_type zone)
++{
++ page->flags &= ~(((1UL << 2) - 1) << (((((sizeof(unsigned long)*8) - 0) - 0) - 2) * (2 != 0)));
++ page->flags |= (zone & ((1UL << 2) - 1)) << (((((sizeof(unsigned long)*8) - 0) - 0) - 2) * (2 != 0));
++}
++
++static inline __attribute__((always_inline)) void set_page_node(struct page *page, unsigned long node)
++{
++ page->flags &= ~(((1UL << 0) - 1) << ((((sizeof(unsigned long)*8) - 0) - 0) * (0 != 0)));
++ page->flags |= (node & ((1UL << 0) - 1)) << ((((sizeof(unsigned long)*8) - 0) - 0) * (0 != 0));
++}
++
++static inline __attribute__((always_inline)) void set_page_section(struct page *page, unsigned long section)
++{
++ page->flags &= ~(((1UL << 0) - 1) << (((sizeof(unsigned long)*8) - 0) * (0 != 0)));
++ page->flags |= (section & ((1UL << 0) - 1)) << (((sizeof(unsigned long)*8) - 0) * (0 != 0));
++}
++
++static inline __attribute__((always_inline)) void set_page_links(struct page *page, enum zone_type zone,
++ unsigned long node, unsigned long pfn)
++{
++ set_page_zone(page, zone);
++ set_page_node(page, node);
++ set_page_section(page, ((pfn) >> 0));
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) unsigned long round_hint_to_min(unsigned long hint)
++{
++
++ hint &= (~(((1UL) << 12)-1));
++ if (((void *)hint != 0) &&
++     (hint < mmap_min_addr))
++  return (((mmap_min_addr)+((typeof(mmap_min_addr))(((1UL) << 12))-1))&~((typeof(mmap_min_addr))(((1UL) << 12))-1));
++
++ return hint;
++}
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vmstat.h" 1
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h" 1
++# 7 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vmstat.h" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic.h" 1
++# 9 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vmstat.h" 2
++# 31 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vmstat.h"
++enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT,
++  PGALLOC_DMA, PGALLOC_NORMAL , PGALLOC_HIGH , PGALLOC_MOVABLE,
++  PGFREE, PGACTIVATE, PGDEACTIVATE,
++  PGFAULT, PGMAJFAULT,
++  PGREFILL_DMA, PGREFILL_NORMAL , PGREFILL_HIGH , PGREFILL_MOVABLE,
++  PGSTEAL_DMA, PGSTEAL_NORMAL , PGSTEAL_HIGH , PGSTEAL_MOVABLE,
++  PGSCAN_KSWAPD_DMA, PGSCAN_KSWAPD_NORMAL , PGSCAN_KSWAPD_HIGH , PGSCAN_KSWAPD_MOVABLE,
++  PGSCAN_DIRECT_DMA, PGSCAN_DIRECT_NORMAL , PGSCAN_DIRECT_HIGH , PGSCAN_DIRECT_MOVABLE,
++  PGINODESTEAL, SLABS_SCANNED, KSWAPD_STEAL, KSWAPD_INODESTEAL,
++  PAGEOUTRUN, ALLOCSTALL, PGROTATED,
++
++  HTLB_BUDDY_PGALLOC, HTLB_BUDDY_PGALLOC_FAIL,
++
++  NR_VM_EVENT_ITEMS
++};
++
++extern const struct seq_operations fragmentation_op;
++extern const struct seq_operations pagetypeinfo_op;
++extern const struct seq_operations zoneinfo_op;
++extern const struct seq_operations vmstat_op;
++extern int sysctl_stat_interval;
++# 64 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vmstat.h"
++struct vm_event_state {
++ unsigned long event[NR_VM_EVENT_ITEMS];
++};
++
++extern __typeof__(struct vm_event_state) per_cpu__vm_event_states;
++
++static inline __attribute__((always_inline)) void __count_vm_event(enum vm_event_item item)
++{
++ (*({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((&per_cpu__vm_event_states))); (typeof((&per_cpu__vm_event_states))) (__ptr + ((({ typeof(per_cpu__this_cpu_off) ret__; switch (sizeof(per_cpu__this_cpu_off)) { case 1: asm("mov" "b ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__this_cpu_off)); break; case 2: asm("mov" "w ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__this_cpu_off)); break; case 4: asm("mov" "l ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__this_cpu_off)); break; default: __bad_percpu_size(); } ret__; })))); })).event[item]++;
++}
++
++static inline __attribute__((always_inline)) void count_vm_event(enum vm_event_item item)
++{
++ (*({ extern int simple_identifier_vm_event_states(void); do { } while (0); &(*({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((&per_cpu__vm_event_states))); (typeof((&per_cpu__vm_event_states))) (__ptr + ((({ typeof(per_cpu__this_cpu_off) ret__; switch (sizeof(per_cpu__this_cpu_off)) { case 1: asm("mov" "b ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__this_cpu_off)); break; case 2: asm("mov" "w ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__this_cpu_off)); break; case 4: asm("mov" "l ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__this_cpu_off)); break; default: __bad_percpu_size(); } ret__; })))); })); })).event[item]++;
++ do { } while (0);
++}
++
++static inline __attribute__((always_inline)) void __count_vm_events(enum vm_event_item item, long delta)
++{
++ (*({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((&per_cpu__vm_event_states))); (typeof((&per_cpu__vm_event_states))) (__ptr + ((({ typeof(per_cpu__this_cpu_off) ret__; switch (sizeof(per_cpu__this_cpu_off)) { case 1: asm("mov" "b ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__this_cpu_off)); break; case 2: asm("mov" "w ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__this_cpu_off)); break; case 4: asm("mov" "l ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__this_cpu_off)); break; default: __bad_percpu_size(); } ret__; })))); })).event[item] += delta;
++}
++
++static inline __attribute__((always_inline)) void count_vm_events(enum vm_event_item item, long delta)
++{
++ (*({ extern int simple_identifier_vm_event_states(void); do { } while (0); &(*({ unsigned long __ptr; __asm__ ("" : "=r"(__ptr) : "0"((&per_cpu__vm_event_states))); (typeof((&per_cpu__vm_event_states))) (__ptr + ((({ typeof(per_cpu__this_cpu_off) ret__; switch (sizeof(per_cpu__this_cpu_off)) { case 1: asm("mov" "b ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__this_cpu_off)); break; case 2: asm("mov" "w ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__this_cpu_off)); break; case 4: asm("mov" "l ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__this_cpu_off)); break; default: __bad_percpu_size(); } ret__; })))); })); })).event[item] += delta;
++ do { } while (0);
++}
++
++extern void all_vm_events(unsigned long *);
++
++extern void vm_events_fold_cpu(int cpu);
++# 132 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vmstat.h"
++extern atomic_long_t vm_stat[NR_VM_ZONE_STAT_ITEMS];
++
++static inline __attribute__((always_inline)) void zone_page_state_add(long x, struct zone *zone,
++     enum zone_stat_item item)
++{
++ atomic_long_add(x, &zone->vm_stat[item]);
++ atomic_long_add(x, &vm_stat[item]);
++}
++
++static inline __attribute__((always_inline)) unsigned long global_page_state(enum zone_stat_item item)
++{
++ long x = atomic_long_read(&vm_stat[item]);
++
++ if (x < 0)
++  x = 0;
++
++ return x;
++}
++
++static inline __attribute__((always_inline)) unsigned long zone_page_state(struct zone *zone,
++     enum zone_stat_item item)
++{
++ long x = atomic_long_read(&zone->vm_stat[item]);
++
++ if (x < 0)
++  x = 0;
++
++ return x;
++}
++# 204 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vmstat.h"
++static inline __attribute__((always_inline)) void zap_zone_vm_stats(struct zone *zone)
++{
++ (__builtin_constant_p(0) ? (__builtin_constant_p((sizeof(zone->vm_stat))) ? __constant_c_and_count_memset(((zone->vm_stat)), ((0x01010101UL * (unsigned char)(0))), ((sizeof(zone->vm_stat)))) : __constant_c_memset(((zone->vm_stat)), ((0x01010101UL * (unsigned char)(0))), ((sizeof(zone->vm_stat))))) : (__builtin_constant_p((sizeof(zone->vm_stat))) ? __memset_generic((((zone->vm_stat))), (((0))), (((sizeof(zone->vm_stat))))) : __memset_generic(((zone->vm_stat)), ((0)), ((sizeof(zone->vm_stat))))));
++}
++
++extern void inc_zone_state(struct zone *, enum zone_stat_item);
++
++
++void __mod_zone_page_state(struct zone *, enum zone_stat_item item, int);
++void __inc_zone_page_state(struct page *, enum zone_stat_item);
++void __dec_zone_page_state(struct page *, enum zone_stat_item);
++
++void mod_zone_page_state(struct zone *, enum zone_stat_item, int);
++void inc_zone_page_state(struct page *, enum zone_stat_item);
++void dec_zone_page_state(struct page *, enum zone_stat_item);
++
++extern void inc_zone_state(struct zone *, enum zone_stat_item);
++extern void __inc_zone_state(struct zone *, enum zone_stat_item);
++extern void dec_zone_state(struct zone *, enum zone_stat_item);
++extern void __dec_zone_state(struct zone *, enum zone_stat_item);
++
++void refresh_cpu_vm_stats(int);
++# 588 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h" 2
++
++static inline __attribute__((always_inline)) __attribute__((always_inline)) void *lowmem_page_address(struct page *page)
++{
++ return ((void *)((unsigned long)(((unsigned long)((page) - mem_map) + (0UL)) << 12)+((unsigned long)(0xC0000000UL))));
++}
++# 608 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++void *page_address(struct page *page);
++void set_page_address(struct page *page, void *xxx_virtual);
++void page_address_init(void);
++# 630 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++extern struct address_space swapper_space;
++static inline __attribute__((always_inline)) struct address_space *page_mapping(struct page *page)
++{
++ struct address_space *mapping = page->mapping;
++
++ do { } while(0);
++
++ if (__builtin_expect(!!(PageSwapCache(page)), 0))
++  mapping = &swapper_space;
++ else
++
++ if (__builtin_expect(!!((unsigned long)mapping & 1), 0))
++  mapping = 0;
++ return mapping;
++}
++
++static inline __attribute__((always_inline)) int PageAnon(struct page *page)
++{
++ return ((unsigned long)page->mapping & 1) != 0;
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) unsigned long page_index(struct page *page)
++{
++ if (__builtin_expect(!!(PageSwapCache(page)), 0))
++  return ((page)->xxx_private);
++ return page->index;
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void reset_page_mapcount(struct page *page)
++{
++ (((&(page)->_mapcount)->counter) = (-1));
++}
++
++static inline __attribute__((always_inline)) int page_mapcount(struct page *page)
++{
++ return ((&(page)->_mapcount)->counter) + 1;
++}
++
++
++
++
++static inline __attribute__((always_inline)) int page_mapped(struct page *page)
++{
++ return ((&(page)->_mapcount)->counter) >= 0;
++}
++# 705 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++extern void show_free_areas(void);
++
++
++int shmem_lock(struct file *file, int lock, struct user_struct *user);
++
++
++
++
++
++
++
++struct file *shmem_file_setup(char *name, loff_t size, unsigned long flags);
++
++int shmem_zero_setup(struct vm_area_struct *);
++# 728 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++extern int can_do_mlock(void);
++extern int user_shm_lock(size_t, struct user_struct *);
++extern void user_shm_unlock(size_t, struct user_struct *);
++
++
++
++
++struct zap_details {
++ struct vm_area_struct *nonlinear_vma;
++ struct address_space *check_mapping;
++ unsigned long first_index;
++ unsigned long last_index;
++ spinlock_t *i_mmap_lock;
++ unsigned long truncate_count;
++};
++
++struct page *vm_normal_page(struct vm_area_struct *vma, unsigned long addr,
++  pte_t pte);
++
++int zap_vma_ptes(struct vm_area_struct *vma, unsigned long address,
++  unsigned long size);
++unsigned long zap_page_range(struct vm_area_struct *vma, unsigned long address,
++  unsigned long size, struct zap_details *);
++unsigned long unmap_vmas(struct mmu_gather **tlb,
++  struct vm_area_struct *start_vma, unsigned long start_addr,
++  unsigned long end_addr, unsigned long *nr_accounted,
++  struct zap_details *);
++# 766 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++struct mm_walk {
++ int (*pgd_entry)(pgd_t *, unsigned long, unsigned long, struct mm_walk *);
++ int (*pud_entry)(pud_t *, unsigned long, unsigned long, struct mm_walk *);
++ int (*pmd_entry)(pmd_t *, unsigned long, unsigned long, struct mm_walk *);
++ int (*pte_entry)(pte_t *, unsigned long, unsigned long, struct mm_walk *);
++ int (*pte_hole)(unsigned long, unsigned long, struct mm_walk *);
++ struct mm_struct *mm;
++ void *xxx_private;
++};
++
++int walk_page_range(unsigned long addr, unsigned long end,
++  struct mm_walk *walk);
++void free_pgd_range(struct mmu_gather *tlb, unsigned long addr,
++  unsigned long end, unsigned long floor, unsigned long ceiling);
++int copy_page_range(struct mm_struct *dst, struct mm_struct *src,
++   struct vm_area_struct *vma);
++void unmap_mapping_range(struct address_space *mapping,
++  loff_t const holebegin, loff_t const holelen, int even_cows);
++int generic_access_phys(struct vm_area_struct *vma, unsigned long addr,
++   void *buf, int len, int write);
++
++static inline __attribute__((always_inline)) void unmap_shared_mapping_range(struct address_space *mapping,
++  loff_t const holebegin, loff_t const holelen)
++{
++ unmap_mapping_range(mapping, holebegin, holelen, 0);
++}
++
++extern int vmtruncate(struct inode * inode, loff_t offset);
++extern int vmtruncate_range(struct inode * inode, loff_t offset, loff_t end);
++
++
++extern int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
++   unsigned long address, int write_access);
++# 810 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++extern int make_pages_present(unsigned long addr, unsigned long end);
++extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write);
++
++int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, unsigned long start,
++  int len, int write, int force, struct page **pages, struct vm_area_struct **vmas);
++
++extern int try_to_release_page(struct page * page, gfp_t gfp_mask);
++extern void do_invalidatepage(struct page *page, unsigned long offset);
++
++int __set_page_dirty_nobuffers(struct page *page);
++int __set_page_dirty_no_writeback(struct page *page);
++int redirty_page_for_writepage(struct writeback_control *wbc,
++    struct page *page);
++int set_page_dirty(struct page *page);
++int set_page_dirty_lock(struct page *page);
++int clear_page_dirty_for_io(struct page *page);
++
++extern unsigned long move_page_tables(struct vm_area_struct *vma,
++  unsigned long old_addr, struct vm_area_struct *new_vma,
++  unsigned long new_addr, unsigned long len);
++extern unsigned long do_mremap(unsigned long addr,
++          unsigned long old_len, unsigned long new_len,
++          unsigned long flags, unsigned long new_addr);
++extern int mprotect_fixup(struct vm_area_struct *vma,
++     struct vm_area_struct **pprev, unsigned long start,
++     unsigned long end, unsigned long newflags);
++# 847 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++int get_user_pages_fast(unsigned long start, int nr_pages, int write,
++   struct page **pages);
++# 865 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++struct shrinker {
++ int (*shrink)(int nr_to_scan, gfp_t gfp_mask);
++ int seeks;
++
++
++ struct list_head list;
++ long nr;
++};
++
++extern void register_shrinker(struct shrinker *);
++extern void unregister_shrinker(struct shrinker *);
++
++int vma_wants_writenotify(struct vm_area_struct *vma);
++
++extern pte_t *get_locked_pte(struct mm_struct *mm, unsigned long addr, spinlock_t **ptl);
++
++
++static inline __attribute__((always_inline)) int __pud_alloc(struct mm_struct *mm, pgd_t *pgd,
++      unsigned long address)
++{
++ return 0;
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) int __pmd_alloc(struct mm_struct *mm, pud_t *pud,
++      unsigned long address)
++{
++ return 0;
++}
++
++
++
++
++int __pte_alloc(struct mm_struct *mm, pmd_t *pmd, unsigned long address);
++int __pte_alloc_kernel(pmd_t *pmd, unsigned long address);
++
++
++
++
++
++
++static inline __attribute__((always_inline)) pud_t *pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
++{
++ return (__builtin_expect(!!(pgd_none(*pgd)), 0) && __pud_alloc(mm, pgd, address))?
++  0: pud_offset(pgd, address);
++}
++
++static inline __attribute__((always_inline)) pmd_t *pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address)
++{
++ return (__builtin_expect(!!(pud_none(*pud)), 0) && __pmd_alloc(mm, pud, address))?
++  0: pmd_offset(pud, address);
++}
++# 944 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++static inline __attribute__((always_inline)) void pgtable_page_ctor(struct page *page)
++{
++ do { do { *(&((page)->ptl)) = (spinlock_t) { ({raw_spinlock_t duh; duh.slock=0;duh;}), }; } while (0); } while (0);
++ inc_zone_page_state(page, NR_PAGETABLE);
++}
++
++static inline __attribute__((always_inline)) void pgtable_page_dtor(struct page *page)
++{
++ ((page)->mapping = 0);
++ dec_zone_page_state(page, NR_PAGETABLE);
++}
++# 982 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++extern void free_area_init(unsigned long * zones_size);
++extern void free_area_init_node(int nid, unsigned long * zones_size,
++  unsigned long zone_start_pfn, unsigned long *zholes_size);
++# 1013 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++extern void free_area_init_nodes(unsigned long *max_zone_pfn);
++extern void add_active_range(unsigned int nid, unsigned long start_pfn,
++     unsigned long end_pfn);
++extern void remove_active_range(unsigned int nid, unsigned long start_pfn,
++     unsigned long end_pfn);
++extern void push_node_boundaries(unsigned int nid, unsigned long start_pfn,
++     unsigned long end_pfn);
++extern void remove_all_active_ranges(void);
++extern unsigned long absent_pages_in_range(unsigned long start_pfn,
++      unsigned long end_pfn);
++extern void get_pfn_range_for_nid(unsigned int nid,
++   unsigned long *start_pfn, unsigned long *end_pfn);
++extern unsigned long find_min_pfn_with_active_regions(void);
++extern void free_bootmem_with_active_regions(int nid,
++      unsigned long max_low_pfn);
++typedef int (*work_fn_t)(unsigned long, unsigned long, void *);
++extern void work_with_active_regions(int nid, work_fn_t work_fn, void *data);
++extern void sparse_memory_present_with_active_regions(int nid);
++
++extern int early_pfn_to_nid(unsigned long pfn);
++
++
++extern void set_dma_reserve(unsigned long new_dma_reserve);
++extern void memmap_init_zone(unsigned long, int, unsigned long,
++    unsigned long, enum memmap_context);
++extern void setup_per_zone_pages_min(void);
++extern void mem_init(void);
++extern void show_mem(void);
++extern void si_meminfo(struct sysinfo * val);
++extern void si_meminfo_node(struct sysinfo *val, int nid);
++extern int after_bootmem;
++
++
++
++
++static inline __attribute__((always_inline)) void setup_per_cpu_pageset(void) {}
++
++
++
++void vma_prio_tree_add(struct vm_area_struct *, struct vm_area_struct *old);
++void vma_prio_tree_insert(struct vm_area_struct *, struct prio_tree_root *);
++void vma_prio_tree_remove(struct vm_area_struct *, struct prio_tree_root *);
++struct vm_area_struct *vma_prio_tree_next(struct vm_area_struct *vma,
++ struct prio_tree_iter *iter);
++
++
++
++
++
++static inline __attribute__((always_inline)) void vma_nonlinear_insert(struct vm_area_struct *vma,
++     struct list_head *list)
++{
++ vma->shared.vm_set.parent = 0;
++ list_add_tail(&vma->shared.vm_set.list, list);
++}
++
++
++extern int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin);
++extern void vma_adjust(struct vm_area_struct *vma, unsigned long start,
++ unsigned long end, unsigned long pgoff, struct vm_area_struct *insert);
++extern struct vm_area_struct *vma_merge(struct mm_struct *,
++ struct vm_area_struct *prev, unsigned long addr, unsigned long end,
++ unsigned long vm_flags, struct anon_vma *, struct file *, unsigned long,
++ struct mempolicy *);
++extern struct anon_vma *find_mergeable_anon_vma(struct vm_area_struct *);
++extern int split_vma(struct mm_struct *,
++ struct vm_area_struct *, unsigned long addr, int new_below);
++extern int insert_vm_struct(struct mm_struct *, struct vm_area_struct *);
++extern void __vma_link_rb(struct mm_struct *, struct vm_area_struct *,
++ struct rb_node **, struct rb_node *);
++extern void unlink_file_vma(struct vm_area_struct *);
++extern struct vm_area_struct *copy_vma(struct vm_area_struct **,
++ unsigned long addr, unsigned long len, unsigned long pgoff);
++extern void exit_mmap(struct mm_struct *);
++
++extern int mm_take_all_locks(struct mm_struct *mm);
++extern void mm_drop_all_locks(struct mm_struct *mm);
++
++
++
++extern void added_exe_file_vma(struct mm_struct *mm);
++extern void removed_exe_file_vma(struct mm_struct *mm);
++# 1103 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++extern int may_expand_vm(struct mm_struct *mm, unsigned long npages);
++extern int install_special_mapping(struct mm_struct *mm,
++       unsigned long addr, unsigned long len,
++       unsigned long flags, struct page **pages);
++
++extern unsigned long get_unmapped_area(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
++
++extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
++ unsigned long len, unsigned long prot,
++ unsigned long flag, unsigned long pgoff);
++extern unsigned long mmap_region(struct file *file, unsigned long addr,
++ unsigned long len, unsigned long flags,
++ unsigned int vm_flags, unsigned long pgoff,
++ int accountable);
++
++static inline __attribute__((always_inline)) unsigned long do_mmap(struct file *file, unsigned long addr,
++ unsigned long len, unsigned long prot,
++ unsigned long flag, unsigned long offset)
++{
++ unsigned long ret = -22;
++ if ((offset + (((len)+((typeof(len))(((1UL) << 12))-1))&~((typeof(len))(((1UL) << 12))-1))) < offset)
++  goto out;
++ if (!(offset & ~(~(((1UL) << 12)-1))))
++  ret = do_mmap_pgoff(file, addr, len, prot, flag, offset >> 12);
++out:
++ return ret;
++}
++
++extern int do_munmap(struct mm_struct *, unsigned long, size_t);
++
++extern unsigned long do_brk(unsigned long, unsigned long);
++
++
++extern unsigned long page_unuse(struct page *);
++extern void truncate_inode_pages(struct address_space *, loff_t);
++extern void truncate_inode_pages_range(struct address_space *,
++           loff_t lstart, loff_t lend);
++
++
++extern int filemap_fault(struct vm_area_struct *, struct vm_fault *);
++
++
++int write_one_page(struct page *page, int wait);
++
++
++
++
++
++int do_page_cache_readahead(struct address_space *mapping, struct file *filp,
++   unsigned long offset, unsigned long nr_to_read);
++int force_page_cache_readahead(struct address_space *mapping, struct file *filp,
++   unsigned long offset, unsigned long nr_to_read);
++
++void page_cache_sync_readahead(struct address_space *mapping,
++          struct file_ra_state *ra,
++          struct file *filp,
++          unsigned long offset,
++          unsigned long size);
++
++void page_cache_async_readahead(struct address_space *mapping,
++    struct file_ra_state *ra,
++    struct file *filp,
++    struct page *pg,
++    unsigned long offset,
++    unsigned long size);
++
++unsigned long max_sane_readahead(unsigned long nr);
++
++
++extern int expand_stack(struct vm_area_struct *vma, unsigned long address);
++
++
++
++extern int expand_stack_downwards(struct vm_area_struct *vma,
++      unsigned long address);
++
++
++extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long addr);
++extern struct vm_area_struct * find_vma_prev(struct mm_struct * mm, unsigned long addr,
++          struct vm_area_struct **pprev);
++
++
++
++static inline __attribute__((always_inline)) struct vm_area_struct * find_vma_intersection(struct mm_struct * mm, unsigned long start_addr, unsigned long end_addr)
++{
++ struct vm_area_struct * vma = find_vma(mm,start_addr);
++
++ if (vma && end_addr <= vma->vm_start)
++  vma = 0;
++ return vma;
++}
++
++static inline __attribute__((always_inline)) unsigned long vma_pages(struct vm_area_struct *vma)
++{
++ return (vma->vm_end - vma->vm_start) >> 12;
++}
++
++pgprot_t vm_get_page_prot(unsigned long vm_flags);
++struct vm_area_struct *find_extend_vma(struct mm_struct *, unsigned long addr);
++int remap_pfn_range(struct vm_area_struct *, unsigned long addr,
++   unsigned long pfn, unsigned long size, pgprot_t);
++int vm_insert_page(struct vm_area_struct *, unsigned long addr, struct page *);
++int vm_insert_pfn(struct vm_area_struct *vma, unsigned long addr,
++   unsigned long pfn);
++int vm_insert_mixed(struct vm_area_struct *vma, unsigned long addr,
++   unsigned long pfn);
++
++struct page *follow_page(struct vm_area_struct *, unsigned long address,
++   unsigned int foll_flags);
++
++
++
++
++
++typedef int (*pte_fn_t)(pte_t *pte, pgtable_t token, unsigned long addr,
++   void *data);
++extern int apply_to_page_range(struct mm_struct *mm, unsigned long address,
++          unsigned long size, pte_fn_t fn, void *data);
++
++
++void vm_stat_account(struct mm_struct *, unsigned long, struct file *, long);
++# 1244 "/d/kernels/linux-2.6.27.10-clickport/include/linux/mm.h"
++static inline __attribute__((always_inline)) void
++kernel_map_pages(struct page *page, int numpages, int enable) {}
++static inline __attribute__((always_inline)) void enable_debug_pagealloc(void)
++{
++}
++
++
++
++
++
++extern struct vm_area_struct *get_gate_vma(struct task_struct *tsk);
++
++int in_gate_area_no_task(unsigned long addr);
++int in_gate_area(struct task_struct *task, unsigned long addr);
++
++
++
++
++
++int drop_caches_sysctl_handler(struct ctl_table *, int, struct file *,
++     void *, size_t *, loff_t *);
++unsigned long shrink_slab(unsigned long scanned, gfp_t gfp_mask,
++   unsigned long lru_pages);
++
++
++
++
++extern int randomize_va_space;
++
++
++const char * arch_vma_name(struct vm_area_struct *vma);
++void print_vma_addr(char *prefix, unsigned long rip);
++
++struct page *sparse_mem_map_populate(unsigned long pnum, int nid);
++pgd_t *vmemmap_pgd_populate(unsigned long addr, int node);
++pud_t *vmemmap_pud_populate(pgd_t *pgd, unsigned long addr, int node);
++pmd_t *vmemmap_pmd_populate(pud_t *pud, unsigned long addr, int node);
++pte_t *vmemmap_pte_populate(pmd_t *pmd, unsigned long addr, int node);
++void *vmemmap_alloc_block(unsigned long size, int node);
++void vmemmap_verify(pte_t *, int, unsigned long, unsigned long);
++int vmemmap_populate_basepages(struct page *start_page,
++      unsigned long pages, int node);
++int vmemmap_populate(struct page *start_page, unsigned long pages, int node);
++void vmemmap_populate_print_last(void);
++# 7 "/d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/io.h" 1
++# 14 "/d/kernels/linux-2.6.27.10-clickport/include/asm/io.h"
++extern void early_ioremap_init(void);
++extern void early_ioremap_clear(void);
++extern void early_ioremap_reset(void);
++extern void *early_ioremap(unsigned long offset, unsigned long size);
++extern void early_iounmap(void *addr, unsigned long size);
++extern void *fix_ioremap(unsigned idx, unsigned long phys);
++# 32 "/d/kernels/linux-2.6.27.10-clickport/include/asm/io.h"
++static inline __attribute__((always_inline)) unsigned char readb(const volatile void *addr) { unsigned char ret; asm volatile("mov" "b" " %1,%0":"=q" (ret) :"m" (*(volatile unsigned char *)addr) :"memory"); return ret; }
++static inline __attribute__((always_inline)) unsigned short readw(const volatile void *addr) { unsigned short ret; asm volatile("mov" "w" " %1,%0":"=r" (ret) :"m" (*(volatile unsigned short *)addr) :"memory"); return ret; }
++static inline __attribute__((always_inline)) unsigned int readl(const volatile void *addr) { unsigned int ret; asm volatile("mov" "l" " %1,%0":"=r" (ret) :"m" (*(volatile unsigned int *)addr) :"memory"); return ret; }
++
++static inline __attribute__((always_inline)) unsigned char __readb(const volatile void *addr) { unsigned char ret; asm volatile("mov" "b" " %1,%0":"=q" (ret) :"m" (*(volatile unsigned char *)addr) ); return ret; }
++static inline __attribute__((always_inline)) unsigned short __readw(const volatile void *addr) { unsigned short ret; asm volatile("mov" "w" " %1,%0":"=r" (ret) :"m" (*(volatile unsigned short *)addr) ); return ret; }
++static inline __attribute__((always_inline)) unsigned int __readl(const volatile void *addr) { unsigned int ret; asm volatile("mov" "l" " %1,%0":"=r" (ret) :"m" (*(volatile unsigned int *)addr) ); return ret; }
++
++static inline __attribute__((always_inline)) void writeb(unsigned char val, volatile void *addr) { asm volatile("mov" "b" " %0,%1": :"q" (val), "m" (*(volatile unsigned char *)addr) :"memory"); }
++static inline __attribute__((always_inline)) void writew(unsigned short val, volatile void *addr) { asm volatile("mov" "w" " %0,%1": :"r" (val), "m" (*(volatile unsigned short *)addr) :"memory"); }
++static inline __attribute__((always_inline)) void writel(unsigned int val, volatile void *addr) { asm volatile("mov" "l" " %0,%1": :"r" (val), "m" (*(volatile unsigned int *)addr) :"memory"); }
++
++static inline __attribute__((always_inline)) void __writeb(unsigned char val, volatile void *addr) { asm volatile("mov" "b" " %0,%1": :"q" (val), "m" (*(volatile unsigned char *)addr) ); }
++static inline __attribute__((always_inline)) void __writew(unsigned short val, volatile void *addr) { asm volatile("mov" "w" " %0,%1": :"r" (val), "m" (*(volatile unsigned short *)addr) ); }
++static inline __attribute__((always_inline)) void __writel(unsigned int val, volatile void *addr) { asm volatile("mov" "l" " %0,%1": :"r" (val), "m" (*(volatile unsigned int *)addr) ); }
++# 77 "/d/kernels/linux-2.6.27.10-clickport/include/asm/io.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/io_32.h" 1
++# 47 "/d/kernels/linux-2.6.27.10-clickport/include/asm/io_32.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/iomap.h" 1
++# 28 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/iomap.h"
++extern unsigned int ioread8(void *);
++extern unsigned int ioread16(void *);
++extern unsigned int ioread16be(void *);
++extern unsigned int ioread32(void *);
++extern unsigned int ioread32be(void *);
++
++extern void iowrite8(u8, void *);
++extern void iowrite16(u16, void *);
++extern void iowrite16be(u16, void *);
++extern void iowrite32(u32, void *);
++extern void iowrite32be(u32, void *);
++# 51 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/iomap.h"
++extern void ioread8_rep(void *port, void *buf, unsigned long count);
++extern void ioread16_rep(void *port, void *buf, unsigned long count);
++extern void ioread32_rep(void *port, void *buf, unsigned long count);
++
++extern void iowrite8_rep(void *port, const void *buf, unsigned long count);
++extern void iowrite16_rep(void *port, const void *buf, unsigned long count);
++extern void iowrite32_rep(void *port, const void *buf, unsigned long count);
++
++
++extern void *ioport_map(unsigned long port, unsigned int nr);
++extern void ioport_unmap(void *);
++
++
++
++
++
++
++struct pci_dev;
++extern void *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
++extern void pci_iounmap(struct pci_dev *dev, void *);
++# 48 "/d/kernels/linux-2.6.27.10-clickport/include/asm/io_32.h" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vmalloc.h" 1
++
++
++
++
++
++
++struct vm_area_struct;
++# 25 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vmalloc.h"
++struct vm_struct {
++
++ struct vm_struct *next;
++ void *addr;
++ unsigned long size;
++ unsigned long flags;
++ struct page **pages;
++ unsigned int nr_pages;
++ unsigned long phys_addr;
++ void *caller;
++};
++
++
++
++
++extern void *vmalloc(unsigned long size);
++extern void *vmalloc_user(unsigned long size);
++extern void *vmalloc_node(unsigned long size, int node);
++extern void *vmalloc_exec(unsigned long size);
++extern void *vmalloc_32(unsigned long size);
++extern void *vmalloc_32_user(unsigned long size);
++extern void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot);
++extern void *__vmalloc_area(struct vm_struct *area, gfp_t gfp_mask,
++    pgprot_t prot);
++extern void vfree(const void *addr);
++
++extern void *vmap(struct page **pages, unsigned int count,
++   unsigned long flags, pgprot_t prot);
++extern void vunmap(const void *addr);
++
++extern int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
++       unsigned long pgoff);
++void vmalloc_sync_all(void);
++
++
++
++
++
++static inline __attribute__((always_inline)) size_t get_vm_area_size(const struct vm_struct *area)
++{
++
++ return area->size - ((1UL) << 12);
++}
++
++extern struct vm_struct *get_vm_area(unsigned long size, unsigned long flags);
++extern struct vm_struct *get_vm_area_caller(unsigned long size,
++     unsigned long flags, void *caller);
++extern struct vm_struct *__get_vm_area(unsigned long size, unsigned long flags,
++     unsigned long start, unsigned long end);
++extern struct vm_struct *get_vm_area_node(unsigned long size,
++       unsigned long flags, int node,
++       gfp_t gfp_mask);
++extern struct vm_struct *remove_vm_area(const void *addr);
++
++extern int map_vm_area(struct vm_struct *area, pgprot_t prot,
++   struct page ***pages);
++extern void unmap_kernel_range(unsigned long addr, unsigned long size);
++
++
++extern struct vm_struct *alloc_vm_area(size_t size);
++extern void free_vm_area(struct vm_struct *area);
++
++
++
++
++extern rwlock_t vmlist_lock;
++extern struct vm_struct *vmlist;
++
++extern const struct seq_operations vmalloc_op;
++# 50 "/d/kernels/linux-2.6.27.10-clickport/include/asm/io_32.h" 2
++# 69 "/d/kernels/linux-2.6.27.10-clickport/include/asm/io_32.h"
++static inline __attribute__((always_inline)) unsigned long virt_to_phys(volatile void *address)
++{
++ return (((unsigned long)(address)) - ((unsigned long)(0xC0000000UL)));
++}
++# 87 "/d/kernels/linux-2.6.27.10-clickport/include/asm/io_32.h"
++static inline __attribute__((always_inline)) void *phys_to_virt(unsigned long address)
++{
++ return ((void *)((unsigned long)(address)+((unsigned long)(0xC0000000UL))));
++}
++# 111 "/d/kernels/linux-2.6.27.10-clickport/include/asm/io_32.h"
++extern void *ioremap_nocache(resource_size_t offset, unsigned long size);
++extern void *ioremap_cache(resource_size_t offset, unsigned long size);
++extern void *ioremap_prot(resource_size_t offset, unsigned long size,
++    unsigned long prot_val);
++
++
++
++
++static inline __attribute__((always_inline)) void *ioremap(resource_size_t offset, unsigned long size)
++{
++ return ioremap_nocache(offset, size);
++}
++
++extern void iounmap(volatile void *addr);
++# 142 "/d/kernels/linux-2.6.27.10-clickport/include/asm/io_32.h"
++static inline __attribute__((always_inline)) void
++memset_io(volatile void *addr, unsigned char val, int count)
++{
++ (__builtin_constant_p(val) ? (__builtin_constant_p((count)) ? __constant_c_and_count_memset((((void *)addr)), ((0x01010101UL * (unsigned char)(val))), ((count))) : __constant_c_memset((((void *)addr)), ((0x01010101UL * (unsigned char)(val))), ((count)))) : (__builtin_constant_p((count)) ? __memset_generic(((((void *)addr))), (((val))), (((count)))) : __memset_generic((((void *)addr)), ((val)), ((count)))));
++}
++
++static inline __attribute__((always_inline)) void
++memcpy_fromio(void *dst, const volatile void *src, int count)
++{
++ __memcpy(dst, (const void *)src, count);
++}
++
++static inline __attribute__((always_inline)) void
++memcpy_toio(volatile void *dst, const void *src, int count)
++{
++ __memcpy((void *)dst, src, count);
++}
++# 180 "/d/kernels/linux-2.6.27.10-clickport/include/asm/io_32.h"
++static inline __attribute__((always_inline)) void flush_write_buffers(void)
++{
++ asm volatile("lock; addl $0,0(%%esp)": : :"memory");
++}
++# 193 "/d/kernels/linux-2.6.27.10-clickport/include/asm/io_32.h"
++extern void native_io_delay(void);
++
++extern int io_delay_type;
++extern void io_delay_init(void);
++# 280 "/d/kernels/linux-2.6.27.10-clickport/include/asm/io_32.h"
++static inline __attribute__((always_inline)) void outb_local(unsigned char value, int port) { asm volatile("out" "b" " %" "b" "0, %w1" : : "a"(value), "Nd"(port)); } static inline __attribute__((always_inline)) unsigned char inb_local(int port) { unsigned char value; asm volatile("in" "b" " %w1, %" "b" "0" : "=a"(value) : "Nd"(port)); return value; } static inline __attribute__((always_inline)) void outb_local_p(unsigned char value, int port) { outb_local(value, port); slow_down_io(); } static inline __attribute__((always_inline)) unsigned char inb_local_p(int port) { unsigned char value = inb_local(port); slow_down_io(); return value; } static inline __attribute__((always_inline)) void outb(unsigned char value, int port) { outb_local(value, port); } static inline __attribute__((always_inline)) unsigned char inb(int port) { return inb_local(port); } static inline __attribute__((always_inline)) void outb_p(unsigned char value, int port) { outb(value, port); slow_down_io(); } static inline __attribute__((always_inline)) unsigned char inb_p(int port) { unsigned char value = inb(port); slow_down_io(); return value; } static inline __attribute__((always_inline)) void outsb(int port, const void *addr, unsigned long count) { asm volatile("rep; outs" "b" : "+S"(addr), "+c"(count) : "d"(port)); } static inline __attribute__((always_inline)) void insb(int port, void *addr, unsigned long count) { asm volatile("rep; ins" "b" : "+D"(addr), "+c"(count) : "d"(port)); }
++static inline __attribute__((always_inline)) void outw_local(unsigned short value, int port) { asm volatile("out" "w" " %" "w" "0, %w1" : : "a"(value), "Nd"(port)); } static inline __attribute__((always_inline)) unsigned short inw_local(int port) { unsigned short value; asm volatile("in" "w" " %w1, %" "w" "0" : "=a"(value) : "Nd"(port)); return value; } static inline __attribute__((always_inline)) void outw_local_p(unsigned short value, int port) { outw_local(value, port); slow_down_io(); } static inline __attribute__((always_inline)) unsigned short inw_local_p(int port) { unsigned short value = inw_local(port); slow_down_io(); return value; } static inline __attribute__((always_inline)) void outw(unsigned short value, int port) { outw_local(value, port); } static inline __attribute__((always_inline)) unsigned short inw(int port) { return inw_local(port); } static inline __attribute__((always_inline)) void outw_p(unsigned short value, int port) { outw(value, port); slow_down_io(); } static inline __attribute__((always_inline)) unsigned short inw_p(int port) { unsigned short value = inw(port); slow_down_io(); return value; } static inline __attribute__((always_inline)) void outsw(int port, const void *addr, unsigned long count) { asm volatile("rep; outs" "w" : "+S"(addr), "+c"(count) : "d"(port)); } static inline __attribute__((always_inline)) void insw(int port, void *addr, unsigned long count) { asm volatile("rep; ins" "w" : "+D"(addr), "+c"(count) : "d"(port)); }
++static inline __attribute__((always_inline)) void outl_local(unsigned int value, int port) { asm volatile("out" "l" " %" "" "0, %w1" : : "a"(value), "Nd"(port)); } static inline __attribute__((always_inline)) unsigned int inl_local(int port) { unsigned int value; asm volatile("in" "l" " %w1, %" "" "0" : "=a"(value) : "Nd"(port)); return value; } static inline __attribute__((always_inline)) void outl_local_p(unsigned int value, int port) { outl_local(value, port); slow_down_io(); } static inline __attribute__((always_inline)) unsigned int inl_local_p(int port) { unsigned int value = inl_local(port); slow_down_io(); return value; } static inline __attribute__((always_inline)) void outl(unsigned int value, int port) { outl_local(value, port); } static inline __attribute__((always_inline)) unsigned int inl(int port) { return inl_local(port); } static inline __attribute__((always_inline)) void outl_p(unsigned int value, int port) { outl(value, port); slow_down_io(); } static inline __attribute__((always_inline)) unsigned int inl_p(int port) { unsigned int value = inl(port); slow_down_io(); return value; } static inline __attribute__((always_inline)) void outsl(int port, const void *addr, unsigned long count) { asm volatile("rep; outs" "l" : "+S"(addr), "+c"(count) : "d"(port)); } static inline __attribute__((always_inline)) void insl(int port, void *addr, unsigned long count) { asm volatile("rep; ins" "l" : "+D"(addr), "+c"(count) : "d"(port)); }
++# 78 "/d/kernels/linux-2.6.27.10-clickport/include/asm/io.h" 2
++
++
++
++
++extern void *xlate_dev_mem_ptr(unsigned long phys);
++extern void unxlate_dev_mem_ptr(unsigned long phys, void *addr);
++
++extern int ioremap_change_attr(unsigned long vaddr, unsigned long size,
++    unsigned long prot_val);
++extern void *ioremap_wc(unsigned long offset, unsigned long size);
++
++
++
++
++
++
++extern void early_ioremap_init(void);
++extern void early_ioremap_clear(void);
++extern void early_ioremap_reset(void);
++extern void *early_ioremap(unsigned long offset, unsigned long size);
++extern void early_iounmap(void *addr, unsigned long size);
++extern void *fix_ioremap(unsigned idx, unsigned long phys);
++# 9 "/d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h" 2
++
++struct sg_table {
++ struct scatterlist *sgl;
++ unsigned int nents;
++ unsigned int orig_nents;
++};
++# 55 "/d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h"
++static inline __attribute__((always_inline)) void sg_assign_page(struct scatterlist *sg, struct page *page)
++{
++ unsigned long page_link = sg->page_link & 0x3;
++
++
++
++
++
++ do { if (__builtin_expect(!!((unsigned long) page & 0x03), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h"), "i" (63), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++
++
++
++
++ sg->page_link = page_link | (unsigned long) page;
++}
++# 85 "/d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h"
++static inline __attribute__((always_inline)) void sg_set_page(struct scatterlist *sg, struct page *page,
++          unsigned int len, unsigned int offset)
++{
++ sg_assign_page(sg, page);
++ sg->offset = offset;
++ sg->length = len;
++}
++
++static inline __attribute__((always_inline)) struct page *sg_page(struct scatterlist *sg)
++{
++
++
++
++
++ return (struct page *)((sg)->page_link & ~0x3);
++}
++# 109 "/d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h"
++static inline __attribute__((always_inline)) void sg_set_buf(struct scatterlist *sg, const void *buf,
++         unsigned int buflen)
++{
++ sg_set_page(sg, (mem_map + (((((unsigned long)(buf)) - ((unsigned long)(0xC0000000UL))) >> 12) - (0UL))), buflen, ((unsigned long)(buf) & ~(~(((1UL) << 12)-1))));
++}
++# 131 "/d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h"
++static inline __attribute__((always_inline)) void sg_chain(struct scatterlist *prv, unsigned int prv_nents,
++       struct scatterlist *sgl)
++{
++
++
++
++
++
++
++
++ prv[prv_nents - 1].offset = 0;
++ prv[prv_nents - 1].length = 0;
++
++
++
++
++
++ prv[prv_nents - 1].page_link = ((unsigned long) sgl | 0x01) & ~0x02;
++}
++# 160 "/d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h"
++static inline __attribute__((always_inline)) void sg_mark_end(struct scatterlist *sg)
++{
++
++
++
++
++
++
++ sg->page_link |= 0x02;
++ sg->page_link &= ~0x01;
++}
++# 182 "/d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h"
++static inline __attribute__((always_inline)) dma_addr_t sg_phys(struct scatterlist *sg)
++{
++ return ((dma_addr_t)((unsigned long)((sg_page(sg)) - mem_map) + (0UL)) << 12) + sg->offset;
++}
++# 197 "/d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h"
++static inline __attribute__((always_inline)) void *sg_virt(struct scatterlist *sg)
++{
++ return (char *) page_address(sg_page(sg)) + sg->offset;
++}
++
++struct scatterlist *sg_next(struct scatterlist *);
++struct scatterlist *sg_last(struct scatterlist *s, unsigned int);
++void sg_init_table(struct scatterlist *, unsigned int);
++void sg_init_one(struct scatterlist *, const void *, unsigned int);
++
++typedef struct scatterlist *(sg_alloc_fn)(unsigned int, gfp_t);
++typedef void (sg_free_fn)(struct scatterlist *, unsigned int);
++
++void __sg_free_table(struct sg_table *, unsigned int, sg_free_fn *);
++void sg_free_table(struct sg_table *);
++int __sg_alloc_table(struct sg_table *, unsigned int, unsigned int, gfp_t,
++       sg_alloc_fn *);
++int sg_alloc_table(struct sg_table *, unsigned int, gfp_t);
++
++size_t sg_copy_from_buffer(struct scatterlist *sgl, unsigned int nents,
++      void *buf, size_t buflen);
++size_t sg_copy_to_buffer(struct scatterlist *sgl, unsigned int nents,
++    void *buf, size_t buflen);
++# 246 "/d/kernels/linux-2.6.27.10-clickport/include/linux/scatterlist.h"
++struct sg_mapping_iter {
++
++ struct page *page;
++ void *addr;
++ size_t length;
++ size_t consumed;
++
++
++ struct scatterlist *__sg;
++ unsigned int __nents;
++ unsigned int __offset;
++ unsigned int __flags;
++};
++
++void sg_miter_start(struct sg_mapping_iter *miter, struct scatterlist *sgl,
++      unsigned int nents, unsigned int flags);
++bool sg_miter_next(struct sg_mapping_iter *miter);
++void sg_miter_stop(struct sg_mapping_iter *miter);
++# 10 "/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h" 1
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/asm/swiotlb.h" 2
++
++
++
++extern dma_addr_t swiotlb_map_single(struct device *hwdev, void *ptr,
++         size_t size, int dir);
++extern void *swiotlb_alloc_coherent(struct device *hwdev, size_t size,
++        dma_addr_t *dma_handle, gfp_t flags);
++extern void swiotlb_unmap_single(struct device *hwdev, dma_addr_t dev_addr,
++     size_t size, int dir);
++extern void swiotlb_sync_single_for_cpu(struct device *hwdev,
++     dma_addr_t dev_addr,
++     size_t size, int dir);
++extern void swiotlb_sync_single_for_device(struct device *hwdev,
++        dma_addr_t dev_addr,
++        size_t size, int dir);
++extern void swiotlb_sync_single_range_for_cpu(struct device *hwdev,
++           dma_addr_t dev_addr,
++           unsigned long offset,
++           size_t size, int dir);
++extern void swiotlb_sync_single_range_for_device(struct device *hwdev,
++       dma_addr_t dev_addr,
++       unsigned long offset,
++       size_t size, int dir);
++extern void swiotlb_sync_sg_for_cpu(struct device *hwdev,
++        struct scatterlist *sg, int nelems,
++        int dir);
++extern void swiotlb_sync_sg_for_device(struct device *hwdev,
++           struct scatterlist *sg, int nelems,
++           int dir);
++extern int swiotlb_map_sg(struct device *hwdev, struct scatterlist *sg,
++     int nents, int direction);
++extern void swiotlb_unmap_sg(struct device *hwdev, struct scatterlist *sg,
++        int nents, int direction);
++extern int swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t dma_addr);
++extern void swiotlb_free_coherent(struct device *hwdev, size_t size,
++      void *vaddr, dma_addr_t dma_handle);
++extern int swiotlb_dma_supported(struct device *hwdev, u64 mask);
++extern void swiotlb_init(void);
++
++extern int swiotlb_force;
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void pci_swiotlb_init(void)
++{
++}
++
++
++static inline __attribute__((always_inline)) void dma_mark_clean(void *addr, size_t size) {}
++# 12 "/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h" 2
++
++extern dma_addr_t bad_dma_address;
++extern int iommu_merge;
++extern struct device fallback_dev;
++extern int panic_on_overflow;
++extern int force_iommu;
++
++struct dma_mapping_ops {
++ int (*mapping_error)(struct device *dev,
++      dma_addr_t dma_addr);
++ void* (*alloc_coherent)(struct device *dev, size_t size,
++    dma_addr_t *dma_handle, gfp_t gfp);
++ void (*free_coherent)(struct device *dev, size_t size,
++    void *vaddr, dma_addr_t dma_handle);
++ dma_addr_t (*map_single)(struct device *hwdev, phys_addr_t ptr,
++    size_t size, int direction);
++
++ dma_addr_t (*map_simple)(struct device *hwdev, phys_addr_t ptr,
++    size_t size, int direction);
++ void (*unmap_single)(struct device *dev, dma_addr_t addr,
++    size_t size, int direction);
++ void (*sync_single_for_cpu)(struct device *hwdev,
++    dma_addr_t dma_handle, size_t size,
++    int direction);
++ void (*sync_single_for_device)(struct device *hwdev,
++    dma_addr_t dma_handle, size_t size,
++    int direction);
++ void (*sync_single_range_for_cpu)(struct device *hwdev,
++    dma_addr_t dma_handle, unsigned long offset,
++    size_t size, int direction);
++ void (*sync_single_range_for_device)(struct device *hwdev,
++    dma_addr_t dma_handle, unsigned long offset,
++    size_t size, int direction);
++ void (*sync_sg_for_cpu)(struct device *hwdev,
++    struct scatterlist *sg, int nelems,
++    int direction);
++ void (*sync_sg_for_device)(struct device *hwdev,
++    struct scatterlist *sg, int nelems,
++    int direction);
++ int (*map_sg)(struct device *hwdev, struct scatterlist *sg,
++    int nents, int direction);
++ void (*unmap_sg)(struct device *hwdev,
++    struct scatterlist *sg, int nents,
++    int direction);
++ int (*dma_supported)(struct device *hwdev, u64 mask);
++ int is_phys;
++};
++
++extern struct dma_mapping_ops *dma_ops;
++
++static inline __attribute__((always_inline)) struct dma_mapping_ops *get_dma_ops(struct device *dev)
++{
++
++ return dma_ops;
++
++
++
++
++
++
++}
++
++
++static inline __attribute__((always_inline)) int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
++{
++
++ return 0;
++
++
++
++
++
++
++
++}
++
++
++
++
++void *dma_alloc_coherent(struct device *dev, size_t size,
++      dma_addr_t *dma_handle, gfp_t flag);
++
++void dma_free_coherent(struct device *dev, size_t size,
++    void *vaddr, dma_addr_t dma_handle);
++
++
++extern int dma_supported(struct device *hwdev, u64 mask);
++extern int dma_set_mask(struct device *dev, u64 mask);
++
++static inline __attribute__((always_inline)) dma_addr_t
++dma_map_single(struct device *hwdev, void *ptr, size_t size,
++        int direction)
++{
++ struct dma_mapping_ops *ops = get_dma_ops(hwdev);
++
++ do { if (__builtin_expect(!!(!valid_dma_direction(direction)), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h"), "i" (107), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++ return ops->map_single(hwdev, virt_to_phys(ptr), size, direction);
++}
++
++static inline __attribute__((always_inline)) void
++dma_unmap_single(struct device *dev, dma_addr_t addr, size_t size,
++   int direction)
++{
++ struct dma_mapping_ops *ops = get_dma_ops(dev);
++
++ do { if (__builtin_expect(!!(!valid_dma_direction(direction)), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h"), "i" (117), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++ if (ops->unmap_single)
++  ops->unmap_single(dev, addr, size, direction);
++}
++
++static inline __attribute__((always_inline)) int
++dma_map_sg(struct device *hwdev, struct scatterlist *sg,
++    int nents, int direction)
++{
++ struct dma_mapping_ops *ops = get_dma_ops(hwdev);
++
++ do { if (__builtin_expect(!!(!valid_dma_direction(direction)), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h"), "i" (128), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++ return ops->map_sg(hwdev, sg, nents, direction);
++}
++
++static inline __attribute__((always_inline)) void
++dma_unmap_sg(struct device *hwdev, struct scatterlist *sg, int nents,
++      int direction)
++{
++ struct dma_mapping_ops *ops = get_dma_ops(hwdev);
++
++ do { if (__builtin_expect(!!(!valid_dma_direction(direction)), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h"), "i" (138), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++ if (ops->unmap_sg)
++  ops->unmap_sg(hwdev, sg, nents, direction);
++}
++
++static inline __attribute__((always_inline)) void
++dma_sync_single_for_cpu(struct device *hwdev, dma_addr_t dma_handle,
++   size_t size, int direction)
++{
++ struct dma_mapping_ops *ops = get_dma_ops(hwdev);
++
++ do { if (__builtin_expect(!!(!valid_dma_direction(direction)), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h"), "i" (149), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++ if (ops->sync_single_for_cpu)
++  ops->sync_single_for_cpu(hwdev, dma_handle, size, direction);
++ flush_write_buffers();
++}
++
++static inline __attribute__((always_inline)) void
++dma_sync_single_for_device(struct device *hwdev, dma_addr_t dma_handle,
++      size_t size, int direction)
++{
++ struct dma_mapping_ops *ops = get_dma_ops(hwdev);
++
++ do { if (__builtin_expect(!!(!valid_dma_direction(direction)), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h"), "i" (161), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++ if (ops->sync_single_for_device)
++  ops->sync_single_for_device(hwdev, dma_handle, size, direction);
++ flush_write_buffers();
++}
++
++static inline __attribute__((always_inline)) void
++dma_sync_single_range_for_cpu(struct device *hwdev, dma_addr_t dma_handle,
++         unsigned long offset, size_t size, int direction)
++{
++ struct dma_mapping_ops *ops = get_dma_ops(hwdev);
++
++ do { if (__builtin_expect(!!(!valid_dma_direction(direction)), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h"), "i" (173), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++ if (ops->sync_single_range_for_cpu)
++  ops->sync_single_range_for_cpu(hwdev, dma_handle, offset,
++            size, direction);
++ flush_write_buffers();
++}
++
++static inline __attribute__((always_inline)) void
++dma_sync_single_range_for_device(struct device *hwdev, dma_addr_t dma_handle,
++     unsigned long offset, size_t size,
++     int direction)
++{
++ struct dma_mapping_ops *ops = get_dma_ops(hwdev);
++
++ do { if (__builtin_expect(!!(!valid_dma_direction(direction)), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h"), "i" (187), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++ if (ops->sync_single_range_for_device)
++  ops->sync_single_range_for_device(hwdev, dma_handle,
++        offset, size, direction);
++ flush_write_buffers();
++}
++
++static inline __attribute__((always_inline)) void
++dma_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sg,
++      int nelems, int direction)
++{
++ struct dma_mapping_ops *ops = get_dma_ops(hwdev);
++
++ do { if (__builtin_expect(!!(!valid_dma_direction(direction)), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h"), "i" (200), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++ if (ops->sync_sg_for_cpu)
++  ops->sync_sg_for_cpu(hwdev, sg, nelems, direction);
++ flush_write_buffers();
++}
++
++static inline __attribute__((always_inline)) void
++dma_sync_sg_for_device(struct device *hwdev, struct scatterlist *sg,
++         int nelems, int direction)
++{
++ struct dma_mapping_ops *ops = get_dma_ops(hwdev);
++
++ do { if (__builtin_expect(!!(!valid_dma_direction(direction)), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h"), "i" (212), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++ if (ops->sync_sg_for_device)
++  ops->sync_sg_for_device(hwdev, sg, nelems, direction);
++
++ flush_write_buffers();
++}
++
++static inline __attribute__((always_inline)) dma_addr_t dma_map_page(struct device *dev, struct page *page,
++          size_t offset, size_t size,
++          int direction)
++{
++ struct dma_mapping_ops *ops = get_dma_ops(dev);
++
++ do { if (__builtin_expect(!!(!valid_dma_direction(direction)), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h"), "i" (225), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++ return ops->map_single(dev, ((dma_addr_t)((unsigned long)((page) - mem_map) + (0UL)) << 12) + offset,
++          size, direction);
++}
++
++static inline __attribute__((always_inline)) void dma_unmap_page(struct device *dev, dma_addr_t addr,
++      size_t size, int direction)
++{
++ dma_unmap_single(dev, addr, size, direction);
++}
++
++static inline __attribute__((always_inline)) void
++dma_cache_sync(struct device *dev, void *vaddr, size_t size,
++ enum dma_data_direction dir)
++{
++ flush_write_buffers();
++}
++
++static inline __attribute__((always_inline)) int dma_get_cache_alignment(void)
++{
++
++
++ return boot_cpu_data.x86_clflush_size;
++}
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/dma-coherent.h" 1
++# 9 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/dma-coherent.h"
++int dma_alloc_from_coherent(struct device *dev, ssize_t size,
++           dma_addr_t *dma_handle, void **ret);
++int dma_release_from_coherent(struct device *dev, int order, void *vaddr);
++
++
++
++
++
++extern int
++dma_declare_coherent_memory(struct device *dev, dma_addr_t bus_addr,
++       dma_addr_t device_addr, size_t size, int flags);
++
++extern void
++dma_release_declared_memory(struct device *dev);
++
++extern void *
++dma_mark_declared_memory_occupied(struct device *dev,
++      dma_addr_t device_addr, size_t size);
++# 253 "/d/kernels/linux-2.6.27.10-clickport/include/asm/dma-mapping.h" 2
++# 53 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h" 2
++# 61 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h"
++extern u64 dma_get_required_mask(struct device *dev);
++
++static inline __attribute__((always_inline)) unsigned int dma_get_max_seg_size(struct device *dev)
++{
++ return dev->dma_parms ? dev->dma_parms->max_segment_size : 65536;
++}
++
++static inline __attribute__((always_inline)) unsigned int dma_set_max_seg_size(struct device *dev,
++      unsigned int size)
++{
++ if (dev->dma_parms) {
++  dev->dma_parms->max_segment_size = size;
++  return 0;
++ } else
++  return -5;
++}
++
++static inline __attribute__((always_inline)) unsigned long dma_get_seg_boundary(struct device *dev)
++{
++ return dev->dma_parms ?
++  dev->dma_parms->segment_boundary_mask : 0xffffffff;
++}
++
++static inline __attribute__((always_inline)) int dma_set_seg_boundary(struct device *dev, unsigned long mask)
++{
++ if (dev->dma_parms) {
++  dev->dma_parms->segment_boundary_mask = mask;
++  return 0;
++ } else
++  return -5;
++}
++# 123 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h"
++extern void *dmam_alloc_coherent(struct device *dev, size_t size,
++     dma_addr_t *dma_handle, gfp_t gfp);
++extern void dmam_free_coherent(struct device *dev, size_t size, void *vaddr,
++          dma_addr_t dma_handle);
++extern void *dmam_alloc_noncoherent(struct device *dev, size_t size,
++        dma_addr_t *dma_handle, gfp_t gfp);
++extern void dmam_free_noncoherent(struct device *dev, size_t size, void *vaddr,
++      dma_addr_t dma_handle);
++
++extern int dmam_declare_coherent_memory(struct device *dev, dma_addr_t bus_addr,
++     dma_addr_t device_addr, size_t size,
++     int flags);
++extern void dmam_release_declared_memory(struct device *dev);
++# 150 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dma-mapping.h"
++struct dma_attrs;
++# 30 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h" 2
++# 38 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h"
++enum dma_state {
++ DMA_RESOURCE_SUSPEND,
++ DMA_RESOURCE_RESUME,
++ DMA_RESOURCE_AVAILABLE,
++ DMA_RESOURCE_REMOVED,
++};
++
++
++
++
++
++
++
++enum dma_state_client {
++ DMA_ACK,
++ DMA_DUP,
++ DMA_NAK,
++};
++
++
++
++
++
++
++typedef s32 dma_cookie_t;
++# 72 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h"
++enum dma_status {
++ DMA_SUCCESS,
++ DMA_IN_PROGRESS,
++ DMA_ERROR,
++};
++
++
++
++
++enum dma_transaction_type {
++ DMA_MEMCPY,
++ DMA_XOR,
++ DMA_PQ_XOR,
++ DMA_DUAL_XOR,
++ DMA_PQ_UPDATE,
++ DMA_ZERO_SUM,
++ DMA_PQ_ZERO_SUM,
++ DMA_MEMSET,
++ DMA_MEMCPY_CRC32C,
++ DMA_INTERRUPT,
++ DMA_SLAVE,
++};
++# 104 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h"
++enum dma_slave_width {
++ DMA_SLAVE_WIDTH_8BIT,
++ DMA_SLAVE_WIDTH_16BIT,
++ DMA_SLAVE_WIDTH_32BIT,
++};
++# 121 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h"
++enum dma_ctrl_flags {
++ DMA_PREP_INTERRUPT = (1 << 0),
++ DMA_CTRL_ACK = (1 << 1),
++ DMA_COMPL_SKIP_SRC_UNMAP = (1 << 2),
++ DMA_COMPL_SKIP_DEST_UNMAP = (1 << 3),
++};
++
++
++
++
++
++typedef struct { unsigned long bits[((((DMA_SLAVE + 1)) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))]; } dma_cap_mask_t;
++# 152 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h"
++struct dma_slave {
++ struct device *dev;
++ struct device *dma_dev;
++ dma_addr_t tx_reg;
++ dma_addr_t rx_reg;
++ enum dma_slave_width reg_width;
++};
++# 167 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h"
++struct dma_chan_percpu {
++ local_t refcount;
++
++ unsigned long memcpy_count;
++ unsigned long bytes_transferred;
++};
++# 187 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h"
++struct dma_chan {
++ struct dma_device *device;
++ dma_cookie_t cookie;
++
++
++ int chan_id;
++ struct device dev;
++
++ struct kref refcount;
++ int slow_ref;
++ struct rcu_head rcu;
++
++ struct list_head device_node;
++ struct dma_chan_percpu *local;
++ int client_count;
++};
++
++
++
++void dma_chan_cleanup(struct kref *kref);
++
++static inline __attribute__((always_inline)) void dma_chan_get(struct dma_chan *chan)
++{
++ if (__builtin_expect(!!(chan->slow_ref), 0))
++  kref_get(&chan->refcount);
++ else {
++  local_inc(&(({ struct percpu_data *__p = (struct percpu_data *)~(unsigned long)((chan->local)); (__typeof__((chan->local)))__p->ptrs[((({ do { } while (0); (({ typeof(per_cpu__cpu_number) ret__; switch (sizeof(per_cpu__cpu_number)) { case 1: asm("mov" "b ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__cpu_number)); break; case 2: asm("mov" "w ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__cpu_number)); break; case 4: asm("mov" "l ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__cpu_number)); break; default: __bad_percpu_size(); } ret__; })); })))]; })->refcount));
++  do { } while (0);
++ }
++}
++
++static inline __attribute__((always_inline)) void dma_chan_put(struct dma_chan *chan)
++{
++ if (__builtin_expect(!!(chan->slow_ref), 0))
++  kref_put(&chan->refcount, dma_chan_cleanup);
++ else {
++  local_dec(&(({ struct percpu_data *__p = (struct percpu_data *)~(unsigned long)((chan->local)); (__typeof__((chan->local)))__p->ptrs[((({ do { } while (0); (({ typeof(per_cpu__cpu_number) ret__; switch (sizeof(per_cpu__cpu_number)) { case 1: asm("mov" "b ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__cpu_number)); break; case 2: asm("mov" "w ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__cpu_number)); break; case 4: asm("mov" "l ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__cpu_number)); break; default: __bad_percpu_size(); } ret__; })); })))]; })->refcount));
++  do { } while (0);
++ }
++}
++# 241 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h"
++struct dma_client;
++typedef enum dma_state_client (*dma_event_callback) (struct dma_client *client,
++  struct dma_chan *chan, enum dma_state state);
++# 254 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h"
++struct dma_client {
++ dma_event_callback event_callback;
++ dma_cap_mask_t cap_mask;
++ struct dma_slave *slave;
++ struct list_head global_node;
++};
++
++typedef void (*dma_async_tx_callback)(void *dma_async_param);
++# 281 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h"
++struct dma_async_tx_descriptor {
++ dma_cookie_t cookie;
++ enum dma_ctrl_flags flags;
++ dma_addr_t phys;
++ struct list_head tx_list;
++ struct dma_chan *chan;
++ dma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *tx);
++ dma_async_tx_callback callback;
++ void *callback_param;
++ struct dma_async_tx_descriptor *next;
++ struct dma_async_tx_descriptor *parent;
++ spinlock_t lock;
++};
++# 318 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h"
++struct dma_device {
++
++ unsigned int chancnt;
++ struct list_head channels;
++ struct list_head global_node;
++ dma_cap_mask_t cap_mask;
++ int max_xor;
++
++ struct kref refcount;
++ struct completion done;
++
++ int dev_id;
++ struct device *dev;
++
++ int (*device_alloc_chan_resources)(struct dma_chan *chan,
++   struct dma_client *client);
++ void (*device_free_chan_resources)(struct dma_chan *chan);
++
++ struct dma_async_tx_descriptor *(*device_prep_dma_memcpy)(
++  struct dma_chan *chan, dma_addr_t dest, dma_addr_t src,
++  size_t len, unsigned long flags);
++ struct dma_async_tx_descriptor *(*device_prep_dma_xor)(
++  struct dma_chan *chan, dma_addr_t dest, dma_addr_t *src,
++  unsigned int src_cnt, size_t len, unsigned long flags);
++ struct dma_async_tx_descriptor *(*device_prep_dma_zero_sum)(
++  struct dma_chan *chan, dma_addr_t *src, unsigned int src_cnt,
++  size_t len, u32 *result, unsigned long flags);
++ struct dma_async_tx_descriptor *(*device_prep_dma_memset)(
++  struct dma_chan *chan, dma_addr_t dest, int value, size_t len,
++  unsigned long flags);
++ struct dma_async_tx_descriptor *(*device_prep_dma_interrupt)(
++  struct dma_chan *chan, unsigned long flags);
++
++ struct dma_async_tx_descriptor *(*device_prep_slave_sg)(
++  struct dma_chan *chan, struct scatterlist *sgl,
++  unsigned int sg_len, enum dma_data_direction direction,
++  unsigned long flags);
++ void (*device_terminate_all)(struct dma_chan *chan);
++
++ enum dma_status (*device_is_tx_complete)(struct dma_chan *chan,
++   dma_cookie_t cookie, dma_cookie_t *last,
++   dma_cookie_t *used);
++ void (*device_issue_pending)(struct dma_chan *chan);
++};
++
++
++
++void dma_async_client_register(struct dma_client *client);
++void dma_async_client_unregister(struct dma_client *client);
++void dma_async_client_chan_request(struct dma_client *client);
++dma_cookie_t dma_async_memcpy_buf_to_buf(struct dma_chan *chan,
++ void *dest, void *src, size_t len);
++dma_cookie_t dma_async_memcpy_buf_to_pg(struct dma_chan *chan,
++ struct page *page, unsigned int offset, void *kdata, size_t len);
++dma_cookie_t dma_async_memcpy_pg_to_pg(struct dma_chan *chan,
++ struct page *dest_pg, unsigned int dest_off, struct page *src_pg,
++ unsigned int src_off, size_t len);
++void dma_async_tx_descriptor_init(struct dma_async_tx_descriptor *tx,
++ struct dma_chan *chan);
++
++static inline __attribute__((always_inline)) void async_tx_ack(struct dma_async_tx_descriptor *tx)
++{
++ tx->flags = (enum dma_ctrl_flags) (tx->flags | DMA_CTRL_ACK);
++}
++
++static inline __attribute__((always_inline)) bool async_tx_test_ack(struct dma_async_tx_descriptor *tx)
++{
++ return (tx->flags & DMA_CTRL_ACK) == DMA_CTRL_ACK;
++}
++
++
++static inline __attribute__((always_inline)) int __first_dma_cap(const dma_cap_mask_t *srcp)
++{
++ return ({ int __min1 = ((DMA_SLAVE + 1)); int __min2 = (find_first_bit(srcp->bits, (DMA_SLAVE + 1))); __min1 < __min2 ? __min1: __min2; });
++
++}
++
++
++static inline __attribute__((always_inline)) int __next_dma_cap(int n, const dma_cap_mask_t *srcp)
++{
++ return ({ int __min1 = ((DMA_SLAVE + 1)); int __min2 = (find_next_bit(srcp->bits, (DMA_SLAVE + 1), n+1)); __min1 < __min2 ? __min1: __min2; });
++
++}
++
++
++static inline __attribute__((always_inline)) void
++__dma_cap_set(enum dma_transaction_type tx_type, dma_cap_mask_t *dstp)
++{
++ set_bit(tx_type, dstp->bits);
++}
++
++
++static inline __attribute__((always_inline)) int
++__dma_has_cap(enum dma_transaction_type tx_type, dma_cap_mask_t *srcp)
++{
++ return (__builtin_constant_p((tx_type)) ? constant_test_bit((tx_type), (srcp->bits)) : variable_test_bit((tx_type), (srcp->bits)));
++}
++# 428 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h"
++static inline __attribute__((always_inline)) void dma_async_issue_pending(struct dma_chan *chan)
++{
++ chan->device->device_issue_pending(chan);
++}
++# 446 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h"
++static inline __attribute__((always_inline)) enum dma_status dma_async_is_tx_complete(struct dma_chan *chan,
++ dma_cookie_t cookie, dma_cookie_t *last, dma_cookie_t *used)
++{
++ return chan->device->device_is_tx_complete(chan, cookie, last, used);
++}
++# 464 "/d/kernels/linux-2.6.27.10-clickport/include/linux/dmaengine.h"
++static inline __attribute__((always_inline)) enum dma_status dma_async_is_complete(dma_cookie_t cookie,
++   dma_cookie_t last_complete, dma_cookie_t last_used)
++{
++ if (last_complete <= last_used) {
++  if ((cookie <= last_complete) || (cookie > last_used))
++   return DMA_SUCCESS;
++ } else {
++  if ((cookie <= last_complete) && (cookie > last_used))
++   return DMA_SUCCESS;
++ }
++ return DMA_IN_PROGRESS;
++}
++
++enum dma_status dma_sync_wait(struct dma_chan *chan, dma_cookie_t cookie);
++
++
++
++int dma_async_device_register(struct dma_device *device);
++void dma_async_device_unregister(struct dma_device *device);
++
++
++
++struct dma_page_list {
++ char *base_address;
++ int nr_pages;
++ struct page **pages;
++};
++
++struct dma_pinned_list {
++ int nr_iovecs;
++ struct dma_page_list page_list[0];
++};
++
++struct dma_pinned_list *dma_pin_iovec_pages(struct iovec *iov, size_t len);
++void dma_unpin_iovec_pages(struct dma_pinned_list* pinned_list);
++
++dma_cookie_t dma_memcpy_to_iovec(struct dma_chan *chan, struct iovec *iov,
++ struct dma_pinned_list *pinned_list, unsigned char *kdata, size_t len);
++dma_cookie_t dma_memcpy_pg_to_iovec(struct dma_chan *chan, struct iovec *iov,
++ struct dma_pinned_list *pinned_list, struct page *page,
++ unsigned int offset, size_t len);
++# 30 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h" 1
++# 19 "/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ktime.h" 1
++# 25 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ktime.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/jiffies.h" 1
++
++
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/timex.h" 1
++# 100 "/d/kernels/linux-2.6.27.10-clickport/include/linux/timex.h"
++struct timex {
++ unsigned int modes;
++ long offset;
++ long freq;
++ long maxerror;
++ long esterror;
++ int status;
++ long constant;
++ long precision;
++ long tolerance;
++
++
++ struct timeval time;
++ long tick;
++
++ long ppsfreq;
++ long jitter;
++ int shift;
++ long stabil;
++ long jitcnt;
++ long calcnt;
++ long errcnt;
++ long stbcnt;
++
++ int tai;
++
++ int :32; int :32; int :32; int :32;
++ int :32; int :32; int :32; int :32;
++ int :32; int :32; int :32;
++};
++# 195 "/d/kernels/linux-2.6.27.10-clickport/include/linux/timex.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/timex.h" 1
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/tsc.h" 1
++# 15 "/d/kernels/linux-2.6.27.10-clickport/include/asm/tsc.h"
++typedef unsigned long long cycles_t;
++
++extern unsigned int cpu_khz;
++extern unsigned int tsc_khz;
++
++extern void disable_TSC(void);
++
++static inline __attribute__((always_inline)) cycles_t get_cycles(void)
++{
++ unsigned long long ret = 0;
++
++
++
++
++
++ (ret = paravirt_read_tsc());
++
++ return ret;
++}
++
++static inline __attribute__((always_inline)) __attribute__((always_inline)) cycles_t vget_cycles(void)
++{
++# 45 "/d/kernels/linux-2.6.27.10-clickport/include/asm/tsc.h"
++ return (cycles_t)__native_read_tsc();
++}
++
++extern void tsc_init(void);
++extern void mark_tsc_unstable(char *reason);
++extern int unsynchronized_tsc(void);
++int check_tsc_unstable(void);
++
++
++
++
++
++extern void check_tsc_sync_source(int cpu);
++extern void check_tsc_sync_target(void);
++
++extern int notsc_setup(char *);
++# 7 "/d/kernels/linux-2.6.27.10-clickport/include/asm/timex.h" 2
++# 196 "/d/kernels/linux-2.6.27.10-clickport/include/linux/timex.h" 2
++
++
++
++
++
++
++extern unsigned long tick_usec;
++extern unsigned long tick_nsec;
++extern int tickadj;
++
++
++
++
++extern int time_status;
++extern long time_maxerror;
++extern long time_esterror;
++
++extern long time_adjust;
++
++extern void ntp_init(void);
++extern void ntp_clear(void);
++
++
++
++
++
++static inline __attribute__((always_inline)) int ntp_synced(void)
++{
++ return !(time_status & 0x0040);
++}
++# 244 "/d/kernels/linux-2.6.27.10-clickport/include/linux/timex.h"
++extern u64 tick_length;
++
++extern void second_overflow(void);
++extern void update_ntp_one_tick(void);
++extern int do_adjtimex(struct timex *);
++
++
++
++
++int read_current_timer(unsigned long *timer_val);
++# 9 "/d/kernels/linux-2.6.27.10-clickport/include/linux/jiffies.h" 2
++# 81 "/d/kernels/linux-2.6.27.10-clickport/include/linux/jiffies.h"
++extern u64 __attribute__((section(".data"))) jiffies_64;
++extern unsigned long volatile __attribute__((section(".data"))) jiffies;
++
++
++u64 get_jiffies_64(void);
++# 173 "/d/kernels/linux-2.6.27.10-clickport/include/linux/jiffies.h"
++extern unsigned long preset_lpj;
++# 286 "/d/kernels/linux-2.6.27.10-clickport/include/linux/jiffies.h"
++extern unsigned int jiffies_to_msecs(const unsigned long j);
++extern unsigned int jiffies_to_usecs(const unsigned long j);
++extern unsigned long msecs_to_jiffies(const unsigned int m);
++extern unsigned long usecs_to_jiffies(const unsigned int u);
++extern unsigned long timespec_to_jiffies(const struct timespec *value);
++extern void jiffies_to_timespec(const unsigned long jiffies,
++    struct timespec *value);
++extern unsigned long timeval_to_jiffies(const struct timeval *value);
++extern void jiffies_to_timeval(const unsigned long jiffies,
++          struct timeval *value);
++extern clock_t jiffies_to_clock_t(long x);
++extern unsigned long clock_t_to_jiffies(unsigned long x);
++extern u64 jiffies_64_to_clock_t(u64 x);
++extern u64 nsec_to_clock_t(u64 x);
++# 26 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ktime.h" 2
++# 46 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ktime.h"
++union ktime {
++ s64 tv64;
++# 57 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ktime.h"
++};
++
++typedef union ktime ktime_t;
++# 87 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ktime.h"
++static inline __attribute__((always_inline)) ktime_t ktime_set(const long secs, const unsigned long nsecs)
++{
++
++
++
++
++ return ({ ktime_t __kt; __kt.tv64 = ((s64)secs * 1000000000L + (s64)nsecs); __kt; });
++}
++# 124 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ktime.h"
++static inline __attribute__((always_inline)) ktime_t timespec_to_ktime(struct timespec ts)
++{
++ return ktime_set(ts.tv_sec, ts.tv_nsec);
++}
++
++
++static inline __attribute__((always_inline)) ktime_t timeval_to_ktime(struct timeval tv)
++{
++ return ktime_set(tv.tv_sec, tv.tv_usec * 1000L);
++}
++# 306 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ktime.h"
++static inline __attribute__((always_inline)) int ktime_equal(const ktime_t cmp1, const ktime_t cmp2)
++{
++ return cmp1.tv64 == cmp2.tv64;
++}
++
++static inline __attribute__((always_inline)) s64 ktime_to_us(const ktime_t kt)
++{
++ struct timeval tv = ns_to_timeval((kt).tv64);
++ return (s64) tv.tv_sec * 1000000L + tv.tv_usec;
++}
++
++static inline __attribute__((always_inline)) s64 ktime_us_delta(const ktime_t later, const ktime_t earlier)
++{
++       return ktime_to_us(({ ktime_t __kt; __kt.tv64 = ((later).tv64 - (earlier).tv64); __kt; }));
++}
++
++static inline __attribute__((always_inline)) ktime_t ktime_add_us(const ktime_t kt, const u64 usec)
++{
++ return ({ ktime_t __kt; __kt.tv64 = ((kt).tv64 + (usec * 1000)); __kt; });
++}
++
++static inline __attribute__((always_inline)) ktime_t ktime_sub_us(const ktime_t kt, const u64 usec)
++{
++ return ({ktime_t duh; duh.tv64 = (kt).tv64 - (usec * 1000); duh; });
++}
++
++extern ktime_t ktime_add_safe(const ktime_t lhs, const ktime_t rhs);
++# 344 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ktime.h"
++extern void ktime_get_ts(struct timespec *ts);
++
++
++
++
++static inline __attribute__((always_inline)) ktime_t ns_to_ktime(u64 ns)
++{
++ static ktime_t ktime_zero;
++    ktime_zero = ({ktime_t duh; duh.tv64 = 0;duh;});
++ return ({ ktime_t __kt; __kt.tv64 = ((ktime_zero).tv64 + (ns)); __kt; });
++}
++# 20 "/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h" 2
++
++
++
++
++struct hrtimer_clock_base;
++struct hrtimer_cpu_base;
++
++
++
++
++enum hrtimer_mode {
++ HRTIMER_MODE_ABS,
++ HRTIMER_MODE_REL,
++};
++
++
++
++
++enum hrtimer_restart {
++ HRTIMER_NORESTART,
++ HRTIMER_RESTART,
++};
++# 60 "/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h"
++enum hrtimer_cb_mode {
++ HRTIMER_CB_SOFTIRQ,
++ HRTIMER_CB_IRQSAFE,
++ HRTIMER_CB_IRQSAFE_NO_RESTART,
++ HRTIMER_CB_IRQSAFE_PERCPU,
++ HRTIMER_CB_IRQSAFE_UNLOCKED,
++};
++# 122 "/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h"
++struct hrtimer {
++ struct rb_node node;
++ ktime_t expires;
++ enum hrtimer_restart (*function)(struct hrtimer *);
++ struct hrtimer_clock_base *base;
++ unsigned long state;
++ enum hrtimer_cb_mode cb_mode;
++ struct list_head cb_entry;
++
++ void *start_site;
++ char start_comm[16];
++ int start_pid;
++
++};
++# 144 "/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h"
++struct hrtimer_sleeper {
++ struct hrtimer timer;
++ struct task_struct *task;
++};
++# 163 "/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h"
++struct hrtimer_clock_base {
++ struct hrtimer_cpu_base *cpu_base;
++ clockid_t index;
++ struct rb_root active;
++ struct rb_node *first;
++ ktime_t resolution;
++ ktime_t (*get_time)(void);
++ ktime_t (*get_softirq_time)(void);
++ ktime_t softirq_time;
++
++ ktime_t offset;
++ int (*reprogram)(struct hrtimer *t,
++          struct hrtimer_clock_base *b,
++          ktime_t n);
++
++};
++# 199 "/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h"
++struct hrtimer_cpu_base {
++ spinlock_t lock;
++ struct hrtimer_clock_base clock_base[2];
++ struct list_head cb_pending;
++
++ ktime_t expires_next;
++ int hres_active;
++ unsigned long nr_events;
++
++};
++
++
++struct clock_event_device;
++
++extern void clock_was_set(void);
++extern void hres_timers_resume(void);
++extern void hrtimer_interrupt(struct clock_event_device *dev);
++
++
++
++
++static inline __attribute__((always_inline)) ktime_t hrtimer_cb_get_time(struct hrtimer *timer)
++{
++ return timer->base->get_time();
++}
++
++static inline __attribute__((always_inline)) int hrtimer_is_hres_active(struct hrtimer *timer)
++{
++ return timer->base->cpu_base->hres_active;
++}
++# 270 "/d/kernels/linux-2.6.27.10-clickport/include/linux/hrtimer.h"
++extern ktime_t ktime_get(void);
++extern ktime_t ktime_get_real(void);
++
++
++
++
++extern void hrtimer_init(struct hrtimer *timer, clockid_t which_clock,
++    enum hrtimer_mode mode);
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void hrtimer_init_on_stack(struct hrtimer *timer,
++      clockid_t which_clock,
++      enum hrtimer_mode mode)
++{
++ hrtimer_init(timer, which_clock, mode);
++}
++static inline __attribute__((always_inline)) void destroy_hrtimer_on_stack(struct hrtimer *timer) { }
++
++
++
++extern int hrtimer_start(struct hrtimer *timer, ktime_t tim,
++    const enum hrtimer_mode mode);
++extern int hrtimer_cancel(struct hrtimer *timer);
++extern int hrtimer_try_to_cancel(struct hrtimer *timer);
++
++static inline __attribute__((always_inline)) int hrtimer_restart(struct hrtimer *timer)
++{
++ return hrtimer_start(timer, timer->expires, HRTIMER_MODE_ABS);
++}
++
++
++extern ktime_t hrtimer_get_remaining(const struct hrtimer *timer);
++extern int hrtimer_get_res(const clockid_t which_clock, struct timespec *tp);
++
++extern ktime_t hrtimer_get_next_event(void);
++
++
++
++
++
++static inline __attribute__((always_inline)) int hrtimer_active(const struct hrtimer *timer)
++{
++ return timer->state != 0x00;
++}
++
++
++
++
++static inline __attribute__((always_inline)) int hrtimer_is_queued(struct hrtimer *timer)
++{
++ return timer->state &
++  (0x01 | 0x04);
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) int hrtimer_callback_running(struct hrtimer *timer)
++{
++ return timer->state & 0x02;
++}
++
++
++extern u64
++hrtimer_forward(struct hrtimer *timer, ktime_t now, ktime_t interval);
++
++
++static inline __attribute__((always_inline)) u64 hrtimer_forward_now(struct hrtimer *timer,
++          ktime_t interval)
++{
++ return hrtimer_forward(timer, timer->base->get_time(), interval);
++}
++
++
++extern long hrtimer_nanosleep(struct timespec *rqtp,
++         struct timespec *rmtp,
++         const enum hrtimer_mode mode,
++         const clockid_t clockid);
++extern long hrtimer_nanosleep_restart(struct restart_block *restart_block);
++
++extern void hrtimer_init_sleeper(struct hrtimer_sleeper *sl,
++     struct task_struct *tsk);
++
++
++extern void hrtimer_run_queues(void);
++extern void hrtimer_run_pending(void);
++
++
++extern void __attribute__ ((__section__(".init.text"))) hrtimers_init(void);
++
++
++extern u64 ktime_divns(const ktime_t kt, s64 div);
++
++
++
++
++
++extern void sysrq_timer_list_show(void);
++
++
++
++
++
++
++extern void timer_stats_update_stats(void *timer, pid_t pid, void *startf,
++         void *timerf, char *comm,
++         unsigned int timer_flag);
++
++static inline __attribute__((always_inline)) void timer_stats_account_hrtimer(struct hrtimer *timer)
++{
++ timer_stats_update_stats(timer, timer->start_pid, timer->start_site,
++     (void *) timer->function, timer->start_comm, 0);
++}
++
++extern void __timer_stats_hrtimer_set_start_info(struct hrtimer *timer,
++       void *addr);
++
++static inline __attribute__((always_inline)) void timer_stats_hrtimer_set_start_info(struct hrtimer *timer)
++{
++ __timer_stats_hrtimer_set_start_info(timer, __builtin_return_address(0));
++}
++
++static inline __attribute__((always_inline)) void timer_stats_hrtimer_clear_start_info(struct hrtimer *timer)
++{
++ timer->start_site = 0;
++}
++# 31 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h" 2
++# 96 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++struct net_device;
++struct scatterlist;
++struct pipe_inode_info;
++
++
++struct nf_conntrack {
++ atomic_t use;
++};
++
++
++
++struct nf_bridge_info {
++ atomic_t use;
++ struct net_device *physindev;
++ struct net_device *physoutdev;
++ unsigned int mask;
++ unsigned long data[32 / sizeof(unsigned long)];
++};
++
++
++struct sk_buff_head {
++
++ struct sk_buff *next;
++ struct sk_buff *prev;
++
++ __u32 qlen;
++ spinlock_t lock;
++};
++
++struct sk_buff;
++
++
++
++
++typedef struct skb_frag_struct skb_frag_t;
++
++struct skb_frag_struct {
++ struct page *page;
++ __u32 page_offset;
++ __u32 size;
++};
++
++
++
++
++struct skb_shared_info {
++ atomic_t dataref;
++ unsigned short nr_frags;
++ unsigned short gso_size;
++
++ unsigned short gso_segs;
++ unsigned short gso_type;
++ __be32 ip6_frag_id;
++ struct sk_buff *frag_list;
++ skb_frag_t frags[(65536/((1UL) << 12) + 2)];
++};
++# 168 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++enum {
++ SKB_FCLONE_UNAVAILABLE,
++ SKB_FCLONE_ORIG,
++ SKB_FCLONE_CLONE,
++};
++
++enum {
++ SKB_GSO_TCPV4 = 1 << 0,
++ SKB_GSO_UDP = 1 << 1,
++
++
++ SKB_GSO_DODGY = 1 << 2,
++
++
++ SKB_GSO_TCP_ECN = 1 << 3,
++
++ SKB_GSO_TCPV6 = 1 << 4,
++};
++# 194 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++typedef unsigned char *sk_buff_data_t;
++# 259 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++struct sk_buff {
++
++ struct sk_buff *next;
++ struct sk_buff *prev;
++
++ struct sock *sk;
++ ktime_t tstamp;
++ struct net_device *dev;
++
++ union {
++  struct dst_entry *dst;
++  struct rtable *rtable;
++ };
++ struct sec_path *sp;
++
++
++
++
++
++
++
++ char cb[48];
++
++ unsigned int len,
++    data_len;
++ __u16 mac_len,
++    hdr_len;
++ union {
++  __wsum csum;
++  struct {
++   __u16 csum_start;
++   __u16 csum_offset;
++  };
++ };
++ __u32 priority;
++ __u8 local_df:1,
++    cloned:1,
++    ip_summed:2,
++    nohdr:1,
++    nfctinfo:3;
++ __u8 pkt_type:3,
++    fclone:2,
++    ipvs_property:1,
++    peeked:1,
++    nf_trace:1;
++ __be16 protocol;
++
++ void (*destructor)(struct sk_buff *skb);
++
++ struct nf_conntrack *nfct;
++ struct sk_buff *nfct_reasm;
++
++
++ struct nf_bridge_info *nf_bridge;
++
++
++ int iif;
++ __u16 queue_mapping;
++
++ __u16 tc_index;
++
++ __u16 tc_verd;
++
++
++
++ __u8 ndisc_nodetype:2;
++
++
++ __u8 do_not_encrypt:1;
++
++
++
++
++
++
++
++ __u32 secmark;
++
++
++ __u32 mark;
++
++ __u16 vlan_tci;
++
++ sk_buff_data_t transport_header;
++ sk_buff_data_t network_header;
++ sk_buff_data_t mac_header;
++
++ sk_buff_data_t tail;
++ sk_buff_data_t end;
++ unsigned char *head,
++    *data;
++ unsigned int truesize;
++ atomic_t users;
++};
++# 362 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++extern void kfree_skb(struct sk_buff *skb);
++extern void __kfree_skb(struct sk_buff *skb);
++extern struct sk_buff *__alloc_skb(unsigned int size,
++       gfp_t priority, int fclone, int node);
++static inline __attribute__((always_inline)) struct sk_buff *alloc_skb(unsigned int size,
++     gfp_t priority)
++{
++ return __alloc_skb(size, priority, 0, -1);
++}
++
++static inline __attribute__((always_inline)) struct sk_buff *alloc_skb_fclone(unsigned int size,
++            gfp_t priority)
++{
++ return __alloc_skb(size, priority, 1, -1);
++}
++
++extern struct sk_buff *skb_morph(struct sk_buff *dst, struct sk_buff *src);
++extern struct sk_buff *skb_clone(struct sk_buff *skb,
++     gfp_t priority);
++extern struct sk_buff *skb_copy(const struct sk_buff *skb,
++    gfp_t priority);
++extern struct sk_buff *pskb_copy(struct sk_buff *skb,
++     gfp_t gfp_mask);
++extern struct sk_buff *skb_recycle(struct sk_buff *skb);
++extern int pskb_expand_head(struct sk_buff *skb,
++     int nhead, int ntail,
++     gfp_t gfp_mask);
++extern struct sk_buff *skb_realloc_headroom(struct sk_buff *skb,
++         unsigned int headroom);
++extern struct sk_buff *skb_copy_expand(const struct sk_buff *skb,
++           int newheadroom, int newtailroom,
++           gfp_t priority);
++extern int skb_to_sgvec(struct sk_buff *skb,
++        struct scatterlist *sg, int offset,
++        int len);
++extern int skb_cow_data(struct sk_buff *skb, int tailbits,
++        struct sk_buff **trailer);
++extern int skb_pad(struct sk_buff *skb, int pad);
++
++extern void skb_over_panic(struct sk_buff *skb, int len,
++         void *here);
++extern void skb_under_panic(struct sk_buff *skb, int len,
++          void *here);
++extern void skb_truesize_bug(struct sk_buff *skb);
++
++static inline __attribute__((always_inline)) void skb_truesize_check(struct sk_buff *skb)
++{
++ int len = sizeof(struct sk_buff) + skb->len;
++
++ if (__builtin_expect(!!((int)skb->truesize < len), 0))
++  skb_truesize_bug(skb);
++}
++
++extern int skb_append_datato_frags(struct sock *sk, struct sk_buff *skb,
++   int getfrag(void *from, char *to, int offset,
++   int len,int odd, struct sk_buff *skb),
++   void *from, int length);
++
++struct skb_seq_state
++{
++ __u32 lower_offset;
++ __u32 upper_offset;
++ __u32 frag_idx;
++ __u32 stepped_offset;
++ struct sk_buff *root_skb;
++ struct sk_buff *cur_skb;
++ __u8 *frag_data;
++};
++
++extern void skb_prepare_seq_read(struct sk_buff *skb,
++        unsigned int from, unsigned int to,
++        struct skb_seq_state *st);
++extern unsigned int skb_seq_read(unsigned int consumed, const u8 **data,
++       struct skb_seq_state *st);
++extern void skb_abort_seq_read(struct skb_seq_state *st);
++
++extern unsigned int skb_find_text(struct sk_buff *skb, unsigned int from,
++        unsigned int to, struct ts_config *config,
++        struct ts_state *state);
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) unsigned char *skb_end_pointer(const struct sk_buff *skb)
++{
++ return skb->end;
++}
++# 463 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) int skb_queue_empty(const struct sk_buff_head *list)
++{
++ return list->next == (struct sk_buff *)list;
++}
++# 475 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) struct sk_buff *skb_get(struct sk_buff *skb)
++{
++ atomic_inc(&skb->users);
++ return skb;
++}
++# 494 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) int skb_cloned(const struct sk_buff *skb)
++{
++ return skb->cloned &&
++        (((&((struct skb_shared_info *)(skb_end_pointer(skb)))->dataref)->counter) & ((1 << 16) - 1)) != 1;
++}
++# 507 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) int skb_header_cloned(const struct sk_buff *skb)
++{
++ int dataref;
++
++ if (!skb->cloned)
++  return 0;
++
++ dataref = ((&((struct skb_shared_info *)(skb_end_pointer(skb)))->dataref)->counter);
++ dataref = (dataref & ((1 << 16) - 1)) - (dataref >> 16);
++ return dataref != 1;
++}
++# 527 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) void skb_header_release(struct sk_buff *skb)
++{
++ do { if (__builtin_expect(!!(skb->nohdr), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"), "i" (529), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++ skb->nohdr = 1;
++ atomic_add(1 << 16, &((struct skb_shared_info *)(skb_end_pointer(skb)))->dataref);
++}
++# 541 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) int skb_shared(const struct sk_buff *skb)
++{
++ return ((&skb->users)->counter) != 1;
++}
++# 559 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) struct sk_buff *skb_share_check(struct sk_buff *skb,
++           gfp_t pri)
++{
++ do { if (pri & (( gfp_t)0x10u)) do { __might_sleep("/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h", 562); do { } while (0); } while (0); } while (0);
++ if (skb_shared(skb)) {
++  struct sk_buff *nskb = skb_clone(skb, pri);
++  kfree_skb(skb);
++  skb = nskb;
++ }
++ return skb;
++}
++# 591 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) struct sk_buff *skb_unshare(struct sk_buff *skb,
++       gfp_t pri)
++{
++ do { if (pri & (( gfp_t)0x10u)) do { __might_sleep("/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h", 594); do { } while (0); } while (0); } while (0);
++ if (skb_cloned(skb)) {
++  struct sk_buff *nskb = skb_copy(skb, pri);
++  kfree_skb(skb);
++  skb = nskb;
++ }
++ return skb;
++}
++# 616 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) struct sk_buff *skb_peek(struct sk_buff_head *list_)
++{
++ struct sk_buff *list = ((struct sk_buff *)list_)->next;
++ if (list == (struct sk_buff *)list_)
++  list = 0;
++ return list;
++}
++# 637 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) struct sk_buff *skb_peek_tail(struct sk_buff_head *list_)
++{
++ struct sk_buff *list = ((struct sk_buff *)list_)->prev;
++ if (list == (struct sk_buff *)list_)
++  list = 0;
++ return list;
++}
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) __u32 skb_queue_len(const struct sk_buff_head *list_)
++{
++ return list_->qlen;
++}
++# 664 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) void skb_queue_head_init(struct sk_buff_head *list)
++{
++ do { *(&list->lock) = (spinlock_t) { ({raw_spinlock_t duh; duh.slock=0;duh;}), }; } while (0);
++ list->prev = list->next = (struct sk_buff *)list;
++ list->qlen = 0;
++}
++
++static inline __attribute__((always_inline)) void skb_queue_head_init_class(struct sk_buff_head *list,
++  struct lock_class_key *xxx_class)
++{
++ skb_queue_head_init(list);
++ do { (void)(xxx_class); } while (0);
++}
++
++
++
++
++
++
++
++extern void skb_insert(struct sk_buff *old, struct sk_buff *newsk, struct sk_buff_head *list);
++static inline __attribute__((always_inline)) void __skb_insert(struct sk_buff *newsk,
++    struct sk_buff *prev, struct sk_buff *next,
++    struct sk_buff_head *list)
++{
++ newsk->next = next;
++ newsk->prev = prev;
++ next->prev = prev->next = newsk;
++ list->qlen++;
++}
++# 706 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) void __skb_queue_after(struct sk_buff_head *list,
++         struct sk_buff *prev,
++         struct sk_buff *newsk)
++{
++ __skb_insert(newsk, prev, prev->next, list);
++}
++
++extern void skb_append(struct sk_buff *old, struct sk_buff *newsk,
++         struct sk_buff_head *list);
++
++static inline __attribute__((always_inline)) void __skb_queue_before(struct sk_buff_head *list,
++          struct sk_buff *next,
++          struct sk_buff *newsk)
++{
++ __skb_insert(newsk, next->prev, next, list);
++}
++# 733 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++extern void skb_queue_head(struct sk_buff_head *list, struct sk_buff *newsk);
++static inline __attribute__((always_inline)) void __skb_queue_head(struct sk_buff_head *list,
++        struct sk_buff *newsk)
++{
++ __skb_queue_after(list, (struct sk_buff *)list, newsk);
++}
++# 750 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++extern void skb_queue_tail(struct sk_buff_head *list, struct sk_buff *newsk);
++static inline __attribute__((always_inline)) void __skb_queue_tail(struct sk_buff_head *list,
++       struct sk_buff *newsk)
++{
++ __skb_queue_before(list, (struct sk_buff *)list, newsk);
++}
++
++
++
++
++
++extern void skb_unlink(struct sk_buff *skb, struct sk_buff_head *list);
++static inline __attribute__((always_inline)) void __skb_unlink(struct sk_buff *skb, struct sk_buff_head *list)
++{
++ struct sk_buff *next, *prev;
++
++ list->qlen--;
++ next = skb->next;
++ prev = skb->prev;
++ skb->next = skb->prev = 0;
++ next->prev = prev;
++ prev->next = next;
++}
++# 782 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++extern struct sk_buff *skb_dequeue(struct sk_buff_head *list);
++static inline __attribute__((always_inline)) struct sk_buff *__skb_dequeue(struct sk_buff_head *list)
++{
++ struct sk_buff *skb = skb_peek(list);
++ if (skb)
++  __skb_unlink(skb, list);
++ return skb;
++}
++# 799 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++extern struct sk_buff *skb_dequeue_tail(struct sk_buff_head *list);
++static inline __attribute__((always_inline)) struct sk_buff *__skb_dequeue_tail(struct sk_buff_head *list)
++{
++ struct sk_buff *skb = skb_peek_tail(list);
++ if (skb)
++  __skb_unlink(skb, list);
++ return skb;
++}
++
++
++static inline __attribute__((always_inline)) int skb_is_nonlinear(const struct sk_buff *skb)
++{
++ return skb->data_len;
++}
++
++static inline __attribute__((always_inline)) unsigned int skb_headlen(const struct sk_buff *skb)
++{
++ return skb->len - skb->data_len;
++}
++
++static inline __attribute__((always_inline)) int skb_pagelen(const struct sk_buff *skb)
++{
++ int i, len = 0;
++
++ for (i = (int)((struct skb_shared_info *)(skb_end_pointer(skb)))->nr_frags - 1; i >= 0; i--)
++  len += ((struct skb_shared_info *)(skb_end_pointer(skb)))->frags[i].size;
++ return len + skb_headlen(skb);
++}
++
++static inline __attribute__((always_inline)) void skb_fill_page_desc(struct sk_buff *skb, int i,
++          struct page *page, int off, int size)
++{
++ skb_frag_t *frag = &((struct skb_shared_info *)(skb_end_pointer(skb)))->frags[i];
++
++ frag->page = page;
++ frag->page_offset = off;
++ frag->size = size;
++ ((struct skb_shared_info *)(skb_end_pointer(skb)))->nr_frags = i + 1;
++}
++# 860 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) unsigned char *skb_tail_pointer(const struct sk_buff *skb)
++{
++ return skb->tail;
++}
++
++static inline __attribute__((always_inline)) void skb_reset_tail_pointer(struct sk_buff *skb)
++{
++ skb->tail = skb->data;
++}
++
++static inline __attribute__((always_inline)) void skb_set_tail_pointer(struct sk_buff *skb, const int offset)
++{
++ skb->tail = skb->data + offset;
++}
++
++
++
++
++
++
++extern unsigned char *skb_put(struct sk_buff *skb, unsigned int len);
++static inline __attribute__((always_inline)) unsigned char *__skb_put(struct sk_buff *skb, unsigned int len)
++{
++ unsigned char *tmp = skb_tail_pointer(skb);
++ do { if (__builtin_expect(!!(skb_is_nonlinear(skb)), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"), "i" (884), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++ skb->tail += len;
++ skb->len += len;
++ return tmp;
++}
++
++extern unsigned char *skb_push(struct sk_buff *skb, unsigned int len);
++static inline __attribute__((always_inline)) unsigned char *__skb_push(struct sk_buff *skb, unsigned int len)
++{
++ skb->data -= len;
++ skb->len += len;
++ return skb->data;
++}
++
++extern unsigned char *skb_pull(struct sk_buff *skb, unsigned int len);
++static inline __attribute__((always_inline)) unsigned char *__skb_pull(struct sk_buff *skb, unsigned int len)
++{
++ skb->len -= len;
++ do { if (__builtin_expect(!!(skb->len < skb->data_len), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"), "i" (902), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++ return skb->data += len;
++}
++
++extern unsigned char *__pskb_pull_tail(struct sk_buff *skb, int delta);
++
++static inline __attribute__((always_inline)) unsigned char *__pskb_pull(struct sk_buff *skb, unsigned int len)
++{
++ if (len > skb_headlen(skb) &&
++     !__pskb_pull_tail(skb, len - skb_headlen(skb)))
++  return 0;
++ skb->len -= len;
++ return skb->data += len;
++}
++
++static inline __attribute__((always_inline)) unsigned char *pskb_pull(struct sk_buff *skb, unsigned int len)
++{
++ return __builtin_expect(!!(len > skb->len), 0) ? 0 : __pskb_pull(skb, len);
++}
++
++static inline __attribute__((always_inline)) int pskb_may_pull(struct sk_buff *skb, unsigned int len)
++{
++ if (__builtin_expect(!!(len <= skb_headlen(skb)), 1))
++  return 1;
++ if (__builtin_expect(!!(len > skb->len), 0))
++  return 0;
++ return __pskb_pull_tail(skb, len - skb_headlen(skb)) != 0;
++}
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) unsigned int skb_headroom(const struct sk_buff *skb)
++{
++ return skb->data - skb->head;
++}
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) int skb_tailroom(const struct sk_buff *skb)
++{
++ return skb_is_nonlinear(skb) ? 0 : skb->end - skb->tail;
++}
++# 961 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) void skb_reserve(struct sk_buff *skb, int len)
++{
++ skb->data += len;
++ skb->tail += len;
++}
++# 1024 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) unsigned char *skb_transport_header(const struct sk_buff *skb)
++{
++ return skb->transport_header;
++}
++
++static inline __attribute__((always_inline)) void skb_reset_transport_header(struct sk_buff *skb)
++{
++ skb->transport_header = skb->data;
++}
++
++static inline __attribute__((always_inline)) void skb_set_transport_header(struct sk_buff *skb,
++         const int offset)
++{
++ skb->transport_header = skb->data + offset;
++}
++
++static inline __attribute__((always_inline)) unsigned char *skb_network_header(const struct sk_buff *skb)
++{
++ return skb->network_header;
++}
++
++static inline __attribute__((always_inline)) void skb_reset_network_header(struct sk_buff *skb)
++{
++ skb->network_header = skb->data;
++}
++
++static inline __attribute__((always_inline)) void skb_set_network_header(struct sk_buff *skb, const int offset)
++{
++ skb->network_header = skb->data + offset;
++}
++
++static inline __attribute__((always_inline)) unsigned char *skb_mac_header(const struct sk_buff *skb)
++{
++ return skb->mac_header;
++}
++
++static inline __attribute__((always_inline)) int skb_mac_header_was_set(const struct sk_buff *skb)
++{
++ return skb->mac_header != 0;
++}
++
++static inline __attribute__((always_inline)) void skb_reset_mac_header(struct sk_buff *skb)
++{
++ skb->mac_header = skb->data;
++}
++
++static inline __attribute__((always_inline)) void skb_set_mac_header(struct sk_buff *skb, const int offset)
++{
++ skb->mac_header = skb->data + offset;
++}
++
++
++static inline __attribute__((always_inline)) int skb_transport_offset(const struct sk_buff *skb)
++{
++ return skb_transport_header(skb) - skb->data;
++}
++
++static inline __attribute__((always_inline)) u32 skb_network_header_len(const struct sk_buff *skb)
++{
++ return skb->transport_header - skb->network_header;
++}
++
++static inline __attribute__((always_inline)) int skb_network_offset(const struct sk_buff *skb)
++{
++ return skb_network_header(skb) - skb->data;
++}
++# 1134 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++extern int ___pskb_trim(struct sk_buff *skb, unsigned int len);
++
++static inline __attribute__((always_inline)) void __skb_trim(struct sk_buff *skb, unsigned int len)
++{
++ if (__builtin_expect(!!(skb->data_len), 0)) {
++  ({ int __ret_warn_on = !!(1); if (__builtin_expect(!!(__ret_warn_on), 0)) warn_on_slowpath("/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h", 1139); __builtin_expect(!!(__ret_warn_on), 0); });
++  return;
++ }
++ skb->len = len;
++ skb_set_tail_pointer(skb, len);
++}
++
++extern void skb_trim(struct sk_buff *skb, unsigned int len);
++
++static inline __attribute__((always_inline)) int __pskb_trim(struct sk_buff *skb, unsigned int len)
++{
++ if (skb->data_len)
++  return ___pskb_trim(skb, len);
++ __skb_trim(skb, len);
++ return 0;
++}
++
++static inline __attribute__((always_inline)) int pskb_trim(struct sk_buff *skb, unsigned int len)
++{
++ return (len < skb->len) ? __pskb_trim(skb, len) : 0;
++}
++# 1170 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) void pskb_trim_unique(struct sk_buff *skb, unsigned int len)
++{
++ int err = pskb_trim(skb, len);
++ do { if (__builtin_expect(!!(err), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"), "i" (1173), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++}
++# 1184 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) void skb_orphan(struct sk_buff *skb)
++{
++ if (skb->destructor)
++  skb->destructor(skb);
++ skb->destructor = 0;
++ skb->sk = 0;
++}
++# 1200 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++extern void skb_queue_purge(struct sk_buff_head *list);
++static inline __attribute__((always_inline)) void __skb_queue_purge(struct sk_buff_head *list)
++{
++ struct sk_buff *skb;
++ while ((skb = __skb_dequeue(list)) != 0)
++  kfree_skb(skb);
++}
++# 1220 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) struct sk_buff *__dev_alloc_skb(unsigned int length,
++           gfp_t gfp_mask)
++{
++ struct sk_buff *skb = alloc_skb(length + 16, gfp_mask);
++ if (__builtin_expect(!!(skb), 1))
++  skb_reserve(skb, 16);
++ return skb;
++}
++
++extern struct sk_buff *dev_alloc_skb(unsigned int length);
++
++extern struct sk_buff *__netdev_alloc_skb(struct net_device *dev,
++  unsigned int length, gfp_t gfp_mask);
++# 1247 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) struct sk_buff *netdev_alloc_skb(struct net_device *dev,
++  unsigned int length)
++{
++ return __netdev_alloc_skb(dev, length, ((( gfp_t)0x20u)));
++}
++# 1261 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) int skb_clone_writable(struct sk_buff *skb, unsigned int len)
++{
++ return !skb_header_cloned(skb) &&
++        skb_headroom(skb) + len <= skb->hdr_len;
++}
++
++static inline __attribute__((always_inline)) int __skb_cow(struct sk_buff *skb, unsigned int headroom,
++       int cloned)
++{
++ int delta = 0;
++
++ if (headroom < 16)
++  headroom = 16;
++ if (headroom > skb_headroom(skb))
++  delta = headroom - skb_headroom(skb);
++
++ if (delta || cloned)
++  return pskb_expand_head(skb, (((delta)+((typeof(delta))(16)-1))&~((typeof(delta))(16)-1)), 0,
++     ((( gfp_t)0x20u)));
++ return 0;
++}
++# 1295 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) int skb_cow(struct sk_buff *skb, unsigned int headroom)
++{
++ return __skb_cow(skb, headroom, skb_cloned(skb));
++}
++# 1310 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) int skb_cow_head(struct sk_buff *skb, unsigned int headroom)
++{
++ return __skb_cow(skb, headroom, skb_header_cloned(skb));
++}
++# 1326 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) int skb_padto(struct sk_buff *skb, unsigned int len)
++{
++ unsigned int size = skb->len;
++ if (__builtin_expect(!!(size >= len), 1))
++  return 0;
++ return skb_pad(skb, len - size);
++}
++
++static inline __attribute__((always_inline)) int skb_add_data(struct sk_buff *skb,
++          unsigned char *from, int copy)
++{
++ const int off = skb->len;
++
++ if (skb->ip_summed == 0) {
++  int err = 0;
++  __wsum csum = csum_and_copy_from_user(from, skb_put(skb, copy),
++           copy, 0, &err);
++  if (!err) {
++   skb->csum = csum_block_add(skb->csum, csum, off);
++   return 0;
++  }
++ } else if (!copy_from_user(skb_put(skb, copy), from, copy))
++  return 0;
++
++ __skb_trim(skb, off);
++ return -14;
++}
++
++static inline __attribute__((always_inline)) int skb_can_coalesce(struct sk_buff *skb, int i,
++       struct page *page, int off)
++{
++ if (i) {
++  struct skb_frag_struct *frag = &((struct skb_shared_info *)(skb_end_pointer(skb)))->frags[i - 1];
++
++  return page == frag->page &&
++         off == frag->page_offset + frag->size;
++ }
++ return 0;
++}
++
++static inline __attribute__((always_inline)) int __skb_linearize(struct sk_buff *skb)
++{
++ return __pskb_pull_tail(skb, skb->data_len) ? 0 : -12;
++}
++# 1378 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) int skb_linearize(struct sk_buff *skb)
++{
++ return skb_is_nonlinear(skb) ? __skb_linearize(skb) : 0;
++}
++# 1390 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) int skb_linearize_cow(struct sk_buff *skb)
++{
++ return skb_is_nonlinear(skb) || skb_cloned(skb) ?
++        __skb_linearize(skb) : 0;
++}
++# 1407 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) void skb_postpull_rcsum(struct sk_buff *skb,
++          const void *start, unsigned int len)
++{
++ if (skb->ip_summed == 2)
++  skb->csum = csum_sub(skb->csum, csum_partial((const unsigned char *) start, len, 0));
++}
++
++unsigned char *skb_pull_rcsum(struct sk_buff *skb, unsigned int len);
++# 1425 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len)
++{
++ if (__builtin_expect(!!(len >= skb->len), 1))
++  return 0;
++ if (skb->ip_summed == 2)
++  skb->ip_summed = 0;
++ return __pskb_trim(skb, len);
++}
++# 1450 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++extern struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned flags,
++        int *peeked, int *err);
++extern struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags,
++      int noblock, int *err);
++extern unsigned int datagram_poll(struct file *file, struct socket *sock,
++         struct poll_table_struct *wait);
++extern int skb_copy_datagram_iovec(const struct sk_buff *from,
++            int offset, struct iovec *to,
++            int size);
++extern int skb_copy_and_csum_datagram_iovec(struct sk_buff *skb,
++       int hlen,
++       struct iovec *iov);
++extern int skb_copy_datagram_from_iovec(struct sk_buff *skb,
++          int offset,
++          struct iovec *from,
++          int len);
++extern void skb_free_datagram(struct sock *sk, struct sk_buff *skb);
++extern int skb_kill_datagram(struct sock *sk, struct sk_buff *skb,
++      unsigned int flags);
++extern __wsum skb_checksum(const struct sk_buff *skb, int offset,
++        int len, __wsum csum);
++extern int skb_copy_bits(const struct sk_buff *skb, int offset,
++         void *to, int len);
++extern int skb_store_bits(struct sk_buff *skb, int offset,
++          const void *from, int len);
++extern __wsum skb_copy_and_csum_bits(const struct sk_buff *skb,
++           int offset, u8 *to, int len,
++           __wsum csum);
++extern int skb_splice_bits(struct sk_buff *skb,
++      unsigned int offset,
++      struct pipe_inode_info *pipe,
++      unsigned int len,
++      unsigned int flags);
++extern void skb_copy_and_csum_dev(const struct sk_buff *skb, u8 *to);
++extern void skb_split(struct sk_buff *skb,
++     struct sk_buff *skb1, const u32 len);
++
++extern struct sk_buff *skb_segment(struct sk_buff *skb, int features);
++
++static inline __attribute__((always_inline)) void *skb_header_pointer(const struct sk_buff *skb, int offset,
++           int len, void *buffer)
++{
++ int hlen = skb_headlen(skb);
++
++ if (hlen - offset >= len)
++  return skb->data + offset;
++
++ if (skb_copy_bits(skb, offset, buffer, len) < 0)
++  return 0;
++
++ return buffer;
++}
++
++static inline __attribute__((always_inline)) void skb_copy_from_linear_data(const struct sk_buff *skb,
++          void *to,
++          const unsigned int len)
++{
++ (__builtin_constant_p((len)) ? __constant_memcpy((to), (skb->data), (len)) : __memcpy((to), (skb->data), (len)));
++}
++
++static inline __attribute__((always_inline)) void skb_copy_from_linear_data_offset(const struct sk_buff *skb,
++          const int offset, void *to,
++          const unsigned int len)
++{
++ (__builtin_constant_p((len)) ? __constant_memcpy((to), (skb->data + offset), (len)) : __memcpy((to), (skb->data + offset), (len)));
++}
++
++static inline __attribute__((always_inline)) void skb_copy_to_linear_data(struct sk_buff *skb,
++        const void *from,
++        const unsigned int len)
++{
++ (__builtin_constant_p((len)) ? __constant_memcpy((skb->data), (from), (len)) : __memcpy((skb->data), (from), (len)));
++}
++
++static inline __attribute__((always_inline)) void skb_copy_to_linear_data_offset(struct sk_buff *skb,
++        const int offset,
++        const void *from,
++        const unsigned int len)
++{
++ (__builtin_constant_p((len)) ? __constant_memcpy((skb->data + offset), (from), (len)) : __memcpy((skb->data + offset), (from), (len)));
++}
++
++extern void skb_init(void);
++# 1543 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) void skb_get_timestamp(const struct sk_buff *skb, struct timeval *stamp)
++{
++ *stamp = ns_to_timeval((skb->tstamp).tv64);
++}
++
++static inline __attribute__((always_inline)) void __net_timestamp(struct sk_buff *skb)
++{
++ skb->tstamp = ktime_get_real();
++}
++
++static inline __attribute__((always_inline)) ktime_t net_timedelta(ktime_t t)
++{
++ return ({ ktime_t __kt; __kt.tv64 = ((ktime_get_real()).tv64 - (t).tv64); __kt; });
++}
++
++static inline __attribute__((always_inline)) ktime_t net_invalid_timestamp(void)
++{
++ return ktime_set(0, 0);
++}
++
++extern __sum16 __skb_checksum_complete_head(struct sk_buff *skb, int len);
++extern __sum16 __skb_checksum_complete(struct sk_buff *skb);
++
++static inline __attribute__((always_inline)) int skb_csum_unnecessary(const struct sk_buff *skb)
++{
++ return skb->ip_summed & 1;
++}
++# 1587 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) __sum16 skb_checksum_complete(struct sk_buff *skb)
++{
++ return skb_csum_unnecessary(skb) ?
++        0 : __skb_checksum_complete(skb);
++}
++
++
++extern void nf_conntrack_destroy(struct nf_conntrack *nfct);
++static inline __attribute__((always_inline)) void nf_conntrack_put(struct nf_conntrack *nfct)
++{
++ if (nfct && atomic_dec_and_test(&nfct->use))
++  nf_conntrack_destroy(nfct);
++}
++static inline __attribute__((always_inline)) void nf_conntrack_get(struct nf_conntrack *nfct)
++{
++ if (nfct)
++  atomic_inc(&nfct->use);
++}
++static inline __attribute__((always_inline)) void nf_conntrack_get_reasm(struct sk_buff *skb)
++{
++ if (skb)
++  atomic_inc(&skb->users);
++}
++static inline __attribute__((always_inline)) void nf_conntrack_put_reasm(struct sk_buff *skb)
++{
++ if (skb)
++  kfree_skb(skb);
++}
++
++
++static inline __attribute__((always_inline)) void nf_bridge_put(struct nf_bridge_info *nf_bridge)
++{
++ if (nf_bridge && atomic_dec_and_test(&nf_bridge->use))
++  kfree(nf_bridge);
++}
++static inline __attribute__((always_inline)) void nf_bridge_get(struct nf_bridge_info *nf_bridge)
++{
++ if (nf_bridge)
++  atomic_inc(&nf_bridge->use);
++}
++
++static inline __attribute__((always_inline)) void nf_reset(struct sk_buff *skb)
++{
++
++ nf_conntrack_put(skb->nfct);
++ skb->nfct = 0;
++ nf_conntrack_put_reasm(skb->nfct_reasm);
++ skb->nfct_reasm = 0;
++
++
++ nf_bridge_put(skb->nf_bridge);
++ skb->nf_bridge = 0;
++
++}
++
++
++static inline __attribute__((always_inline)) void __nf_copy(struct sk_buff *dst, const struct sk_buff *src)
++{
++
++ dst->nfct = src->nfct;
++ nf_conntrack_get(src->nfct);
++ dst->nfctinfo = src->nfctinfo;
++ dst->nfct_reasm = src->nfct_reasm;
++ nf_conntrack_get_reasm(src->nfct_reasm);
++
++
++ dst->nf_bridge = src->nf_bridge;
++ nf_bridge_get(src->nf_bridge);
++
++}
++
++static inline __attribute__((always_inline)) void nf_copy(struct sk_buff *dst, const struct sk_buff *src)
++{
++
++ nf_conntrack_put(dst->nfct);
++ nf_conntrack_put_reasm(dst->nfct_reasm);
++
++
++ nf_bridge_put(dst->nf_bridge);
++
++ __nf_copy(dst, src);
++}
++
++
++static inline __attribute__((always_inline)) void skb_copy_secmark(struct sk_buff *to, const struct sk_buff *from)
++{
++ to->secmark = from->secmark;
++}
++
++static inline __attribute__((always_inline)) void skb_init_secmark(struct sk_buff *skb)
++{
++ skb->secmark = 0;
++}
++# 1688 "/d/kernels/linux-2.6.27.10-clickport/include/linux/skbuff.h"
++static inline __attribute__((always_inline)) void skb_set_queue_mapping(struct sk_buff *skb, u16 queue_mapping)
++{
++ skb->queue_mapping = queue_mapping;
++}
++
++static inline __attribute__((always_inline)) u16 skb_get_queue_mapping(struct sk_buff *skb)
++{
++ return skb->queue_mapping;
++}
++
++static inline __attribute__((always_inline)) void skb_copy_queue_mapping(struct sk_buff *to, const struct sk_buff *from)
++{
++ to->queue_mapping = from->queue_mapping;
++}
++
++static inline __attribute__((always_inline)) int skb_is_gso(const struct sk_buff *skb)
++{
++ return ((struct skb_shared_info *)(skb_end_pointer(skb)))->gso_size;
++}
++
++static inline __attribute__((always_inline)) int skb_is_gso_v6(const struct sk_buff *skb)
++{
++ return ((struct skb_shared_info *)(skb_end_pointer(skb)))->gso_type & SKB_GSO_TCPV6;
++}
++
++extern void __skb_warn_lro_forwarding(const struct sk_buff *skb);
++
++static inline __attribute__((always_inline)) bool skb_warn_if_lro(const struct sk_buff *skb)
++{
++
++
++ struct skb_shared_info *shinfo = ((struct skb_shared_info *)(skb_end_pointer(skb)));
++ if (shinfo->gso_size != 0 && __builtin_expect(!!(shinfo->gso_type == 0), 0)) {
++  __skb_warn_lro_forwarding(skb);
++  return true;
++ }
++ return false;
++}
++
++static inline __attribute__((always_inline)) void skb_forward_csum(struct sk_buff *skb)
++{
++
++ if (skb->ip_summed == 2)
++  skb->ip_summed = 0;
++}
++
++bool skb_partial_csum_set(struct sk_buff *skb, u16 start, u16 off);
++# 27 "/d/click/click-1.6.0-27/linuxmodule/../include/click/glue.hh" 2
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/hardirq.h" 1
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/smp_lock.h" 1
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h" 1
++# 44 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++struct sched_param {
++ int sched_priority;
++};
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/capability.h" 1
++# 18 "/d/kernels/linux-2.6.27.10-clickport/include/linux/capability.h"
++struct task_struct;
++# 40 "/d/kernels/linux-2.6.27.10-clickport/include/linux/capability.h"
++typedef struct __user_cap_header_struct {
++ __u32 version;
++ int pid;
++} *cap_user_header_t;
++
++typedef struct __user_cap_data_struct {
++        __u32 effective;
++        __u32 permitted;
++        __u32 inheritable;
++} *cap_user_data_t;
++# 72 "/d/kernels/linux-2.6.27.10-clickport/include/linux/capability.h"
++struct vfs_cap_data {
++ __le32 magic_etc;
++ struct {
++  __le32 permitted;
++  __le32 inheritable;
++ } data[2];
++};
++# 95 "/d/kernels/linux-2.6.27.10-clickport/include/linux/capability.h"
++typedef struct kernel_cap_struct {
++ __u32 cap[2];
++} kernel_cap_t;
++# 423 "/d/kernels/linux-2.6.27.10-clickport/include/linux/capability.h"
++static inline __attribute__((always_inline)) kernel_cap_t cap_combine(const kernel_cap_t a,
++           const kernel_cap_t b)
++{
++ kernel_cap_t dest;
++ do { unsigned __capi; for (__capi = 0; __capi < 2; ++__capi) { dest.cap[__capi] = a.cap[__capi] | b.cap[__capi]; } } while (0);
++ return dest;
++}
++
++static inline __attribute__((always_inline)) kernel_cap_t cap_intersect(const kernel_cap_t a,
++      const kernel_cap_t b)
++{
++ kernel_cap_t dest;
++ do { unsigned __capi; for (__capi = 0; __capi < 2; ++__capi) { dest.cap[__capi] = a.cap[__capi] & b.cap[__capi]; } } while (0);
++ return dest;
++}
++
++static inline __attribute__((always_inline)) kernel_cap_t cap_drop(const kernel_cap_t a,
++        const kernel_cap_t drop)
++{
++ kernel_cap_t dest;
++ do { unsigned __capi; for (__capi = 0; __capi < 2; ++__capi) { dest.cap[__capi] = a.cap[__capi] &~ drop.cap[__capi]; } } while (0);
++ return dest;
++}
++
++static inline __attribute__((always_inline)) kernel_cap_t cap_invert(const kernel_cap_t c)
++{
++ kernel_cap_t dest;
++ do { unsigned __capi; for (__capi = 0; __capi < 2; ++__capi) { dest.cap[__capi] = ~ c.cap[__capi]; } } while (0);
++ return dest;
++}
++
++static inline __attribute__((always_inline)) int cap_isclear(const kernel_cap_t a)
++{
++ unsigned __capi;
++ for (__capi = 0; __capi < 2; ++__capi) {
++  if (a.cap[__capi] != 0)
++   return 0;
++ }
++ return 1;
++}
++
++static inline __attribute__((always_inline)) int cap_issubset(const kernel_cap_t a, const kernel_cap_t set)
++{
++ kernel_cap_t dest;
++ dest = cap_drop(a, set);
++ return cap_isclear(dest);
++}
++
++
++
++static inline __attribute__((always_inline)) int cap_is_fs_cap(int cap)
++{
++ const kernel_cap_t __cap_fs_set = ((kernel_cap_t){{ ((1 << ((0) & 31)) | (1 << ((1) & 31)) | (1 << ((2) & 31)) | (1 << ((3) & 31)) | (1 << ((4) & 31))), ((1 << ((32) & 31))) } });
++ return !!((1 << ((cap) & 31)) & __cap_fs_set.cap[((cap) >> 5)]);
++}
++
++static inline __attribute__((always_inline)) kernel_cap_t cap_drop_fs_set(const kernel_cap_t a)
++{
++ const kernel_cap_t __cap_fs_set = ((kernel_cap_t){{ ((1 << ((0) & 31)) | (1 << ((1) & 31)) | (1 << ((2) & 31)) | (1 << ((3) & 31)) | (1 << ((4) & 31))), ((1 << ((32) & 31))) } });
++ return cap_drop(a, __cap_fs_set);
++}
++
++static inline __attribute__((always_inline)) kernel_cap_t cap_raise_fs_set(const kernel_cap_t a,
++         const kernel_cap_t permitted)
++{
++ const kernel_cap_t __cap_fs_set = ((kernel_cap_t){{ ((1 << ((0) & 31)) | (1 << ((1) & 31)) | (1 << ((2) & 31)) | (1 << ((3) & 31)) | (1 << ((4) & 31))), ((1 << ((32) & 31))) } });
++ return cap_combine(a,
++      cap_intersect(permitted, __cap_fs_set));
++}
++
++static inline __attribute__((always_inline)) kernel_cap_t cap_drop_nfsd_set(const kernel_cap_t a)
++{
++ const kernel_cap_t __cap_fs_set = ((kernel_cap_t){{ ((1 << ((0) & 31)) | (1 << ((1) & 31)) | (1 << ((2) & 31)) | (1 << ((3) & 31)) | (1 << ((4) & 31)))|(1 << ((24) & 31)), ((1 << ((32) & 31))) } });
++ return cap_drop(a, __cap_fs_set);
++}
++
++static inline __attribute__((always_inline)) kernel_cap_t cap_raise_nfsd_set(const kernel_cap_t a,
++           const kernel_cap_t permitted)
++{
++ const kernel_cap_t __cap_nfsd_set = ((kernel_cap_t){{ ((1 << ((0) & 31)) | (1 << ((1) & 31)) | (1 << ((2) & 31)) | (1 << ((3) & 31)) | (1 << ((4) & 31)))|(1 << ((24) & 31)), ((1 << ((32) & 31))) } });
++ return cap_combine(a,
++      cap_intersect(permitted, __cap_nfsd_set));
++}
++
++extern const kernel_cap_t __cap_empty_set;
++extern const kernel_cap_t __cap_full_set;
++extern const kernel_cap_t __cap_init_eff_set;
++
++kernel_cap_t cap_set_effective(const kernel_cap_t pE_new);
++# 525 "/d/kernels/linux-2.6.27.10-clickport/include/linux/capability.h"
++extern int capable(int cap);
++# 51 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h" 2
++# 66 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/cputime.h" 1
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/cputime.h" 1
++
++
++
++
++
++
++typedef unsigned long cputime_t;
++# 24 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/cputime.h"
++typedef u64 cputime64_t;
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/cputime.h" 2
++# 67 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h" 2
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sem.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ipc.h" 1
++# 9 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ipc.h"
++struct ipc_perm
++{
++ __kernel_key_t key;
++ __kernel_uid_t uid;
++ __kernel_gid_t gid;
++ __kernel_uid_t cuid;
++ __kernel_gid_t cgid;
++ __kernel_mode_t mode;
++ unsigned short seq;
++};
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/ipcbuf.h" 1
++# 14 "/d/kernels/linux-2.6.27.10-clickport/include/asm/ipcbuf.h"
++struct ipc64_perm {
++ __kernel_key_t key;
++ __kernel_uid32_t uid;
++ __kernel_gid32_t gid;
++ __kernel_uid32_t cuid;
++ __kernel_gid32_t cgid;
++ __kernel_mode_t mode;
++ unsigned short __pad1;
++ unsigned short seq;
++ unsigned short __pad2;
++ unsigned long __unused1;
++ unsigned long __unused2;
++};
++# 22 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ipc.h" 2
++# 57 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ipc.h"
++struct ipc_kludge {
++ struct msgbuf *msgp;
++ long msgtyp;
++};
++# 88 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ipc.h"
++struct kern_ipc_perm
++{
++ spinlock_t lock;
++ int deleted;
++ int id;
++ key_t key;
++ uid_t uid;
++ gid_t gid;
++ xid_t xid;
++ uid_t cuid;
++ gid_t cgid;
++ mode_t mode;
++ unsigned long seq;
++ void *security;
++};
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sem.h" 2
++# 23 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sem.h"
++struct semid_ds {
++ struct ipc_perm sem_perm;
++ __kernel_time_t sem_otime;
++ __kernel_time_t sem_ctime;
++ struct sem *sem_base;
++ struct sem_queue *sem_pending;
++ struct sem_queue **sem_pending_last;
++ struct sem_undo *undo;
++ unsigned short sem_nsems;
++};
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/sembuf.h" 1
++# 13 "/d/kernels/linux-2.6.27.10-clickport/include/asm/sembuf.h"
++struct semid64_ds {
++ struct ipc64_perm sem_perm;
++ __kernel_time_t sem_otime;
++ unsigned long __unused1;
++ __kernel_time_t sem_ctime;
++ unsigned long __unused2;
++ unsigned long sem_nsems;
++ unsigned long __unused3;
++ unsigned long __unused4;
++};
++# 36 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sem.h" 2
++
++
++struct sembuf {
++ unsigned short sem_num;
++ short sem_op;
++ short sem_flg;
++};
++
++
++union semun {
++ int val;
++ struct semid_ds *buf;
++ unsigned short *array;
++ struct seminfo *__buf;
++ void *__pad;
++};
++
++struct seminfo {
++ int semmap;
++ int semmni;
++ int semmns;
++ int semmnu;
++ int semmsl;
++ int semopm;
++ int semume;
++ int semusz;
++ int semvmx;
++ int semaem;
++};
++# 80 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sem.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic.h" 1
++# 81 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sem.h" 2
++
++
++struct task_struct;
++
++
++struct sem {
++ int semval;
++ int sempid;
++};
++
++
++struct sem_array {
++ struct kern_ipc_perm sem_perm;
++ time_t sem_otime;
++ time_t sem_ctime;
++ struct sem *sem_base;
++ struct list_head sem_pending;
++ struct list_head list_id;
++ unsigned long sem_nsems;
++};
++
++
++struct sem_queue {
++ struct list_head list;
++ struct task_struct *sleeper;
++ struct sem_undo *undo;
++ int pid;
++ int status;
++ struct sembuf *sops;
++ int nsops;
++ int alter;
++};
++
++
++
++
++struct sem_undo {
++ struct list_head list_proc;
++
++ struct rcu_head rcu;
++ struct sem_undo_list *ulp;
++ struct list_head list_id;
++ int semid;
++ short * semadj;
++};
++
++
++
++
++struct sem_undo_list {
++ atomic_t refcnt;
++ spinlock_t lock;
++ struct list_head list_proc;
++};
++
++struct sysv_sem {
++ struct sem_undo_list *undo_list;
++};
++
++
++
++extern int copy_semundo(unsigned long clone_flags, struct task_struct *tsk);
++extern void exit_sem(struct task_struct *tsk);
++# 70 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/signal.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/signal.h" 1
++# 10 "/d/kernels/linux-2.6.27.10-clickport/include/asm/signal.h"
++struct siginfo;
++# 28 "/d/kernels/linux-2.6.27.10-clickport/include/asm/signal.h"
++typedef unsigned long old_sigset_t;
++
++typedef struct {
++ unsigned long sig[(64 / 32)];
++} sigset_t;
++# 120 "/d/kernels/linux-2.6.27.10-clickport/include/asm/signal.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/signal.h" 1
++# 17 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/signal.h"
++typedef void __signalfn_t(int);
++typedef __signalfn_t *__sighandler_t;
++
++typedef void __restorefn_t(void);
++typedef __restorefn_t *__sigrestore_t;
++# 121 "/d/kernels/linux-2.6.27.10-clickport/include/asm/signal.h" 2
++
++
++
++
++
++struct old_sigaction {
++ __sighandler_t sa_handler;
++ old_sigset_t sa_mask;
++ unsigned long sa_flags;
++ __sigrestore_t sa_restorer;
++};
++
++struct sigaction {
++ __sighandler_t sa_handler;
++ unsigned long sa_flags;
++ __sigrestore_t sa_restorer;
++ sigset_t sa_mask;
++};
++
++struct k_sigaction {
++ struct sigaction sa;
++};
++# 175 "/d/kernels/linux-2.6.27.10-clickport/include/asm/signal.h"
++typedef struct sigaltstack {
++ void *ss_sp;
++ int ss_flags;
++ size_t ss_size;
++} stack_t;
++# 193 "/d/kernels/linux-2.6.27.10-clickport/include/asm/signal.h"
++static inline __attribute__((always_inline)) void __gen_sigaddset(sigset_t *set, int _sig)
++{
++ asm("btsl %1,%0" : "+m"(*set) : "Ir"(_sig - 1) : "cc");
++}
++
++static inline __attribute__((always_inline)) void __const_sigaddset(sigset_t *set, int _sig)
++{
++ unsigned long sig = _sig - 1;
++ set->sig[sig / 32] |= 1 << (sig % 32);
++}
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void __gen_sigdelset(sigset_t *set, int _sig)
++{
++ asm("btrl %1,%0" : "+m"(*set) : "Ir"(_sig - 1) : "cc");
++}
++
++static inline __attribute__((always_inline)) void __const_sigdelset(sigset_t *set, int _sig)
++{
++ unsigned long sig = _sig - 1;
++ set->sig[sig / 32] &= ~(1 << (sig % 32));
++}
++
++static inline __attribute__((always_inline)) int __const_sigismember(sigset_t *set, int _sig)
++{
++ unsigned long sig = _sig - 1;
++ return 1 & (set->sig[sig / 32] >> (sig % 32));
++}
++
++static inline __attribute__((always_inline)) int __gen_sigismember(sigset_t *set, int _sig)
++{
++ int ret;
++ asm("btl %2,%1\n\tsbbl %0,%0"
++     : "=r"(ret) : "m"(*set), "Ir"(_sig-1) : "cc");
++ return ret;
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) int sigfindinword(unsigned long word)
++{
++ asm("bsfl %1,%0" : "=r"(word) : "rm"(word) : "cc");
++ return word;
++}
++
++struct pt_regs;
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/linux/signal.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/siginfo.h" 1
++
++
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/siginfo.h" 1
++
++
++
++
++
++
++typedef union sigval {
++ int sival_int;
++ void *sival_ptr;
++} sigval_t;
++# 40 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/siginfo.h"
++typedef struct siginfo {
++ int si_signo;
++ int si_errno;
++ int si_code;
++
++ union {
++  int _pad[((128 - (3 * sizeof(int))) / sizeof(int))];
++
++
++  struct {
++   pid_t _pid;
++   uid_t _uid;
++  } _kill;
++
++
++  struct {
++   timer_t _tid;
++   int _overrun;
++   char _pad[sizeof( uid_t) - sizeof(int)];
++   sigval_t _sigval;
++   int _sys_private;
++  } _timer;
++
++
++  struct {
++   pid_t _pid;
++   uid_t _uid;
++   sigval_t _sigval;
++  } _rt;
++
++
++  struct {
++   pid_t _pid;
++   uid_t _uid;
++   int _status;
++   clock_t _utime;
++   clock_t _stime;
++  } _sigchld;
++
++
++  struct {
++   void *_addr;
++
++
++
++  } _sigfault;
++
++
++  struct {
++   long _band;
++   int _fd;
++  } _sigpoll;
++ } _sifields;
++} siginfo_t;
++# 251 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/siginfo.h"
++typedef struct sigevent {
++ sigval_t sigev_value;
++ int sigev_signo;
++ int sigev_notify;
++ union {
++  int _pad[((64 - (sizeof(int) * 2 + sizeof(sigval_t))) / sizeof(int))];
++   int _tid;
++
++  struct {
++   void (*_function)(sigval_t);
++   void *_attribute;
++  } _sigev_thread;
++ } _sigev_un;
++} sigevent_t;
++
++
++
++
++
++
++
++struct siginfo;
++void do_schedule_next_timer(struct siginfo *info);
++
++
++
++
++
++static inline __attribute__((always_inline)) void copy_siginfo(struct siginfo *to, struct siginfo *from)
++{
++ if (from->si_code < 0)
++  (__builtin_constant_p((sizeof(*to))) ? __constant_memcpy((to), (from), (sizeof(*to))) : __memcpy((to), (from), (sizeof(*to))));
++ else
++
++  (__builtin_constant_p(((3 * sizeof(int)) + sizeof(from->_sifields._sigchld))) ? __constant_memcpy((to), (from), ((3 * sizeof(int)) + sizeof(from->_sifields._sigchld))) : __memcpy((to), (from), ((3 * sizeof(int)) + sizeof(from->_sifields._sigchld))));
++}
++
++
++
++extern int copy_siginfo_to_user(struct siginfo *to, struct siginfo *from);
++# 9 "/d/kernels/linux-2.6.27.10-clickport/include/asm/siginfo.h" 2
++# 6 "/d/kernels/linux-2.6.27.10-clickport/include/linux/signal.h" 2
++# 14 "/d/kernels/linux-2.6.27.10-clickport/include/linux/signal.h"
++struct sigqueue {
++ struct list_head list;
++ int flags;
++ siginfo_t info;
++ struct user_struct *user;
++};
++
++
++
++
++struct sigpending {
++ struct list_head list;
++ sigset_t signal;
++};
++# 72 "/d/kernels/linux-2.6.27.10-clickport/include/linux/signal.h"
++static inline __attribute__((always_inline)) int sigisemptyset(sigset_t *set)
++{
++ extern void _NSIG_WORDS_is_unsupported_size(void);
++ switch ((64 / 32)) {
++ case 4:
++  return (set->sig[3] | set->sig[2] |
++   set->sig[1] | set->sig[0]) == 0;
++ case 2:
++  return (set->sig[1] | set->sig[0]) == 0;
++ case 1:
++  return set->sig[0] == 0;
++ default:
++  _NSIG_WORDS_is_unsupported_size();
++  return 0;
++ }
++}
++# 119 "/d/kernels/linux-2.6.27.10-clickport/include/linux/signal.h"
++static inline __attribute__((always_inline)) void sigorsets(sigset_t *r, const sigset_t *a, const sigset_t *b) { extern void _NSIG_WORDS_is_unsupported_size(void); unsigned long a0, a1, a2, a3, b0, b1, b2, b3; switch ((64 / 32)) { case 4: a3 = a->sig[3]; a2 = a->sig[2]; b3 = b->sig[3]; b2 = b->sig[2]; r->sig[3] = ((a3) | (b3)); r->sig[2] = ((a2) | (b2)); case 2: a1 = a->sig[1]; b1 = b->sig[1]; r->sig[1] = ((a1) | (b1)); case 1: a0 = a->sig[0]; b0 = b->sig[0]; r->sig[0] = ((a0) | (b0)); break; default: _NSIG_WORDS_is_unsupported_size(); } }
++
++
++static inline __attribute__((always_inline)) void sigandsets(sigset_t *r, const sigset_t *a, const sigset_t *b) { extern void _NSIG_WORDS_is_unsupported_size(void); unsigned long a0, a1, a2, a3, b0, b1, b2, b3; switch ((64 / 32)) { case 4: a3 = a->sig[3]; a2 = a->sig[2]; b3 = b->sig[3]; b2 = b->sig[2]; r->sig[3] = ((a3) & (b3)); r->sig[2] = ((a2) & (b2)); case 2: a1 = a->sig[1]; b1 = b->sig[1]; r->sig[1] = ((a1) & (b1)); case 1: a0 = a->sig[0]; b0 = b->sig[0]; r->sig[0] = ((a0) & (b0)); break; default: _NSIG_WORDS_is_unsupported_size(); } }
++
++
++static inline __attribute__((always_inline)) void signandsets(sigset_t *r, const sigset_t *a, const sigset_t *b) { extern void _NSIG_WORDS_is_unsupported_size(void); unsigned long a0, a1, a2, a3, b0, b1, b2, b3; switch ((64 / 32)) { case 4: a3 = a->sig[3]; a2 = a->sig[2]; b3 = b->sig[3]; b2 = b->sig[2]; r->sig[3] = ((a3) & ~(b3)); r->sig[2] = ((a2) & ~(b2)); case 2: a1 = a->sig[1]; b1 = b->sig[1]; r->sig[1] = ((a1) & ~(b1)); case 1: a0 = a->sig[0]; b0 = b->sig[0]; r->sig[0] = ((a0) & ~(b0)); break; default: _NSIG_WORDS_is_unsupported_size(); } }
++# 149 "/d/kernels/linux-2.6.27.10-clickport/include/linux/signal.h"
++static inline __attribute__((always_inline)) void signotset(sigset_t *set) { extern void _NSIG_WORDS_is_unsupported_size(void); switch ((64 / 32)) { case 4: set->sig[3] = (~(set->sig[3])); set->sig[2] = (~(set->sig[2])); case 2: set->sig[1] = (~(set->sig[1])); case 1: set->sig[0] = (~(set->sig[0])); break; default: _NSIG_WORDS_is_unsupported_size(); } }
++
++
++
++
++static inline __attribute__((always_inline)) void sigemptyset(sigset_t *set)
++{
++ switch ((64 / 32)) {
++ default:
++  (__builtin_constant_p(0) ? (__builtin_constant_p((sizeof(sigset_t))) ? __constant_c_and_count_memset(((set)), ((0x01010101UL * (unsigned char)(0))), ((sizeof(sigset_t)))) : __constant_c_memset(((set)), ((0x01010101UL * (unsigned char)(0))), ((sizeof(sigset_t))))) : (__builtin_constant_p((sizeof(sigset_t))) ? __memset_generic((((set))), (((0))), (((sizeof(sigset_t))))) : __memset_generic(((set)), ((0)), ((sizeof(sigset_t))))));
++  break;
++ case 2: set->sig[1] = 0;
++ case 1: set->sig[0] = 0;
++  break;
++ }
++}
++
++static inline __attribute__((always_inline)) void sigfillset(sigset_t *set)
++{
++ switch ((64 / 32)) {
++ default:
++  (__builtin_constant_p(-1) ? (__builtin_constant_p((sizeof(sigset_t))) ? __constant_c_and_count_memset(((set)), ((0x01010101UL * (unsigned char)(-1))), ((sizeof(sigset_t)))) : __constant_c_memset(((set)), ((0x01010101UL * (unsigned char)(-1))), ((sizeof(sigset_t))))) : (__builtin_constant_p((sizeof(sigset_t))) ? __memset_generic((((set))), (((-1))), (((sizeof(sigset_t))))) : __memset_generic(((set)), ((-1)), ((sizeof(sigset_t))))));
++  break;
++ case 2: set->sig[1] = -1;
++ case 1: set->sig[0] = -1;
++  break;
++ }
++}
++
++
++
++static inline __attribute__((always_inline)) void sigaddsetmask(sigset_t *set, unsigned long mask)
++{
++ set->sig[0] |= mask;
++}
++
++static inline __attribute__((always_inline)) void sigdelsetmask(sigset_t *set, unsigned long mask)
++{
++ set->sig[0] &= ~mask;
++}
++
++static inline __attribute__((always_inline)) int sigtestsetmask(sigset_t *set, unsigned long mask)
++{
++ return (set->sig[0] & mask) != 0;
++}
++
++static inline __attribute__((always_inline)) void siginitset(sigset_t *set, unsigned long mask)
++{
++ set->sig[0] = mask;
++ switch ((64 / 32)) {
++ default:
++  (__builtin_constant_p(0) ? (__builtin_constant_p((sizeof(long)*((64 / 32)-1))) ? __constant_c_and_count_memset(((&set->sig[1])), ((0x01010101UL * (unsigned char)(0))), ((sizeof(long)*((64 / 32)-1)))) : __constant_c_memset(((&set->sig[1])), ((0x01010101UL * (unsigned char)(0))), ((sizeof(long)*((64 / 32)-1))))) : (__builtin_constant_p((sizeof(long)*((64 / 32)-1))) ? __memset_generic((((&set->sig[1]))), (((0))), (((sizeof(long)*((64 / 32)-1))))) : __memset_generic(((&set->sig[1])), ((0)), ((sizeof(long)*((64 / 32)-1))))));
++  break;
++ case 2: set->sig[1] = 0;
++ case 1: ;
++ }
++}
++
++static inline __attribute__((always_inline)) void siginitsetinv(sigset_t *set, unsigned long mask)
++{
++ set->sig[0] = ~mask;
++ switch ((64 / 32)) {
++ default:
++  (__builtin_constant_p(-1) ? (__builtin_constant_p((sizeof(long)*((64 / 32)-1))) ? __constant_c_and_count_memset(((&set->sig[1])), ((0x01010101UL * (unsigned char)(-1))), ((sizeof(long)*((64 / 32)-1)))) : __constant_c_memset(((&set->sig[1])), ((0x01010101UL * (unsigned char)(-1))), ((sizeof(long)*((64 / 32)-1))))) : (__builtin_constant_p((sizeof(long)*((64 / 32)-1))) ? __memset_generic((((&set->sig[1]))), (((-1))), (((sizeof(long)*((64 / 32)-1))))) : __memset_generic(((&set->sig[1])), ((-1)), ((sizeof(long)*((64 / 32)-1))))));
++  break;
++ case 2: set->sig[1] = -1;
++ case 1: ;
++ }
++}
++
++
++
++static inline __attribute__((always_inline)) void init_sigpending(struct sigpending *sig)
++{
++ sigemptyset(&sig->signal);
++ INIT_LIST_HEAD(&sig->list);
++}
++
++extern void flush_sigqueue(struct sigpending *queue);
++
++
++static inline __attribute__((always_inline)) int valid_signal(unsigned long sig)
++{
++ return sig <= 64 ? 1 : 0;
++}
++
++extern int next_signal(struct sigpending *pending, sigset_t *mask);
++extern int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p);
++extern int __group_send_sig_info(int, struct siginfo *, struct task_struct *);
++extern long do_sigpending(void *, unsigned long);
++extern int sigprocmask(int, sigset_t *, sigset_t *);
++extern int show_unhandled_signals;
++
++struct pt_regs;
++extern int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, struct pt_regs *regs, void *cookie);
++extern void exit_signals(struct task_struct *tsk);
++
++extern struct kmem_cache *sighand_cachep;
++
++int unhandled_signal(struct task_struct *tsk, int sig);
++# 373 "/d/kernels/linux-2.6.27.10-clickport/include/linux/signal.h"
++void signals_init(void);
++# 71 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/fs_struct.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/path.h" 1
++
++
++
++struct dentry;
++struct vfsmount;
++
++struct path {
++ struct vfsmount *mnt;
++ struct dentry *dentry;
++};
++
++extern void path_get(struct path *);
++extern void path_put(struct path *);
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/linux/fs_struct.h" 2
++
++struct fs_struct {
++ atomic_t count;
++ rwlock_t lock;
++ int umask;
++ struct path root, pwd;
++};
++
++
++
++
++
++
++
++extern struct kmem_cache *fs_cachep;
++
++extern void exit_fs(struct task_struct *);
++extern void set_fs_root(struct fs_struct *, struct path *);
++extern void set_fs_pwd(struct fs_struct *, struct path *);
++extern struct fs_struct *copy_fs_struct(struct fs_struct *);
++extern void put_fs_struct(struct fs_struct *);
++# 72 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h" 2
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/proportions.h" 1
++# 12 "/d/kernels/linux-2.6.27.10-clickport/include/linux/proportions.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/percpu_counter.h" 1
++# 18 "/d/kernels/linux-2.6.27.10-clickport/include/linux/percpu_counter.h"
++struct percpu_counter {
++ spinlock_t lock;
++ s64 count;
++
++ struct list_head list;
++
++ s32 *counters;
++};
++
++
++
++
++
++
++
++int percpu_counter_init(struct percpu_counter *fbc, s64 amount);
++int percpu_counter_init_irq(struct percpu_counter *fbc, s64 amount);
++void percpu_counter_destroy(struct percpu_counter *fbc);
++void percpu_counter_set(struct percpu_counter *fbc, s64 amount);
++void __percpu_counter_add(struct percpu_counter *fbc, s64 amount, s32 batch);
++s64 __percpu_counter_sum(struct percpu_counter *fbc, int set);
++
++static inline __attribute__((always_inline)) void percpu_counter_add(struct percpu_counter *fbc, s64 amount)
++{
++ __percpu_counter_add(fbc, amount, (32*2));
++}
++
++static inline __attribute__((always_inline)) s64 percpu_counter_sum_positive(struct percpu_counter *fbc)
++{
++ s64 ret = __percpu_counter_sum(fbc, 0);
++ return ret < 0 ? 0 : ret;
++}
++
++static inline __attribute__((always_inline)) s64 percpu_counter_sum_and_set(struct percpu_counter *fbc)
++{
++ return __percpu_counter_sum(fbc, 1);
++}
++
++
++static inline __attribute__((always_inline)) s64 percpu_counter_sum(struct percpu_counter *fbc)
++{
++ return __percpu_counter_sum(fbc, 0);
++}
++
++static inline __attribute__((always_inline)) s64 percpu_counter_read(struct percpu_counter *fbc)
++{
++ return fbc->count;
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) s64 percpu_counter_read_positive(struct percpu_counter *fbc)
++{
++ s64 ret = fbc->count;
++
++ __asm__ __volatile__("": : :"memory");
++ if (ret >= 0)
++  return ret;
++ return 1;
++}
++# 138 "/d/kernels/linux-2.6.27.10-clickport/include/linux/percpu_counter.h"
++static inline __attribute__((always_inline)) void percpu_counter_inc(struct percpu_counter *fbc)
++{
++ percpu_counter_add(fbc, 1);
++}
++
++static inline __attribute__((always_inline)) void percpu_counter_dec(struct percpu_counter *fbc)
++{
++ percpu_counter_add(fbc, -1);
++}
++
++static inline __attribute__((always_inline)) void percpu_counter_sub(struct percpu_counter *fbc, s64 amount)
++{
++ percpu_counter_add(fbc, -amount);
++}
++# 13 "/d/kernels/linux-2.6.27.10-clickport/include/linux/proportions.h" 2
++
++
++
++struct prop_global {
++
++
++
++
++
++ int shift;
++
++
++
++
++
++
++ struct percpu_counter events;
++};
++
++
++
++
++
++
++struct prop_descriptor {
++ int index;
++ struct prop_global pg[2];
++ struct mutex mutex;
++};
++
++int prop_descriptor_init(struct prop_descriptor *pd, int shift);
++void prop_change_shift(struct prop_descriptor *pd, int new_shift);
++
++
++
++
++
++struct prop_local_percpu {
++
++
++
++ struct percpu_counter events;
++
++
++
++
++ int shift;
++ unsigned long period;
++ spinlock_t lock;
++};
++
++int prop_local_init_percpu(struct prop_local_percpu *pl);
++void prop_local_destroy_percpu(struct prop_local_percpu *pl);
++void __prop_inc_percpu(struct prop_descriptor *pd, struct prop_local_percpu *pl);
++void prop_fraction_percpu(struct prop_descriptor *pd, struct prop_local_percpu *pl,
++  long *numerator, long *denominator);
++
++static inline __attribute__((always_inline))
++void prop_inc_percpu(struct prop_descriptor *pd, struct prop_local_percpu *pl)
++{
++ unsigned long flags;
++
++ do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); do { (flags) = __raw_local_irq_save(); } while (0); do { } while (0); } while (0);
++ __prop_inc_percpu(pd, pl);
++ do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); if (raw_irqs_disabled_flags(flags)) { raw_local_irq_restore(flags); do { } while (0); } else { do { } while (0); raw_local_irq_restore(flags); } } while (0);
++}
++# 89 "/d/kernels/linux-2.6.27.10-clickport/include/linux/proportions.h"
++void __prop_inc_percpu_max(struct prop_descriptor *pd,
++      struct prop_local_percpu *pl, long frac);
++
++
++
++
++
++
++struct prop_local_single {
++
++
++
++ unsigned long events;
++
++
++
++
++
++ int shift;
++ unsigned long period;
++ spinlock_t lock;
++};
++
++
++
++
++
++int prop_local_init_single(struct prop_local_single *pl);
++void prop_local_destroy_single(struct prop_local_single *pl);
++void __prop_inc_single(struct prop_descriptor *pd, struct prop_local_single *pl);
++void prop_fraction_single(struct prop_descriptor *pd, struct prop_local_single *pl,
++  long *numerator, long *denominator);
++
++static inline __attribute__((always_inline))
++void prop_inc_single(struct prop_descriptor *pd, struct prop_local_single *pl)
++{
++ unsigned long flags;
++
++ do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); do { (flags) = __raw_local_irq_save(); } while (0); do { } while (0); } while (0);
++ __prop_inc_single(pd, pl);
++ do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); if (raw_irqs_disabled_flags(flags)) { raw_local_irq_restore(flags); do { } while (0); } else { do { } while (0); raw_local_irq_restore(flags); } } while (0);
++}
++# 77 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/seccomp.h" 1
++# 24 "/d/kernels/linux-2.6.27.10-clickport/include/linux/seccomp.h"
++typedef struct { int gcc_is_buggy; } seccomp_t;
++
++
++
++static inline __attribute__((always_inline)) long prctl_get_seccomp(void)
++{
++ return -22;
++}
++
++static inline __attribute__((always_inline)) long prctl_set_seccomp(unsigned long arg2)
++{
++ return -22;
++}
++# 78 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rtmutex.h" 1
++# 16 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rtmutex.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/plist.h" 1
++# 80 "/d/kernels/linux-2.6.27.10-clickport/include/linux/plist.h"
++struct plist_head {
++ struct list_head prio_list;
++ struct list_head node_list;
++
++
++
++};
++
++struct plist_node {
++ int prio;
++ struct plist_head plist;
++};
++# 127 "/d/kernels/linux-2.6.27.10-clickport/include/linux/plist.h"
++static inline __attribute__((always_inline)) void
++plist_head_init(struct plist_head *head, spinlock_t *lock)
++{
++ INIT_LIST_HEAD(&head->prio_list);
++ INIT_LIST_HEAD(&head->node_list);
++
++
++
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void plist_node_init(struct plist_node *node, int prio)
++{
++ node->prio = prio;
++ plist_head_init(&node->plist, 0);
++}
++
++extern void plist_add(struct plist_node *node, struct plist_head *head);
++extern void plist_del(struct plist_node *node, struct plist_head *head);
++# 195 "/d/kernels/linux-2.6.27.10-clickport/include/linux/plist.h"
++static inline __attribute__((always_inline)) int plist_head_empty(const struct plist_head *head)
++{
++ return list_empty(&head->node_list);
++}
++
++
++
++
++
++static inline __attribute__((always_inline)) int plist_node_empty(const struct plist_node *node)
++{
++ return plist_head_empty(&node->plist);
++}
++# 234 "/d/kernels/linux-2.6.27.10-clickport/include/linux/plist.h"
++static inline __attribute__((always_inline)) struct plist_node* plist_first(const struct plist_head *head)
++{
++ return ({ const typeof( ((struct plist_node *)0)->plist.node_list ) *__mptr = (head->node_list.next); (struct plist_node *)( (char *)__mptr - __builtin_offsetof(struct plist_node,plist.node_list) );});
++
++}
++# 17 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rtmutex.h" 2
++# 26 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rtmutex.h"
++struct rt_mutex {
++ spinlock_t wait_lock;
++ struct plist_head wait_list;
++ struct task_struct *owner;
++
++
++
++
++
++
++};
++
++struct rt_mutex_waiter;
++struct hrtimer_sleeper;
++
++
++
++
++
++
++ static inline __attribute__((always_inline)) int rt_mutex_debug_check_no_locks_freed(const void *from,
++             unsigned long len)
++ {
++ return 0;
++ }
++# 80 "/d/kernels/linux-2.6.27.10-clickport/include/linux/rtmutex.h"
++static inline __attribute__((always_inline)) int rt_mutex_is_locked(struct rt_mutex *lock)
++{
++ return lock->owner != 0;
++}
++
++extern void __rt_mutex_init(struct rt_mutex *lock, const char *name);
++extern void rt_mutex_destroy(struct rt_mutex *lock);
++
++extern void rt_mutex_lock(struct rt_mutex *lock);
++extern int rt_mutex_lock_interruptible(struct rt_mutex *lock,
++      int detect_deadlock);
++extern int rt_mutex_timed_lock(struct rt_mutex *lock,
++     struct hrtimer_sleeper *timeout,
++     int detect_deadlock);
++
++extern int rt_mutex_trylock(struct rt_mutex *lock);
++
++extern void rt_mutex_unlock(struct rt_mutex *lock);
++# 80 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h" 2
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/resource.h" 1
++
++
++
++
++
++struct task_struct;
++# 24 "/d/kernels/linux-2.6.27.10-clickport/include/linux/resource.h"
++struct rusage {
++ struct timeval ru_utime;
++ struct timeval ru_stime;
++ long ru_maxrss;
++ long ru_ixrss;
++ long ru_idrss;
++ long ru_isrss;
++ long ru_minflt;
++ long ru_majflt;
++ long ru_nswap;
++ long ru_inblock;
++ long ru_oublock;
++ long ru_msgsnd;
++ long ru_msgrcv;
++ long ru_nsignals;
++ long ru_nvcsw;
++ long ru_nivcsw;
++};
++
++struct rlimit {
++ unsigned long rlim_cur;
++ unsigned long rlim_max;
++};
++# 71 "/d/kernels/linux-2.6.27.10-clickport/include/linux/resource.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/resource.h" 1
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/resource.h" 1
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/resource.h" 2
++# 72 "/d/kernels/linux-2.6.27.10-clickport/include/linux/resource.h" 2
++
++int getrusage(struct task_struct *p, int who, struct rusage *ru);
++# 84 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/timer.h" 1
++
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h" 1
++
++
++
++
++
++
++enum debug_obj_state {
++ ODEBUG_STATE_NONE,
++ ODEBUG_STATE_INIT,
++ ODEBUG_STATE_INACTIVE,
++ ODEBUG_STATE_ACTIVE,
++ ODEBUG_STATE_DESTROYED,
++ ODEBUG_STATE_NOTAVAILABLE,
++ ODEBUG_STATE_MAX,
++};
++
++struct debug_obj_descr;
++# 26 "/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h"
++struct debug_obj {
++ struct hlist_node node;
++ enum debug_obj_state state;
++ void *object;
++ struct debug_obj_descr *descr;
++};
++# 45 "/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h"
++struct debug_obj_descr {
++ const char *name;
++
++ int (*fixup_init) (void *addr, enum debug_obj_state state);
++ int (*fixup_activate) (void *addr, enum debug_obj_state state);
++ int (*fixup_destroy) (void *addr, enum debug_obj_state state);
++ int (*fixup_free) (void *addr, enum debug_obj_state state);
++};
++# 66 "/d/kernels/linux-2.6.27.10-clickport/include/linux/debugobjects.h"
++static inline __attribute__((always_inline)) void
++debug_object_init (void *addr, struct debug_obj_descr *descr) { }
++static inline __attribute__((always_inline)) void
++debug_object_init_on_stack(void *addr, struct debug_obj_descr *descr) { }
++static inline __attribute__((always_inline)) void
++debug_object_activate (void *addr, struct debug_obj_descr *descr) { }
++static inline __attribute__((always_inline)) void
++debug_object_deactivate(void *addr, struct debug_obj_descr *descr) { }
++static inline __attribute__((always_inline)) void
++debug_object_destroy (void *addr, struct debug_obj_descr *descr) { }
++static inline __attribute__((always_inline)) void
++debug_object_free (void *addr, struct debug_obj_descr *descr) { }
++
++static inline __attribute__((always_inline)) void debug_objects_early_init(void) { }
++static inline __attribute__((always_inline)) void debug_objects_mem_init(void) { }
++
++
++
++
++
++static inline __attribute__((always_inline)) void
++debug_check_no_obj_freed(const void *address, unsigned long size) { }
++# 8 "/d/kernels/linux-2.6.27.10-clickport/include/linux/timer.h" 2
++
++struct tvec_base;
++
++struct timer_list {
++ struct list_head entry;
++ unsigned long expires;
++
++ void (*function)(unsigned long);
++ unsigned long data;
++
++ struct tvec_base *base;
++
++ void *start_site;
++ char start_comm[16];
++ int start_pid;
++
++};
++
++extern struct tvec_base boot_tvec_bases;
++# 40 "/d/kernels/linux-2.6.27.10-clickport/include/linux/timer.h"
++void init_timer(struct timer_list *timer);
++void init_timer_deferrable(struct timer_list *timer);
++
++
++
++
++
++static inline __attribute__((always_inline)) void destroy_timer_on_stack(struct timer_list *timer) { }
++static inline __attribute__((always_inline)) void init_timer_on_stack(struct timer_list *timer)
++{
++ init_timer(timer);
++}
++
++
++static inline __attribute__((always_inline)) void setup_timer(struct timer_list * timer,
++    void (*function)(unsigned long),
++    unsigned long data)
++{
++ timer->function = function;
++ timer->data = data;
++ init_timer(timer);
++}
++
++static inline __attribute__((always_inline)) void setup_timer_on_stack(struct timer_list *timer,
++     void (*function)(unsigned long),
++     unsigned long data)
++{
++ timer->function = function;
++ timer->data = data;
++ init_timer_on_stack(timer);
++}
++# 82 "/d/kernels/linux-2.6.27.10-clickport/include/linux/timer.h"
++static inline __attribute__((always_inline)) int timer_pending(const struct timer_list * timer)
++{
++ return timer->entry.next != 0;
++}
++
++extern void add_timer_on(struct timer_list *timer, int cpu);
++extern int del_timer(struct timer_list * timer);
++extern int __mod_timer(struct timer_list *timer, unsigned long expires);
++extern int mod_timer(struct timer_list *timer, unsigned long expires);
++# 102 "/d/kernels/linux-2.6.27.10-clickport/include/linux/timer.h"
++extern unsigned long next_timer_interrupt(void);
++
++
++
++
++
++extern unsigned long get_next_timer_interrupt(unsigned long now);
++# 117 "/d/kernels/linux-2.6.27.10-clickport/include/linux/timer.h"
++extern void init_timer_stats(void);
++
++extern void timer_stats_update_stats(void *timer, pid_t pid, void *startf,
++         void *timerf, char *comm,
++         unsigned int timer_flag);
++
++extern void __timer_stats_timer_set_start_info(struct timer_list *timer,
++            void *addr);
++
++static inline __attribute__((always_inline)) void timer_stats_timer_set_start_info(struct timer_list *timer)
++{
++ __timer_stats_timer_set_start_info(timer, __builtin_return_address(0));
++}
++
++static inline __attribute__((always_inline)) void timer_stats_timer_clear_start_info(struct timer_list *timer)
++{
++ timer->start_site = 0;
++}
++# 163 "/d/kernels/linux-2.6.27.10-clickport/include/linux/timer.h"
++static inline __attribute__((always_inline)) void add_timer(struct timer_list *timer)
++{
++ do { if (__builtin_expect(!!(timer_pending(timer)), 0)) do { asm volatile("1:\tud2\n" ".pushsection __bug_table,\"a\"\n" "2:\t.long 1b, %c0\n" "\t.word %c1, 0\n" "\t.org 2b+%c2\n" ".popsection" : : "i" ("/d/kernels/linux-2.6.27.10-clickport/include/linux/timer.h"), "i" (165), "i" (sizeof(struct bug_entry))); for (;;) ; } while (0); } while(0);
++ __mod_timer(timer, timer->expires);
++}
++
++
++  extern int try_to_del_timer_sync(struct timer_list *timer);
++  extern int del_timer_sync(struct timer_list *timer);
++
++
++
++
++
++
++
++extern void init_timers(void);
++extern void run_local_timers(void);
++struct hrtimer;
++extern enum hrtimer_restart it_real_fn(struct hrtimer *);
++
++unsigned long __round_jiffies(unsigned long j, int cpu);
++unsigned long __round_jiffies_relative(unsigned long j, int cpu);
++unsigned long round_jiffies(unsigned long j);
++unsigned long round_jiffies_relative(unsigned long j);
++# 85 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/task_io_accounting.h" 1
++# 11 "/d/kernels/linux-2.6.27.10-clickport/include/linux/task_io_accounting.h"
++struct task_io_accounting {
++
++
++ u64 rchar;
++
++ u64 wchar;
++
++ u64 syscr;
++
++ u64 syscw;
++
++
++
++
++
++
++
++ u64 read_bytes;
++
++
++
++
++
++ u64 write_bytes;
++# 43 "/d/kernels/linux-2.6.27.10-clickport/include/linux/task_io_accounting.h"
++ u64 cancelled_write_bytes;
++
++};
++# 87 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/latencytop.h" 1
++# 33 "/d/kernels/linux-2.6.27.10-clickport/include/linux/latencytop.h"
++static inline __attribute__((always_inline)) void
++account_scheduler_latency(struct task_struct *task, int usecs, int inter)
++{
++}
++
++static inline __attribute__((always_inline)) void clear_all_latency_tracing(struct task_struct *p)
++{
++}
++# 89 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/cred.h" 1
++# 90 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/pid.h" 1
++
++
++
++
++
++enum pid_type
++{
++ PIDTYPE_PID,
++ PIDTYPE_PGID,
++ PIDTYPE_SID,
++ PIDTYPE_MAX,
++ PIDTYPE_REALPID
++};
++# 51 "/d/kernels/linux-2.6.27.10-clickport/include/linux/pid.h"
++struct upid {
++
++ int nr;
++ struct pid_namespace *ns;
++ struct hlist_node pid_chain;
++};
++
++struct pid
++{
++ atomic_t count;
++ unsigned int level;
++
++ struct hlist_head tasks[PIDTYPE_MAX];
++ struct rcu_head rcu;
++ struct upid numbers[1];
++};
++
++extern struct pid init_struct_pid;
++
++struct pid_link
++{
++ struct hlist_node node;
++ struct pid *pid;
++};
++
++static inline __attribute__((always_inline)) struct pid *get_pid(struct pid *pid)
++{
++ if (pid)
++  atomic_inc(&pid->count);
++ return pid;
++}
++
++extern void put_pid(struct pid *pid);
++extern struct task_struct *pid_task(struct pid *pid, enum pid_type);
++extern struct task_struct *get_pid_task(struct pid *pid, enum pid_type);
++
++extern struct pid *get_task_pid(struct task_struct *task, enum pid_type type);
++
++
++
++
++
++extern void attach_pid(struct task_struct *task, enum pid_type type,
++   struct pid *pid);
++extern void detach_pid(struct task_struct *task, enum pid_type);
++extern void change_pid(struct task_struct *task, enum pid_type,
++   struct pid *pid);
++extern void transfer_pid(struct task_struct *old, struct task_struct *xxx_new,
++    enum pid_type);
++
++struct pid_namespace;
++extern struct pid_namespace init_pid_ns;
++# 113 "/d/kernels/linux-2.6.27.10-clickport/include/linux/pid.h"
++extern struct pid *find_pid_ns(int nr, struct pid_namespace *ns);
++extern struct pid *find_vpid(int nr);
++
++
++
++
++extern struct pid *find_get_pid(int nr);
++extern struct pid *find_ge_pid(int nr, struct pid_namespace *);
++int next_pidmap(struct pid_namespace *pid_ns, int last);
++
++extern struct pid *alloc_pid(struct pid_namespace *ns);
++extern void free_pid(struct pid *pid);
++# 137 "/d/kernels/linux-2.6.27.10-clickport/include/linux/pid.h"
++static inline __attribute__((always_inline)) pid_t pid_nr(struct pid *pid)
++{
++ pid_t nr = 0;
++ if (pid)
++  nr = pid->numbers[0].nr;
++ return nr;
++}
++
++pid_t pid_nr_ns(struct pid *pid, struct pid_namespace *ns);
++pid_t pid_unmapped_nr_ns(struct pid *pid, struct pid_namespace *ns);
++pid_t pid_vnr(struct pid *pid);
++# 91 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h" 2
++
++
++
++struct mem_cgroup;
++struct exec_domain;
++struct futex_pi_state;
++struct robust_list_head;
++struct bio;
++# 116 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++extern unsigned long avenrun[];
++# 130 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++extern unsigned long total_forks;
++extern int nr_threads;
++extern __typeof__(unsigned long) per_cpu__process_counts;
++extern int nr_processes(void);
++extern unsigned long nr_running(void);
++extern unsigned long nr_uninterruptible(void);
++extern unsigned long nr_active(void);
++extern unsigned long nr_iowait(void);
++
++struct seq_file;
++struct cfs_rq;
++struct task_group;
++
++extern void proc_sched_show_task(struct task_struct *p, struct seq_file *m);
++extern void proc_sched_set_task(struct task_struct *p);
++extern void
++print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq);
++# 161 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++extern unsigned long long time_sync_thresh;
++# 238 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++extern rwlock_t tasklist_lock;
++extern spinlock_t mmlist_lock;
++
++struct task_struct;
++
++extern void sched_init(void);
++extern void sched_init_smp(void);
++
++extern "C" __attribute__((regparm(0))) void schedule_tail(struct task_struct *prev);
++
++
++
++
++extern void init_idle(struct task_struct *idle, int cpu);
++extern void init_idle_bootup_task(struct task_struct *idle);
++
++extern int runqueue_is_locked(void);
++
++extern cpumask_t nohz_cpu_mask;
++
++
++
++static inline __attribute__((always_inline)) int select_nohz_load_balancer(int cpu)
++{
++ return 0;
++}
++
++
++extern unsigned long rt_needs_cpu(int cpu);
++
++
++
++
++extern void show_state_filter(unsigned long state_filter);
++
++static inline __attribute__((always_inline)) void show_state(void)
++{
++ show_state_filter(0);
++}
++
++extern void show_regs(struct pt_regs *);
++
++
++
++
++
++
++extern void show_stack(struct task_struct *task, unsigned long *sp);
++
++void io_schedule(void);
++long io_schedule_timeout(long timeout);
++
++extern void cpu_init (void);
++extern void trap_init(void);
++extern void account_process_tick(struct task_struct *task, int user);
++extern void update_process_times(int user);
++extern void scheduler_tick(void);
++extern void hrtick_resched(void);
++
++extern void sched_show_task(struct task_struct *p);
++
++
++extern void softlockup_tick(void);
++extern void touch_softlockup_watchdog(void);
++extern void touch_all_softlockup_watchdogs(void);
++extern unsigned int softlockup_panic;
++extern unsigned long sysctl_hung_task_check_count;
++extern unsigned long sysctl_hung_task_timeout_secs;
++extern unsigned long sysctl_hung_task_warnings;
++extern int softlockup_thresh;
++# 328 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++extern char __sched_text_start[], __sched_text_end[];
++
++
++extern int in_sched_functions(unsigned long addr);
++
++
++extern signed long schedule_timeout(signed long timeout);
++extern signed long schedule_timeout_interruptible(signed long timeout);
++extern signed long schedule_timeout_killable(signed long timeout);
++extern signed long schedule_timeout_uninterruptible(signed long timeout);
++extern "C" __attribute__((regparm(0))) void schedule(void);
++
++struct nsproxy;
++struct user_namespace;
++
++
++
++
++extern int sysctl_max_map_count;
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/aio.h" 1
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/workqueue.h" 1
++# 12 "/d/kernels/linux-2.6.27.10-clickport/include/linux/workqueue.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic.h" 1
++# 13 "/d/kernels/linux-2.6.27.10-clickport/include/linux/workqueue.h" 2
++
++struct workqueue_struct;
++
++struct work_struct;
++typedef void (*work_func_t)(struct work_struct *work);
++
++
++
++
++
++
++
++struct work_struct {
++ atomic_long_t data;
++
++
++
++ struct list_head entry;
++ work_func_t func;
++
++
++
++};
++
++
++
++struct delayed_work {
++ struct work_struct work;
++ struct timer_list timer;
++};
++
++struct execute_work {
++ struct work_struct work;
++};
++# 150 "/d/kernels/linux-2.6.27.10-clickport/include/linux/workqueue.h"
++extern struct workqueue_struct *
++__create_workqueue_key(const char *name, int singlethread,
++         int freezeable, struct lock_class_key *key,
++         const char *lock_name);
++# 179 "/d/kernels/linux-2.6.27.10-clickport/include/linux/workqueue.h"
++extern void destroy_workqueue(struct workqueue_struct *wq);
++
++extern int queue_work(struct workqueue_struct *wq, struct work_struct *work);
++extern int queue_work_on(int cpu, struct workqueue_struct *wq,
++   struct work_struct *work);
++extern int queue_delayed_work(struct workqueue_struct *wq,
++   struct delayed_work *work, unsigned long delay);
++extern int queue_delayed_work_on(int cpu, struct workqueue_struct *wq,
++   struct delayed_work *work, unsigned long delay);
++
++extern void flush_workqueue(struct workqueue_struct *wq);
++extern void flush_scheduled_work(void);
++
++extern int schedule_work(struct work_struct *work);
++extern int schedule_work_on(int cpu, struct work_struct *work);
++extern int schedule_delayed_work(struct delayed_work *work, unsigned long delay);
++extern int schedule_delayed_work_on(int cpu, struct delayed_work *work,
++     unsigned long delay);
++extern int schedule_on_each_cpu(work_func_t func);
++extern int current_is_keventd(void);
++extern int keventd_up(void);
++
++extern void init_workqueues(void);
++int execute_in_process_context(work_func_t fn, struct execute_work *);
++
++extern int flush_work(struct work_struct *work);
++
++extern int cancel_work_sync(struct work_struct *work);
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) int cancel_delayed_work(struct delayed_work *work)
++{
++ int ret;
++
++ ret = del_timer_sync(&work->timer);
++ if (ret)
++  clear_bit(0, ((unsigned long *)(&(&work->work)->data)));
++ return ret;
++}
++
++extern int cancel_delayed_work_sync(struct delayed_work *work);
++
++
++static inline __attribute__((always_inline))
++void cancel_rearming_delayed_workqueue(struct workqueue_struct *wq,
++     struct delayed_work *work)
++{
++ cancel_delayed_work_sync(work);
++}
++
++
++static inline __attribute__((always_inline))
++void cancel_rearming_delayed_work(struct delayed_work *work)
++{
++ cancel_delayed_work_sync(work);
++}
++# 6 "/d/kernels/linux-2.6.27.10-clickport/include/linux/aio.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/aio_abi.h" 1
++# 32 "/d/kernels/linux-2.6.27.10-clickport/include/linux/aio_abi.h"
++typedef unsigned long aio_context_t;
++
++enum {
++ IOCB_CMD_PREAD = 0,
++ IOCB_CMD_PWRITE = 1,
++ IOCB_CMD_FSYNC = 2,
++ IOCB_CMD_FDSYNC = 3,
++
++
++
++
++ IOCB_CMD_NOOP = 6,
++ IOCB_CMD_PREADV = 7,
++ IOCB_CMD_PWRITEV = 8,
++};
++# 57 "/d/kernels/linux-2.6.27.10-clickport/include/linux/aio_abi.h"
++struct io_event {
++ __u64 data;
++ __u64 obj;
++ __s64 res;
++ __s64 res2;
++};
++# 78 "/d/kernels/linux-2.6.27.10-clickport/include/linux/aio_abi.h"
++struct iocb {
++
++ __u64 aio_data;
++ __u32 aio_key, aio_reserved1;
++
++
++
++ __u16 aio_lio_opcode;
++ __s16 aio_reqprio;
++ __u32 aio_fildes;
++
++ __u64 aio_buf;
++ __u64 aio_nbytes;
++ __s64 aio_offset;
++
++
++ __u64 aio_reserved2;
++
++
++ __u32 aio_flags;
++
++
++
++
++
++ __u32 aio_resfd;
++};
++# 7 "/d/kernels/linux-2.6.27.10-clickport/include/linux/aio.h" 2
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic.h" 1
++# 10 "/d/kernels/linux-2.6.27.10-clickport/include/linux/aio.h" 2
++
++
++
++
++struct kioctx;
++# 86 "/d/kernels/linux-2.6.27.10-clickport/include/linux/aio.h"
++struct kiocb {
++ struct list_head ki_run_list;
++ unsigned long ki_flags;
++ int ki_users;
++ unsigned ki_key;
++
++ struct file *ki_filp;
++ struct kioctx *ki_ctx;
++ int (*ki_cancel)(struct kiocb *, struct io_event *);
++ ssize_t (*ki_retry)(struct kiocb *);
++ void (*ki_dtor)(struct kiocb *);
++
++ union {
++  void *user;
++  struct task_struct *tsk;
++ } ki_obj;
++
++ __u64 ki_user_data;
++ wait_queue_t ki_wait;
++ loff_t ki_pos;
++
++ void *xxx_private;
++
++ unsigned short ki_opcode;
++ size_t ki_nbytes;
++ char *ki_buf;
++ size_t ki_left;
++ struct iovec ki_inline_vec;
++  struct iovec *ki_iovec;
++  unsigned long ki_nr_segs;
++  unsigned long ki_cur_seg;
++
++ struct list_head ki_list;
++
++
++
++
++
++
++ struct file *ki_eventfd;
++};
++# 148 "/d/kernels/linux-2.6.27.10-clickport/include/linux/aio.h"
++struct aio_ring {
++ unsigned id;
++ unsigned nr;
++ unsigned head;
++ unsigned tail;
++
++ unsigned magic;
++ unsigned compat_features;
++ unsigned incompat_features;
++ unsigned header_length;
++
++
++ struct io_event io_events[0];
++};
++
++
++
++
++struct aio_ring_info {
++ unsigned long mmap_base;
++ unsigned long mmap_size;
++
++ struct page **ring_pages;
++ spinlock_t ring_lock;
++ long nr_pages;
++
++ unsigned nr, tail;
++
++ struct page *internal_pages[8];
++};
++
++struct kioctx {
++ atomic_t users;
++ int dead;
++ struct mm_struct *mm;
++
++
++ unsigned long user_id;
++ struct kioctx *next;
++
++ wait_queue_head_t wait;
++
++ spinlock_t ctx_lock;
++
++ int reqs_active;
++ struct list_head active_reqs;
++ struct list_head run_list;
++
++
++ unsigned max_reqs;
++
++ struct aio_ring_info ring_info;
++
++ struct delayed_work wq;
++};
++
++
++extern unsigned aio_max_size;
++
++extern ssize_t wait_on_sync_kiocb(struct kiocb *iocb);
++extern int aio_put_req(struct kiocb *iocb);
++extern void kick_iocb(struct kiocb *iocb);
++extern int aio_complete(struct kiocb *iocb, long res, long res2);
++struct mm_struct;
++extern void exit_aio(struct mm_struct *mm);
++
++
++
++
++
++static inline __attribute__((always_inline)) struct kiocb *list_kiocb(struct list_head *h)
++{
++ return ({ const typeof( ((struct kiocb *)0)->ki_list ) *__mptr = (h); (struct kiocb *)( (char *)__mptr - __builtin_offsetof(struct kiocb,ki_list) );});
++}
++
++
++extern unsigned long aio_nr;
++extern unsigned long aio_max_nr;
++# 349 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h" 2
++
++extern unsigned long
++arch_get_unmapped_area(struct file *, unsigned long, unsigned long,
++         unsigned long, unsigned long);
++extern unsigned long
++arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr,
++     unsigned long len, unsigned long pgoff,
++     unsigned long flags);
++extern void arch_unmap_area(struct mm_struct *, unsigned long);
++extern void arch_unmap_area_topdown(struct mm_struct *, unsigned long);
++# 398 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++extern void set_dumpable(struct mm_struct *mm, int value);
++extern int get_dumpable(struct mm_struct *mm);
++# 420 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++struct sighand_struct {
++ atomic_t count;
++ struct k_sigaction action[64];
++ spinlock_t siglock;
++ wait_queue_head_t signalfd_wqh;
++};
++
++struct pacct_struct {
++ int ac_flag;
++ long ac_exitcode;
++ unsigned long ac_mem;
++ cputime_t ac_utime, ac_stime;
++ unsigned long ac_minflt, ac_majflt;
++};
++# 442 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++struct signal_struct {
++ atomic_t count;
++ atomic_t live;
++
++ wait_queue_head_t wait_chldexit;
++
++
++ struct task_struct *curr_target;
++
++
++ struct sigpending shared_pending;
++
++
++ int group_exit_code;
++
++
++
++
++
++ struct task_struct *group_exit_task;
++ int notify_count;
++
++
++ int group_stop_count;
++ unsigned int flags;
++
++
++ struct list_head posix_timers;
++
++
++ struct hrtimer real_timer;
++ struct pid *leader_pid;
++ ktime_t it_real_incr;
++
++
++ cputime_t it_prof_expires, it_virt_expires;
++ cputime_t it_prof_incr, it_virt_incr;
++# 487 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++ union {
++  pid_t pgrp __attribute__((deprecated));
++  pid_t __pgrp;
++ };
++
++ struct pid *tty_old_pgrp;
++
++ union {
++  pid_t session __attribute__((deprecated));
++  pid_t __session;
++ };
++
++
++ int leader;
++
++ struct tty_struct *tty;
++
++
++
++
++
++
++
++ cputime_t utime, stime, cutime, cstime;
++ cputime_t gtime;
++ cputime_t cgtime;
++ unsigned long nvcsw, nivcsw, cnvcsw, cnivcsw;
++ unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt;
++ unsigned long inblock, oublock, cinblock, coublock;
++ struct task_io_accounting ioac;
++
++
++
++
++
++
++
++ unsigned long long sum_sched_runtime;
++# 535 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++ struct rlimit rlim[16];
++
++ struct list_head cpu_timers[3];
++# 546 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++ struct pacct_struct pacct;
++
++
++ struct taskstats *stats;
++
++
++
++
++
++};
++# 579 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++static inline __attribute__((always_inline)) int signal_group_exit(const struct signal_struct *sig)
++{
++ return (sig->flags & 0x00000008) ||
++  (sig->group_exit_task != 0);
++}
++
++
++
++
++struct user_struct {
++ atomic_t __count;
++ atomic_t processes;
++ atomic_t files;
++ atomic_t sigpending;
++
++ atomic_t inotify_watches;
++ atomic_t inotify_devs;
++
++
++ atomic_t epoll_devs;
++ atomic_t epoll_watches;
++
++
++
++ unsigned long mq_bytes;
++
++ unsigned long locked_shm;
++
++
++
++
++
++
++
++ struct hlist_node uidhash_node;
++ uid_t uid;
++# 623 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++};
++
++extern int uids_sysfs_init(void);
++
++extern struct user_struct *find_user(uid_t);
++
++extern struct user_struct root_user;
++
++
++struct backing_dev_info;
++struct reclaim_state;
++
++
++struct sched_info {
++
++ unsigned long pcount;
++ unsigned long long cpu_time,
++      run_delay;
++
++
++ unsigned long long last_arrival,
++      last_queued;
++
++
++ unsigned int bkl_count;
++
++};
++
++
++
++extern const struct file_operations proc_schedstat_operations;
++
++
++
++struct task_delay_info {
++ spinlock_t lock;
++ unsigned int flags;
++# 676 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++ struct timespec blkio_start, blkio_end;
++ u64 blkio_delay;
++ u64 swapin_delay;
++ u32 blkio_count;
++
++ u32 swapin_count;
++
++
++ struct timespec freepages_start, freepages_end;
++ u64 freepages_delay;
++ u32 freepages_count;
++};
++
++
++static inline __attribute__((always_inline)) int sched_info_on(void)
++{
++
++ return 1;
++
++
++
++
++
++
++}
++
++enum cpu_idle_type {
++ CPU_IDLE,
++ CPU_NOT_IDLE,
++ CPU_NEWLY_IDLE,
++ CPU_MAX_IDLE_TYPES
++};
++# 746 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++struct sched_group {
++ struct sched_group *next;
++ cpumask_t cpumask;
++
++
++
++
++
++
++ unsigned int __cpu_power;
++
++
++
++
++ u32 reciprocal_cpu_power;
++};
++
++enum sched_domain_level {
++ SD_LV_NONE = 0,
++ SD_LV_SIBLING,
++ SD_LV_MC,
++ SD_LV_CPU,
++ SD_LV_NODE,
++ SD_LV_ALLNODES,
++ SD_LV_MAX
++};
++
++struct sched_domain_attr {
++ int relax_domain_level;
++};
++
++
++
++
++
++struct sched_domain {
++
++ struct sched_domain *parent;
++ struct sched_domain *child;
++ struct sched_group *groups;
++ cpumask_t span;
++ unsigned long min_interval;
++ unsigned long max_interval;
++ unsigned int busy_factor;
++ unsigned int imbalance_pct;
++ unsigned int cache_nice_tries;
++ unsigned int busy_idx;
++ unsigned int idle_idx;
++ unsigned int newidle_idx;
++ unsigned int wake_idx;
++ unsigned int forkexec_idx;
++ int flags;
++ enum sched_domain_level level;
++
++
++ unsigned long last_balance;
++ unsigned int balance_interval;
++ unsigned int nr_balance_failed;
++
++ u64 last_update;
++
++
++
++ unsigned int lb_count[CPU_MAX_IDLE_TYPES];
++ unsigned int lb_failed[CPU_MAX_IDLE_TYPES];
++ unsigned int lb_balanced[CPU_MAX_IDLE_TYPES];
++ unsigned int lb_imbalance[CPU_MAX_IDLE_TYPES];
++ unsigned int lb_gained[CPU_MAX_IDLE_TYPES];
++ unsigned int lb_hot_gained[CPU_MAX_IDLE_TYPES];
++ unsigned int lb_nobusyg[CPU_MAX_IDLE_TYPES];
++ unsigned int lb_nobusyq[CPU_MAX_IDLE_TYPES];
++
++
++ unsigned int alb_count;
++ unsigned int alb_failed;
++ unsigned int alb_pushed;
++
++
++ unsigned int sbe_count;
++ unsigned int sbe_balanced;
++ unsigned int sbe_pushed;
++
++
++ unsigned int sbf_count;
++ unsigned int sbf_balanced;
++ unsigned int sbf_pushed;
++
++
++ unsigned int ttwu_wake_remote;
++ unsigned int ttwu_move_affine;
++ unsigned int ttwu_move_balance;
++
++};
++
++extern void partition_sched_domains(int ndoms_new, cpumask_t *doms_new,
++        struct sched_domain_attr *dattr_new);
++extern int arch_reinit_sched_domains(void);
++# 855 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++struct io_context;
++
++
++struct group_info {
++ int ngroups;
++ atomic_t usage;
++ gid_t small_block[32];
++ int nblocks;
++ gid_t *blocks[0];
++};
++# 881 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++extern struct group_info *groups_alloc(int gidsetsize);
++extern void groups_free(struct group_info *group_info);
++extern int set_current_groups(struct group_info *group_info);
++extern int groups_search(struct group_info *group_info, gid_t grp);
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void prefetch_stack(struct task_struct *t) { }
++
++
++struct audit_context;
++struct mempolicy;
++struct pipe_inode_info;
++struct uts_namespace;
++
++struct rq;
++struct sched_domain;
++
++struct sched_class {
++ const struct sched_class *next;
++
++ void (*enqueue_task) (struct rq *rq, struct task_struct *p, int wakeup);
++ void (*dequeue_task) (struct rq *rq, struct task_struct *p, int sleep);
++ void (*yield_task) (struct rq *rq);
++ int (*select_task_rq)(struct task_struct *p, int sync);
++
++ void (*check_preempt_curr) (struct rq *rq, struct task_struct *p);
++
++ struct task_struct * (*pick_next_task) (struct rq *rq);
++ void (*put_prev_task) (struct rq *rq, struct task_struct *p);
++
++
++ unsigned long (*load_balance) (struct rq *this_rq, int this_cpu,
++   struct rq *busiest, unsigned long max_load_move,
++   struct sched_domain *sd, enum cpu_idle_type idle,
++   int *all_pinned, int *this_best_prio);
++
++ int (*move_one_task) (struct rq *this_rq, int this_cpu,
++         struct rq *busiest, struct sched_domain *sd,
++         enum cpu_idle_type idle);
++ void (*pre_schedule) (struct rq *this_rq, struct task_struct *task);
++ void (*post_schedule) (struct rq *this_rq);
++ void (*task_wake_up) (struct rq *this_rq, struct task_struct *task);
++
++
++ void (*set_curr_task) (struct rq *rq);
++ void (*task_tick) (struct rq *rq, struct task_struct *p, int queued);
++ void (*task_new) (struct rq *rq, struct task_struct *p);
++ void (*set_cpus_allowed)(struct task_struct *p,
++     const cpumask_t *newmask);
++
++ void (*rq_online)(struct rq *rq);
++ void (*rq_offline)(struct rq *rq);
++
++ void (*switched_from) (struct rq *this_rq, struct task_struct *task,
++          int running);
++ void (*switched_to) (struct rq *this_rq, struct task_struct *task,
++        int running);
++ void (*prio_changed) (struct rq *this_rq, struct task_struct *task,
++        int oldprio, int running);
++
++
++
++
++};
++
++struct load_weight {
++ unsigned long weight, inv_weight;
++};
++# 965 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++struct sched_entity {
++ struct load_weight load;
++ struct rb_node run_node;
++ struct list_head group_node;
++ unsigned int on_rq;
++
++ u64 exec_start;
++ u64 sum_exec_runtime;
++ u64 vruntime;
++ u64 prev_sum_exec_runtime;
++
++ u64 last_wakeup;
++ u64 avg_overlap;
++
++
++ u64 wait_start;
++ u64 wait_max;
++ u64 wait_count;
++ u64 wait_sum;
++
++ u64 sleep_start;
++ u64 sleep_max;
++ s64 sum_sleep_runtime;
++
++ u64 block_start;
++ u64 block_max;
++ u64 exec_max;
++ u64 slice_max;
++
++ u64 nr_migrations;
++ u64 nr_migrations_cold;
++ u64 nr_failed_migrations_affine;
++ u64 nr_failed_migrations_running;
++ u64 nr_failed_migrations_hot;
++ u64 nr_forced_migrations;
++ u64 nr_forced2_migrations;
++
++ u64 nr_wakeups;
++ u64 nr_wakeups_sync;
++ u64 nr_wakeups_migrate;
++ u64 nr_wakeups_local;
++ u64 nr_wakeups_remote;
++ u64 nr_wakeups_affine;
++ u64 nr_wakeups_affine_attempts;
++ u64 nr_wakeups_passive;
++ u64 nr_wakeups_idle;
++# 1020 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++};
++
++struct sched_rt_entity {
++ struct list_head run_list;
++ unsigned int time_slice;
++ unsigned long timeout;
++ int nr_cpus_allowed;
++
++ struct sched_rt_entity *back;
++
++
++
++
++
++
++
++};
++
++struct task_struct {
++ volatile long state;
++ void *stack;
++ atomic_t usage;
++ unsigned int flags;
++ unsigned int ptrace;
++
++ int lock_depth;
++
++
++
++
++
++
++
++ int prio, static_prio, normal_prio;
++ unsigned int rt_priority;
++ const struct sched_class *sched_class;
++ struct sched_entity se;
++ struct sched_rt_entity rt;
++
++
++
++ struct hlist_head preempt_notifiers;
++# 1072 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++ unsigned char fpu_counter;
++ s8 oomkilladj;
++
++ unsigned int btrace_seq;
++
++
++ unsigned int policy;
++ cpumask_t cpus_allowed;
++
++
++
++
++
++
++
++ struct sched_info sched_info;
++
++
++ struct list_head tasks;
++
++ struct mm_struct *mm, *active_mm;
++
++
++ struct linux_binfmt *binfmt;
++ int exit_state;
++ int exit_code, exit_signal;
++ int pdeath_signal;
++
++ unsigned int personality;
++ unsigned did_exec:1;
++ pid_t pid;
++ pid_t tgid;
++# 1114 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++ struct task_struct *real_parent;
++ struct task_struct *parent;
++
++
++
++ struct list_head children;
++ struct list_head sibling;
++ struct task_struct *group_leader;
++
++
++
++
++
++
++ struct list_head ptraced;
++ struct list_head ptrace_entry;
++
++
++ struct pid_link pids[PIDTYPE_MAX];
++ struct list_head thread_group;
++
++ struct completion *vfork_done;
++ int *set_child_tid;
++ int *clear_child_tid;
++
++ cputime_t utime, stime, utimescaled, stimescaled;
++ cputime_t gtime;
++ cputime_t prev_utime, prev_stime;
++ unsigned long nvcsw, nivcsw;
++ struct timespec start_time;
++ struct timespec real_start_time;
++
++ unsigned long min_flt, maj_flt;
++
++   cputime_t it_prof_expires, it_virt_expires;
++ unsigned long long it_sched_expires;
++ struct list_head cpu_timers[3];
++
++
++ uid_t uid,euid,suid,fsuid;
++ gid_t gid,egid,sgid,fsgid;
++ struct group_info *group_info;
++ kernel_cap_t cap_effective, cap_inheritable, cap_permitted, cap_bset;
++ struct user_struct *user;
++ unsigned securebits;
++
++
++
++
++
++ char comm[16];
++
++
++
++
++ int link_count, total_link_count;
++
++
++ struct sysv_sem sysvsem;
++
++
++
++ unsigned long last_switch_timestamp;
++ unsigned long last_switch_count;
++
++
++ struct thread_struct thread;
++
++ struct fs_struct *fs;
++
++ struct files_struct *files;
++
++ struct nsproxy *nsproxy;
++
++ struct signal_struct *signal;
++ struct sighand_struct *sighand;
++
++ sigset_t blocked, real_blocked;
++ sigset_t saved_sigmask;
++ struct sigpending pending;
++
++ unsigned long sas_ss_sp;
++ size_t sas_ss_size;
++ int (*notifier)(void *priv);
++ void *notifier_data;
++ sigset_t *notifier_mask;
++
++ void *security;
++
++ struct audit_context *audit_context;
++
++
++
++
++ seccomp_t seccomp;
++
++
++ struct vx_info *vx_info;
++ struct nx_info *nx_info;
++
++ xid_t xid;
++ nid_t nid;
++ tag_t tag;
++
++
++    u32 parent_exec_id;
++    u32 self_exec_id;
++
++ spinlock_t alloc_lock;
++
++
++ spinlock_t pi_lock;
++
++
++
++ struct plist_head pi_waiters;
++
++ struct rt_mutex_waiter *pi_blocked_on;
++# 1262 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++ void *journal_info;
++
++
++ struct bio *bio_list, **bio_tail;
++
++
++ struct reclaim_state *reclaim_state;
++
++ struct backing_dev_info *backing_dev_info;
++
++ struct io_context *io_context;
++
++ unsigned long ptrace_message;
++ siginfo_t *last_siginfo;
++ struct task_io_accounting ioac;
++
++ u64 acct_rss_mem1;
++ u64 acct_vm_mem1;
++ cputime_t acct_timexpd;
++# 1294 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++ struct robust_list_head *robust_list;
++
++
++
++ struct list_head pi_state_list;
++ struct futex_pi_state *pi_state_cache;
++
++
++
++
++
++ atomic_t fs_excl;
++ struct rcu_head rcu;
++
++ struct list_head *scm_work_list;
++
++
++
++
++ struct pipe_inode_info *splice_pipe;
++
++ struct task_delay_info *delays;
++
++
++
++
++ struct prop_local_single dirties;
++
++
++
++
++};
++# 1346 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++static inline __attribute__((always_inline)) int rt_prio(int prio)
++{
++ if (__builtin_expect(!!(prio < 100), 0))
++  return 1;
++ return 0;
++}
++
++static inline __attribute__((always_inline)) int rt_task(struct task_struct *p)
++{
++ return rt_prio(p->prio);
++}
++
++static inline __attribute__((always_inline)) void set_task_session(struct task_struct *tsk, pid_t session)
++{
++ tsk->signal->__session = session;
++}
++
++static inline __attribute__((always_inline)) void set_task_pgrp(struct task_struct *tsk, pid_t pgrp)
++{
++ tsk->signal->__pgrp = pgrp;
++}
++
++static inline __attribute__((always_inline)) struct pid *task_pid(struct task_struct *task)
++{
++ return task->pids[PIDTYPE_PID].pid;
++}
++
++static inline __attribute__((always_inline)) struct pid *task_tgid(struct task_struct *task)
++{
++ return task->group_leader->pids[PIDTYPE_PID].pid;
++}
++
++static inline __attribute__((always_inline)) struct pid *task_pgrp(struct task_struct *task)
++{
++ return task->group_leader->pids[PIDTYPE_PGID].pid;
++}
++
++static inline __attribute__((always_inline)) struct pid *task_session(struct task_struct *task)
++{
++ return task->group_leader->pids[PIDTYPE_SID].pid;
++}
++
++struct pid_namespace;
++# 1404 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/base.h" 1
++
++
++
++
++
++
++enum {
++ VSC_STARTUP = 1,
++ VSC_SHUTDOWN,
++
++ VSC_NETUP,
++ VSC_NETDOWN,
++};
++# 1405 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/context.h" 1
++# 83 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/context.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/limit_def.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic.h" 1
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/limit_def.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/resource.h" 1
++# 6 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/limit_def.h" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/limit.h" 1
++# 22 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/limit.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic.h" 1
++# 23 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/limit.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/resource.h" 1
++# 24 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/limit.h" 2
++# 41 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/limit.h"
++typedef atomic_long_t rlim_atomic_t;
++typedef unsigned long rlim_t;
++# 62 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/limit.h"
++struct sysinfo;
++
++void vx_vsi_meminfo(struct sysinfo *);
++void vx_vsi_swapinfo(struct sysinfo *);
++# 8 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/limit_def.h" 2
++
++
++struct _vx_res_limit {
++ rlim_t soft;
++ rlim_t hard;
++
++ rlim_atomic_t rcur;
++ rlim_t rmin;
++ rlim_t rmax;
++
++ atomic_t lhit;
++};
++
++
++
++struct _vx_limit {
++ struct _vx_res_limit res[24];
++};
++# 84 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/context.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/sched_def.h" 1
++
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic.h" 1
++# 8 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/sched_def.h" 2
++
++
++
++
++
++struct _vx_sched {
++ spinlock_t tokens_lock;
++
++ int tokens;
++ int fill_rate[2];
++ int interval[2];
++ int tokens_min;
++ int tokens_max;
++
++ int prio_bias;
++
++ unsigned update_mask;
++ cpumask_t update;
++};
++
++struct _vx_sched_pc {
++ int tokens;
++ int flags;
++
++ int fill_rate[2];
++ int interval[2];
++ int tokens_min;
++ int tokens_max;
++
++ int prio_bias;
++ int vavavoom;
++
++ unsigned long norm_time;
++ unsigned long idle_time;
++ unsigned long token_time;
++ unsigned long onhold;
++
++ uint64_t user_ticks;
++ uint64_t sys_ticks;
++ uint64_t hold_ticks;
++};
++# 85 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/context.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/cvirt_def.h" 1
++
++
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic.h" 1
++# 9 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/cvirt_def.h" 2
++
++
++struct _vx_usage_stat {
++ uint64_t user;
++ uint64_t nice;
++ uint64_t system;
++ uint64_t softirq;
++ uint64_t irq;
++ uint64_t idle;
++ uint64_t iowait;
++};
++
++struct _vx_syslog {
++ wait_queue_head_t log_wait;
++ spinlock_t logbuf_lock;
++
++ unsigned long log_start;
++ unsigned long con_start;
++ unsigned long log_end;
++ unsigned long logged_chars;
++
++ char log_buf[1024];
++};
++
++
++
++
++struct _vx_cvirt {
++ atomic_t nr_threads;
++ atomic_t nr_running;
++ atomic_t nr_uninterruptible;
++
++ atomic_t nr_onhold;
++ uint32_t onhold_last;
++
++ struct timeval bias_tv;
++ struct timespec bias_idle;
++ struct timespec bias_uptime;
++ uint64_t bias_clock;
++
++ spinlock_t load_lock;
++ atomic_t load_updates;
++ uint32_t load_last;
++ uint32_t load[3];
++
++ atomic_t total_forks;
++
++ struct _vx_syslog syslog;
++};
++
++struct _vx_cvirt_pc {
++ struct _vx_usage_stat cpustat;
++};
++# 86 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/context.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/cacct_def.h" 1
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic.h" 1
++# 5 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/cacct_def.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/cacct.h" 1
++
++
++
++
++enum sock_acc_field {
++ VXA_SOCK_UNSPEC = 0,
++ VXA_SOCK_UNIX,
++ VXA_SOCK_INET,
++ VXA_SOCK_INET6,
++ VXA_SOCK_PACKET,
++ VXA_SOCK_OTHER,
++ VXA_SOCK_SIZE
++};
++# 6 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/cacct_def.h" 2
++
++
++struct _vx_sock_acc {
++ atomic_long_t count;
++ atomic_long_t total;
++};
++
++
++
++struct _vx_cacct {
++ struct _vx_sock_acc sock[VXA_SOCK_SIZE][3];
++ atomic_t slab[8];
++ atomic_t page[6][8];
++};
++# 87 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/context.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/device_def.h" 1
++
++
++
++
++
++struct vx_dmap_target {
++ dev_t target;
++ uint32_t flags;
++};
++
++struct _vx_device {
++
++
++
++};
++# 88 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/context.h" 2
++
++
++
++struct _vx_info_pc {
++ struct _vx_sched_pc sched_pc;
++ struct _vx_cvirt_pc cvirt_pc;
++};
++
++struct vx_info {
++ struct hlist_node vx_hlist;
++ xid_t vx_id;
++ atomic_t vx_usecnt;
++ atomic_t vx_tasks;
++ struct vx_info *vx_parent;
++ int vx_state;
++
++ unsigned long vx_nsmask[2];
++ struct nsproxy *vx_nsproxy[2];
++ struct fs_struct *vx_fs[2];
++
++ uint64_t vx_flags;
++ uint64_t vx_ccaps;
++ kernel_cap_t vx_bcaps;
++
++
++ struct task_struct *vx_reaper;
++ pid_t vx_initpid;
++ int64_t vx_badness_bias;
++
++ struct _vx_limit limit;
++ struct _vx_sched sched;
++ struct _vx_cvirt cvirt;
++ struct _vx_cacct cacct;
++
++ struct _vx_device dmap;
++
++
++
++
++ struct _vx_info_pc *ptr_pc;
++
++
++ wait_queue_head_t vx_wait;
++ int reboot_cmd;
++ int exit_code;
++
++ char vx_name[65];
++};
++# 148 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/context.h"
++struct vx_info_save {
++ struct vx_info *vxi;
++ xid_t xid;
++};
++# 163 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/context.h"
++extern void claim_vx_info(struct vx_info *, struct task_struct *);
++extern void release_vx_info(struct vx_info *, struct task_struct *);
++
++extern struct vx_info *lookup_vx_info(int);
++extern struct vx_info *lookup_or_create_vx_info(int);
++
++extern int get_xid_list(int, unsigned int *, int);
++extern int xid_is_hashed(xid_t);
++
++extern int vx_migrate_task(struct task_struct *, struct vx_info *, int);
++
++extern long vs_state_change(struct vx_info *, unsigned int);
++# 1406 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/debug.h" 1
++# 1407 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h" 2
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/pid.h" 1
++# 12 "/d/kernels/linux-2.6.27.10-clickport/include/linux/vserver/pid.h"
++static inline __attribute__((always_inline)) int __vx_info_map_pid(struct vx_info *vxi, int pid,
++ const char *func, const char *file, int line)
++{
++ if ((((((vxi) ? (vxi)->vx_flags : 0)) & (0x00000010)) ^ (0))) {
++  do { } while (0);
++
++
++
++
++  if (pid == 0)
++   return 0;
++  if (pid == vxi->vx_initpid)
++   return 1;
++ }
++ return pid;
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) int __vx_info_rmap_pid(struct vx_info *vxi, int pid,
++ const char *func, const char *file, int line)
++{
++ if ((((((vxi) ? (vxi)->vx_flags : 0)) & (0x00000010)) ^ (0))) {
++  do { } while (0);
++
++
++
++
++  if ((pid == 1) && vxi->vx_initpid)
++   return vxi->vx_initpid;
++  if (pid == vxi->vx_initpid)
++   return ~0U;
++ }
++ return pid;
++}
++# 1408 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h" 2
++
++static inline __attribute__((always_inline)) pid_t task_pid_nr(struct task_struct *tsk)
++{
++ return tsk->pid;
++}
++
++pid_t task_pid_nr_ns(struct task_struct *tsk, struct pid_namespace *ns);
++
++static inline __attribute__((always_inline)) pid_t task_pid_vnr(struct task_struct *tsk)
++{
++ return __vx_info_map_pid((get_current()->vx_info), (pid_vnr(task_pid(tsk))), __func__, "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h", 1418);
++}
++
++
++static inline __attribute__((always_inline)) pid_t task_tgid_nr(struct task_struct *tsk)
++{
++ return tsk->tgid;
++}
++
++pid_t task_tgid_nr_ns(struct task_struct *tsk, struct pid_namespace *ns);
++
++static inline __attribute__((always_inline)) pid_t task_tgid_vnr(struct task_struct *tsk)
++{
++ return __vx_info_map_pid((get_current()->vx_info), (pid_vnr(task_tgid(tsk))), __func__, "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h", 1431);
++}
++
++
++static inline __attribute__((always_inline)) pid_t task_pgrp_nr(struct task_struct *tsk)
++{
++ return tsk->signal->__pgrp;
++}
++
++pid_t task_pgrp_nr_ns(struct task_struct *tsk, struct pid_namespace *ns);
++
++static inline __attribute__((always_inline)) pid_t task_pgrp_vnr(struct task_struct *tsk)
++{
++ return pid_vnr(task_pgrp(tsk));
++}
++
++
++static inline __attribute__((always_inline)) pid_t task_session_nr(struct task_struct *tsk)
++{
++ return tsk->signal->__session;
++}
++
++pid_t task_session_nr_ns(struct task_struct *tsk, struct pid_namespace *ns);
++
++static inline __attribute__((always_inline)) pid_t task_session_vnr(struct task_struct *tsk)
++{
++ return pid_vnr(task_session(tsk));
++}
++# 1469 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++static inline __attribute__((always_inline)) int pid_alive(struct task_struct *p)
++{
++ return p->pids[PIDTYPE_PID].pid != 0;
++}
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) int is_global_init(struct task_struct *tsk)
++{
++ return tsk->pid == 1;
++}
++
++
++
++
++
++extern int is_container_init(struct task_struct *tsk);
++
++extern struct pid *cad_pid;
++
++extern void free_task(struct task_struct *tsk);
++
++
++extern void __put_task_struct(struct task_struct *t);
++
++static inline __attribute__((always_inline)) void put_task_struct(struct task_struct *t)
++{
++ if (atomic_dec_and_test(&t->usage))
++  __put_task_struct(t);
++}
++
++extern cputime_t task_utime(struct task_struct *p);
++extern cputime_t task_stime(struct task_struct *p);
++extern cputime_t task_gtime(struct task_struct *p);
++# 1567 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++extern int set_cpus_allowed_ptr(struct task_struct *p,
++    const cpumask_t *new_mask);
++# 1578 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++static inline __attribute__((always_inline)) int set_cpus_allowed(struct task_struct *p, cpumask_t new_mask)
++{
++ return set_cpus_allowed_ptr(p, &new_mask);
++}
++
++extern unsigned long long sched_clock(void);
++
++extern void sched_clock_init(void);
++extern u64 sched_clock_cpu(int cpu);
++# 1601 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++extern void sched_clock_tick(void);
++extern void sched_clock_idle_sleep_event(void);
++extern void sched_clock_idle_wakeup_event(u64 delta_ns);
++
++
++
++
++
++
++extern unsigned long long cpu_clock(int cpu);
++
++extern unsigned long long
++task_sched_runtime(struct task_struct *task);
++
++
++
++extern void sched_exec(void);
++
++
++
++
++extern void sched_clock_idle_sleep_event(void);
++extern void sched_clock_idle_wakeup_event(u64 delta_ns);
++
++
++extern void idle_task_exit(void);
++
++
++
++
++extern void sched_idle_next(void);
++
++
++
++
++static inline __attribute__((always_inline)) void wake_up_idle_cpu(int cpu) { }
++
++
++
++extern unsigned int sysctl_sched_latency;
++extern unsigned int sysctl_sched_min_granularity;
++extern unsigned int sysctl_sched_wakeup_granularity;
++extern unsigned int sysctl_sched_child_runs_first;
++extern unsigned int sysctl_sched_features;
++extern unsigned int sysctl_sched_migration_cost;
++extern unsigned int sysctl_sched_nr_migrate;
++extern unsigned int sysctl_sched_shares_ratelimit;
++
++int sched_nr_latency_handler(struct ctl_table *table, int write,
++  struct file *file, void *buffer, size_t *length,
++  loff_t *ppos);
++
++extern unsigned int sysctl_sched_rt_period;
++extern int sysctl_sched_rt_runtime;
++
++int sched_rt_handler(struct ctl_table *table, int write,
++  struct file *filp, void *buffer, size_t *lenp,
++  loff_t *ppos);
++
++extern unsigned int sysctl_sched_compat_yield;
++
++
++extern int rt_mutex_getprio(struct task_struct *p);
++extern void rt_mutex_setprio(struct task_struct *p, int prio);
++extern void rt_mutex_adjust_pi(struct task_struct *p);
++# 1674 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++extern void set_user_nice(struct task_struct *p, long nice);
++extern int task_prio(const struct task_struct *p);
++extern int task_nice(const struct task_struct *p);
++extern int can_nice(const struct task_struct *p, const int nice);
++extern int task_curr(const struct task_struct *p);
++extern int idle_cpu(int cpu);
++extern int sched_setscheduler(struct task_struct *, int, struct sched_param *);
++extern int sched_setscheduler_nocheck(struct task_struct *, int,
++          struct sched_param *);
++extern struct task_struct *idle_task(int cpu);
++extern struct task_struct *curr_task(int cpu);
++extern void set_curr_task(int cpu, struct task_struct *p);
++
++void yield(void);
++
++
++
++
++extern struct exec_domain default_exec_domain;
++
++union thread_union {
++ struct thread_info thread_info;
++ unsigned long stack[(((1UL) << 12) << 0)/sizeof(long)];
++};
++
++
++static inline __attribute__((always_inline)) int kstack_end(void *addr)
++{
++
++
++
++ return !(((unsigned long)addr+sizeof(void*)-1) & ((((1UL) << 12) << 0)-sizeof(void*)));
++}
++
++
++extern union thread_union init_thread_union;
++extern struct task_struct init_task;
++
++extern struct mm_struct init_mm;
++
++extern struct pid_namespace init_pid_ns;
++# 1730 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++extern struct task_struct *find_task_by_pid_type_ns(int type, int pid,
++  struct pid_namespace *ns);
++
++extern struct task_struct *find_task_by_vpid(pid_t nr);
++extern struct task_struct *find_task_by_pid_ns(pid_t nr,
++  struct pid_namespace *ns);
++
++extern void __set_special_pids(struct pid *pid);
++
++
++extern struct user_struct * alloc_uid(struct user_namespace *, uid_t);
++static inline __attribute__((always_inline)) struct user_struct *get_uid(struct user_struct *u)
++{
++ atomic_inc(&u->__count);
++ return u;
++}
++extern void free_uid(struct user_struct *);
++extern void switch_uid(struct user_struct *);
++extern void release_uids(struct user_namespace *ns);
++
++
++
++extern void do_timer(unsigned long ticks);
++
++extern int wake_up_state(struct task_struct *tsk, unsigned int state);
++extern int wake_up_process(struct task_struct *tsk);
++extern void wake_up_new_task(struct task_struct *tsk,
++    unsigned long clone_flags);
++
++ extern void kick_process(struct task_struct *tsk);
++
++
++
++extern void sched_fork(struct task_struct *p, int clone_flags);
++extern void sched_dead(struct task_struct *p);
++
++extern int in_group_p(gid_t);
++extern int in_egroup_p(gid_t);
++
++extern void proc_caches_init(void);
++extern void flush_signals(struct task_struct *);
++extern void ignore_signals(struct task_struct *);
++extern void flush_signal_handlers(struct task_struct *, int force_default);
++extern int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info);
++
++static inline __attribute__((always_inline)) int dequeue_signal_lock(struct task_struct *tsk, sigset_t *mask, siginfo_t *info)
++{
++ unsigned long flags;
++ int ret;
++
++ do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); flags = _spin_lock_irqsave(&tsk->sighand->siglock); } while (0);
++ ret = dequeue_signal(tsk, mask, info);
++ do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); _spin_unlock_irqrestore(&tsk->sighand->siglock, flags); } while (0);
++
++ return ret;
++}
++
++extern void block_all_signals(int (*notifier)(void *priv), void *priv,
++         sigset_t *mask);
++extern void unblock_all_signals(void);
++extern void release_task(struct task_struct * p);
++extern int send_sig_info(int, struct siginfo *, struct task_struct *);
++extern int force_sigsegv(int, struct task_struct *);
++extern int force_sig_info(int, struct siginfo *, struct task_struct *);
++extern int __kill_pgrp_info(int sig, struct siginfo *info, struct pid *pgrp);
++extern int kill_pid_info(int sig, struct siginfo *info, struct pid *pid);
++extern int kill_pid_info_as_uid(int, struct siginfo *, struct pid *, uid_t, uid_t, u32);
++extern int kill_pgrp(struct pid *pid, int sig, int priv);
++extern int kill_pid(struct pid *pid, int sig, int priv);
++extern int kill_proc_info(int, struct siginfo *, pid_t);
++extern int do_notify_parent(struct task_struct *, int);
++extern void force_sig(int, struct task_struct *);
++extern void force_sig_specific(int, struct task_struct *);
++extern int send_sig(int, struct task_struct *, int);
++extern void zap_other_threads(struct task_struct *p);
++extern struct sigqueue *sigqueue_alloc(void);
++extern void sigqueue_free(struct sigqueue *);
++extern int send_sigqueue(struct sigqueue *, struct task_struct *, int group);
++extern int do_sigaction(int, struct k_sigaction *, struct k_sigaction *);
++extern int do_sigaltstack(const stack_t *, stack_t *, unsigned long);
++
++static inline __attribute__((always_inline)) int kill_cad_pid(int sig, int priv)
++{
++ return kill_pid(cad_pid, sig, priv);
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) int is_si_special(const struct siginfo *info)
++{
++ return info <= ((struct siginfo *) 2);
++}
++
++
++
++static inline __attribute__((always_inline)) int on_sig_stack(unsigned long sp)
++{
++ return (sp - get_current()->sas_ss_sp < get_current()->sas_ss_size);
++}
++
++static inline __attribute__((always_inline)) int sas_ss_flags(unsigned long sp)
++{
++ return (get_current()->sas_ss_size == 0 ? 2
++  : on_sig_stack(sp) ? 1 : 0);
++}
++
++
++
++
++extern struct mm_struct * mm_alloc(void);
++
++
++extern void __mmdrop(struct mm_struct *);
++static inline __attribute__((always_inline)) void mmdrop(struct mm_struct * mm)
++{
++ if (__builtin_expect(!!(atomic_dec_and_test(&mm->mm_count)), 0))
++  __mmdrop(mm);
++}
++
++
++extern void mmput(struct mm_struct *);
++
++extern struct mm_struct *get_task_mm(struct task_struct *task);
++
++extern void mm_release(struct task_struct *, struct mm_struct *);
++
++extern struct mm_struct *dup_mm(struct task_struct *tsk);
++
++extern int copy_thread(int, unsigned long, unsigned long, unsigned long, struct task_struct *, struct pt_regs *);
++extern void flush_thread(void);
++extern void exit_thread(void);
++
++extern void exit_files(struct task_struct *);
++extern void __cleanup_signal(struct signal_struct *);
++extern void __cleanup_sighand(struct sighand_struct *);
++
++extern void exit_itimers(struct signal_struct *);
++extern void flush_itimer_signals(void);
++
++extern void do_group_exit(int);
++
++extern void daemonize(const char *, ...);
++extern int allow_signal(int);
++extern int disallow_signal(int);
++
++extern int do_execve(char *, char * *, char * *, struct pt_regs *);
++extern long do_fork(unsigned long, unsigned long, struct pt_regs *, unsigned long, int *, int *);
++struct task_struct *fork_idle(int);
++
++extern void set_task_comm(struct task_struct *tsk, char *from);
++extern char *get_task_comm(char *to, struct task_struct *tsk);
++
++
++extern unsigned long wait_task_inactive(struct task_struct *, long match_state);
++# 1919 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++static inline __attribute__((always_inline)) int has_group_leader_pid(struct task_struct *p)
++{
++ return p->pid == p->tgid;
++}
++
++static inline __attribute__((always_inline))
++int same_thread_group(struct task_struct *p1, struct task_struct *p2)
++{
++ return p1->tgid == p2->tgid;
++}
++
++static inline __attribute__((always_inline)) struct task_struct *next_thread(const struct task_struct *p)
++{
++ return ({ const typeof( ((struct task_struct *)0)->thread_group ) *__mptr = (({ typeof(p->thread_group.next) _________p1 = (*(volatile typeof(p->thread_group.next) *)&(p->thread_group.next)); do { } while (0); (_________p1); })); (struct task_struct *)( (char *)__mptr - __builtin_offsetof(struct task_struct,thread_group) );});
++
++}
++
++static inline __attribute__((always_inline)) int thread_group_empty(struct task_struct *p)
++{
++ return list_empty(&p->thread_group);
++}
++# 1954 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++static inline __attribute__((always_inline)) void task_lock(struct task_struct *p)
++{
++ _spin_lock(&p->alloc_lock);
++}
++
++static inline __attribute__((always_inline)) void task_unlock(struct task_struct *p)
++{
++ do {__raw_spin_unlock(&(&p->alloc_lock)->raw_lock); (void)0; } while (0);
++}
++
++extern struct sighand_struct *lock_task_sighand(struct task_struct *tsk,
++       unsigned long *flags);
++
++static inline __attribute__((always_inline)) void unlock_task_sighand(struct task_struct *tsk,
++      unsigned long *flags)
++{
++ do { ({ unsigned long __dummy; typeof(*flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); _spin_unlock_irqrestore(&tsk->sighand->siglock, *flags); } while (0);
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void setup_thread_stack(struct task_struct *p, struct task_struct *org)
++{
++ *((struct thread_info *)(p)->stack) = *((struct thread_info *)(org)->stack);
++ ((struct thread_info *)(p)->stack)->task = p;
++}
++
++static inline __attribute__((always_inline)) unsigned long *end_of_stack(struct task_struct *p)
++{
++ return (unsigned long *)((char *) ((struct thread_info *)(p)->stack) + 1);
++}
++
++
++
++static inline __attribute__((always_inline)) int object_is_on_stack(void *obj)
++{
++ void *stack = ((get_current())->stack);
++
++ return (obj >= stack) && ((char *) obj < ((char *) stack + (((1UL) << 12) << 0)));
++}
++
++extern void thread_info_cache_init(void);
++
++
++
++
++static inline __attribute__((always_inline)) void set_tsk_thread_flag(struct task_struct *tsk, int flag)
++{
++ set_ti_thread_flag(((struct thread_info *)(tsk)->stack), flag);
++}
++
++static inline __attribute__((always_inline)) void clear_tsk_thread_flag(struct task_struct *tsk, int flag)
++{
++ clear_ti_thread_flag(((struct thread_info *)(tsk)->stack), flag);
++}
++
++static inline __attribute__((always_inline)) int test_and_set_tsk_thread_flag(struct task_struct *tsk, int flag)
++{
++ return test_and_set_ti_thread_flag(((struct thread_info *)(tsk)->stack), flag);
++}
++
++static inline __attribute__((always_inline)) int test_and_clear_tsk_thread_flag(struct task_struct *tsk, int flag)
++{
++ return test_and_clear_ti_thread_flag(((struct thread_info *)(tsk)->stack), flag);
++}
++
++static inline __attribute__((always_inline)) int test_tsk_thread_flag(struct task_struct *tsk, int flag)
++{
++ return test_ti_thread_flag(((struct thread_info *)(tsk)->stack), flag);
++}
++
++static inline __attribute__((always_inline)) void set_tsk_need_resched(struct task_struct *tsk)
++{
++ set_tsk_thread_flag(tsk,3);
++}
++
++static inline __attribute__((always_inline)) void clear_tsk_need_resched(struct task_struct *tsk)
++{
++ clear_tsk_thread_flag(tsk,3);
++}
++
++static inline __attribute__((always_inline)) int test_tsk_need_resched(struct task_struct *tsk)
++{
++ return __builtin_expect(!!(test_tsk_thread_flag(tsk,3)), 0);
++}
++
++static inline __attribute__((always_inline)) int signal_pending(struct task_struct *p)
++{
++ return __builtin_expect(!!(test_tsk_thread_flag(p,2)), 0);
++}
++
++extern int __fatal_signal_pending(struct task_struct *p);
++
++static inline __attribute__((always_inline)) int fatal_signal_pending(struct task_struct *p)
++{
++ return signal_pending(p) && __fatal_signal_pending(p);
++}
++
++static inline __attribute__((always_inline)) int signal_pending_state(long state, struct task_struct *p)
++{
++ if (!(state & (1 | 128)))
++  return 0;
++ if (!signal_pending(p))
++  return 0;
++
++ return (state & 1) || __fatal_signal_pending(p);
++}
++
++static inline __attribute__((always_inline)) int need_resched(void)
++{
++ return __builtin_expect(!!(test_ti_thread_flag(current_thread_info(), 3)), 0);
++}
++# 2077 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++extern int _cond_resched(void);
++
++
++
++
++
++
++static inline __attribute__((always_inline)) int cond_resched(void)
++{
++ return _cond_resched();
++}
++
++extern int cond_resched_lock(spinlock_t * lock);
++extern int cond_resched_softirq(void);
++static inline __attribute__((always_inline)) int cond_resched_bkl(void)
++{
++ return _cond_resched();
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) int spin_needbreak(spinlock_t *lock)
++{
++
++
++
++ return 0;
++
++}
++
++
++
++
++
++
++
++extern void recalc_sigpending_and_wake(struct task_struct *t);
++extern void recalc_sigpending(void);
++
++extern void signal_wake_up(struct task_struct *t, int resume_stopped);
++
++
++
++
++
++
++static inline __attribute__((always_inline)) unsigned int task_cpu(const struct task_struct *p)
++{
++ return ((struct thread_info *)(p)->stack)->cpu;
++}
++
++extern void set_task_cpu(struct task_struct *p, unsigned int cpu);
++# 2146 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++extern void arch_pick_mmap_layout(struct mm_struct *mm);
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void
++__trace_special(void *__tr, void *__data,
++  unsigned long arg1, unsigned long arg2, unsigned long arg3)
++{
++}
++
++
++extern long sched_setaffinity(pid_t pid, const cpumask_t *new_mask);
++extern long sched_getaffinity(pid_t pid, cpumask_t *mask);
++
++extern int sched_mc_power_savings, sched_smt_power_savings;
++
++extern void normalize_rt_tasks(void);
++# 2192 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++static inline __attribute__((always_inline)) void add_rchar(struct task_struct *tsk, ssize_t amt)
++{
++ tsk->ioac.rchar += amt;
++}
++
++static inline __attribute__((always_inline)) void add_wchar(struct task_struct *tsk, ssize_t amt)
++{
++ tsk->ioac.wchar += amt;
++}
++
++static inline __attribute__((always_inline)) void inc_syscr(struct task_struct *tsk)
++{
++ tsk->ioac.syscr++;
++}
++
++static inline __attribute__((always_inline)) void inc_syscw(struct task_struct *tsk)
++{
++ tsk->ioac.syscw++;
++}
++# 2237 "/d/kernels/linux-2.6.27.10-clickport/include/linux/sched.h"
++static inline __attribute__((always_inline)) void mm_update_next_owner(struct mm_struct *mm)
++{
++}
++
++static inline __attribute__((always_inline)) void mm_init_owner(struct mm_struct *mm, struct task_struct *p)
++{
++}
++# 6 "/d/kernels/linux-2.6.27.10-clickport/include/linux/smp_lock.h" 2
++
++
++
++extern int __attribute__((section(".spinlock.text"))) __reacquire_kernel_lock(void);
++extern void __attribute__((section(".spinlock.text"))) __release_kernel_lock(void);
++# 20 "/d/kernels/linux-2.6.27.10-clickport/include/linux/smp_lock.h"
++static inline __attribute__((always_inline)) int reacquire_kernel_lock(struct task_struct *task)
++{
++ if (__builtin_expect(!!(task->lock_depth >= 0), 0))
++  return __reacquire_kernel_lock();
++ return 0;
++}
++
++extern void __attribute__((section(".spinlock.text"))) lock_kernel(void) ;
++extern void __attribute__((section(".spinlock.text"))) unlock_kernel(void) ;
++
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void cycle_kernel_lock(void)
++{
++ lock_kernel();
++ unlock_kernel();
++}
++# 6 "/d/kernels/linux-2.6.27.10-clickport/include/linux/hardirq.h" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/hardirq.h" 1
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/hardirq_32.h" 1
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/irq.h" 1
++# 20 "/d/kernels/linux-2.6.27.10-clickport/include/linux/irq.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/irqreturn.h" 1
++# 19 "/d/kernels/linux-2.6.27.10-clickport/include/linux/irqreturn.h"
++typedef int irqreturn_t;
++# 21 "/d/kernels/linux-2.6.27.10-clickport/include/linux/irq.h" 2
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/irq.h" 1
++# 11 "/d/kernels/linux-2.6.27.10-clickport/include/asm/irq.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/irq_vectors.h" 1
++# 12 "/d/kernels/linux-2.6.27.10-clickport/include/asm/irq.h" 2
++
++static inline __attribute__((always_inline)) int irq_canonicalize(int irq)
++{
++ return ((irq == 2) ? 9 : irq);
++}
++
++
++
++
++
++
++  extern void irq_ctx_init(int cpu);
++  extern void irq_ctx_exit(int cpu);
++# 40 "/d/kernels/linux-2.6.27.10-clickport/include/asm/irq.h"
++extern void fixup_irqs(cpumask_t map);
++
++
++extern unsigned int do_IRQ(struct pt_regs *regs);
++extern void init_IRQ(void);
++extern void native_init_IRQ(void);
++
++
++extern unsigned long used_vectors[(((256) + (8 * sizeof(long)) - 1) / (8 * sizeof(long)))];
++# 24 "/d/kernels/linux-2.6.27.10-clickport/include/linux/irq.h" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/irq_regs.h" 1
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/irq_regs_32.h" 1
++# 12 "/d/kernels/linux-2.6.27.10-clickport/include/asm/irq_regs_32.h"
++extern __typeof__(struct pt_regs *) per_cpu__irq_regs;
++
++static inline __attribute__((always_inline)) struct pt_regs *get_irq_regs(void)
++{
++ return ({ typeof(per_cpu__irq_regs) ret__; switch (sizeof(per_cpu__irq_regs)) { case 1: asm("mov" "b ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__irq_regs)); break; case 2: asm("mov" "w ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__irq_regs)); break; case 4: asm("mov" "l ""%%fs:""%1,%0" : "=r" (ret__) : "m" (per_cpu__irq_regs)); break; default: __bad_percpu_size(); } ret__; });
++}
++
++static inline __attribute__((always_inline)) struct pt_regs *set_irq_regs(struct pt_regs *new_regs)
++{
++ struct pt_regs *old_regs;
++
++ old_regs = get_irq_regs();
++ do { typedef typeof(per_cpu__irq_regs) T__; if (0) { T__ tmp__; tmp__ = (new_regs); } switch (sizeof(per_cpu__irq_regs)) { case 1: asm("mov" "b %1,""%%fs:""%0" : "+m" (per_cpu__irq_regs) : "ri" ((T__)new_regs)); break; case 2: asm("mov" "w %1,""%%fs:""%0" : "+m" (per_cpu__irq_regs) : "ri" ((T__)new_regs)); break; case 4: asm("mov" "l %1,""%%fs:""%0" : "+m" (per_cpu__irq_regs) : "ri" ((T__)new_regs)); break; default: __bad_percpu_size(); } } while (0);
++
++ return old_regs;
++}
++# 3 "/d/kernels/linux-2.6.27.10-clickport/include/asm/irq_regs.h" 2
++# 26 "/d/kernels/linux-2.6.27.10-clickport/include/linux/irq.h" 2
++
++struct irq_desc;
++typedef void (*irq_flow_handler_t)(unsigned int irq,
++         struct irq_desc *desc);
++# 74 "/d/kernels/linux-2.6.27.10-clickport/include/linux/irq.h"
++struct proc_dir_entry;
++struct msi_desc;
++# 99 "/d/kernels/linux-2.6.27.10-clickport/include/linux/irq.h"
++struct irq_chip {
++ const char *name;
++ unsigned int (*startup)(unsigned int irq);
++ void (*shutdown)(unsigned int irq);
++ void (*enable)(unsigned int irq);
++ void (*disable)(unsigned int irq);
++
++ void (*ack)(unsigned int irq);
++ void (*mask)(unsigned int irq);
++ void (*mask_ack)(unsigned int irq);
++ void (*unmask)(unsigned int irq);
++ void (*eoi)(unsigned int irq);
++
++ void (*end)(unsigned int irq);
++ void (*set_affinity)(unsigned int irq, cpumask_t dest);
++ int (*retrigger)(unsigned int irq);
++ int (*set_type)(unsigned int irq, unsigned int flow_type);
++ int (*set_wake)(unsigned int irq, unsigned int on);
++# 126 "/d/kernels/linux-2.6.27.10-clickport/include/linux/irq.h"
++ const char *xxx_typename;
++};
++# 153 "/d/kernels/linux-2.6.27.10-clickport/include/linux/irq.h"
++struct irq_desc {
++ irq_flow_handler_t handle_irq;
++ struct irq_chip *chip;
++ struct msi_desc *msi_desc;
++ void *handler_data;
++ void *chip_data;
++ struct irqaction *action;
++ unsigned int status;
++
++ unsigned int depth;
++ unsigned int wake_depth;
++ unsigned int irq_count;
++ unsigned int irqs_unhandled;
++ unsigned long last_unhandled;
++ spinlock_t lock;
++
++ cpumask_t affinity;
++ unsigned int cpu;
++
++
++ cpumask_t pending_mask;
++
++
++ struct proc_dir_entry *dir;
++
++ const char *name;
++} __attribute__((__aligned__(1 << ((7)))));
++
++extern struct irq_desc irq_desc[224];
++
++
++
++
++
++typedef struct irq_chip hw_irq_controller;
++
++typedef struct irq_desc irq_desc_t;
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/hw_irq.h" 1
++# 21 "/d/kernels/linux-2.6.27.10-clickport/include/asm/hw_irq.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/profile.h" 1
++# 9 "/d/kernels/linux-2.6.27.10-clickport/include/linux/profile.h"
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/errno.h" 1
++# 10 "/d/kernels/linux-2.6.27.10-clickport/include/linux/profile.h" 2
++
++
++
++
++
++
++struct proc_dir_entry;
++struct pt_regs;
++struct notifier_block;
++
++
++void create_prof_cpu_mask(struct proc_dir_entry *de);
++
++
++
++
++
++
++enum profile_type {
++ PROFILE_TASK_EXIT,
++ PROFILE_MUNMAP
++};
++
++
++
++extern int prof_on __attribute__((__section__(".data.read_mostly")));
++
++
++void __attribute__ ((__section__(".init.text"))) profile_init(void);
++void profile_tick(int type);
++
++
++
++
++void profile_hits(int type, void *ip, unsigned int nr_hits);
++
++
++
++
++static inline __attribute__((always_inline)) void profile_hit(int type, void *ip)
++{
++
++
++
++ if (__builtin_expect(!!(prof_on == type), 0))
++  profile_hits(type, ip, 1);
++}
++
++struct task_struct;
++struct mm_struct;
++
++
++void profile_task_exit(struct task_struct * task);
++
++
++
++
++int profile_handoff_task(struct task_struct * task);
++
++
++void profile_munmap(unsigned long addr);
++
++int task_handoff_register(struct notifier_block * n);
++int task_handoff_unregister(struct notifier_block * n);
++
++int profile_event_register(enum profile_type, struct notifier_block * n);
++int profile_event_unregister(enum profile_type, struct notifier_block * n);
++
++int register_timer_hook(int (*hook)(struct pt_regs *));
++void unregister_timer_hook(int (*hook)(struct pt_regs *));
++
++struct pt_regs;
++# 22 "/d/kernels/linux-2.6.27.10-clickport/include/asm/hw_irq.h" 2
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/atomic.h" 1
++# 25 "/d/kernels/linux-2.6.27.10-clickport/include/asm/hw_irq.h" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/sections.h" 1
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm-generic/sections.h" 1
++
++
++
++
++
++extern char _text[], _stext[], _etext[];
++extern char _data[], _sdata[], _edata[];
++extern char __bss_start[], __bss_stop[];
++extern char __init_begin[], __init_end[];
++extern char _sinittext[], _einittext[];
++extern char _end[];
++extern char __per_cpu_start[], __per_cpu_end[];
++extern char __kprobes_text_start[], __kprobes_text_end[];
++extern char __initdata_begin[], __initdata_end[];
++extern char __start_rodata[], __end_rodata[];
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/sections.h" 2
++# 27 "/d/kernels/linux-2.6.27.10-clickport/include/asm/hw_irq.h" 2
++
++
++
++
++extern void apic_timer_interrupt(void);
++extern void error_interrupt(void);
++extern void spurious_interrupt(void);
++extern void thermal_interrupt(void);
++extern void reschedule_interrupt(void);
++
++extern void invalidate_interrupt(void);
++extern void invalidate_interrupt0(void);
++extern void invalidate_interrupt1(void);
++extern void invalidate_interrupt2(void);
++extern void invalidate_interrupt3(void);
++extern void invalidate_interrupt4(void);
++extern void invalidate_interrupt5(void);
++extern void invalidate_interrupt6(void);
++extern void invalidate_interrupt7(void);
++
++extern void irq_move_cleanup_interrupt(void);
++extern void threshold_interrupt(void);
++
++extern void call_function_interrupt(void);
++extern void call_function_single_interrupt(void);
++
++
++extern void disable_8259A_irq(unsigned int irq);
++extern void enable_8259A_irq(unsigned int irq);
++extern int i8259A_irq_pending(unsigned int irq);
++extern void make_8259A_irq(unsigned int irq);
++extern void init_8259A(int aeoi);
++
++
++
++extern unsigned long io_apic_irqs;
++
++extern void init_VISWS_APIC_irqs(void);
++extern void setup_IO_APIC(void);
++extern void disable_IO_APIC(void);
++extern void print_IO_APIC(void);
++extern int IO_APIC_get_PCI_irq_vector(int bus, int slot, int fn);
++extern void setup_ioapic_dest(void);
++
++
++
++
++
++
++extern void send_IPI_self(int vector);
++extern void send_IPI(int dest, int vector);
++
++
++extern atomic_t irq_err_count;
++extern atomic_t irq_mis_count;
++
++
++extern void eisa_set_level_irq(unsigned int irq);
++
++
++
++extern "C" __attribute__((regparm(0))) void vic_cpi_interrupt(void);
++extern "C" __attribute__((regparm(0))) void vic_sys_interrupt(void);
++extern "C" __attribute__((regparm(0))) void vic_cmn_interrupt(void);
++extern "C" __attribute__((regparm(0))) void qic_timer_interrupt(void);
++extern "C" __attribute__((regparm(0))) void qic_invalidate_interrupt(void);
++extern "C" __attribute__((regparm(0))) void qic_reschedule_interrupt(void);
++extern "C" __attribute__((regparm(0))) void qic_enable_irq_interrupt(void);
++extern "C" __attribute__((regparm(0))) void qic_call_function_interrupt(void);
++# 109 "/d/kernels/linux-2.6.27.10-clickport/include/asm/hw_irq.h"
++extern void (*const interrupt[224])(void);
++# 120 "/d/kernels/linux-2.6.27.10-clickport/include/asm/hw_irq.h"
++static inline __attribute__((always_inline)) void lock_vector_lock(void) {}
++static inline __attribute__((always_inline)) void unlock_vector_lock(void) {}
++static inline __attribute__((always_inline)) void __setup_vector_irq(int cpu) {}
++# 195 "/d/kernels/linux-2.6.27.10-clickport/include/linux/irq.h" 2
++
++extern int setup_irq(unsigned int irq, struct irqaction *xxx_new);
++# 208 "/d/kernels/linux-2.6.27.10-clickport/include/linux/irq.h"
++void set_pending_irq(unsigned int irq, cpumask_t mask);
++void move_native_irq(int irq);
++void move_masked_irq(int irq);
++# 242 "/d/kernels/linux-2.6.27.10-clickport/include/linux/irq.h"
++static inline __attribute__((always_inline)) void set_balance_irq_affinity(unsigned int irq, cpumask_t mask)
++{
++}
++
++
++extern int no_irq_affinity;
++
++static inline __attribute__((always_inline)) int irq_balancing_disabled(unsigned int irq)
++{
++ return irq_desc[irq].status & 0x00400000;
++}
++
++
++extern int handle_IRQ_event(unsigned int irq, struct irqaction *action);
++
++
++
++
++
++extern void handle_level_irq(unsigned int irq, struct irq_desc *desc);
++extern void handle_fasteoi_irq(unsigned int irq, struct irq_desc *desc);
++extern void handle_edge_irq(unsigned int irq, struct irq_desc *desc);
++extern void handle_simple_irq(unsigned int irq, struct irq_desc *desc);
++extern void handle_percpu_irq(unsigned int irq, struct irq_desc *desc);
++extern void handle_bad_irq(unsigned int irq, struct irq_desc *desc);
++
++
++
++
++
++extern unsigned int __do_IRQ(unsigned int irq);
++# 281 "/d/kernels/linux-2.6.27.10-clickport/include/linux/irq.h"
++static inline __attribute__((always_inline)) void generic_handle_irq(unsigned int irq)
++{
++ struct irq_desc *desc = irq_desc + irq;
++
++
++
++
++ if (__builtin_expect(!!(desc->handle_irq), 1))
++  desc->handle_irq(irq, desc);
++ else
++  __do_IRQ(irq);
++
++}
++
++
++extern void note_interrupt(unsigned int irq, struct irq_desc *desc,
++      int action_ret);
++
++
++void check_irq_resend(struct irq_desc *desc, unsigned int irq);
++
++
++extern int noirqdebug_setup(char *str);
++
++
++extern int can_request_irq(unsigned int irq, unsigned long irqflags);
++
++
++extern struct irq_chip no_irq_chip;
++extern struct irq_chip dummy_irq_chip;
++
++extern void
++set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip,
++    irq_flow_handler_t handle);
++extern void
++set_irq_chip_and_handler_name(unsigned int irq, struct irq_chip *chip,
++         irq_flow_handler_t handle, const char *name);
++
++extern void
++__set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained,
++    const char *name);
++
++
++static inline __attribute__((always_inline)) void __set_irq_handler_unlocked(int irq,
++           irq_flow_handler_t handler)
++{
++ irq_desc[irq].handle_irq = handler;
++}
++
++
++
++
++static inline __attribute__((always_inline)) void
++set_irq_handler(unsigned int irq, irq_flow_handler_t handle)
++{
++ __set_irq_handler(irq, handle, 0, 0);
++}
++
++
++
++
++
++
++static inline __attribute__((always_inline)) void
++set_irq_chained_handler(unsigned int irq,
++   irq_flow_handler_t handle)
++{
++ __set_irq_handler(irq, handle, 1, 0);
++}
++
++extern void set_irq_noprobe(unsigned int irq);
++extern void set_irq_probe(unsigned int irq);
++
++
++extern int create_irq(void);
++extern void destroy_irq(unsigned int irq);
++
++
++static inline __attribute__((always_inline)) int irq_has_action(unsigned int irq)
++{
++ struct irq_desc *desc = irq_desc + irq;
++ return desc->action != 0;
++}
++
++
++extern void dynamic_irq_init(unsigned int irq);
++extern void dynamic_irq_cleanup(unsigned int irq);
++
++
++extern int set_irq_chip(unsigned int irq, struct irq_chip *chip);
++extern int set_irq_data(unsigned int irq, void *data);
++extern int set_irq_chip_data(unsigned int irq, void *data);
++extern int set_irq_type(unsigned int irq, unsigned int type);
++extern int set_irq_msi(unsigned int irq, struct msi_desc *entry);
++# 6 "/d/kernels/linux-2.6.27.10-clickport/include/asm/hardirq_32.h" 2
++
++typedef struct {
++ unsigned int __softirq_pending;
++ unsigned long idle_timestamp;
++ unsigned int __nmi_count;
++ unsigned int apic_timer_irqs;
++ unsigned int irq0_irqs;
++ unsigned int irq_resched_count;
++ unsigned int irq_call_count;
++ unsigned int irq_tlb_count;
++ unsigned int irq_thermal_count;
++ unsigned int irq_spurious_count;
++} __attribute__((__aligned__((1 << (7))))) irq_cpustat_t;
++
++extern __typeof__(irq_cpustat_t) per_cpu__irq_stat;
++
++
++
++
++void ack_bad_irq(unsigned int irq);
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/irq_cpustat.h" 1
++# 27 "/d/kernels/linux-2.6.27.10-clickport/include/asm/hardirq_32.h" 2
++# 3 "/d/kernels/linux-2.6.27.10-clickport/include/asm/hardirq.h" 2
++
++
++
++
++extern u64 arch_irq_stat_cpu(unsigned int cpu);
++
++
++extern u64 arch_irq_stat(void);
++# 8 "/d/kernels/linux-2.6.27.10-clickport/include/linux/hardirq.h" 2
++# 108 "/d/kernels/linux-2.6.27.10-clickport/include/linux/hardirq.h"
++extern void synchronize_irq(unsigned int irq);
++
++
++
++
++struct task_struct;
++
++
++static inline __attribute__((always_inline)) void account_system_vtime(struct task_struct *tsk)
++{
++}
++# 146 "/d/kernels/linux-2.6.27.10-clickport/include/linux/hardirq.h"
++extern void irq_enter(void);
++# 162 "/d/kernels/linux-2.6.27.10-clickport/include/linux/hardirq.h"
++extern void irq_exit(void);
++# 33 "/d/click/click-1.6.0-27/linuxmodule/../include/click/glue.hh" 2
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ctype.h" 1
++# 18 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ctype.h"
++extern unsigned char _ctype[];
++# 37 "/d/kernels/linux-2.6.27.10-clickport/include/linux/ctype.h"
++static inline __attribute__((always_inline)) unsigned char __tolower(unsigned char c)
++{
++ if ((((_ctype[(int)(unsigned char)(c)])&(0x01)) != 0))
++  c -= 'A'-'a';
++ return c;
++}
++
++static inline __attribute__((always_inline)) unsigned char __toupper(unsigned char c)
++{
++ if ((((_ctype[(int)(unsigned char)(c)])&(0x02)) != 0))
++  c -= 'a'-'A';
++ return c;
++}
++# 35 "/d/click/click-1.6.0-27/linuxmodule/../include/click/glue.hh" 2
++
++
++}
++# 1 "/d/click/click-1.6.0-27/linuxmodule/../include/click/cxxunprotect.h" 1
++# 39 "/d/click/click-1.6.0-27/linuxmodule/../include/click/glue.hh" 2
++# 76 "/d/click/click-1.6.0-27/linuxmodule/../include/click/glue.hh"
++extern "C" {
++void click_chatter(const char *fmt, ...);
++}
++# 96 "/d/click/click-1.6.0-27/linuxmodule/../include/click/glue.hh"
++extern "C" {
++void *click_lalloc(size_t size);
++void click_lfree(volatile void *p, size_t size);
++}
++# 108 "/d/click/click-1.6.0-27/linuxmodule/../include/click/glue.hh"
++
++extern void click_random_srandom();
++
++
++
++extern "C" {
++extern uint32_t click_random_seed;
++extern void srandom(uint32_t);
++
++inline __attribute__((always_inline)) uint32_t
++random()
++{
++    click_random_seed = click_random_seed*69069L + 1;
++    return (click_random_seed ^ jiffies) & 2147483647;
++}
++}
++
++
++
++
++
++int click_qsort(void *base, size_t n, size_t size, int (*compar)(const void *, const void *, void *), void *thunk);
++int click_qsort(void *base, size_t n, size_t size, int (*compar)(const void *, const void *));
++# 150 "/d/click/click-1.6.0-27/linuxmodule/../include/click/glue.hh"
++extern "C" {
++
++long strtol(const char *, char **, int);
++
++inline __attribute__((always_inline)) unsigned long
++strtoul(const char *nptr, char **endptr, int base)
++{
++    return simple_strtoul(nptr, endptr, base);
++}
++# 170 "/d/click/click-1.6.0-27/linuxmodule/../include/click/glue.hh"
++}
++# 270 "/d/click/click-1.6.0-27/linuxmodule/../include/click/glue.hh"
++inline __attribute__((always_inline)) struct timeval
++make_timeval(int sec, int usec)
++{
++    struct timeval tv;
++    tv.tv_sec = sec;
++    tv.tv_usec = usec;
++    return tv;
++}
++
++inline __attribute__((always_inline)) bool
++operator==(const struct timeval &a, const struct timeval &b)
++{
++    return a.tv_sec == b.tv_sec && a.tv_usec == b.tv_usec;
++}
++
++inline __attribute__((always_inline)) bool
++operator!=(const struct timeval &a, const struct timeval &b)
++{
++    return a.tv_sec != b.tv_sec || a.tv_usec != b.tv_usec;
++}
++
++inline __attribute__((always_inline)) bool
++operator<(const struct timeval &a, const struct timeval &b)
++{
++    return a.tv_sec < b.tv_sec || (a.tv_sec == b.tv_sec && a.tv_usec < b.tv_usec);
++}
++
++inline __attribute__((always_inline)) bool
++operator<=(const struct timeval &a, const struct timeval &b)
++{
++    return a.tv_sec < b.tv_sec || (a.tv_sec == b.tv_sec && a.tv_usec <= b.tv_usec);
++}
++
++inline __attribute__((always_inline)) bool
++operator>=(const struct timeval &a, const struct timeval &b)
++{
++    return a.tv_sec > b.tv_sec || (a.tv_sec == b.tv_sec && a.tv_usec >= b.tv_usec);
++}
++
++inline __attribute__((always_inline)) bool
++operator>(const struct timeval &a, const struct timeval &b)
++{
++    return a.tv_sec > b.tv_sec || (a.tv_sec == b.tv_sec && a.tv_usec > b.tv_usec);
++}
++
++inline __attribute__((always_inline)) struct timeval &
++operator+=(struct timeval &a, const struct timeval &b)
++{
++    a.tv_sec += b.tv_sec;
++    a.tv_usec += b.tv_usec;
++    if (a.tv_usec >= 1000000) {
++ a.tv_sec++;
++ a.tv_usec -= 1000000;
++    }
++    return a;
++}
++
++inline __attribute__((always_inline)) struct timeval &
++operator-=(struct timeval &a, const struct timeval &b)
++{
++    a.tv_sec -= b.tv_sec;
++    a.tv_usec -= b.tv_usec;
++    if (a.tv_usec < 0) {
++ a.tv_sec--;
++ a.tv_usec += 1000000;
++    }
++    return a;
++}
++
++inline __attribute__((always_inline)) struct timeval
++operator+(struct timeval a, const struct timeval &b)
++{
++    a += b;
++    return a;
++}
++
++inline __attribute__((always_inline)) struct timeval
++operator-(struct timeval a, const struct timeval &b)
++{
++    a -= b;
++    return a;
++}
++
++
++
++
++class StringAccum;
++StringAccum &operator<<(StringAccum &, const struct timeval &);
++
++# 387 "/d/click/click-1.6.0-27/linuxmodule/../include/click/glue.hh"
++
++
++
++typedef uint64_t click_cycles_t;
++
++
++
++
++inline __attribute__((always_inline)) click_cycles_t
++click_get_cycles()
++{
++
++    uint64_t x;
++    __asm__ __volatile__ ("rdtsc" : "=A" (x));
++    return x;
++# 416 "/d/click/click-1.6.0-27/linuxmodule/../include/click/glue.hh"
++}
++
++
++# 6 "/d/click/click-1.6.0-27/linuxmodule/../include/click/atomic.hh" 2
++
++
++# 50 "/d/click/click-1.6.0-27/linuxmodule/../include/click/atomic.hh"
++class atomic_uint32_t { public:
++
++
++
++
++    inline __attribute__((always_inline)) uint32_t value() const;
++    inline __attribute__((always_inline)) operator uint32_t() const;
++
++    inline __attribute__((always_inline)) atomic_uint32_t &operator=(uint32_t v);
++
++    inline __attribute__((always_inline)) atomic_uint32_t &operator+=(int32_t delta);
++    inline __attribute__((always_inline)) atomic_uint32_t &operator-=(int32_t delta);
++    inline __attribute__((always_inline)) atomic_uint32_t &operator|=(uint32_t mask);
++    inline __attribute__((always_inline)) atomic_uint32_t &operator&=(uint32_t mask);
++
++    inline __attribute__((always_inline)) void operator++();
++    inline __attribute__((always_inline)) void operator++(int);
++    inline __attribute__((always_inline)) void operator--();
++    inline __attribute__((always_inline)) void operator--(int);
++
++    inline __attribute__((always_inline)) uint32_t swap(uint32_t v);
++    inline __attribute__((always_inline)) uint32_t fetch_and_add(uint32_t delta);
++    inline __attribute__((always_inline)) bool dec_and_test();
++    inline __attribute__((always_inline)) bool compare_and_swap(uint32_t test_value, uint32_t new_value);
++
++  private:
++
++
++    atomic_t _val;
++
++
++
++
++
++
++};
++
++
++inline __attribute__((always_inline)) uint32_t
++atomic_uint32_t::value() const
++{
++
++    return ((&_val)->counter);
++
++
++
++}
++
++
++inline __attribute__((always_inline))
++atomic_uint32_t::operator uint32_t() const
++{
++    return value();
++}
++
++
++inline __attribute__((always_inline)) atomic_uint32_t &
++atomic_uint32_t::operator=(uint32_t v)
++{
++
++    (((&_val)->counter) = (v));
++
++
++
++    return *this;
++}
++
++
++inline __attribute__((always_inline)) atomic_uint32_t &
++atomic_uint32_t::operator+=(int32_t delta)
++{
++
++    atomic_add(delta, &_val);
++# 131 "/d/click/click-1.6.0-27/linuxmodule/../include/click/atomic.hh"
++    return *this;
++}
++
++
++inline __attribute__((always_inline)) atomic_uint32_t &
++atomic_uint32_t::operator-=(int32_t delta)
++{
++
++    atomic_sub(delta, &_val);
++# 148 "/d/click/click-1.6.0-27/linuxmodule/../include/click/atomic.hh"
++    return *this;
++}
++
++
++inline __attribute__((always_inline)) atomic_uint32_t &
++atomic_uint32_t::operator|=(uint32_t mask)
++{
++
++
++
++    unsigned long flags;
++    do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); do { (flags) = __raw_local_irq_save(); } while (0); do { } while (0); } while (0);
++    _val.counter |= mask;
++    do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); if (raw_irqs_disabled_flags(flags)) { raw_local_irq_restore(flags); do { } while (0); } else { do { } while (0); raw_local_irq_restore(flags); } } while (0);
++# 170 "/d/click/click-1.6.0-27/linuxmodule/../include/click/atomic.hh"
++     return *this;
++}
++
++
++inline __attribute__((always_inline)) atomic_uint32_t &
++atomic_uint32_t::operator&=(uint32_t mask)
++{
++
++
++
++    unsigned long flags;
++    do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); do { (flags) = __raw_local_irq_save(); } while (0); do { } while (0); } while (0);
++    _val.counter &= mask;
++    do { ({ unsigned long __dummy; typeof(flags) __dummy2; (void)(&__dummy == &__dummy2); 1; }); if (raw_irqs_disabled_flags(flags)) { raw_local_irq_restore(flags); do { } while (0); } else { do { } while (0); raw_local_irq_restore(flags); } } while (0);
++# 192 "/d/click/click-1.6.0-27/linuxmodule/../include/click/atomic.hh"
++    return *this;
++}
++
++
++inline __attribute__((always_inline)) void
++atomic_uint32_t::operator++()
++{
++
++    atomic_inc(&_val);
++# 209 "/d/click/click-1.6.0-27/linuxmodule/../include/click/atomic.hh"
++}
++
++
++inline __attribute__((always_inline)) void
++atomic_uint32_t::operator++(int)
++{
++
++    atomic_inc(&_val);
++# 225 "/d/click/click-1.6.0-27/linuxmodule/../include/click/atomic.hh"
++}
++
++
++inline __attribute__((always_inline)) void
++atomic_uint32_t::operator--()
++{
++
++    atomic_dec(&_val);
++# 241 "/d/click/click-1.6.0-27/linuxmodule/../include/click/atomic.hh"
++}
++
++
++inline __attribute__((always_inline)) void
++atomic_uint32_t::operator--(int)
++{
++
++    atomic_dec(&_val);
++# 257 "/d/click/click-1.6.0-27/linuxmodule/../include/click/atomic.hh"
++}
++# 267 "/d/click/click-1.6.0-27/linuxmodule/../include/click/atomic.hh"
++inline __attribute__((always_inline)) uint32_t
++atomic_uint32_t::swap(uint32_t v)
++{
++
++    asm ("xchgl %0,%1"
++  : "=r" (v), "=m" (_val.counter));
++    return v;
++# 286 "/d/click/click-1.6.0-27/linuxmodule/../include/click/atomic.hh"
++}
++# 296 "/d/click/click-1.6.0-27/linuxmodule/../include/click/atomic.hh"
++inline __attribute__((always_inline)) uint32_t
++atomic_uint32_t::fetch_and_add(uint32_t delta)
++{
++
++    asm volatile ("lock ; " "xaddl %0,%1"
++    : "=r" (delta), "=m" (_val.counter)
++    : "0" (delta), "m" (_val.counter)
++    : "cc");
++    return delta;
++# 317 "/d/click/click-1.6.0-27/linuxmodule/../include/click/atomic.hh"
++}
++# 327 "/d/click/click-1.6.0-27/linuxmodule/../include/click/atomic.hh"
++inline __attribute__((always_inline)) bool
++atomic_uint32_t::dec_and_test()
++{
++
++    return atomic_dec_and_test(&_val);
++# 342 "/d/click/click-1.6.0-27/linuxmodule/../include/click/atomic.hh"
++}
++# 357 "/d/click/click-1.6.0-27/linuxmodule/../include/click/atomic.hh"
++inline __attribute__((always_inline)) bool
++atomic_uint32_t::compare_and_swap(uint32_t test_value, uint32_t new_value)
++{
++
++    asm volatile ("lock ; " "cmpxchgl %2,%0 ; sete %%al"
++    : "=m" (_val.counter), "=a" (test_value)
++    : "r" (new_value), "m" (_val.counter), "a" (test_value)
++    : "cc");
++    return (uint8_t) test_value;
++# 380 "/d/click/click-1.6.0-27/linuxmodule/../include/click/atomic.hh"
++}
++
++inline __attribute__((always_inline)) uint32_t
++operator+(const atomic_uint32_t &a, const atomic_uint32_t &b)
++{
++    return a.value() + b.value();
++}
++
++inline __attribute__((always_inline)) uint32_t
++operator-(const atomic_uint32_t &a, const atomic_uint32_t &b)
++{
++    return a.value() - b.value();
++}
++
++inline __attribute__((always_inline)) bool
++operator==(const atomic_uint32_t &a, const atomic_uint32_t &b)
++{
++    return a.value() == b.value();
++}
++
++inline __attribute__((always_inline)) bool
++operator!=(const atomic_uint32_t &a, const atomic_uint32_t &b)
++{
++    return a.value() != b.value();
++}
++
++inline __attribute__((always_inline)) bool
++operator>(const atomic_uint32_t &a, const atomic_uint32_t &b)
++{
++    return a.value() > b.value();
++}
++
++inline __attribute__((always_inline)) bool
++operator<(const atomic_uint32_t &a, const atomic_uint32_t &b)
++{
++    return a.value() < b.value();
++}
++
++inline __attribute__((always_inline)) bool
++operator>=(const atomic_uint32_t &a, const atomic_uint32_t &b)
++{
++    return a.value() >= b.value();
++}
++
++inline __attribute__((always_inline)) bool
++operator<=(const atomic_uint32_t &a, const atomic_uint32_t &b)
++{
++    return a.value() <= b.value();
++}
++
++typedef atomic_uint32_t uatomic32_t;
++
++
++# 9 "/d/click/click-1.6.0-27/linuxmodule/../include/click/string.hh" 2
++
++
++class String { public:
++
++
++
++
++  static void static_initialize();
++  static void static_cleanup();
++  struct Initializer { Initializer(); };
++
++  inline __attribute__((always_inline)) String();
++  inline __attribute__((always_inline)) String(const String &str);
++  inline __attribute__((always_inline)) String(const char *cstr);
++  inline __attribute__((always_inline)) String(const char *s, int len);
++  inline __attribute__((always_inline)) String(const char *begin, const char *end);
++  explicit inline __attribute__((always_inline)) String(bool b);
++  explicit inline __attribute__((always_inline)) String(char c);
++  explicit inline __attribute__((always_inline)) String(unsigned char c);
++  explicit String(int i);
++  explicit String(unsigned u);
++  explicit String(long i);
++  explicit String(unsigned long u);
++
++  explicit String(long long q);
++  explicit String(unsigned long long q);
++# 43 "/d/click/click-1.6.0-27/linuxmodule/../include/click/string.hh"
++  inline __attribute__((always_inline)) ~String();
++
++  static inline __attribute__((always_inline)) const String &empty_string();
++  static String garbage_string(int len);
++  static String stable_string(const char *s, int len = -1);
++  static inline __attribute__((always_inline)) String stable_string(const char *begin, const char *end);
++
++
++  typedef int64_t int_large_t;
++  typedef uint64_t uint_large_t;
++# 61 "/d/click/click-1.6.0-27/linuxmodule/../include/click/string.hh"
++  static String numeric_string(int_large_t num, int base = 10, bool uppercase = true);
++  static String numeric_string(uint_large_t num, int base = 10, bool uppercase = true);
++
++  inline __attribute__((always_inline)) int length() const;
++  inline __attribute__((always_inline)) const char *data() const;
++
++  typedef const char *const_iterator;
++  typedef const_iterator iterator;
++  inline __attribute__((always_inline)) const_iterator begin() const;
++  inline __attribute__((always_inline)) const_iterator end() const;
++
++  typedef int (String::*unspecified_bool_type)() const;
++  inline __attribute__((always_inline)) operator unspecified_bool_type() const;
++
++  inline __attribute__((always_inline)) char operator[](int i) const;
++  inline __attribute__((always_inline)) char at(int i) const;
++  inline __attribute__((always_inline)) char front() const;
++  inline __attribute__((always_inline)) char back() const;
++
++  const char *c_str() const;
++
++  size_t hashcode() const;
++
++  bool equals(const char *s, int len) const;
++
++
++
++
++
++
++
++  static inline __attribute__((always_inline)) int compare(const String &a, const String &b);
++  inline __attribute__((always_inline)) int compare(const String &str) const;
++  int compare(const char *s, int len) const;
++
++
++
++
++
++  inline __attribute__((always_inline)) String substring(const char *begin, const char *end) const;
++  String substring(int pos, int len) const;
++  inline __attribute__((always_inline)) String substring(int pos) const;
++
++  int find_left(char c, int start = 0) const;
++  int find_left(const String &s, int start = 0) const;
++  int find_right(char c, int start = 0x7FFFFFFF) const;
++
++  String lower() const;
++  String upper() const;
++  String printable() const;
++  String trim_space() const;
++  String quoted_hex() const;
++
++  inline __attribute__((always_inline)) String &operator=(const String &str);
++  inline __attribute__((always_inline)) String &operator=(const char *cstr);
++
++  void append(const char *s, int len);
++  inline __attribute__((always_inline)) void append(const char *begin, const char *end);
++  void append_fill(int c, int len);
++  char *append_garbage(int len);
++  inline __attribute__((always_inline)) String &operator+=(const String &str);
++  inline __attribute__((always_inline)) String &operator+=(const char *cstr);
++  inline __attribute__((always_inline)) String &operator+=(char c);
++# 135 "/d/click/click-1.6.0-27/linuxmodule/../include/click/string.hh"
++  inline __attribute__((always_inline)) bool data_shared() const;
++  char *mutable_data();
++  char *mutable_c_str();
++
++  inline __attribute__((always_inline)) bool out_of_memory() const;
++  static inline __attribute__((always_inline)) const String &out_of_memory_string();
++  static inline __attribute__((always_inline)) const char *out_of_memory_data();
++
++ private:
++
++
++  struct Memo {
++    atomic_uint32_t _refcount;
++    uint32_t _capacity;
++    atomic_uint32_t _dirty;
++    char *_real_data;
++
++    Memo();
++    Memo(char *, int, int);
++    Memo(int, int);
++    ~Memo();
++  };
++
++
++  mutable const char *_data;
++  mutable int _length;
++  mutable Memo *_memo;
++
++  inline __attribute__((always_inline)) String(const char *, int, Memo *);
++
++  inline __attribute__((always_inline)) void assign(const String &) const;
++  void assign(const char *, int);
++  inline __attribute__((always_inline)) void deref() const;
++  void make_out_of_memory();
++
++  static Memo *null_memo;
++  static Memo *permanent_memo;
++  static Memo *oom_memo;
++  static String *null_string_p;
++  static String *oom_string_p;
++  static const char oom_string_data;
++
++  static String claim_string(char *, int, int);
++
++  friend class String::Initializer;
++  friend class StringAccum;
++
++};
++
++
++inline __attribute__((always_inline))
++String::String(const char *data, int length, Memo *memo)
++  : _data(data), _length(length), _memo(memo)
++{
++  _memo->_refcount++;
++}
++
++inline __attribute__((always_inline)) void
++String::assign(const String &str) const
++{
++  _data = str._data;
++  _length = str._length;
++  _memo = str._memo;
++  _memo->_refcount++;
++}
++
++inline __attribute__((always_inline)) void
++String::deref() const
++{
++  if (_memo->_refcount.dec_and_test())
++    delete _memo;
++}
++
++
++inline __attribute__((always_inline))
++String::String()
++  : _data(null_memo->_real_data), _length(0), _memo(null_memo)
++{
++  _memo->_refcount++;
++}
++# 224 "/d/click/click-1.6.0-27/linuxmodule/../include/click/string.hh"
++inline __attribute__((always_inline))
++String::String(const char *cstr)
++{
++  assign(cstr, -1);
++}
++# 240 "/d/click/click-1.6.0-27/linuxmodule/../include/click/string.hh"
++inline __attribute__((always_inline))
++String::String(const char *s, int len)
++{
++  assign(s, len);
++}
++# 256 "/d/click/click-1.6.0-27/linuxmodule/../include/click/string.hh"
++inline __attribute__((always_inline))
++String::String(const char *begin, const char *end)
++{
++  assign(begin, (end > begin ? end - begin : 0));
++}
++
++
++
++
++
++inline __attribute__((always_inline))
++String::String(bool b)
++  : _data(b ? "true" : "false"), _length(b ? 4 : 5), _memo(permanent_memo)
++{
++  _memo->_refcount++;
++}
++
++
++
++
++inline __attribute__((always_inline))
++String::String(char c)
++{
++  assign(&c, 1);
++}
++
++
++
++
++inline __attribute__((always_inline))
++String::String(unsigned char c)
++{
++  assign(reinterpret_cast<char *>(&c), 1);
++}
++
++
++
++
++inline __attribute__((always_inline))
++String::String(const String &str)
++{
++  assign(str);
++}
++
++
++inline __attribute__((always_inline))
++String::~String()
++{
++  deref();
++}
++
++
++inline __attribute__((always_inline)) int
++String::length() const
++{
++  return _length;
++}
++
++
++
++
++
++inline __attribute__((always_inline)) const char *
++String::data() const
++{
++  return _data;
++}
++
++
++
++
++
++inline __attribute__((always_inline)) String::const_iterator
++String::begin() const
++{
++  return _data;
++}
++
++
++
++
++
++inline __attribute__((always_inline)) String::const_iterator
++String::end() const
++{
++  return _data + _length;
++}
++
++
++inline __attribute__((always_inline))
++String::operator unspecified_bool_type() const
++{
++  return _length != 0 ? &String::length : 0;
++}
++
++
++
++
++
++inline __attribute__((always_inline)) char
++String::operator[](int i) const
++{
++  return _data[i];
++}
++
++
++
++
++
++
++
++inline __attribute__((always_inline)) char
++String::at(int i) const
++{
++  ;
++  return _data[i];
++}
++
++
++
++
++inline __attribute__((always_inline)) char
++String::front() const
++{
++  return _data[0];
++}
++
++
++
++
++inline __attribute__((always_inline)) char
++String::back() const
++{
++  return _data[_length - 1];
++}
++
++
++inline __attribute__((always_inline)) bool
++String::data_shared() const
++{
++  return !_memo->_capacity || _memo->_refcount != 1;
++}
++
++
++
++
++
++inline __attribute__((always_inline)) const String &
++String::empty_string()
++{
++  return *null_string_p;
++}
++# 418 "/d/click/click-1.6.0-27/linuxmodule/../include/click/string.hh"
++inline __attribute__((always_inline)) String
++String::stable_string(const char *begin, const char *end)
++{
++    if (begin < end)
++ return String::stable_string(begin, end - begin);
++    else
++ return String();
++}
++# 436 "/d/click/click-1.6.0-27/linuxmodule/../include/click/string.hh"
++inline __attribute__((always_inline)) String
++String::substring(const char *begin, const char *end) const
++{
++    if (begin < end && begin >= _data && end <= _data + _length)
++ return String(begin, end - begin, _memo);
++    else
++ return String();
++}
++
++
++
++
++
++inline __attribute__((always_inline)) String
++String::substring(int pos) const
++{
++  return substring(pos, _length);
++}
++# 462 "/d/click/click-1.6.0-27/linuxmodule/../include/click/string.hh"
++inline __attribute__((always_inline)) int
++String::compare(const String &a, const String &b)
++{
++  return a.compare(b);
++}
++
++
++
++
++
++inline __attribute__((always_inline)) int
++String::compare(const String &str) const
++{
++  return compare(str._data, str._length);
++}
++# 486 "/d/click/click-1.6.0-27/linuxmodule/../include/click/string.hh"
++inline __attribute__((always_inline)) bool
++operator==(const String &a, const String &b)
++{
++  return a.equals(b.data(), b.length());
++}
++
++
++inline __attribute__((always_inline)) bool
++operator==(const char *a, const String &b)
++{
++  return b.equals(a, -1);
++}
++
++
++inline __attribute__((always_inline)) bool
++operator==(const String &a, const char *b)
++{
++  return a.equals(b, -1);
++}
++
++
++
++
++
++
++inline __attribute__((always_inline)) bool
++operator!=(const String &a, const String &b)
++{
++  return !a.equals(b.data(), b.length());
++}
++
++
++inline __attribute__((always_inline)) bool
++operator!=(const char *a, const String &b)
++{
++  return !b.equals(a, -1);
++}
++
++
++inline __attribute__((always_inline)) bool
++operator!=(const String &a, const char *b)
++{
++  return !a.equals(b, -1);
++}
++
++
++
++
++
++
++
++inline __attribute__((always_inline)) bool
++operator<(const String &a, const String &b)
++{
++  return a.compare(b.data(), b.length()) < 0;
++}
++
++
++
++
++
++
++
++inline __attribute__((always_inline)) bool
++operator<=(const String &a, const String &b)
++{
++  return a.compare(b.data(), b.length()) <= 0;
++}
++
++
++
++
++
++
++
++inline __attribute__((always_inline)) bool
++operator>(const String &a, const String &b)
++{
++  return a.compare(b.data(), b.length()) > 0;
++}
++
++
++
++
++
++
++
++inline __attribute__((always_inline)) bool
++operator>=(const String &a, const String &b)
++{
++  return a.compare(b.data(), b.length()) >= 0;
++}
++
++
++inline __attribute__((always_inline)) String &
++String::operator=(const String &str)
++{
++  if (&str != this) {
++    deref();
++    assign(str);
++  }
++  return *this;
++}
++
++
++inline __attribute__((always_inline)) String &
++String::operator=(const char *cstr)
++{
++  deref();
++  assign(cstr, -1);
++  return *this;
++}
++
++
++
++
++inline __attribute__((always_inline)) void
++String::append(const char *begin, const char *end)
++{
++  if (begin < end)
++    append(begin, end - begin);
++}
++
++
++
++
++inline __attribute__((always_inline)) String &
++String::operator+=(const String &str)
++{
++  append(str._data, str._length);
++  return *this;
++}
++
++
++
++
++inline __attribute__((always_inline)) String &
++String::operator+=(const char *cstr)
++{
++  append(cstr, -1);
++  return *this;
++}
++
++
++
++
++inline __attribute__((always_inline)) String &
++String::operator+=(char c)
++{
++  append(&c, 1);
++  return *this;
++}
++
++
++
++
++
++inline __attribute__((always_inline)) String
++operator+(String a, const String &b)
++{
++  a += b;
++  return a;
++}
++
++
++inline __attribute__((always_inline)) String
++operator+(String a, const char *b)
++{
++  a.append(b, -1);
++  return a;
++}
++
++
++inline __attribute__((always_inline)) String
++operator+(const char *a, const String &b)
++{
++  String s1(a);
++  s1 += b;
++  return s1;
++}
++
++
++
++
++
++inline __attribute__((always_inline)) String
++operator+(String a, char b)
++{
++  a.append(&b, 1);
++  return a;
++}
++
++
++inline __attribute__((always_inline)) bool
++String::out_of_memory() const
++{
++  return _data == &oom_string_data;
++}
++
++
++inline __attribute__((always_inline)) const String &
++String::out_of_memory_string()
++{
++  return *oom_string_p;
++}
++
++
++
++
++
++inline __attribute__((always_inline)) const char *
++String::out_of_memory_data()
++{
++  return &oom_string_data;
++}
++
++
++
++inline __attribute__((always_inline)) const char *rfind(const char *begin, const char *end, char c)
++{
++  for (const char *bb = end - 1; bb >= begin; bb--)
++    if (*bb == c)
++      return bb;
++  return end;
++}
++
++inline __attribute__((always_inline)) const char *find(const String &s, char c)
++{
++  return find(s.begin(), s.end(), c);
++}
++
++
++# 22 "/d/click/click-1.6.0-27/linuxmodule/../lib/string.cc" 2
++# 1 "/d/click/click-1.6.0-27/linuxmodule/../include/click/straccum.hh" 1
++
++
++
++
++
++
++# 1 "/d/kernels/linux-2.6.27.10-clickport/include/asm/string.h" 1
++# 8 "/d/click/click-1.6.0-27/linuxmodule/../include/click/straccum.hh" 2
++
++
++
++
++
++
++
++
++
++
++
++class StringAccum { public:
++
++
++    StringAccum()
++ : _s(0), _len(0), _cap(0) {
++    }
++
++    explicit inline __attribute__((always_inline)) StringAccum(int);
++
++
++    ~StringAccum() {
++ if (_cap >= 0)
++     (click_lfree((_s), (_cap)));
++    }
++
++
++
++
++
++
++
++    inline __attribute__((always_inline)) const char *data() const {
++ return reinterpret_cast<const char *>(_s);
++    }
++
++
++    inline __attribute__((always_inline)) char *data() {
++ return reinterpret_cast<char *>(_s);
++    }
++
++
++    int length() const {
++ return _len;
++    }
++
++
++
++
++
++
++    int capacity() const {
++ return _cap;
++    }
++
++    typedef int (StringAccum::*unspecified_bool_type)() const;
++
++
++
++
++    operator unspecified_bool_type() const {
++ return _len != 0 ? &StringAccum::capacity : 0;
++    }
++
++
++
++
++    bool operator!() const {
++ return _len == 0;
++    }
++
++
++    bool out_of_memory() const {
++ return _cap < 0;
++    }
++
++    const char *c_str();
++
++
++
++
++
++    char operator[](int i) const {
++ ;
++ return static_cast<char>(_s[i]);
++    }
++
++
++
++
++
++    char &operator[](int i) {
++ ;
++ return reinterpret_cast<char &>(_s[i]);
++    }
++
++
++
++    char back() const {
++ ;
++ return static_cast<char>(_s[_len - 1]);
++    }
++
++
++
++    char &back() {
++ ;
++ return reinterpret_cast<char &>(_s[_len - 1]);
++    }
++
++    inline __attribute__((always_inline)) void clear();
++
++    inline __attribute__((always_inline)) char *reserve(int n);
++    void set_length(int len);
++    void adjust_length(int delta);
++    inline __attribute__((always_inline)) char *extend(int nadjust, int nreserve = 0);
++    void pop_back(int n = 1);
++
++    inline __attribute__((always_inline)) void append(char c);
++    inline __attribute__((always_inline)) void append(unsigned char c);
++    void append_fill(int c, int len);
++
++    inline __attribute__((always_inline)) void append(const char *suffix, int len);
++    inline __attribute__((always_inline)) void append(const unsigned char *suffix, int len);
++    inline __attribute__((always_inline)) void append(const char *begin, const char *end);
++
++    void append_numeric(String::uint_large_t num, int base = 10, bool uppercase = true);
++    void append_numeric(String::int_large_t num, int base = 10, bool uppercase = true);
++
++    StringAccum &snprintf(int n, const char *format, ...);
++
++    String take_string();
++
++    void swap(StringAccum &o);
++
++
++
++    void forward(int delta) __attribute__((deprecated));
++
++  private:
++
++    unsigned char *_s;
++    int _len;
++    int _cap;
++
++    void make_out_of_memory();
++    inline __attribute__((always_inline)) void safe_append(const char *, int);
++    bool grow(int);
++
++    StringAccum(const StringAccum &);
++    StringAccum &operator=(const StringAccum &);
++
++    friend StringAccum &operator<<(StringAccum &, const char *);
++
++};
++
++inline __attribute__((always_inline)) StringAccum &operator<<(StringAccum &, char);
++inline __attribute__((always_inline)) StringAccum &operator<<(StringAccum &, unsigned char);
++inline __attribute__((always_inline)) StringAccum &operator<<(StringAccum &, const char *);
++inline __attribute__((always_inline)) StringAccum &operator<<(StringAccum &, const String &);
++inline __attribute__((always_inline)) StringAccum &operator<<(StringAccum &, const StringAccum &);
++
++
++
++
++inline __attribute__((always_inline)) StringAccum &operator<<(StringAccum &, bool);
++inline __attribute__((always_inline)) StringAccum &operator<<(StringAccum &, short);
++inline __attribute__((always_inline)) StringAccum &operator<<(StringAccum &, unsigned short);
++inline __attribute__((always_inline)) StringAccum &operator<<(StringAccum &, int);
++inline __attribute__((always_inline)) StringAccum &operator<<(StringAccum &, unsigned);
++StringAccum &operator<<(StringAccum &, long);
++StringAccum &operator<<(StringAccum &, unsigned long);
++
++inline __attribute__((always_inline)) StringAccum &operator<<(StringAccum &, long long);
++inline __attribute__((always_inline)) StringAccum &operator<<(StringAccum &, unsigned long long);
++# 192 "/d/click/click-1.6.0-27/linuxmodule/../include/click/straccum.hh"
++StringAccum &operator<<(StringAccum &, void *);
++# 201 "/d/click/click-1.6.0-27/linuxmodule/../include/click/straccum.hh"
++inline __attribute__((always_inline))
++StringAccum::StringAccum(int capacity)
++    : _len(0)
++{
++    ;
++    if (capacity) {
++ _s = (unsigned char *) (click_lalloc((capacity)));
++ _cap = (_s ? capacity : -1);
++    } else {
++ _s = 0;
++ _cap = 0;
++    }
++}
++# 225 "/d/click/click-1.6.0-27/linuxmodule/../include/click/straccum.hh"
++inline __attribute__((always_inline)) char *
++StringAccum::reserve(int n)
++{
++    ;
++    if (_len + n <= _cap || grow(_len + n))
++ return (char *)(_s + _len);
++    else
++ return 0;
++}
++# 244 "/d/click/click-1.6.0-27/linuxmodule/../include/click/straccum.hh"
++inline __attribute__((always_inline)) void
++StringAccum::adjust_length(int delta) {
++    ;
++    _len += delta;
++}
++
++
++
++
++inline __attribute__((always_inline)) void
++StringAccum::forward(int delta)
++{
++    adjust_length(delta);
++}
++# 266 "/d/click/click-1.6.0-27/linuxmodule/../include/click/straccum.hh"
++inline __attribute__((always_inline)) char *
++StringAccum::extend(int nadjust, int nreserve)
++{
++    ;
++    char *c = reserve(nadjust + nreserve);
++    if (c)
++ _len += nadjust;
++    return c;
++}
++
++
++
++
++
++
++inline __attribute__((always_inline)) void
++StringAccum::pop_back(int n) {
++    ;
++    _len -= n;
++}
++
++
++
++
++
++inline __attribute__((always_inline)) void
++StringAccum::set_length(int len) {
++    ;
++    _len = len;
++}
++
++
++
++inline __attribute__((always_inline)) void
++StringAccum::append(char c)
++{
++    if (_len < _cap || grow(_len))
++ _s[_len++] = c;
++}
++
++
++inline __attribute__((always_inline)) void
++StringAccum::append(unsigned char c)
++{
++    append(static_cast<char>(c));
++}
++
++inline __attribute__((always_inline)) void
++StringAccum::safe_append(const char *s, int len)
++{
++    if (char *x = extend(len))
++ (__builtin_constant_p((len)) ? __constant_memcpy((x), (s), (len)) : __memcpy((x), (s), (len)));
++}
++
++
++
++
++
++
++inline __attribute__((always_inline)) void
++StringAccum::append(const char *suffix, int len)
++{
++    if (len < 0)
++ len = strlen(suffix);
++    if (len == 0 && suffix == String::out_of_memory_data())
++ make_out_of_memory();
++    safe_append(suffix, len);
++}
++
++
++inline __attribute__((always_inline)) void
++StringAccum::append(const unsigned char *suffix, int len)
++{
++    append(reinterpret_cast<const char *>(suffix), len);
++}
++
++
++
++
++inline __attribute__((always_inline)) void
++StringAccum::append(const char *begin, const char *end)
++{
++    if (begin < end)
++ safe_append(begin, end - begin);
++    else if (begin == String::out_of_memory_data())
++ make_out_of_memory();
++}
++
++
++
++
++
++inline __attribute__((always_inline)) void
++StringAccum::clear()
++{
++    if (_cap < 0)
++ _cap = 0, _s = 0;
++    _len = 0;
++}
++
++
++
++
++
++inline __attribute__((always_inline)) StringAccum &
++operator<<(StringAccum &sa, char c)
++{
++    sa.append(c);
++    return sa;
++}
++
++
++
++
++
++inline __attribute__((always_inline)) StringAccum &
++operator<<(StringAccum &sa, unsigned char c)
++{
++    sa.append(c);
++    return sa;
++}
++
++
++
++
++
++inline __attribute__((always_inline)) StringAccum &
++operator<<(StringAccum &sa, const char *cstr)
++{
++    sa.append(cstr, -1);
++    return sa;
++}
++
++
++
++
++inline __attribute__((always_inline)) StringAccum &
++operator<<(StringAccum &sa, bool b)
++{
++    return sa << (b ? "true" : "false");
++}
++
++
++
++
++inline __attribute__((always_inline)) StringAccum &
++operator<<(StringAccum &sa, short i)
++{
++    return sa << static_cast<long>(i);
++}
++
++
++
++
++inline __attribute__((always_inline)) StringAccum &
++operator<<(StringAccum &sa, unsigned short u)
++{
++    return sa << static_cast<unsigned long>(u);
++}
++
++
++
++
++inline __attribute__((always_inline)) StringAccum &
++operator<<(StringAccum &sa, int i)
++{
++    return sa << static_cast<long>(i);
++}
++
++
++
++
++inline __attribute__((always_inline)) StringAccum &
++operator<<(StringAccum &sa, unsigned u)
++{
++    return sa << static_cast<unsigned long>(u);
++}
++
++
++
++
++
++inline __attribute__((always_inline)) StringAccum &
++operator<<(StringAccum &sa, long long q)
++{
++    sa.append_numeric(static_cast<String::int_large_t>(q));
++    return sa;
++}
++
++
++
++
++inline __attribute__((always_inline)) StringAccum &
++operator<<(StringAccum &sa, unsigned long long q)
++{
++    sa.append_numeric(static_cast<String::uint_large_t>(q));
++    return sa;
++}
++# 491 "/d/click/click-1.6.0-27/linuxmodule/../include/click/straccum.hh"
++StringAccum &
++operator<<(StringAccum &sa, const String &str)
++{
++    sa.append(str.data(), str.length());
++    return sa;
++}
++# 510 "/d/click/click-1.6.0-27/linuxmodule/../include/click/straccum.hh"
++inline __attribute__((always_inline)) StringAccum &
++operator<<(StringAccum &sa, const StringAccum &sb)
++{
++    sa.append(sb.data(), sb.length());
++    return sa;
++}
++
++
++# 23 "/d/click/click-1.6.0-27/linuxmodule/../lib/string.cc" 2
++
++
++# 67 "/d/click/click-1.6.0-27/linuxmodule/../lib/string.cc"
++String::Memo *String::null_memo = 0;
++String::Memo *String::permanent_memo = 0;
++String::Memo *String::oom_memo = 0;
++String *String::null_string_p = 0;
++String *String::oom_string_p = 0;
++const char String::oom_string_data = 0;
++
++
++inline __attribute__((always_inline))
++String::Memo::Memo()
++  : _capacity(0), _real_data("")
++{
++    _refcount = 0;
++    _dirty = 0;
++}
++
++inline __attribute__((always_inline))
++String::Memo::Memo(char *data, int dirty, int capacity)
++  : _capacity(capacity), _real_data(data)
++{
++    _refcount = 0;
++    _dirty = dirty;
++}
++
++String::Memo::Memo(int dirty, int capacity)
++  : _capacity(capacity), _real_data((char *) (click_lalloc((capacity))))
++{
++    ;
++    _refcount = 1;
++    _dirty = dirty;
++}
++
++String::Memo::~Memo()
++{
++  if (_capacity) {
++    ;
++    (click_lfree((_real_data), (_capacity)));
++  }
++}
++
++
++
++
++
++String::String(int i)
++{
++  char buf[128];
++  sprintf(buf, "%d", i);
++  assign(buf, -1);
++}
++
++
++
++String::String(unsigned u)
++{
++  char buf[128];
++  sprintf(buf, "%u", u);
++  assign(buf, -1);
++}
++
++
++
++String::String(long i)
++{
++  char buf[128];
++  sprintf(buf, "%ld", i);
++  assign(buf, -1);
++}
++
++
++
++String::String(unsigned long u)
++{
++  char buf[128];
++  sprintf(buf, "%lu", u);
++  assign(buf, -1);
++}
++
++
++
++
++
++
++
++String::String(long long q)
++{
++  StringAccum sa;
++  sa << q;
++  assign(sa.data(), sa.length());
++}
++
++
++
++String::String(unsigned long long q)
++{
++  StringAccum sa;
++  sa << q;
++  assign(sa.data(), sa.length());
++}
++# 202 "/d/click/click-1.6.0-27/linuxmodule/../lib/string.cc"
++String
++String::claim_string(char *str, int len, int capacity)
++{
++  ;
++  Memo *new_memo = new Memo(str, len, capacity);
++  if (new_memo)
++    return String(str, len, new_memo);
++  else
++    return String(&oom_string_data, 0, oom_memo);
++}
++# 220 "/d/click/click-1.6.0-27/linuxmodule/../lib/string.cc"
++String
++String::stable_string(const char *s, int len)
++{
++  if (len < 0)
++    len = (s ? strlen(s) : 0);
++  return String(s, len, permanent_memo);
++}
++
++
++String
++String::garbage_string(int len)
++{
++  String s;
++  s.append_garbage(len);
++  return s;
++}
++
++
++
++
++
++
++String
++String::numeric_string(int_large_t num, int base, bool uppercase)
++{
++    StringAccum sa;
++    sa.append_numeric(num, base, uppercase);
++    return sa.take_string();
++}
++
++
++
++
++
++
++String
++String::numeric_string(uint_large_t num, int base, bool uppercase)
++{
++    StringAccum sa;
++    sa.append_numeric(num, base, uppercase);
++    return sa.take_string();
++}
++
++void
++String::make_out_of_memory()
++{
++  if (_memo)
++    deref();
++  _memo = oom_memo;
++  _memo->_refcount++;
++  _data = _memo->_real_data;
++  _length = 0;
++}
++
++void
++String::assign(const char *str, int len)
++{
++  if (!str) {
++    ;
++    len = 0;
++  } else if (len < 0)
++    len = strlen(str);
++
++  if (len == 0) {
++    _memo = (str == &oom_string_data ? oom_memo : null_memo);
++    _memo->_refcount++;
++
++  } else {
++
++    int capacity = (len + 16) & ~15;
++    _memo = new Memo(len, capacity);
++    if (!_memo || !_memo->_real_data) {
++      make_out_of_memory();
++      return;
++    }
++    (__builtin_constant_p((len)) ? __constant_memcpy((_memo->_real_data), (str), (len)) : __memcpy((_memo->_real_data), (str), (len)));
++  }
++
++  _data = _memo->_real_data;
++  _length = len;
++}
++
++
++
++
++
++
++char *
++String::append_garbage(int len)
++{
++
++    if (len <= 0 || _memo == oom_memo)
++ return 0;
++
++
++
++
++    uint32_t dirty = _memo->_dirty;
++    if (_memo->_capacity > dirty + len) {
++ char *real_dirty = _memo->_real_data + dirty;
++ if (real_dirty == _data + _length
++     && _memo->_dirty.compare_and_swap(dirty, dirty + len)) {
++     _length += len;
++     ;
++     return real_dirty;
++ }
++    }
++
++
++
++
++
++    int new_capacity = (_length + len < 1024 ? (_length + 16) & ~15 : 1024);
++    while (new_capacity < _length + len)
++ new_capacity *= 2;
++# 343 "/d/click/click-1.6.0-27/linuxmodule/../lib/string.cc"
++    Memo *new_memo = new Memo(_length + len, new_capacity);
++    if (!new_memo || !new_memo->_real_data) {
++ delete new_memo;
++ make_out_of_memory();
++ return 0;
++    }
++
++    char *new_data = new_memo->_real_data;
++    (__builtin_constant_p((_length)) ? __constant_memcpy((new_data), (_data), (_length)) : __memcpy((new_data), (_data), (_length)));
++
++    deref();
++    _data = new_data;
++    new_data += _length;
++    _length += len;
++    _memo = new_memo;
++    return new_data;
++}
++
++
++
++
++
++
++
++void
++String::append(const char *suffix, int len)
++{
++    if (!suffix) {
++ ;
++ len = 0;
++    } else if (len < 0)
++ len = strlen(suffix);
++
++    if (suffix == &oom_string_data)
++
++
++ make_out_of_memory();
++    else if (char *space = append_garbage(len))
++ (__builtin_constant_p((len)) ? __constant_memcpy((space), (suffix), (len)) : __memcpy((space), (suffix), (len)));
++}
++
++
++void
++String::append_fill(int c, int len)
++{
++    ;
++    if (char *space = append_garbage(len))
++ (__builtin_constant_p(c) ? (__builtin_constant_p((len)) ? __constant_c_and_count_memset(((space)), ((0x01010101UL * (unsigned char)(c))), ((len))) : __constant_c_memset(((space)), ((0x01010101UL * (unsigned char)(c))), ((len)))) : (__builtin_constant_p((len)) ? __memset_generic((((space))), (((c))), (((len)))) : __memset_generic(((space)), ((c)), ((len)))));
++}
++
++
++
++char *
++String::mutable_data()
++{
++
++
++  if (_memo->_capacity && _memo->_refcount == 1)
++    return const_cast<char *>(_data);
++
++
++
++  ;
++  deref();
++  assign(_data, _length);
++  return const_cast<char *>(_data);
++}
++
++
++
++
++char *
++String::mutable_c_str()
++{
++  (void) mutable_data();
++  (void) c_str();
++  return const_cast<char *>(_data);
++}
++
++
++
++
++
++
++
++const char *
++String::c_str() const
++{
++
++
++
++
++  if (!_memo->_capacity && _data[_length] == '\0')
++    return _data;
++
++
++
++  ;
++
++
++
++  uint32_t dirty = _memo->_dirty;
++  if (_memo->_real_data + dirty == _data + _length) {
++      if (_memo->_capacity > dirty
++   && _memo->_dirty.compare_and_swap(dirty, dirty + 1)) {
++
++
++   char *real_data = const_cast<char *>(_data);
++   real_data[_length] = '\0';
++   return _data;
++      }
++
++  } else {
++
++
++    if (_data[_length] == '\0')
++      return _data;
++  }
++
++
++  {
++    String s(_data, _length);
++    deref();
++    assign(s);
++  }
++
++  char *real_data = const_cast<char *>(_data);
++  real_data[_length] = '\0';
++  _memo->_dirty++;
++  return _data;
++}
++# 487 "/d/click/click-1.6.0-27/linuxmodule/../lib/string.cc"
++String
++String::substring(int pos, int len) const
++{
++    if (pos < 0)
++ pos += _length;
++    if (len < 0)
++ len = _length - pos + len;
++    if (pos + len > _length)
++ len = _length - pos;
++
++    if (pos < 0 || len <= 0)
++ return String();
++    else
++ return String(_data + pos, len, _memo);
++}
++# 511 "/d/click/click-1.6.0-27/linuxmodule/../lib/string.cc"
++int
++String::find_left(char c, int start) const
++{
++    if (start < 0)
++ start = 0;
++    for (int i = start; i < _length; i++)
++ if (_data[i] == c)
++     return i;
++    return -1;
++}
++# 530 "/d/click/click-1.6.0-27/linuxmodule/../lib/string.cc"
++int
++String::find_left(const String &str, int start) const
++{
++    if (start < 0)
++ start = 0;
++    if (start >= length())
++ return -1;
++    if (!str.length())
++ return 0;
++    int first_c = (unsigned char)str[0];
++    int pos = start, max_pos = length() - str.length();
++    for (pos = find_left(first_c, pos); pos >= 0 && pos <= max_pos;
++  pos = find_left(first_c, pos + 1))
++ if (!__builtin_memcmp(_data + pos, str._data, str.length()))
++     return pos;
++    return -1;
++}
++# 557 "/d/click/click-1.6.0-27/linuxmodule/../lib/string.cc"
++int
++String::find_right(char c, int start) const
++{
++    if (start >= _length)
++ start = _length - 1;
++    for (int i = start; i >= 0; i--)
++ if (_data[i] == c)
++     return i;
++    return -1;
++}
++
++static String
++hard_lower(const String &s, int pos)
++{
++    String new_s(s.data(), s.length());
++    char *x = const_cast<char *>(new_s.data());
++    int len = s.length();
++    for (; pos < len; pos++)
++ x[pos] = __tolower(x[pos]);
++    return new_s;
++}
++
++
++
++
++
++String
++String::lower() const
++{
++
++    for (int i = 0; i < _length; i++)
++ if (_data[i] >= 'A' && _data[i] <= 'Z')
++     return hard_lower(*this, i);
++    return *this;
++}
++
++static String
++hard_upper(const String &s, int pos)
++{
++    String new_s(s.data(), s.length());
++    char *x = const_cast<char *>(new_s.data());
++    int len = s.length();
++    for (; pos < len; pos++)
++ x[pos] = __toupper(x[pos]);
++    return new_s;
++}
++
++
++
++
++
++String
++String::upper() const
++{
++
++    for (int i = 0; i < _length; i++)
++ if (_data[i] >= 'a' && _data[i] <= 'z')
++     return hard_upper(*this, i);
++    return *this;
++}
++
++static String
++hard_printable(const String &s, int pos)
++{
++    StringAccum sa(s.length() * 2);
++    sa.append(s.data(), pos);
++    const unsigned char *x = reinterpret_cast<const unsigned char *>(s.data());
++    int len = s.length();
++    for (; pos < len; pos++) {
++ if (x[pos] >= 32 && x[pos] < 127)
++     sa << x[pos];
++ else if (x[pos] < 32)
++     sa << '^' << (unsigned char)(x[pos] + 64);
++ else if (char *buf = sa.extend(4, 1))
++     sprintf(buf, "\\%03o", x[pos]);
++    }
++    return sa.take_string();
++}
++
++
++
++
++
++
++String
++String::printable() const
++{
++
++    for (int i = 0; i < _length; i++)
++ if (_data[i] < 32 || _data[i] > 126)
++     return hard_printable(*this, i);
++    return *this;
++}
++
++
++String
++String::trim_space() const
++{
++    for (int i = _length - 1; i >= 0; i--)
++ if (!(((_ctype[(int)(unsigned char)(_data[i])])&(0x20)) != 0))
++     return substring(0, i + 1);
++
++    return (_length ? String() : *this);
++}
++
++
++
++
++String
++String::quoted_hex() const
++{
++    static const char hex_digits[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
++    StringAccum sa;
++    char *buf;
++    if (out_of_memory() || !(buf = sa.extend(length() * 2 + 3)))
++ return out_of_memory_string();
++    *buf++ = '\\';
++    *buf++ = '<';
++    const uint8_t *e = reinterpret_cast<const uint8_t*>(end());
++    for (const uint8_t *x = reinterpret_cast<const uint8_t*>(begin()); x < e; x++) {
++ *buf++ = hex_digits[(*x >> 4) & 0xF];
++ *buf++ = hex_digits[*x & 0xF];
++    }
++    *buf++ = '>';
++    return sa.take_string();
++}
++
++
++
++
++
++
++size_t
++String::hashcode() const
++{
++    int l = length();
++    const char *d = data();
++    if (!l)
++ return 0;
++    else if (l == 1)
++ return d[0] | (d[0] << 8);
++    else if (l < 4)
++ return d[0] + (d[1] << 3) + (l << 12);
++    else
++ return d[0] + (d[1] << 8) + (d[2] << 16) + (d[3] << 24)
++     + (l << 12) + (d[l-1] << 10);
++}
++# 713 "/d/click/click-1.6.0-27/linuxmodule/../lib/string.cc"
++bool
++String::equals(const char *s, int len) const
++{
++
++
++
++
++    if (len < 0)
++ len = strlen(s);
++    if (_length != len)
++ return false;
++    else if (_data == s)
++ return true;
++    else if (len == 0)
++ return (s != &oom_string_data && _memo != oom_memo);
++    else
++ return __builtin_memcmp(_data, s, len) == 0;
++}
++# 740 "/d/click/click-1.6.0-27/linuxmodule/../lib/string.cc"
++int
++String::compare(const char *s, int len) const
++{
++    if (len < 0)
++ len = strlen(s);
++    if (_data == s)
++ return _length - len;
++    else if (_memo == oom_memo)
++ return 1;
++    else if (s == &oom_string_data)
++ return -1;
++    else if (_length == len)
++ return __builtin_memcmp(_data, s, len);
++    else if (_length < len) {
++ int v = __builtin_memcmp(_data, s, _length);
++ return (v ? v : -1);
++    } else {
++ int v = __builtin_memcmp(_data, s, len);
++ return (v ? v : 1);
++    }
++}
++# 775 "/d/click/click-1.6.0-27/linuxmodule/../lib/string.cc"
++String::Initializer::Initializer()
++{
++    String::static_initialize();
++}
++# 789 "/d/click/click-1.6.0-27/linuxmodule/../lib/string.cc"
++void
++String::static_initialize()
++{
++
++    if (!null_memo) {
++
++
++
++ null_memo = new Memo;
++ null_memo->_refcount++;
++ permanent_memo = new Memo;
++ permanent_memo->_refcount++;
++
++
++ oom_memo = new Memo;
++ oom_memo->_refcount++;
++ oom_memo->_real_data = const_cast<char*>(&oom_string_data);
++ null_string_p = new String;
++ oom_string_p = new String(&oom_string_data, 0, oom_memo);
++
++
++
++    }
++}
++
++
++
++
++
++void
++String::static_cleanup()
++{
++    if (null_string_p) {
++ delete null_string_p;
++ null_string_p = 0;
++ delete oom_string_p;
++ oom_string_p = 0;
++ if (oom_memo->_refcount.dec_and_test())
++     delete oom_memo;
++ if (permanent_memo->_refcount.dec_and_test())
++     delete permanent_memo;
++ if (null_memo->_refcount.dec_and_test())
++     delete null_memo;
++ null_memo = permanent_memo = oom_memo = 0;
++    }
++}
++
++
+diff -Nurb click-1.6.0/ns/Makefile click-1.6.0-27/ns/Makefile
+--- click-1.6.0/ns/Makefile    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/ns/Makefile 2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,145 @@
++## The following line supports click-mkmindriver and should not be changed.
++## Click ns driver Makefile ##
++SHELL = /bin/sh
++
++top_srcdir := ..
++srcdir := .
++top_builddir := ..
++subdir := ns
++conf_auxdir := $(top_srcdir)
++
++prefix = /d/click/click-1.6.0-27/inst
++exec_prefix = /d/click/click-1.6.0-27/inst
++bindir = /d/click/click-1.6.0-27/inst/bin
++sbindir = /d/click/click-1.6.0-27/inst/sbin
++libdir = /d/click/click-1.6.0-27/inst/lib
++
++VPATH = .:$(top_srcdir)/lib:$(top_srcdir)/$(subdir):$(top_srcdir)/elements/standard
++
++CC = gcc -W -Wall
++CPP = gcc -W -Wall -E
++CXX = g++ -W -Wall 
++CXXCPP = g++ -W -Wall  -E
++AR_CREATE = ar cru
++RANLIB = ranlib
++INSTALL = /usr/bin/install -c
++mkinstalldirs = $(conf_auxdir)/mkinstalldirs
++
++ifeq ($(V),1)
++ccompile = $(COMPILE) $(1)
++cxxcompile = $(CXXCOMPILE) $(1)
++else
++ccompile = @/bin/echo ' ' $(2) $< && $(COMPILE) $(1)
++cxxcompile = @/bin/echo ' ' $(2) $< && $(CXXCOMPILE) $(1)
++endif
++
++.SUFFIXES:
++.SUFFIXES: .S .c .cc .o .s .ii
++
++.c.o:
++      $(call ccompile,-c $< -o $@,CC)
++.s.o:
++      $(call ccompile,-c $< -o $@,ASM)
++.S.o:
++      $(call ccompile,-c $< -o $@,ASM)
++.cc.o:
++      $(call cxxcompile,-c $< -o $@,CXX)
++.cc.s:
++      $(call cxxcompile,-S $< -o $@,CXX -S)
++.cc.ii:
++      $(call cxxcompile,-E $< > $@,CXXCPP)
++
++
++GENERIC_OBJS = string.o straccum.o nameinfo.o \
++      bitvector.o vectorv.o templatei.o bighashmap_arena.o \
++      ipaddress.o ipflowid.o etheraddress.o \
++      packet.o \
++      error.o timestamp.o glue.o task.o timer.o atomic.o gaprate.o \
++      element.o \
++      confparse.o variableenv.o lexer.o elemfilter.o \
++      routerthread.o router.o master.o handlercall.o notifier.o \
++      integers.o md5.o crc32.o in_cksum.o iptable.o \
++      archive.o userutils.o driver.o \
++      $(EXTRA_DRIVER_OBJS)
++
++EXTRA_DRIVER_OBJS = 
++
++LIBOBJS = $(GENERIC_OBJS) $(STD_ELEMENT_OBJS) clp.o
++STD_ELEMENT_OBJS = addressinfo.o alignmentinfo.o \
++      errorelement.o portinfo.o scheduleinfo.o
++OBJS = $(ELEMENT_OBJS) $(ELEMENTSCONF).o nsclick.o
++
++CPPFLAGS =  -DCLICK_NS
++CFLAGS = -g -O2 -fPIC
++CXXFLAGS = -g -O2 -fPIC
++DEPCFLAGS = -MD
++
++DEFS = -DHAVE_CONFIG_H
++INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
++      -I$(srcdir) -I$(top_srcdir) 
++LDFLAGS = -shared
++LIBS =  `$(top_builddir)/click-compile --otherlibs` $(ELEMENT_LIBS)
++
++CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) $(DEPCFLAGS)
++CXXLD = $(CXX)
++CXXLINK = $(CXXLD) $(CXXFLAGS) $(LDFLAGS) -o $@
++COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEPCFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(CFLAGS) $(LDFLAGS) -o $@
++
++ifndef MINDRIVER
++ELEMENTSCONF = elements
++INSTALLLIBS = libnsclick.so
++else
++ELEMENTSCONF = elements_$(MINDRIVER)
++INSTALLLIBS = libns$(MINDRIVER)click.so
++endif
++
++all: $(INSTALLLIBS)
++
++ifneq ($(MAKECMDGOALS),clean)
++-include $(ELEMENTSCONF).mk
++endif
++
++libnsclick.so: Makefile $(LIBOBJS) $(OBJS)
++      $(CXXLINK) -shared $(LIBOBJS) $(OBJS)
++libnsclick.a: Makefile $(LIBOBJS) $(OBJS)
++      $(AR_CREATE) libnsclick.a $(LIBOBJS) $(OBJS)
++      $(RANLIB) libnsclick.a
++
++nsclick-test: libnsclick.a nsclick-test.o
++      $(CXXLD) $(CXXFLAGS)  -o $@ nsclick-test.o libnsclick.a $(LIBS)
++
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++      cd $(top_builddir) \
++        && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
++
++elemlist:
++      @rm -f elements.conf
++      @$(MAKE) elements.conf
++elements.conf: $(top_builddir)/config.status $(top_builddir)/click-buildtool
++      echo "ns userlevel  app aqm ethernet icmp ip standard tcpudp" | $(top_builddir)/click-buildtool findelem -r ns -p $(top_srcdir) > elements.conf
++$(ELEMENTSCONF).mk: $(ELEMENTSCONF).conf $(top_builddir)/click-buildtool
++      $(top_builddir)/click-buildtool elem2make -x "$(STD_ELEMENT_OBJS)" < $(ELEMENTSCONF).conf > $(ELEMENTSCONF).mk
++$(ELEMENTSCONF).cc: $(ELEMENTSCONF).conf $(top_builddir)/click-buildtool
++      $(top_builddir)/click-buildtool elem2export < $(ELEMENTSCONF).conf > $(ELEMENTSCONF).cc
++      @rm -f $(ELEMENTSCONF).d
++
++DEPFILES := $(wildcard *.d)
++ifneq ($(DEPFILES),)
++include $(DEPFILES)
++endif
++
++install: libnsclick.so
++      $(mkinstalldirs) $(DESTDIR)$(libdir)
++      $(INSTALL) libnsclick.so $(DESTDIR)$(libdir)/libnsclick.so
++uninstall:
++      /bin/rm -f $(DESTDIR)$(libdir)/libnsclick.so
++
++clean:
++      rm -f *.d *.o $(ELEMENTSCONF).mk $(ELEMENTSCONF).cc elements.conf libnsclick.a \
++      libnsclick.so
++distclean: clean
++      -rm -f Makefile
++
++.PHONY: all clean distclean elemlist install uninstall
+diff -Nurb click-1.6.0/stamp-h click-1.6.0-27/stamp-h
+--- click-1.6.0/stamp-h        1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/stamp-h     2009-01-28 16:15:44.000000000 -0500
+@@ -0,0 +1 @@
++
+diff -Nurb click-1.6.0/tools/Makefile click-1.6.0-27/tools/Makefile
+--- click-1.6.0/tools/Makefile 1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/tools/Makefile      2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,79 @@
++# Warning: this file must be usable by regular make
++# (unlike the Makefiles in subdirectories).
++
++SHELL = /bin/sh
++
++
++top_srcdir = ..
++srcdir = .
++top_builddir = ..
++subdir = tools
++conf_auxdir = $(top_srcdir)
++
++prefix = /d/click/click-1.6.0-27/inst
++bindir = /d/click/click-1.6.0-27/inst/bin
++INSTALL = /usr/bin/install -c
++mkinstalldirs = $(conf_auxdir)/mkinstalldirs
++
++TOOLDIRS =  click-align click-check click-combine click-devirtualize click-fastclassifier click-flatten click-mkmindriver click-pretty click-undead click-xform click2xml click-install
++TARGETS =  click-align click-check click-combine click-devirtualize click-fastclassifier click-flatten click-mkmindriver click-pretty click-undead click-xform click2xml click-install
++
++all: $(TARGETS)
++
++lib: always Makefile
++      @cd lib && $(MAKE) all
++click-align: lib Makefile
++      @cd click-align && $(MAKE) all-local
++click-check: lib Makefile
++      @cd click-check && $(MAKE) all-local
++click-combine: lib Makefile
++      @cd click-combine && $(MAKE) all-local
++click-devirtualize: lib Makefile
++      @cd click-devirtualize && $(MAKE) all-local
++click-fastclassifier: lib Makefile
++      @cd click-fastclassifier && $(MAKE) all-local
++click-flatten: lib Makefile
++      @cd click-flatten && $(MAKE) all-local
++click-install: lib Makefile
++      @cd click-install && $(MAKE) all-local
++click-ipopt: lib Makefile
++      @cd click-ipopt && $(MAKE) all-local
++click-mkmindriver: lib Makefile
++      @cd click-mkmindriver && $(MAKE) all-local
++click-pretty: lib Makefile
++      @cd click-pretty && $(MAKE) all-local
++click-undead: lib Makefile
++      @cd click-undead && $(MAKE) all-local
++click-xform: lib Makefile
++      @cd click-xform && $(MAKE) all-local
++click2xml: lib Makefile
++      @cd click2xml && $(MAKE) all-local
++udpgen: Makefile
++      @cd udpgen && $(MAKE) all
++always:
++      @:
++
++Makefile: $(srcdir)/Makefile.in
++      cd $(top_builddir) \
++        && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
++
++clean:
++      @-for d in lib $(TOOLDIRS); do (cd $$d && $(MAKE) clean); done
++distclean:
++      @-for d in lib $(TOOLDIRS); do (cd $$d && $(MAKE) distclean); done
++      -rm -f Makefile
++
++install: install-subdirs
++install-subdirs: lib
++      @for d in lib $(TARGETS); do (cd $$d && $(MAKE) install-local) || exit 1; done
++install-include:
++      @cd lib && $(MAKE) install-include
++install-lib:
++      @cd lib && $(MAKE) install-lib
++install-man:
++      :
++uninstall:
++      @for d in lib $(TARGETS); do (cd $$d && $(MAKE) uninstall) || exit 1; done
++
++
++.PHONY: all always lib $(TOOLDIRS) clean distclean distdir install install-subdirs install-include install-lib uninstall
+diff -Nurb click-1.6.0/tools/click-align/Makefile click-1.6.0-27/tools/click-align/Makefile
+--- click-1.6.0/tools/click-align/Makefile     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/tools/click-align/Makefile  2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,94 @@
++SHELL = /bin/sh
++
++
++top_srcdir = ../..
++srcdir = .
++top_builddir = ../..
++subdir = tools/click-align
++conf_auxdir = $(top_srcdir)
++
++prefix = /d/click/click-1.6.0-27/inst
++bindir = /d/click/click-1.6.0-27/inst/bin
++HOST_TOOLS = host
++
++VPATH = .:$(top_srcdir)/$(subdir):$(top_srcdir)/tools/lib:$(top_srcdir)/include
++
++ifeq ($(HOST_TOOLS),build)
++CC = 
++CXX = 
++LIBCLICKTOOL = libclicktool_build.a
++DL_LIBS = 
++else
++CC = gcc -W -Wall
++CXX = g++ -W -Wall 
++LIBCLICKTOOL = libclicktool.a
++DL_LIBS = -ldl
++endif
++INSTALL = /usr/bin/install -c
++mkinstalldirs = $(conf_auxdir)/mkinstalldirs
++
++.SUFFIXES:
++.SUFFIXES: .S .c .cc .o .s
++
++.c.o:
++      $(COMPILE) -c $<
++.s.o:
++      $(COMPILE) -c $<
++.S.o:
++      $(COMPILE) -c $<
++.cc.o:
++      $(CXXCOMPILE) -c $<
++
++
++OBJS = alignment.o alignclass.o click-align.o
++
++CPPFLAGS =  -DCLICK_TOOL
++CFLAGS = -g -O2
++CXXFLAGS = -g -O2
++DEPCFLAGS = -MD
++
++DEFS = -DHAVE_CONFIG_H
++INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
++      -I$(top_srcdir)/tools/lib -I$(srcdir)
++LDFLAGS = 
++LIBS =  $(DL_LIBS)
++
++CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) $(DEPCFLAGS)
++CXXLD = $(CXX)
++CXXLINK = $(CXXLD) $(CXXFLAGS) $(LDFLAGS) -o $@
++COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEPCFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(CFLAGS) $(LDFLAGS) -o $@
++
++all: $(LIBCLICKTOOL) all-local
++all-local: click-align
++
++$(LIBCLICKTOOL):
++      @cd ../lib; $(MAKE) $(LIBCLICKTOOL)
++
++click-align: Makefile $(OBJS) ../lib/$(LIBCLICKTOOL)
++      $(CXXLINK) -rdynamic $(OBJS) ../lib/$(LIBCLICKTOOL) $(LIBS)
++
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++      cd $(top_builddir) \
++        && CONFIG_FILES=$(subdir)/$@ CONFIG_ELEMLISTS=no CONFIG_HEADERS= $(SHELL) ./config.status
++
++DEPFILES := $(wildcard *.d)
++ifneq ($(DEPFILES),)
++include $(DEPFILES)
++endif
++
++install: $(LIBCLICKTOOL) install-local
++install-local: all-local
++      $(mkinstalldirs) $(DESTDIR)$(bindir)
++      $(INSTALL) click-align $(DESTDIR)$(bindir)/click-align
++uninstall:
++      /bin/rm -f $(DESTDIR)$(bindir)/click-align
++
++clean:
++      rm -f *.d *.o click-align
++distclean: clean
++      -rm -f Makefile
++
++.PHONY: all all-local clean distclean \
++      install install-local uninstall $(LIBCLICKTOOL)
+diff -Nurb click-1.6.0/tools/click-check/Makefile click-1.6.0-27/tools/click-check/Makefile
+--- click-1.6.0/tools/click-check/Makefile     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/tools/click-check/Makefile  2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,94 @@
++SHELL = /bin/sh
++
++
++top_srcdir = ../..
++srcdir = .
++top_builddir = ../..
++subdir = tools/click-check
++conf_auxdir = $(top_srcdir)
++
++prefix = /d/click/click-1.6.0-27/inst
++bindir = /d/click/click-1.6.0-27/inst/bin
++HOST_TOOLS = host
++
++VPATH = .:$(top_srcdir)/$(subdir):$(top_srcdir)/tools/lib:$(top_srcdir)/include
++
++ifeq ($(HOST_TOOLS),build)
++CC = 
++CXX = 
++LIBCLICKTOOL = libclicktool_build.a
++DL_LIBS = 
++else
++CC = gcc -W -Wall
++CXX = g++ -W -Wall 
++LIBCLICKTOOL = libclicktool.a
++DL_LIBS = -ldl
++endif
++INSTALL = /usr/bin/install -c
++mkinstalldirs = $(conf_auxdir)/mkinstalldirs
++
++.SUFFIXES:
++.SUFFIXES: .S .c .cc .o .s
++
++.c.o:
++      $(COMPILE) -c $<
++.s.o:
++      $(COMPILE) -c $<
++.S.o:
++      $(COMPILE) -c $<
++.cc.o:
++      $(CXXCOMPILE) -c $<
++
++
++OBJS = click-check.o
++
++CPPFLAGS =  -DCLICK_TOOL
++CFLAGS = -g -O2
++CXXFLAGS = -g -O2
++DEPCFLAGS = -MD
++
++DEFS = -DHAVE_CONFIG_H
++INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
++      -I$(top_srcdir)/tools/lib -I$(srcdir)
++LDFLAGS = 
++LIBS =  $(DL_LIBS)
++
++CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) $(DEPCFLAGS)
++CXXLD = $(CXX)
++CXXLINK = $(CXXLD) $(CXXFLAGS) $(LDFLAGS) -o $@
++COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEPCFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(CFLAGS) $(LDFLAGS) -o $@
++
++all: $(LIBCLICKTOOL) all-local
++all-local: click-check
++
++$(LIBCLICKTOOL):
++      @cd ../lib; $(MAKE) $(LIBCLICKTOOL)
++
++click-check: Makefile $(OBJS) ../lib/$(LIBCLICKTOOL)
++      $(CXXLINK) -rdynamic $(OBJS) ../lib/$(LIBCLICKTOOL) $(LIBS)
++
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++      cd $(top_builddir) \
++        && CONFIG_FILES=$(subdir)/$@ CONFIG_ELEMLISTS=no CONFIG_HEADERS= $(SHELL) ./config.status
++
++DEPFILES := $(wildcard *.d)
++ifneq ($(DEPFILES),)
++include $(DEPFILES)
++endif
++
++install: $(LIBCLICKTOOL) install-local
++install-local: all-local
++      $(mkinstalldirs) $(DESTDIR)$(bindir)
++      $(INSTALL) click-check $(DESTDIR)$(bindir)/click-check
++uninstall:
++      /bin/rm -f $(DESTDIR)$(bindir)/click-check
++
++clean:
++      rm -f *.d *.o click-check
++distclean: clean
++      -rm -f Makefile
++
++.PHONY: all all-local clean distclean \
++      install install-local uninstall $(LIBCLICKTOOL)
+diff -Nurb click-1.6.0/tools/click-combine/Makefile click-1.6.0-27/tools/click-combine/Makefile
+--- click-1.6.0/tools/click-combine/Makefile   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/tools/click-combine/Makefile        2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,99 @@
++SHELL = /bin/sh
++
++
++top_srcdir = ../..
++srcdir = .
++top_builddir = ../..
++subdir = tools/click-combine
++conf_auxdir = $(top_srcdir)
++
++prefix = /d/click/click-1.6.0-27/inst
++bindir = /d/click/click-1.6.0-27/inst/bin
++HOST_TOOLS = host
++
++VPATH = .:$(top_srcdir)/$(subdir):$(top_srcdir)/tools/lib:$(top_srcdir)/include
++
++ifeq ($(HOST_TOOLS),build)
++CC = 
++CXX = 
++LIBCLICKTOOL = libclicktool_build.a
++DL_LIBS = 
++else
++CC = gcc -W -Wall
++CXX = g++ -W -Wall 
++LIBCLICKTOOL = libclicktool.a
++DL_LIBS = -ldl
++endif
++INSTALL = /usr/bin/install -c
++mkinstalldirs = $(conf_auxdir)/mkinstalldirs
++
++.SUFFIXES:
++.SUFFIXES: .S .c .cc .o .s
++
++.c.o:
++      $(COMPILE) -c $<
++.s.o:
++      $(COMPILE) -c $<
++.S.o:
++      $(COMPILE) -c $<
++.cc.o:
++      $(CXXCOMPILE) -c $<
++
++
++OBJS = click-combine.o
++UNOBJS = click-uncombine.o
++
++CPPFLAGS =  -DCLICK_TOOL
++CFLAGS = -g -O2
++CXXFLAGS = -g -O2
++DEPCFLAGS = -MD
++
++DEFS = -DHAVE_CONFIG_H
++INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
++      -I$(top_srcdir)/tools/lib -I$(srcdir)
++LDFLAGS = 
++LIBS =  $(DL_LIBS)
++
++CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) $(DEPCFLAGS)
++CXXLD = $(CXX)
++CXXLINK = $(CXXLD) $(CXXFLAGS) $(LDFLAGS) -o $@
++COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEPCFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(CFLAGS) $(LDFLAGS) -o $@
++
++all: $(LIBCLICKTOOL) all-local
++all-local: click-combine click-uncombine
++
++$(LIBCLICKTOOL):
++      @cd ../lib; $(MAKE) $(LIBCLICKTOOL)
++
++click-combine: Makefile $(OBJS) ../lib/$(LIBCLICKTOOL)
++      $(CXXLINK) -rdynamic $(OBJS) ../lib/$(LIBCLICKTOOL) $(LIBS)
++
++click-uncombine: Makefile $(UNOBJS) ../lib/$(LIBCLICKTOOL)
++      $(CXXLINK) -rdynamic $(UNOBJS) ../lib/$(LIBCLICKTOOL) $(LIBS)
++
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++      cd $(top_builddir) \
++        && CONFIG_FILES=$(subdir)/$@ CONFIG_ELEMLISTS=no CONFIG_HEADERS= $(SHELL) ./config.status
++
++DEPFILES := $(wildcard *.d)
++ifneq ($(DEPFILES),)
++include $(DEPFILES)
++endif
++
++install: $(LIBCLICKTOOL) install-local
++install-local: all-local
++      $(mkinstalldirs) $(DESTDIR)$(bindir)
++      $(INSTALL) click-combine $(DESTDIR)$(bindir)/click-combine
++      $(INSTALL) click-uncombine $(DESTDIR)$(bindir)/click-uncombine
++uninstall:
++      /bin/rm -f $(DESTDIR)$(bindir)/click-combine $(DESTDIR)$(bindir)/click-uncombine
++
++clean:
++      rm -f *.d *.o click-combine click-uncombine
++distclean: clean
++      -rm -f Makefile
++
++.PHONY: all all-local clean distclean \
++      install install-local uninstall $(LIBCLICKTOOL)
+diff -Nurb click-1.6.0/tools/click-devirtualize/Makefile click-1.6.0-27/tools/click-devirtualize/Makefile
+--- click-1.6.0/tools/click-devirtualize/Makefile      1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/tools/click-devirtualize/Makefile   2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,94 @@
++SHELL = /bin/sh
++
++
++top_srcdir = ../..
++srcdir = .
++top_builddir = ../..
++subdir = tools/click-devirtualize
++conf_auxdir = $(top_srcdir)
++
++prefix = /d/click/click-1.6.0-27/inst
++bindir = /d/click/click-1.6.0-27/inst/bin
++HOST_TOOLS = host
++
++VPATH = .:$(top_srcdir)/$(subdir):$(top_srcdir)/tools/lib:$(top_srcdir)/include
++
++ifeq ($(HOST_TOOLS),build)
++CC = 
++CXX = 
++LIBCLICKTOOL = libclicktool_build.a
++DL_LIBS = 
++else
++CC = gcc -W -Wall
++CXX = g++ -W -Wall 
++LIBCLICKTOOL = libclicktool.a
++DL_LIBS = -ldl
++endif
++INSTALL = /usr/bin/install -c
++mkinstalldirs = $(conf_auxdir)/mkinstalldirs
++
++.SUFFIXES:
++.SUFFIXES: .S .c .cc .o .s
++
++.c.o:
++      $(COMPILE) -c $<
++.s.o:
++      $(COMPILE) -c $<
++.S.o:
++      $(COMPILE) -c $<
++.cc.o:
++      $(CXXCOMPILE) -c $<
++
++
++OBJS = cxxclass.o specializer.o signature.o click-devirtualize.o
++
++CPPFLAGS =  -DCLICK_TOOL
++CFLAGS = -g -O2
++CXXFLAGS = -g -O2
++DEPCFLAGS = -MD
++
++DEFS = -DHAVE_CONFIG_H
++INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
++      -I$(top_srcdir)/tools/lib -I$(srcdir)
++LDFLAGS = 
++LIBS =  $(DL_LIBS)
++
++CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) $(DEPCFLAGS)
++CXXLD = $(CXX)
++CXXLINK = $(CXXLD) $(CXXFLAGS) $(LDFLAGS) -o $@
++COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEPCFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(CFLAGS) $(LDFLAGS) -o $@
++
++all: $(LIBCLICKTOOL) all-local
++all-local: click-devirtualize
++
++$(LIBCLICKTOOL):
++      @cd ../lib; $(MAKE) $(LIBCLICKTOOL)
++
++click-devirtualize: Makefile $(OBJS) ../lib/$(LIBCLICKTOOL)
++      $(CXXLINK) -rdynamic $(OBJS) ../lib/$(LIBCLICKTOOL) $(LIBS)
++
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++      cd $(top_builddir) \
++        && CONFIG_FILES=$(subdir)/$@ CONFIG_ELEMLISTS=no CONFIG_HEADERS= $(SHELL) ./config.status
++
++DEPFILES := $(wildcard *.d)
++ifneq ($(DEPFILES),)
++include $(DEPFILES)
++endif
++
++install: $(LIBCLICKTOOL) install-local
++install-local: all-local
++      $(mkinstalldirs) $(DESTDIR)$(bindir)
++      $(INSTALL) click-devirtualize $(DESTDIR)$(bindir)/click-devirtualize
++uninstall:
++      /bin/rm -f $(DESTDIR)$(bindir)/click-devirtualize
++
++clean:
++      rm -f *.d *.o click-devirtualize
++distclean: clean
++      -rm -f Makefile
++
++.PHONY: all all-local clean distclean \
++      install install-local uninstall $(LIBCLICKTOOL)
+diff -Nurb click-1.6.0/tools/click-fastclassifier/Makefile click-1.6.0-27/tools/click-fastclassifier/Makefile
+--- click-1.6.0/tools/click-fastclassifier/Makefile    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/tools/click-fastclassifier/Makefile 2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,94 @@
++SHELL = /bin/sh
++
++
++top_srcdir = ../..
++srcdir = .
++top_builddir = ../..
++subdir = tools/click-fastclassifier
++conf_auxdir = $(top_srcdir)
++
++prefix = /d/click/click-1.6.0-27/inst
++bindir = /d/click/click-1.6.0-27/inst/bin
++HOST_TOOLS = host
++
++VPATH = .:$(top_srcdir)/$(subdir):$(top_srcdir)/tools/lib:$(top_srcdir)/include
++
++ifeq ($(HOST_TOOLS),build)
++CC = 
++CXX = 
++LIBCLICKTOOL = libclicktool_build.a
++DL_LIBS = 
++else
++CC = gcc -W -Wall
++CXX = g++ -W -Wall 
++LIBCLICKTOOL = libclicktool.a
++DL_LIBS = -ldl
++endif
++INSTALL = /usr/bin/install -c
++mkinstalldirs = $(conf_auxdir)/mkinstalldirs
++
++.SUFFIXES:
++.SUFFIXES: .S .c .cc .o .s
++
++.c.o:
++      $(COMPILE) -c $<
++.s.o:
++      $(COMPILE) -c $<
++.S.o:
++      $(COMPILE) -c $<
++.cc.o:
++      $(CXXCOMPILE) -c $<
++
++
++OBJS = click-fastclassifier.o fc_classifier.o fc_ipclassifier.o
++
++CPPFLAGS =  -DCLICK_TOOL
++CFLAGS = -g -O2
++CXXFLAGS = -g -O2
++DEPCFLAGS = -MD
++
++DEFS = -DHAVE_CONFIG_H
++INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
++      -I$(top_srcdir)/tools/lib -I$(srcdir)
++LDFLAGS = 
++LIBS =  $(DL_LIBS)
++
++CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) $(DEPCFLAGS)
++CXXLD = $(CXX)
++CXXLINK = $(CXXLD) $(CXXFLAGS) $(LDFLAGS) -o $@
++COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEPCFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(CFLAGS) $(LDFLAGS) -o $@
++
++all: $(LIBCLICKTOOL) all-local
++all-local: click-fastclassifier
++
++$(LIBCLICKTOOL):
++      @cd ../lib; $(MAKE) $(LIBCLICKTOOL)
++
++click-fastclassifier: Makefile $(OBJS) ../lib/$(LIBCLICKTOOL)
++      $(CXXLINK) -rdynamic $(OBJS) ../lib/$(LIBCLICKTOOL) $(LIBS)
++
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++      cd $(top_builddir) \
++        && CONFIG_FILES=$(subdir)/$@ CONFIG_ELEMLISTS=no CONFIG_HEADERS= $(SHELL) ./config.status
++
++DEPFILES := $(wildcard *.d)
++ifneq ($(DEPFILES),)
++include $(DEPFILES)
++endif
++
++install: $(LIBCLICKTOOL) install-local
++install-local: all-local
++      $(mkinstalldirs) $(DESTDIR)$(bindir)
++      $(INSTALL) click-fastclassifier $(DESTDIR)$(bindir)/click-fastclassifier
++uninstall:
++      /bin/rm -f $(DESTDIR)$(bindir)/click-fastclassifier
++
++clean:
++      rm -f *.d *.o click-fastclassifier
++distclean: clean
++      -rm -f Makefile
++
++.PHONY: all all-local clean distclean \
++      install install-local uninstall $(LIBCLICKTOOL)
+diff -Nurb click-1.6.0/tools/click-flatten/Makefile click-1.6.0-27/tools/click-flatten/Makefile
+--- click-1.6.0/tools/click-flatten/Makefile   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/tools/click-flatten/Makefile        2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,94 @@
++SHELL = /bin/sh
++
++
++top_srcdir = ../..
++srcdir = .
++top_builddir = ../..
++subdir = tools/click-flatten
++conf_auxdir = $(top_srcdir)
++
++prefix = /d/click/click-1.6.0-27/inst
++bindir = /d/click/click-1.6.0-27/inst/bin
++HOST_TOOLS = host
++
++VPATH = .:$(top_srcdir)/$(subdir):$(top_srcdir)/tools/lib:$(top_srcdir)/include
++
++ifeq ($(HOST_TOOLS),build)
++CC = 
++CXX = 
++LIBCLICKTOOL = libclicktool_build.a
++DL_LIBS = 
++else
++CC = gcc -W -Wall
++CXX = g++ -W -Wall 
++LIBCLICKTOOL = libclicktool.a
++DL_LIBS = -ldl
++endif
++INSTALL = /usr/bin/install -c
++mkinstalldirs = $(conf_auxdir)/mkinstalldirs
++
++.SUFFIXES:
++.SUFFIXES: .S .c .cc .o .s
++
++.c.o:
++      $(COMPILE) -c $<
++.s.o:
++      $(COMPILE) -c $<
++.S.o:
++      $(COMPILE) -c $<
++.cc.o:
++      $(CXXCOMPILE) -c $<
++
++
++OBJS = click-flatten.o
++
++CPPFLAGS =  -DCLICK_TOOL
++CFLAGS = -g -O2
++CXXFLAGS = -g -O2
++DEPCFLAGS = -MD
++
++DEFS = -DHAVE_CONFIG_H
++INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
++      -I$(top_srcdir)/tools/lib -I$(srcdir)
++LDFLAGS = 
++LIBS =  $(DL_LIBS)
++
++CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) $(DEPCFLAGS)
++CXXLD = $(CXX)
++CXXLINK = $(CXXLD) $(CXXFLAGS) $(LDFLAGS) -o $@
++COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEPCFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(CFLAGS) $(LDFLAGS) -o $@
++
++all: $(LIBCLICKTOOL) all-local
++all-local: click-flatten
++
++$(LIBCLICKTOOL):
++      @cd ../lib; $(MAKE) $(LIBCLICKTOOL)
++
++click-flatten: Makefile $(OBJS) ../lib/$(LIBCLICKTOOL)
++      $(CXXLINK) -rdynamic $(OBJS) ../lib/$(LIBCLICKTOOL) $(LIBS)
++
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++      cd $(top_builddir) \
++        && CONFIG_FILES=$(subdir)/$@ CONFIG_ELEMLISTS=no CONFIG_HEADERS= $(SHELL) ./config.status
++
++DEPFILES := $(wildcard *.d)
++ifneq ($(DEPFILES),)
++include $(DEPFILES)
++endif
++
++install: $(LIBCLICKTOOL) install-local
++install-local: all-local
++      $(mkinstalldirs) $(DESTDIR)$(bindir)
++      $(INSTALL) click-flatten $(DESTDIR)$(bindir)/click-flatten
++uninstall:
++      /bin/rm -f $(DESTDIR)$(bindir)/click-flatten
++
++clean:
++      rm -f *.d *.o click-flatten
++distclean: clean
++      -rm -f Makefile
++
++.PHONY: all all-local clean distclean \
++      install install-local uninstall $(LIBCLICKTOOL)
+diff -Nurb click-1.6.0/tools/click-install/Makefile click-1.6.0-27/tools/click-install/Makefile
+--- click-1.6.0/tools/click-install/Makefile   1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/tools/click-install/Makefile        2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,99 @@
++SHELL = /bin/sh
++
++
++top_srcdir = ../..
++srcdir = .
++top_builddir = ../..
++subdir = tools/click-install
++conf_auxdir = $(top_srcdir)
++
++prefix = /d/click/click-1.6.0-27/inst
++sbindir = /d/click/click-1.6.0-27/inst/sbin
++HOST_TOOLS = host
++
++VPATH = .:$(top_srcdir)/$(subdir):$(top_srcdir)/tools/lib:$(top_srcdir)/include
++
++ifeq ($(HOST_TOOLS),build)
++CC = 
++CXX = 
++LIBCLICKTOOL = libclicktool_build.a
++DL_LIBS = 
++else
++CC = gcc -W -Wall
++CXX = g++ -W -Wall 
++LIBCLICKTOOL = libclicktool.a
++DL_LIBS = -ldl
++endif
++INSTALL = /usr/bin/install -c
++mkinstalldirs = $(conf_auxdir)/mkinstalldirs
++
++.SUFFIXES:
++.SUFFIXES: .S .c .cc .o .s
++
++.c.o:
++      $(COMPILE) -c $<
++.s.o:
++      $(COMPILE) -c $<
++.S.o:
++      $(COMPILE) -c $<
++.cc.o:
++      $(CXXCOMPILE) -c $<
++
++
++OBJS = common.o click-install.o
++UN_OBJS = common.o click-uninstall.o
++
++CPPFLAGS =  -DCLICK_TOOL
++CFLAGS = -g -O2
++CXXFLAGS = -g -O2
++DEPCFLAGS = -MD
++
++DEFS = -DHAVE_CONFIG_H
++INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
++      -I$(top_srcdir)/tools/lib -I$(srcdir)
++LDFLAGS = 
++LIBS =  $(DL_LIBS)
++
++CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) $(DEPCFLAGS)
++CXXLD = $(CXX)
++CXXLINK = $(CXXLD) $(CXXFLAGS) $(LDFLAGS) -o $@
++COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEPCFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(CFLAGS) $(LDFLAGS) -o $@
++
++all: $(LIBCLICKTOOL) all-local
++all-local: click-install click-uninstall
++
++$(LIBCLICKTOOL):
++      @cd ../lib; $(MAKE) $(LIBCLICKTOOL)
++
++click-install: Makefile $(OBJS) ../lib/$(LIBCLICKTOOL)
++      $(CXXLINK) -rdynamic $(OBJS) ../lib/$(LIBCLICKTOOL) $(LIBS)
++
++click-uninstall: Makefile $(UN_OBJS) ../lib/$(LIBCLICKTOOL)
++      $(CXXLINK) -rdynamic $(UN_OBJS) ../lib/$(LIBCLICKTOOL) $(LIBS)
++
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++      cd $(top_builddir) \
++        && CONFIG_FILES=$(subdir)/$@ CONFIG_ELEMLISTS=no CONFIG_HEADERS= $(SHELL) ./config.status
++
++DEPFILES := $(wildcard *.d)
++ifneq ($(DEPFILES),)
++include $(DEPFILES)
++endif
++
++install: $(LIBCLICKTOOL) install-local
++install-local: all-local
++      $(mkinstalldirs) $(DESTDIR)$(sbindir)
++      $(INSTALL) click-install $(DESTDIR)$(sbindir)/click-install
++      $(INSTALL) click-uninstall $(DESTDIR)$(sbindir)/click-uninstall
++uninstall:
++      /bin/rm -f $(DESTDIR)$(sbindir)/click-install $(DESTDIR)$(sbindir)/click-uninstall
++
++clean:
++      rm -f *.d *.o click-install click-uninstall
++distclean: clean
++      -rm -f Makefile
++
++.PHONY: all all-local clean distclean \
++      install install-local uninstall $(LIBCLICKTOOL)
+diff -Nurb click-1.6.0/tools/click-mkmindriver/Makefile click-1.6.0-27/tools/click-mkmindriver/Makefile
+--- click-1.6.0/tools/click-mkmindriver/Makefile       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/tools/click-mkmindriver/Makefile    2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,94 @@
++SHELL = /bin/sh
++
++
++top_srcdir = ../..
++srcdir = .
++top_builddir = ../..
++subdir = tools/click-mkmindriver
++conf_auxdir = $(top_srcdir)
++
++prefix = /d/click/click-1.6.0-27/inst
++bindir = /d/click/click-1.6.0-27/inst/bin
++HOST_TOOLS = host
++
++VPATH = .:$(top_srcdir)/$(subdir):$(top_srcdir)/tools/lib:$(top_srcdir)/include
++
++ifneq ($(HOST_TOOLS),host)
++CC = 
++CXX = 
++LIBCLICKTOOL = libclicktool_build.a
++DL_LIBS = 
++else
++CC = gcc -W -Wall
++CXX = g++ -W -Wall 
++LIBCLICKTOOL = libclicktool.a
++DL_LIBS = -ldl
++endif
++INSTALL = /usr/bin/install -c
++mkinstalldirs = $(conf_auxdir)/mkinstalldirs
++
++.SUFFIXES:
++.SUFFIXES: .S .c .cc .o .s
++
++.c.o:
++      $(COMPILE) -c $<
++.s.o:
++      $(COMPILE) -c $<
++.S.o:
++      $(COMPILE) -c $<
++.cc.o:
++      $(CXXCOMPILE) -c $<
++
++
++OBJS = click-mkmindriver.o
++
++CPPFLAGS =  -DCLICK_TOOL
++CFLAGS = -g -O2
++CXXFLAGS = -g -O2
++DEPCFLAGS = -MD
++
++DEFS = -DHAVE_CONFIG_H
++INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
++      -I$(top_srcdir)/tools/lib -I$(srcdir)
++LDFLAGS = 
++LIBS =  $(DL_LIBS)
++
++CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) $(DEPCFLAGS)
++CXXLD = $(CXX)
++CXXLINK = $(CXXLD) $(CXXFLAGS) $(LDFLAGS) -o $@
++COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEPCFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(CFLAGS) $(LDFLAGS) -o $@
++
++all: $(LIBCLICKTOOL) all-local
++all-local: click-mkmindriver
++
++$(LIBCLICKTOOL):
++      @cd ../lib; $(MAKE) $(LIBCLICKTOOL)
++
++click-mkmindriver: Makefile $(OBJS) ../lib/$(LIBCLICKTOOL)
++      $(CXXLINK) -rdynamic $(OBJS) ../lib/$(LIBCLICKTOOL) $(LIBS)
++
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++      cd $(top_builddir) \
++        && CONFIG_FILES=$(subdir)/$@ CONFIG_ELEMLISTS=no CONFIG_HEADERS= $(SHELL) ./config.status
++
++DEPFILES := $(wildcard *.d)
++ifneq ($(DEPFILES),)
++include $(DEPFILES)
++endif
++
++install: $(LIBCLICKTOOL) install-local
++install-local: all-local
++      $(mkinstalldirs) $(DESTDIR)$(bindir)
++      $(INSTALL) click-mkmindriver $(DESTDIR)$(bindir)/click-mkmindriver
++uninstall:
++      /bin/rm -f $(DESTDIR)$(bindir)/click-mkmindriver
++
++clean:
++      rm -f *.d *.o click-mkmindriver
++distclean: clean
++      -rm -f Makefile
++
++.PHONY: all all-local clean distclean \
++      install install-local uninstall $(LIBCLICKTOOL)
+diff -Nurb click-1.6.0/tools/click-pretty/Makefile click-1.6.0-27/tools/click-pretty/Makefile
+--- click-1.6.0/tools/click-pretty/Makefile    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/tools/click-pretty/Makefile 2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,94 @@
++SHELL = /bin/sh
++
++
++top_srcdir = ../..
++srcdir = .
++top_builddir = ../..
++subdir = tools/click-pretty
++conf_auxdir = $(top_srcdir)
++
++prefix = /d/click/click-1.6.0-27/inst
++bindir = /d/click/click-1.6.0-27/inst/bin
++HOST_TOOLS = host
++
++VPATH = .:$(top_srcdir)/$(subdir):$(top_srcdir)/tools/lib:$(top_srcdir)/include
++
++ifeq ($(HOST_TOOLS),build)
++CC = 
++CXX = 
++LIBCLICKTOOL = libclicktool_build.a
++DL_LIBS = 
++else
++CC = gcc -W -Wall
++CXX = g++ -W -Wall 
++LIBCLICKTOOL = libclicktool.a
++DL_LIBS = -ldl
++endif
++INSTALL = /usr/bin/install -c
++mkinstalldirs = $(conf_auxdir)/mkinstalldirs
++
++.SUFFIXES:
++.SUFFIXES: .S .c .cc .o .s
++
++.c.o:
++      $(COMPILE) -c $<
++.s.o:
++      $(COMPILE) -c $<
++.S.o:
++      $(COMPILE) -c $<
++.cc.o:
++      $(CXXCOMPILE) -c $<
++
++
++OBJS = click-pretty.o html.o
++
++CPPFLAGS =  -DCLICK_TOOL
++CFLAGS = -g -O2
++CXXFLAGS = -g -O2
++DEPCFLAGS = -MD
++
++DEFS = -DHAVE_CONFIG_H
++INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
++      -I$(top_srcdir)/tools/lib -I$(srcdir)
++LDFLAGS = 
++LIBS =  $(DL_LIBS)
++
++CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) $(DEPCFLAGS)
++CXXLD = $(CXX)
++CXXLINK = $(CXXLD) $(CXXFLAGS) $(LDFLAGS) -o $@
++COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEPCFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(CFLAGS) $(LDFLAGS) -o $@
++
++all: $(LIBCLICKTOOL) all-local
++all-local: click-pretty
++
++$(LIBCLICKTOOL):
++      @cd ../lib; $(MAKE) $(LIBCLICKTOOL)
++
++click-pretty: Makefile $(OBJS) ../lib/$(LIBCLICKTOOL)
++      $(CXXLINK) -rdynamic $(OBJS) ../lib/$(LIBCLICKTOOL) $(LIBS)
++
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++      cd $(top_builddir) \
++        && CONFIG_FILES=$(subdir)/$@ CONFIG_ELEMLISTS=no CONFIG_HEADERS= $(SHELL) ./config.status
++
++DEPFILES := $(wildcard *.d)
++ifneq ($(DEPFILES),)
++include $(DEPFILES)
++endif
++
++install: $(LIBCLICKTOOL) install-local
++install-local: all-local
++      $(mkinstalldirs) $(DESTDIR)$(bindir)
++      $(INSTALL) click-pretty $(DESTDIR)$(bindir)/click-pretty
++uninstall:
++      /bin/rm -f $(DESTDIR)$(bindir)/click-pretty
++
++clean:
++      rm -f *.d *.o click-pretty
++distclean: clean
++      -rm -f Makefile
++
++.PHONY: all all-local clean distclean \
++      install install-local uninstall $(LIBCLICKTOOL)
+diff -Nurb click-1.6.0/tools/click-undead/Makefile click-1.6.0-27/tools/click-undead/Makefile
+--- click-1.6.0/tools/click-undead/Makefile    1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/tools/click-undead/Makefile 2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,94 @@
++SHELL = /bin/sh
++
++
++top_srcdir = ../..
++srcdir = .
++top_builddir = ../..
++subdir = tools/click-undead
++conf_auxdir = $(top_srcdir)
++
++prefix = /d/click/click-1.6.0-27/inst
++bindir = /d/click/click-1.6.0-27/inst/bin
++HOST_TOOLS = host
++
++VPATH = .:$(top_srcdir)/$(subdir):$(top_srcdir)/tools/lib:$(top_srcdir)/include
++
++ifeq ($(HOST_TOOLS),build)
++CC = 
++CXX = 
++LIBCLICKTOOL = libclicktool_build.a
++DL_LIBS = 
++else
++CC = gcc -W -Wall
++CXX = g++ -W -Wall 
++LIBCLICKTOOL = libclicktool.a
++DL_LIBS = -ldl
++endif
++INSTALL = /usr/bin/install -c
++mkinstalldirs = $(conf_auxdir)/mkinstalldirs
++
++.SUFFIXES:
++.SUFFIXES: .S .c .cc .o .s
++
++.c.o:
++      $(COMPILE) -c $<
++.s.o:
++      $(COMPILE) -c $<
++.S.o:
++      $(COMPILE) -c $<
++.cc.o:
++      $(CXXCOMPILE) -c $<
++
++
++OBJS = click-undead.o
++
++CPPFLAGS =  -DCLICK_TOOL
++CFLAGS = -g -O2
++CXXFLAGS = -g -O2
++DEPCFLAGS = -MD
++
++DEFS = -DHAVE_CONFIG_H
++INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
++      -I$(top_srcdir)/tools/lib -I$(srcdir)
++LDFLAGS = 
++LIBS =  $(DL_LIBS)
++
++CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) $(DEPCFLAGS)
++CXXLD = $(CXX)
++CXXLINK = $(CXXLD) $(CXXFLAGS) $(LDFLAGS) -o $@
++COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEPCFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(CFLAGS) $(LDFLAGS) -o $@
++
++all: $(LIBCLICKTOOL) all-local
++all-local: click-undead
++
++$(LIBCLICKTOOL):
++      @cd ../lib; $(MAKE) $(LIBCLICKTOOL)
++
++click-undead: Makefile $(OBJS) ../lib/$(LIBCLICKTOOL)
++      $(CXXLINK) -rdynamic $(OBJS) ../lib/$(LIBCLICKTOOL) $(LIBS)
++
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++      cd $(top_builddir) \
++        && CONFIG_FILES=$(subdir)/$@ CONFIG_ELEMLISTS=no CONFIG_HEADERS= $(SHELL) ./config.status
++
++DEPFILES := $(wildcard *.d)
++ifneq ($(DEPFILES),)
++include $(DEPFILES)
++endif
++
++install: $(LIBCLICKTOOL) install-local
++install-local: all-local
++      $(mkinstalldirs) $(DESTDIR)$(bindir)
++      $(INSTALL) click-undead $(DESTDIR)$(bindir)/click-undead
++uninstall:
++      /bin/rm -f $(DESTDIR)$(bindir)/click-undead
++
++clean:
++      rm -f *.d *.o click-undead
++distclean: clean
++      -rm -f Makefile
++
++.PHONY: all all-local clean distclean \
++      install install-local uninstall $(LIBCLICKTOOL)
+diff -Nurb click-1.6.0/tools/click-xform/Makefile click-1.6.0-27/tools/click-xform/Makefile
+--- click-1.6.0/tools/click-xform/Makefile     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/tools/click-xform/Makefile  2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,94 @@
++SHELL = /bin/sh
++
++
++top_srcdir = ../..
++srcdir = .
++top_builddir = ../..
++subdir = tools/click-xform
++conf_auxdir = $(top_srcdir)
++
++prefix = /d/click/click-1.6.0-27/inst
++bindir = /d/click/click-1.6.0-27/inst/bin
++HOST_TOOLS = host
++
++VPATH = .:$(top_srcdir)/$(subdir):$(top_srcdir)/tools/lib:$(top_srcdir)/include
++
++ifeq ($(HOST_TOOLS),build)
++CC = 
++CXX = 
++LIBCLICKTOOL = libclicktool_build.a
++DL_LIBS = 
++else
++CC = gcc -W -Wall
++CXX = g++ -W -Wall 
++LIBCLICKTOOL = libclicktool.a
++DL_LIBS = -ldl
++endif
++INSTALL = /usr/bin/install -c
++mkinstalldirs = $(conf_auxdir)/mkinstalldirs
++
++.SUFFIXES:
++.SUFFIXES: .S .c .cc .o .s
++
++.c.o:
++      $(COMPILE) -c $<
++.s.o:
++      $(COMPILE) -c $<
++.S.o:
++      $(COMPILE) -c $<
++.cc.o:
++      $(CXXCOMPILE) -c $<
++
++
++OBJS = adjacency.o click-xform.o
++
++CPPFLAGS =  -DCLICK_TOOL
++CFLAGS = -g -O2
++CXXFLAGS = -g -O2
++DEPCFLAGS = -MD
++
++DEFS = -DHAVE_CONFIG_H
++INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
++      -I$(top_srcdir)/tools/lib -I$(srcdir)
++LDFLAGS = 
++LIBS =  $(DL_LIBS)
++
++CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) $(DEPCFLAGS)
++CXXLD = $(CXX)
++CXXLINK = $(CXXLD) $(CXXFLAGS) $(LDFLAGS) -o $@
++COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEPCFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(CFLAGS) $(LDFLAGS) -o $@
++
++all: $(LIBCLICKTOOL) all-local
++all-local: click-xform
++
++$(LIBCLICKTOOL):
++      @cd ../lib; $(MAKE) $(LIBCLICKTOOL)
++
++click-xform: Makefile $(OBJS) ../lib/$(LIBCLICKTOOL)
++      $(CXXLINK) -rdynamic $(OBJS) ../lib/$(LIBCLICKTOOL) $(LIBS)
++
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++      cd $(top_builddir) \
++        && CONFIG_FILES=$(subdir)/$@ CONFIG_ELEMLISTS=no CONFIG_HEADERS= $(SHELL) ./config.status
++
++DEPFILES := $(wildcard *.d)
++ifneq ($(DEPFILES),)
++include $(DEPFILES)
++endif
++
++install: $(LIBCLICKTOOL) install-local
++install-local: all-local
++      $(mkinstalldirs) $(DESTDIR)$(bindir)
++      $(INSTALL) click-xform $(DESTDIR)$(bindir)/click-xform
++uninstall:
++      /bin/rm -f $(DESTDIR)$(bindir)/click-xform
++
++clean:
++      rm -f *.d *.o click-xform
++distclean: clean
++      -rm -f Makefile
++
++.PHONY: all all-local clean distclean \
++      install install-local uninstall $(LIBCLICKTOOL)
+diff -Nurb click-1.6.0/tools/click2xml/Makefile click-1.6.0-27/tools/click2xml/Makefile
+--- click-1.6.0/tools/click2xml/Makefile       1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/tools/click2xml/Makefile    2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,100 @@
++SHELL = /bin/sh
++
++
++top_srcdir = ../..
++srcdir = .
++top_builddir = ../..
++subdir = tools/click2xml
++conf_auxdir = $(top_srcdir)
++
++prefix = /d/click/click-1.6.0-27/inst
++bindir = /d/click/click-1.6.0-27/inst/bin
++HOST_TOOLS = host
++
++VPATH = .:$(top_srcdir)/$(subdir):$(top_srcdir)/tools/lib:$(top_srcdir)/include
++
++ifeq ($(HOST_TOOLS),build)
++CC = 
++CXX = 
++LIBCLICKTOOL = libclicktool_build.a
++DL_LIBS = 
++else
++CC = gcc -W -Wall
++CXX = g++ -W -Wall 
++LIBCLICKTOOL = libclicktool.a
++DL_LIBS = -ldl
++endif
++INSTALL = /usr/bin/install -c
++mkinstalldirs = $(conf_auxdir)/mkinstalldirs
++
++.SUFFIXES:
++.SUFFIXES: .S .c .cc .o .s
++
++.c.o:
++      $(COMPILE) -c $<
++.s.o:
++      $(COMPILE) -c $<
++.S.o:
++      $(COMPILE) -c $<
++.cc.o:
++      $(CXXCOMPILE) -c $<
++
++
++CLICK2XML_OBJS = click2xml.o
++XML2CLICK_OBJS = xml2click.o
++
++CPPFLAGS =  -DCLICK_TOOL
++CFLAGS = -g -O2
++CXXFLAGS = -g -O2
++DEPCFLAGS = -MD
++
++DEFS = -DHAVE_CONFIG_H
++INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
++      -I$(top_srcdir)/tools/lib -I$(srcdir) 
++LDFLAGS = 
++LIBS =   -lexpat $(DL_LIBS)
++
++CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) $(DEPCFLAGS)
++CXXLD = $(CXX)
++CXXLINK = $(CXXLD) $(CXXFLAGS) $(LDFLAGS) -o $@
++COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEPCFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(CFLAGS) $(LDFLAGS) -o $@
++
++all: $(LIBCLICKTOOL) all-local
++all-local: click2xml xml2click
++
++$(LIBCLICKTOOL):
++      @cd ../lib; $(MAKE) $(LIBCLICKTOOL)
++
++click2xml: Makefile $(CLICK2XML_OBJS) ../lib/$(LIBCLICKTOOL)
++      $(CXXLINK) -rdynamic $(CLICK2XML_OBJS) ../lib/$(LIBCLICKTOOL) $(LIBS)
++
++xml2click: Makefile $(XML2CLICK_OBJS) ../lib/$(LIBCLICKTOOL)
++      $(CXXLINK) -rdynamic $(XML2CLICK_OBJS) ../lib/$(LIBCLICKTOOL) $(LIBS)
++
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++      cd $(top_builddir) \
++        && CONFIG_FILES=$(subdir)/$@ CONFIG_ELEMLISTS=no CONFIG_HEADERS= $(SHELL) ./config.status
++
++DEPFILES := $(wildcard *.d)
++ifneq ($(DEPFILES),)
++include $(DEPFILES)
++endif
++
++install: $(LIBCLICKTOOL) install-local
++install-local: all-local
++      $(mkinstalldirs) $(DESTDIR)$(bindir)
++      $(INSTALL) click2xml $(DESTDIR)$(bindir)/click2xml
++      test -z "xml2click" || $(INSTALL) xml2click $(DESTDIR)$(bindir)/xml2click
++uninstall:
++      /bin/rm -f $(DESTDIR)$(bindir)/click2xml
++      test -z "xml2click" || /bin/rm -f $(DESTDIR)$(bindir)/xml2click
++
++clean:
++      rm -f *.d *.o click2xml xml2click
++distclean: clean
++      -rm -f Makefile
++
++.PHONY: all all-local clean distclean \
++      install install-local uninstall $(LIBCLICKTOOL)
+diff -Nurb click-1.6.0/tools/lib/Makefile click-1.6.0-27/tools/lib/Makefile
+--- click-1.6.0/tools/lib/Makefile     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/tools/lib/Makefile  2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,124 @@
++SHELL = /bin/sh
++
++
++top_srcdir = ../..
++srcdir = .
++top_builddir = ../..
++subdir = tools/lib
++conf_auxdir = $(top_srcdir)
++
++prefix = /d/click/click-1.6.0-27/inst
++bindir = /d/click/click-1.6.0-27/inst/bin
++libdir = /d/click/click-1.6.0-27/inst/lib
++includedir = /d/click/click-1.6.0-27/inst/include
++toolincludedir = $(includedir)/clicktool
++HOST_TOOLS = host
++
++VPATH = .:$(top_srcdir)/$(subdir):$(top_srcdir)/tools/lib:$(top_srcdir)/lib
++
++CC = gcc -W -Wall
++CXX = g++ -W -Wall 
++AR_CREATE = ar cru
++RANLIB = ranlib
++BUILD_CC = 
++BUILD_CXX = 
++BUILD_AR_CREATE =  cru
++BUILD_RANLIB = 
++INSTALL = /usr/bin/install -c
++INSTALL_DATA = /usr/bin/install -c -m 644
++INSTALL_DATA_IF_CHANGED = $(top_builddir)/installch -m 644
++mkinstalldirs = $(conf_auxdir)/mkinstalldirs
++
++.SUFFIXES:
++.SUFFIXES: .S .c .cc .o .bo .s
++
++.c.o:
++      $(COMPILE) -c $<
++      @-/bin/mv $*.d $*.hd
++.s.o:
++      $(COMPILE) -c $<
++      @-/bin/mv $*.d $*.hd
++.S.o:
++      $(COMPILE) -c $<
++      @-/bin/mv $*.d $*.hd
++.cc.o:
++      $(CXXCOMPILE) -c $<
++      @-/bin/mv $*.d $*.hd
++.c.bo:
++      $(BUILD_COMPILE) -c $< -o $@
++      @-sed 's/\.o:/\.bo:/' < $*.d > $*.bd; /bin/rm -f $*.d
++.cc.bo:
++      $(BUILD_CXXCOMPILE) -c $< -o $@
++      @-sed 's/\.o:/\.bo:/' < $*.d > $*.bd; /bin/rm -f $*.d
++
++
++OBJS = string.o straccum.o \
++      bitvector.o vectorv.o vectori.o hashmapi.o bighashmap_arena.o \
++      ipaddress.o etheraddress.o \
++      timestamp.o error.o \
++      elementt.o eclasst.o routert.o runparse.o variableenv.o \
++      lexert.o lexertinfo.o driver.o \
++      confparse.o archive.o processingt.o etraits.o elementmap.o \
++      userutils.o md5.o toolutils.o clp.o  
++BUILDOBJS = $(patsubst %.o,%.bo,$(OBJS))
++
++CPPFLAGS =  -DCLICK_TOOL
++CFLAGS = -g -O2
++CXXFLAGS = -g -O2
++DEPCFLAGS = -MD
++
++DEFS = -DHAVE_CONFIG_H
++INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
++      -I$(srcdir)
++LDFLAGS = 
++LIBS = 
++
++CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) $(DEPCFLAGS)
++COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEPCFLAGS)
++BUILD_CXXCOMPILE = $(BUILD_CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) $(DEPCFLAGS)
++BUILD_COMPILE = $(BUILD_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEPCFLAGS)
++
++ifeq ($(HOST_TOOLS),mixed)
++all: libclicktool.a libclicktool_build.a
++endif
++ifeq ($(HOST_TOOLS),build)
++all: libclicktool_build.a
++endif
++ifeq ($(HOST_TOOLS),host)
++all: libclicktool.a
++endif
++
++libclicktool.a: Makefile $(OBJS)
++      $(AR_CREATE) libclicktool.a $(OBJS)
++      $(RANLIB) libclicktool.a
++libclicktool_build.a: Makefile $(BUILDOBJS)
++      $(BUILD_AR_CREATE) libclicktool_build.a $(BUILDOBJS)
++      $(BUILD_RANLIB) libclicktool_build.a
++
++Makefile: $(srcdir)/Makefile.in
++      cd $(top_builddir) \
++        && CONFIG_FILES=$(subdir)/$@ CONFIG_ELEMLISTS=no CONFIG_HEADERS= $(SHELL) ./config.status
++
++DEPFILES := $(wildcard *.hd *.bd)
++ifneq ($(DEPFILES),)
++include $(DEPFILES)
++endif
++
++install: install-local
++install-lib install-local: libclicktool.a install-include
++      $(mkinstalldirs) $(DESTDIR)$(libdir)
++      $(INSTALL) libclicktool.a $(DESTDIR)$(libdir)/libclicktool.a
++install-include:
++      $(mkinstalldirs) $(DESTDIR)$(toolincludedir)
++      $(INSTALL_DATA_IF_CHANGED) $(srcdir)/*.hh $(DESTDIR)$(toolincludedir)
++uninstall:
++      /bin/rm -f $(DESTDIR)$(libdir)/libclicktool.a
++      cd $(srcdir); for i in *.hh; do /bin/rm -f $(DESTDIR)$(toolincludedir)/$$i; done
++
++clean:
++      rm -f *.d *.hd *.bd *.o *.bo libclicktool.a libclicktool_build.a
++distclean: clean
++      -rm -f Makefile
++
++.PHONY: all clean distclean \
++      install install-lib install-local install-include uninstall
+diff -Nurb click-1.6.0/userlevel/Makefile click-1.6.0-27/userlevel/Makefile
+--- click-1.6.0/userlevel/Makefile     1969-12-31 19:00:00.000000000 -0500
++++ click-1.6.0-27/userlevel/Makefile  2009-01-28 16:15:43.000000000 -0500
+@@ -0,0 +1,152 @@
++## The following line supports click-mkmindriver and should not be changed.
++## Click userlevel driver Makefile ##
++SHELL = /bin/sh
++
++top_srcdir := ..
++srcdir := .
++top_builddir := ..
++subdir := userlevel
++conf_auxdir := $(top_srcdir)
++
++prefix = /d/click/click-1.6.0-27/inst
++bindir = /d/click/click-1.6.0-27/inst/bin
++sbindir = /d/click/click-1.6.0-27/inst/sbin
++libdir = /d/click/click-1.6.0-27/inst/lib
++
++VPATH = .:$(top_srcdir)/lib:$(top_srcdir)/$(subdir):$(top_srcdir)/elements/standard
++
++CC = gcc -W -Wall
++CPP = gcc -W -Wall -E
++CXX = g++ -W -Wall 
++CXXCPP = g++ -W -Wall  -E
++AR_CREATE = ar cru
++RANLIB = ranlib
++INSTALL = /usr/bin/install -c
++mkinstalldirs = $(conf_auxdir)/mkinstalldirs
++
++ifeq ($(V),1)
++ccompile = $(COMPILE) $(1)
++cxxcompile = $(CXXCOMPILE) $(1)
++else
++ccompile = @/bin/echo ' ' $(2) $< && $(COMPILE) $(1)
++cxxcompile = @/bin/echo ' ' $(2) $< && $(CXXCOMPILE) $(1)
++endif
++
++.SUFFIXES:
++.SUFFIXES: .S .c .cc .o .s .ii
++
++.c.o:
++      $(call ccompile,-c $< -o $@,CC)
++.s.o:
++      $(call ccompile,-c $< -o $@,ASM)
++.S.o:
++      $(call ccompile,-c $< -o $@,ASM)
++.cc.o:
++      $(call cxxcompile,-c $< -o $@,CXX)
++.cc.s:
++      $(call cxxcompile,-S $< -o $@,CXX -S)
++.cc.ii:
++      $(call cxxcompile,-E $< > $@,CXXCPP)
++
++
++GENERIC_OBJS = string.o straccum.o nameinfo.o \
++      bitvector.o vectorv.o templatei.o bighashmap_arena.o \
++      ipaddress.o ipflowid.o etheraddress.o \
++      packet.o \
++      error.o timestamp.o glue.o task.o timer.o atomic.o gaprate.o \
++      element.o \
++      confparse.o variableenv.o lexer.o elemfilter.o \
++      routerthread.o router.o master.o handlercall.o notifier.o \
++      integers.o md5.o crc32.o in_cksum.o iptable.o \
++      archive.o userutils.o driver.o \
++      $(EXTRA_DRIVER_OBJS)
++
++EXTRA_DRIVER_OBJS = 
++
++LIBOBJS = $(GENERIC_OBJS) $(STD_ELEMENT_OBJS) clp.o exportstub.o
++STD_ELEMENT_OBJS = addressinfo.o alignmentinfo.o \
++      errorelement.o portinfo.o scheduleinfo.o
++OBJS = $(ELEMENT_OBJS) $(ELEMENTSCONF).o click.o
++
++CPPFLAGS =  -DCLICK_USERLEVEL
++CFLAGS = -g -O2
++CXXFLAGS = -g -O2
++DEPCFLAGS = -MD
++
++DEFS = -DHAVE_CONFIG_H
++INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
++      -I$(srcdir) -I$(top_srcdir)  
++LDFLAGS = 
++LIBS =  `$(top_builddir)/click-compile --otherlibs` $(ELEMENT_LIBS)
++
++CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS) $(DEPCFLAGS)
++CXXLD = $(CXX)
++CXXLINK = $(CXXLD) $(CXXFLAGS) $(LDFLAGS) -o $@
++COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(DEPCFLAGS)
++CCLD = $(CC)
++LINK = $(CCLD) $(CFLAGS) $(LDFLAGS) -o $@
++
++ifndef MINDRIVER
++DRIVER = click
++ELEMENTSCONF = elements
++INSTALLLIBS = libclick.a
++else
++DRIVER = $(MINDRIVER)click
++ELEMENTSCONF = elements_$(MINDRIVER)
++endif
++INSTALLPROGS = $(DRIVER)
++
++all: $(INSTALLPROGS) $(INSTALLLIBS)
++
++ifneq ($(MAKECMDGOALS),clean)
++-include $(ELEMENTSCONF).mk
++endif
++
++$(DRIVER): Makefile libclick.a $(OBJS)
++      $(CXXLINK) -rdynamic $(OBJS) libclick.a $(LIBS)
++
++libclick.a: Makefile $(LIBOBJS)
++      $(AR_CREATE) libclick.a $(LIBOBJS)
++      $(RANLIB) libclick.a
++
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++      cd $(top_builddir) \
++        && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
++
++elemlist:
++      @rm -f elements.conf
++      @$(MAKE) elements.conf
++elements.conf: $(top_builddir)/config.status $(top_builddir)/click-buildtool
++      echo "userlevel  app aqm ethernet icmp ip standard tcpudp" | $(top_builddir)/click-buildtool findelem -r userlevel -p $(top_srcdir) > elements.conf
++$(ELEMENTSCONF).mk: $(ELEMENTSCONF).conf $(top_builddir)/click-buildtool
++      $(top_builddir)/click-buildtool elem2make -x "$(STD_ELEMENT_OBJS)" < $(ELEMENTSCONF).conf > $(ELEMENTSCONF).mk
++$(ELEMENTSCONF).cc: $(ELEMENTSCONF).conf $(top_builddir)/click-buildtool
++      $(top_builddir)/click-buildtool elem2export < $(ELEMENTSCONF).conf > $(ELEMENTSCONF).cc
++      @rm -f $(ELEMENTSCONF).d
++
++DEPFILES := $(wildcard *.d)
++ifneq ($(DEPFILES),)
++include $(DEPFILES)
++endif
++
++install: $(INSTALLPROGS) install-lib
++      $(mkinstalldirs) $(DESTDIR)$(bindir)
++      for i in $(INSTALLPROGS); do $(INSTALL) $$i $(DESTDIR)$(bindir)/$$i; done
++install-lib: $(INSTALLLIBS)
++      $(mkinstalldirs) $(DESTDIR)$(libdir)
++      for i in $(INSTALLLIBS); do $(INSTALL) $$i $(DESTDIR)$(libdir)/$$i; done
++install-man:
++      :
++uninstall:
++      for i in $(INSTALLLIBS); do rm -f $(DESTDIR)$(libdir)/$$i; done
++      for i in $(INSTALLPROGS); do rm -f $(DESTDIR)$(bindir)/$$i; done
++
++clean:
++      rm -f *.d *.o $(INSTALLPROGS) $(ELEMENTSCONF).mk $(ELEMENTSCONF).cc elements.conf libclick.a
++clean-lib:
++      rm -f $(LIBOBJS) libclick.a
++distclean: clean
++      -rm -f Makefile
++
++.PHONY: all clean clean-lib distclean elemlist \
++      install install-lib uninstall