From bc682a3f1f79962cb1fea8733e74273665a8829e Mon Sep 17 00:00:00 2001 From: Sapan Bhatia Date: Thu, 12 Feb 2009 18:18:29 +0000 Subject: [PATCH] --- linux-2.6-700-click-for-trellis.patch | 131290 +++++++++++++++++++++++ 1 file changed, 131290 insertions(+) create mode 100644 linux-2.6-700-click-for-trellis.patch diff --git a/linux-2.6-700-click-for-trellis.patch b/linux-2.6-700-click-for-trellis.patch new file mode 100644 index 000000000..0cc82e29c --- /dev/null +++ b/linux-2.6-700-click-for-trellis.patch @@ -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 &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 ++#ifdef HAVE_SYS_TYPES_H ++# include ++#endif ++#ifdef HAVE_SYS_STAT_H ++# include ++#endif ++#ifdef STDC_HEADERS ++# include ++# include ++#else ++# ifdef HAVE_STDLIB_H ++# include ++# endif ++#endif ++#ifdef HAVE_STRING_H ++# if !defined STDC_HEADERS && defined HAVE_MEMORY_H ++# include ++# endif ++# include ++#endif ++#ifdef HAVE_STRINGS_H ++# include ++#endif ++#ifdef HAVE_INTTYPES_H ++# include ++#endif ++#ifdef HAVE_STDINT_H ++# include ++#endif ++#ifdef HAVE_UNISTD_H ++# include ++#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 if you have libraries in a ++ nonstandard directory ++ LIBS libraries to pass to the linker, e.g. -l ++ CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if ++ you have headers in a nonstandard directory ++ 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 ++#include ++#include ++#include ++/* 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 to if __STDC__ is defined, since ++ # 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 ++@%:@else ++@%:@ include ++@%:@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 ++_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 to if __STDC__ is defined, since ++ # 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 ++@%:@else ++@%:@ include ++@%:@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 ++_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 works" >&5 ++echo $ECHO_N "checking whether 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 ++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 works" >&5 ++echo $ECHO_N "checking whether 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 ++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 to if __STDC__ is defined, since ++ # 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 ++@%:@else ++@%:@ include ++@%:@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 ++_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 to if __STDC__ is defined, since ++ # 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 ++@%:@else ++@%:@ include ++@%:@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 ++_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 declares $ac_func. ++ For example, HP-UX 11i 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 to if __STDC__ is defined, since ++ exists even on freestanding compilers. */ ++ ++#ifdef __STDC__ ++# include ++#else ++# include ++#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 declares $ac_func. ++ For example, HP-UX 11i 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 to if __STDC__ is defined, since ++ exists even on freestanding compilers. */ ++ ++#ifdef __STDC__ ++# include ++#else ++# include ++#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 ++#include ++#include ++#include ++ ++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 ++ ++_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 ++ ++_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 ++#include ++#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 ++@%:@include ++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 ++@%:@include ++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 ++ ++_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 ++ ++_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 or ! ++ ++=========================================" >&5 ++echo "$as_me: error: ++========================================= ++ ++Neither uint32_t nor u_int32_t defined by or ! ++ ++=========================================" >&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 ++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 ++@%:@include ++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 ++@%:@include ++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 ++@%:@include ++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 < ++#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 ++#include ++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 ++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 declares $ac_func. ++ For example, HP-UX 11i 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 to if __STDC__ is defined, since ++ exists even on freestanding compilers. */ ++ ++#ifdef __STDC__ ++# include ++#else ++# include ++#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 ++_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 ++_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 is emulated" >&5 ++echo $ECHO_N "checking whether 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 ++#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 declares $ac_func. ++ For example, HP-UX 11i 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 to if __STDC__ is defined, since ++ exists even on freestanding compilers. */ ++ ++#ifdef __STDC__ ++# include ++#else ++# include ++#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 declares $ac_func. ++ For example, HP-UX 11i 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 to if __STDC__ is defined, since ++ exists even on freestanding compilers. */ ++ ++#ifdef __STDC__ ++# include ++#else ++# include ++#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 ++#include ++#include ++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 declares dlopen. ++ For example, HP-UX 11i declares gettimeofday. */ ++#define dlopen innocuous_dlopen ++ ++/* System header to define __stub macros and hopefully few prototypes, ++ which can conflict with char dlopen (); below. ++ Prefer to if __STDC__ is defined, since ++ exists even on freestanding compilers. */ ++ ++#ifdef __STDC__ ++# include ++#else ++# include ++#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 declares dlopen. ++ For example, HP-UX 11i declares gettimeofday. */ ++#define dlopen innocuous_dlopen ++ ++/* System header to define __stub macros and hopefully few prototypes, ++ which can conflict with char dlopen (); below. ++ Prefer to if __STDC__ is defined, since ++ exists even on freestanding compilers. */ ++ ++#ifdef __STDC__ ++# include ++#else ++# include ++#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 ++#include ++ ++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 ++#include ++#include ++#include ++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 ++#include ++ ++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 ++#include ++ ++ 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 ++#include ++ ++ 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 ++#include ++ ++ 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 ++#include ++ ++ 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 ++#include ++ ++ 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 ++#include ++ ++ 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 ++@%:@include ++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 declares $ac_func. ++ For example, HP-UX 11i 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 to if __STDC__ is defined, since ++ exists even on freestanding compilers. */ ++ ++#ifdef __STDC__ ++# include ++#else ++# include ++#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 ++#include ++ ++#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 ++# 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 declares $ac_func. ++ For example, HP-UX 11i 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 to if __STDC__ is defined, since ++ exists even on freestanding compilers. */ ++ ++#ifdef __STDC__ ++# include ++#else ++# include ++#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 ++#include ++#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 " >&5 ++echo $ECHO_N "checking for ... $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 ++#if __FreeBSD_version < 500000 ++#include ++#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 ++_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 ++_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 ++ ++_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 ++ ++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 declares $ac_func. ++ For example, HP-UX 11i 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 to if __STDC__ is defined, since ++ exists even on freestanding compilers. */ ++ ++#ifdef __STDC__ ++# include ++#else ++# include ++#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 ++#include ++ ++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 ++#include ++ ++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 ++_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 ++_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 ++_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 ++_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 &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 ++#include ++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 ++#include ++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 ++#include ++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 ++#include ++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 ++#include ++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 ++#include ++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 ++#include ++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 ++#include ++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 ++#include ++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 ++#include ++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 ++#include ++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 ++#include ++#include ++ ++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 ++#include ++#include ++ ++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 ." ++ ++_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 >$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 >$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 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 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 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 header file. */ ++#undef HAVE_SYS_STAT_H]) ++m4trace:configure.in:310: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ ++#undef HAVE_STDLIB_H]) ++m4trace:configure.in:310: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ ++#undef HAVE_STRING_H]) ++m4trace:configure.in:310: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the header file. */ ++#undef HAVE_MEMORY_H]) ++m4trace:configure.in:310: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the header file. */ ++#undef HAVE_STRINGS_H]) ++m4trace:configure.in:310: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the header file. */ ++#undef HAVE_INTTYPES_H]) ++m4trace:configure.in:310: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the header file. */ ++#undef HAVE_STDINT_H]) ++m4trace:configure.in:310: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the 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 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 header file. */ ++#undef HAVE_ENDIAN_H]) ++m4trace:configure.in:323: -1- AH_OUTPUT([HAVE_MACHINE_ENDIAN_H], [/* Define to 1 if you have the 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 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 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 header file. */ ++#undef HAVE_UNISTD_H]) ++m4trace:configure.in:374: -1- AH_OUTPUT([HAVE_TERMIO_H], [/* Define to 1 if you have the header file. */ ++#undef HAVE_TERMIO_H]) ++m4trace:configure.in:374: -1- AH_OUTPUT([HAVE_NETDB_H], [/* Define to 1 if you have the header file. */ ++#undef HAVE_NETDB_H]) ++m4trace:configure.in:374: -1- AH_OUTPUT([HAVE_SYS_EVENT_H], [/* Define to 1 if you have the header file. */ ++#undef HAVE_SYS_EVENT_H]) ++m4trace:configure.in:374: -1- AH_OUTPUT([HAVE_PWD_H], [/* Define to 1 if you have the header file. */ ++#undef HAVE_PWD_H]) ++m4trace:configure.in:374: -1- AH_OUTPUT([HAVE_GRP_H], [/* Define to 1 if you have the 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 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 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 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 header file. */ ++#undef HAVE_SYS_MMAN_H]) ++m4trace:configure.in:437: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ ++#undef HAVE_STDLIB_H]) ++m4trace:configure.in:437: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the 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 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 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 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 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 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 "^&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 . ++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 . ++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 . ++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 \n#include \n#include "; ++ 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 \n#include "; ++ 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 </tmp/click-buildtool-standards.$$ ++- AddressInfo-AddressInfo ++- AlignmentInfo-AlignmentInfo ++- ErrorElement-ErrorElement ++- PortInfo-PortInfo ++- 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 . ++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 . ++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 . ++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 . ++EOF ++ exit 0;; ++ *) ++ kversion_usage;; ++ esac ++ done ++ ++ cat < ++#include ++#include ++ ++/* a new version of EXPORT_NO_SYMBOLS that works */ ++const int __ksymtab_nothing[0] __attribute__((section("__ksymtab"))) = { }; ++EOF ++ test $gpl = 1 && cat < 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 . ++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 . ++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 . ++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 " ++ echo "#include " ++ echo "#include " ++ 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 . ++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 . ++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 < ++#include ++/* 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 < +-#endif + #include + 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 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 ++#endif ++#include ++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 ++ ++#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 ++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 ++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 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 ++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 ++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 ++| 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 ++| #ifdef HAVE_SYS_TYPES_H ++| # include ++| #endif ++| #ifdef HAVE_SYS_STAT_H ++| # include ++| #endif ++| #ifdef STDC_HEADERS ++| # include ++| # include ++| #else ++| # ifdef HAVE_STDLIB_H ++| # include ++| # endif ++| #endif ++| #ifdef HAVE_STRING_H ++| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H ++| # include ++| # endif ++| # include ++| #endif ++| #ifdef HAVE_STRINGS_H ++| # include ++| #endif ++| #ifdef HAVE_INTTYPES_H ++| # include ++| #endif ++| #ifdef HAVE_STDINT_H ++| # include ++| #endif ++| #ifdef HAVE_UNISTD_H ++| # include ++| #endif ++| #include ++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 ++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 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 declares kqueue. ++| For example, HP-UX 11i declares gettimeofday. */ ++| #define kqueue innocuous_kqueue ++| ++| /* System header to define __stub macros and hopefully few prototypes, ++| which can conflict with char kqueue (); below. ++| Prefer to if __STDC__ is defined, since ++| exists even on freestanding compilers. */ ++| ++| #ifdef __STDC__ ++| # include ++| #else ++| # include ++| #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 declares dlopen. ++| For example, HP-UX 11i declares gettimeofday. */ ++| #define dlopen innocuous_dlopen ++| ++| /* System header to define __stub macros and hopefully few prototypes, ++| which can conflict with char dlopen (); below. ++| Prefer to if __STDC__ is defined, since ++| exists even on freestanding compilers. */ ++| ++| #ifdef __STDC__ ++| # include ++| #else ++| # include ++| #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 ++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 ++| #ifdef HAVE_SYS_TYPES_H ++| # include ++| #endif ++| #ifdef HAVE_SYS_STAT_H ++| # include ++| #endif ++| #ifdef STDC_HEADERS ++| # include ++| # include ++| #else ++| # ifdef HAVE_STDLIB_H ++| # include ++| # endif ++| #endif ++| #ifdef HAVE_STRING_H ++| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H ++| # include ++| # endif ++| # include ++| #endif ++| #ifdef HAVE_STRINGS_H ++| # include ++| #endif ++| #ifdef HAVE_INTTYPES_H ++| # include ++| #endif ++| #ifdef HAVE_STDINT_H ++| # include ++| #endif ++| #ifdef HAVE_UNISTD_H ++| # include ++| #endif ++| #include ++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 ++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 ++| #ifdef HAVE_SYS_TYPES_H ++| # include ++| #endif ++| #ifdef HAVE_SYS_STAT_H ++| # include ++| #endif ++| #ifdef STDC_HEADERS ++| # include ++| # include ++| #else ++| # ifdef HAVE_STDLIB_H ++| # include ++| # endif ++| #endif ++| #ifdef HAVE_STRING_H ++| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H ++| # include ++| # endif ++| # include ++| #endif ++| #ifdef HAVE_STRINGS_H ++| # include ++| #endif ++| #ifdef HAVE_INTTYPES_H ++| # include ++| #endif ++| #ifdef HAVE_STDINT_H ++| # include ++| #endif ++| #ifdef HAVE_UNISTD_H ++| # include ++| #endif ++| #include ++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 ++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 ++| #ifdef HAVE_SYS_TYPES_H ++| # include ++| #endif ++| #ifdef HAVE_SYS_STAT_H ++| # include ++| #endif ++| #ifdef STDC_HEADERS ++| # include ++| # include ++| #else ++| # ifdef HAVE_STDLIB_H ++| # include ++| # endif ++| #endif ++| #ifdef HAVE_STRING_H ++| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H ++| # include ++| # endif ++| # include ++| #endif ++| #ifdef HAVE_STRINGS_H ++| # include ++| #endif ++| #ifdef HAVE_INTTYPES_H ++| # include ++| #endif ++| #ifdef HAVE_STDINT_H ++| # include ++| #endif ++| #ifdef HAVE_UNISTD_H ++| # include ++| #endif ++| #include ++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 ++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 ++| #include ++| ++| 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 ++| #include ++| ++| 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 ++| #include ++| 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 ++| #include ++| 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 ++| #include ++| 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 ++| #include ++| 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 ++| #include ++| 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 ++| #include ++| 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 ++| #include ++| 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 ++| #include ++| #include ++| ++| 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 ++| #include ++| #include ++| ++| 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 ." ++ ++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 < + #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 ++#include ++#include ]], [[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 ++#include ++]], [[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 ++#include ++#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 , 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 ++#if __FreeBSD_version < 500000 ++#include ++#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 ++#include ++]], [[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 ++#include ++]], [[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 ]]) ++ ++ ++ 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 ]], [[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 ]], [[]])], 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 ]], [[]])], 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 ++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 ++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 ]], ++[[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 ]], ++[[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 ]], ++[[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 ]], ++[[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 ]], ++[[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 ]], ++[[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 ++#include ]]) ++ 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 ++#include ]]) ++ 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 ++ #include ++ #include ++ #include ++--- ./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 ++ #include ++ #include ++ #include ++--- ./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 ++ #include ++ #include ++ 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 ++ #include ++ #include ++ #include ++--- ./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_CXX_PROTECT ++ #if CLICK_LINUXMODULE +++#include ++ # include ++ # include ++ #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_CXX_PROTECT +++#include ++ # ifdef WANT_MOD_USE_COUNT ++ # define __NO_VERSION__ ++ # include ++--- ./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 ++ #include ++ #include ++ #include ++@@ -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, ×tamp, 8); ++ # else ++- skb_set_timestamp(skb(), ×tamp.timeval()); +++ memcpy(&skb()->tstamp, ×tamp, 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(h); +++ skb()->mac_header = const_cast(h); ++ #else /* User-space and BSD kernel module */ ++ _mac = const_cast(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(h); ++- skb()->nh.raw = const_cast(h) + len; +++ skb()->mac_header = const_cast(h); +++ skb()->network_header = const_cast(h) + len; ++ #else /* User-space and BSD kernel module */ ++ _mac = const_cast(h); ++ _nh = const_cast(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(h); ++- skb()->h.raw = const_cast(h) + len; +++ skb()->network_header = const_cast(h); +++ skb()->transport_header = const_cast(h) + len; ++ #else /* User-space and BSD kernel module */ ++ _nh = const_cast(h); ++ _h = const_cast(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 ++ #if !HAVE_LINUXMODULE_2_6 ++ # include ++ #endif ++ #include ++ 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|^ +- 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 +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#ifdef SIOCETHTOOL +-#include +-#endif +-#ifdef NETIF_F_HW_VLAN_TX +-#include +-#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 +- 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 +- 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, "); +-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 +- 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 ++#include ++#include "anydevice.hh" ++#include ++#include ++#include ++#include ++CLICK_CXX_PROTECT ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) ++#include ++#endif ++#include ++CLICK_CXX_UNPROTECT ++#include ++ ++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 &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 ++#include ++#include "fromdevice.hh" ++#include ++#include ++#include ++#include ++#include ++ ++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 &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?", ×tamp, ++ "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 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(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 ++#include ++#include "fromhost.hh" ++#include ++#include ++#include ++ ++#include ++CLICK_CXX_PROTECT ++#include ++#include ++#include ++#include ++#include ++CLICK_CXX_UNPROTECT ++#include ++ ++#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 &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 ++#include + #include + #include + #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 ++#include ++#include "polldevice.hh" ++#include "todevice.hh" ++#include ++#include ++#include ++#include ++#include ++ ++#include ++CLICK_CXX_PROTECT ++#include ++#if __i386__ ++#include ++#endif ++CLICK_CXX_UNPROTECT ++#include ++ ++/* 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 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 &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 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 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 ++#include "tohost.hh" ++#include ++#include ++ ++#include ++CLICK_CXX_PROTECT ++#include ++#include ++#include ++#include ++#include ++#if LINUX_VERSION_CODE >= 0x020400 && LINUX_VERSION_CODE < 0x020600 ++# include ++#endif ++CLICK_CXX_UNPROTECT ++#include ++ ++// 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 &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 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(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 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#if CLICK_NS ++# include ++#endif ++#if CLICK_USERLEVEL ++# include ++#endif ++#if CLICK_USERLEVEL && defined(__linux__) ++# include ++# include ++# include ++# include ++# include ++#elif CLICK_USERLEVEL && (defined(__APPLE__) || defined(__FreeBSD__)) ++# include ++# include ++# include ++# include ++# include ++#endif ++#if CLICK_LINUXMODULE ++# include ++CLICK_CXX_PROTECT ++# include ++# include ++# include ++# include ++CLICK_CXX_UNPROTECT ++# include ++#endif ++CLICK_DECLS ++ ++AddressInfo::AddressInfo() ++{ ++} ++ ++AddressInfo::~AddressInfo() ++{ ++} ++ ++int ++AddressInfo::configure(Vector &conf, ErrorHandler *errh) ++{ ++ int before = errh->nerrors(); ++ ++ for (int i = 0; i < conf.size(); i++) { ++ Vector 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 device_names; ++ static Vector 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 ++ // ++ 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(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(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(pos); ++ if (nextifm->ifm_type != RTM_NEWADDR) ++ break; ++ ++ struct ifa_msghdr* ifam = reinterpret_cast(nextifm); ++ char* sa_buf = reinterpret_cast(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(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() ++ ++// template instance ++#include ++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 ++ ++/* 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 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_CXX_PROTECT ++#include ++#include ++CLICK_CXX_UNPROTECT ++#include ++ ++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_CXX_PROTECT ++#include ++CLICK_CXX_UNPROTECT ++#include ++ ++ ++#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 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 ++#endif ++#include ++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 ++ ++#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 ++ ++#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 uses bpf_timeval. */ ++/* #undef HAVE_BPF_TIMEVAL */ ++ ++/* Define if you have the 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 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 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 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 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 header file. */ ++/* #undef HAVE_NET_BPF_H */ ++ ++/* Define if you have the header file. */ ++/* #undef HAVE_NET_IF_TAP_H */ ++ ++/* Define if you have the header file. */ ++/* #undef HAVE_NET_IF_TUN_H */ ++ ++/* Define if you have the header file. */ ++#define HAVE_NETDB_H 1 ++ ++/* Define if exists and works. */ ++/* #undef HAVE_NEW_H */ ++ ++/* Define if 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 header file. */ ++#define HAVE_POLL_H 1 ++ ++/* Placement new is always provided below. */ ++#define HAVE_PLACEMENT_NEW 1 ++ ++/* Define if you have the 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 header file. */ ++#define HAVE_STRINGS_H 1 ++ ++/* Define if you have the strtoul function. */ ++#define HAVE_STRTOUL 1 ++ ++/* Define if you have the header file. */ ++/* #undef HAVE_SYS_EVENT_H */ ++ ++/* Define if you have the header file. */ ++#define HAVE_SYS_MMAN_H 1 ++ ++/* Define if you have the tcgetpgrp function. */ ++#define HAVE_TCGETPGRP 1 ++ ++/* Define if you have the 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 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 ++#endif ++#include ++ ++/* 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 ++ ++/* 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 ++#elif HAVE_NEW_H ++# include ++#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 ++#endif ++ ++/* Define stuff under a FreeBSD module. */ ++#ifdef CLICK_BSDMODULE ++# include ++#endif ++ ++/* Define stuff under nsclick. */ ++#ifdef CLICK_NS ++# include ++#endif ++ ++/* Define stuff under tools or a user-level driver. */ ++#if defined(CLICK_USERLEVEL) || defined(CLICK_TOOL) ++# include ++#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
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_CXX_PROTECT ++# ifdef WANT_MOD_USE_COUNT ++# define __NO_VERSION__ ++# include ++# define HAVE_MOD_USE_COUNT 1 ++# endif ++# include ++# include ++# include ++# include ++# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) ++# include ++# include ++# include ++# else ++# include ++# endif ++# include ++# include ++# include ++CLICK_CXX_UNPROTECT ++# include ++ ++#elif CLICK_BSDMODULE ++ ++# include ++CLICK_CXX_PROTECT ++# include ++# include ++# include ++# include ++# include ++# include ++# include ++# include ++# include ++# include ++CLICK_CXX_UNPROTECT ++# include ++ ++#else /* CLICK_USERLEVEL */ ++ ++# include ++# include ++# include ++# include ++# include ++# include ++# include ++# include ++# include ++# 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(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 ++# 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 ++# 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, ×tamp, 8); + # else +- skb_set_timestamp(skb(), ×tamp.timeval()); ++ memcpy(&skb()->tstamp, ×tamp, 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(h); ++ skb()->mac_header = const_cast(h); + #else /* User-space and BSD kernel module */ + _mac = const_cast(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(h); +- skb()->nh.raw = const_cast(h) + len; ++ skb()->mac_header = const_cast(h); ++ skb()->network_header = const_cast(h) + len; + #else /* User-space and BSD kernel module */ + _mac = const_cast(h); + _nh = const_cast(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(h); +- skb()->h.raw = const_cast(h) + len; ++ skb()->network_header = const_cast(h); ++ skb()->transport_header = const_cast(h) + len; + #else /* User-space and BSD kernel module */ + _nh = const_cast(h); + _h = const_cast(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 ++#include ++#include ++#include ++#if CLICK_LINUXMODULE ++# include ++#else ++# include ++#endif ++struct click_ether; ++struct click_ip; ++struct click_icmp; ++struct click_ip6; ++struct click_tcp; ++struct click_udp; ++ ++#if CLICK_NS ++# include ++#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 ×tamp_anno() const; ++ inline Timestamp ×tamp_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(mac_header()); ++} ++ ++inline const click_ip * ++Packet::ip_header() const ++{ ++ return reinterpret_cast(network_header()); ++} ++ ++inline const click_ip6 * ++Packet::ip6_header() const ++{ ++ return reinterpret_cast(network_header()); ++} ++ ++inline const click_icmp * ++Packet::icmp_header() const ++{ ++ return reinterpret_cast(transport_header()); ++} ++ ++inline const click_tcp * ++Packet::tcp_header() const ++{ ++ return reinterpret_cast(transport_header()); ++} ++ ++inline const click_udp * ++Packet::udp_header() const ++{ ++ return reinterpret_cast(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 ×tamp) ++{ ++#if CLICK_LINUXMODULE ++# if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 13) ++ memcpy(&skb()->stamp, ×tamp, 8); ++# else ++ skb_set_timestamp(skb(), ×tamp.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(skb); ++ } else { ++ Packet *p = reinterpret_cast(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(skb())); ++#else ++ return (_data_packet || _use_count > 1); ++#endif ++} ++ ++inline WritablePacket * ++Packet::uniqueify() ++{ ++ if (!shared()) ++ return static_cast(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(d); ++ _tail = _end = const_cast(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(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(h); ++#else /* User-space and BSD kernel module */ ++ _mac = const_cast(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(h); ++ skb()->nh.raw = const_cast(h) + len; ++#else /* User-space and BSD kernel module */ ++ _mac = const_cast(h); ++ _nh = const_cast(h) + len; ++#endif ++} ++ ++inline void ++Packet::set_ether_header(const click_ether *h) ++{ ++ set_mac_header(reinterpret_cast(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(h); ++ skb()->h.raw = const_cast(h) + len; ++#else /* User-space and BSD kernel module */ ++ _nh = const_cast(h); ++ _h = const_cast(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(iph), len); ++} ++ ++inline void ++Packet::set_ip6_header(const click_ip6 *ip6h, uint32_t len) ++{ ++ set_network_header(reinterpret_cast(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(Packet::data()); ++} ++ ++inline unsigned char * ++WritablePacket::end_data() const ++{ ++ return const_cast(Packet::end_data()); ++} ++ ++inline unsigned char * ++WritablePacket::buffer() const ++{ ++ return const_cast(Packet::buffer()); ++} ++ ++inline unsigned char * ++WritablePacket::end_buffer() const ++{ ++ return const_cast(Packet::end_buffer()); ++} ++ ++inline unsigned char * ++WritablePacket::buffer_data() const ++{ ++ return const_cast(Packet::buffer()); ++} ++ ++inline unsigned char * ++WritablePacket::mac_header() const ++{ ++ return const_cast(Packet::mac_header()); ++} ++ ++inline unsigned char * ++WritablePacket::network_header() const ++{ ++ return const_cast(Packet::network_header()); ++} ++ ++inline unsigned char * ++WritablePacket::transport_header() const ++{ ++ return const_cast(Packet::transport_header()); ++} ++ ++inline click_ether * ++WritablePacket::ether_header() const ++{ ++ return const_cast(Packet::ether_header()); ++} ++ ++inline click_ip * ++WritablePacket::ip_header() const ++{ ++ return const_cast(Packet::ip_header()); ++} ++ ++inline click_ip6 * ++WritablePacket::ip6_header() const ++{ ++ return const_cast(Packet::ip6_header()); ++} ++ ++inline click_icmp * ++WritablePacket::icmp_header() const ++{ ++ return const_cast(Packet::icmp_header()); ++} ++ ++inline click_tcp * ++WritablePacket::tcp_header() const ++{ ++ return const_cast(Packet::tcp_header()); ++} ++ ++inline click_udp * ++WritablePacket::udp_header() const ++{ ++ return const_cast(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_CXX_PROTECT + #if CLICK_LINUXMODULE ++#include + # include + # include + #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_CXX_PROTECT ++#if CLICK_LINUXMODULE ++# include ++# include ++#else ++# include ++# include ++#endif ++ ++/* ++ * -- 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 ++#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 "^&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 . ++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 . ++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 . ++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 \n#include \n#include "; ++ 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 \n#include "; ++ 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 </tmp/click-buildtool-standards.$$ ++- AddressInfo-AddressInfo ++- AlignmentInfo-AlignmentInfo ++- ErrorElement-ErrorElement ++- PortInfo-PortInfo ++- 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 . ++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 . ++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 . ++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 . ++EOF ++ exit 0;; ++ *) ++ kversion_usage;; ++ esac ++ done ++ ++ cat < ++#include ++#include ++ ++/* a new version of EXPORT_NO_SYMBOLS that works */ ++const int __ksymtab_nothing[0] __attribute__((section("__ksymtab"))) = { }; ++EOF ++ test $gpl = 1 && cat < 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 . ++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 . ++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 . ++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 " ++ echo "#include " ++ echo "#include " ++ 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 . ++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 . ++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 < ++#include ++/* 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 < 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"; ++ } ++ $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]/"\\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 ++ $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]/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 ++ $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 = ; ++ 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/<//g; ++ $x =~ s/&/&/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 !/^{xmlunquote($hf)} = 1 if defined($hf); ++ } ++ } ++} ++ ++sub read_elementmap ($;$) { ++ my($fn, $headerhash) = @_; ++ open(E, $fn) || die "$fn: $!\n"; ++ local($/) = undef; ++ read_elementmap_text(, $headerhash); ++ close E; ++} ++ ++sub process_file_set ($$) { ++ my($fn, $fnhash) = @_; ++ if (open(IN, ($fn eq '-' ? "<&STDIN" : $fn))) { ++ my(@a, @b, $t, $x); ++ $t = ; ++ 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 . ++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 () { ++ 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{ }{ }g; ++ if (@elts) { ++ push @Links, "$x"; ++ $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(" - ", @Links); ++ print OUT <<"EOD;"; ++.\\"html

By Function: ++.\\"html $links
++.\\"html Alphabetical List

++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 = ; ++ 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 = ; ++ 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/&/&/g; ++ $x =~ s/; ++ 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 . ++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 " ++\n"; ++print OUT "\n" if defined($sourcedir) && $sourcedir =~ m|^/|; ++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 "\n"; ++} ++ ++print OUT "\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 = ) { ++ 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 = "" if $wanted eq "\376"; ++ $wanted =~ s/\r?\n?\Z//; ++ $got = "" 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) = ; ++ $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)); ++ $_ = ; ++ 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 ": $!\n"; ++ return -1; ++ } ++ $display_fn = ""; ++ } 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 . ++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=I ++ ++Provide a setting for I. Occurrences in the script of ++'C<$VARIABLE>' or 'C<${VARIABLE}>' will be replaced by I. 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; 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, +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 ++inline T * ++find(T *begin, T *end, const T &val) ++{ ++ while (begin < end && *begin != val) ++ begin++; ++ return begin; ++} ++ ++template ++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 ++#include ++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 &, ++ ErrorHandler * = 0); ++String create_ar_string(const Vector &, 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 ++#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 ++ * @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 ++#include ++CLICK_DECLS ++ ++#define BIGHASHMAP_REARRANGE_ON_FIND 1 ++ ++template ++void ++HashMap::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 ++HashMap::HashMap() ++ : _default_value(), _arena(0) ++{ ++ initialize(0, DEFAULT_INITIAL_NBUCKETS); ++} ++ ++template ++HashMap::HashMap(const V &def, HashMap_ArenaFactory *factory) ++ : _default_value(def), _arena(0) ++{ ++ initialize(factory, DEFAULT_INITIAL_NBUCKETS); ++} ++ ++template ++void ++HashMap::copy_from(const HashMap &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(_arena->alloc()); ++ new(reinterpret_cast(&ee->key)) K(e->key); ++ new(reinterpret_cast(&ee->value)) V(e->value); ++ ee->next = 0; ++ *pprev = ee; ++ pprev = &ee->next; ++ } ++ } ++ _n = o._n; ++} ++ ++template ++HashMap::HashMap(const HashMap &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 ++HashMap & ++HashMap::operator=(const HashMap &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 ++HashMap::~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 ++void ++HashMap::set_dynamic_resizing(bool on) ++{ ++ if (!on) ++ _capacity = 0x7FFFFFFF; ++ else if (_nbuckets >= MAX_NBUCKETS) ++ _capacity = 0x7FFFFFFE; ++ else ++ _capacity = DEFAULT_RESIZE_THRESHOLD * _nbuckets; ++} ++ ++template ++void ++HashMap::set_arena(HashMap_ArenaFactory *factory) ++{ ++ assert(empty()); ++ if (_arena) ++ _arena->unuse(); ++ _arena = HashMap_ArenaFactory::get_arena(sizeof(Elt), factory); ++ _arena->use(); ++} ++ ++template ++inline size_t ++HashMap::bucket(const K &key) const ++{ ++ return ((size_t) hashcode(key)) % _nbuckets; ++} ++ ++template ++typename HashMap::Pair * ++HashMap::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 ++void ++HashMap::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 ++void ++HashMap::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 ++bool ++HashMap::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(_arena->alloc())) { ++ new(reinterpret_cast(&e->key)) K(key); ++ new(reinterpret_cast(&e->value)) V(value); ++ e->next = _buckets[b]; ++ _buckets[b] = e; ++ _n++; ++ } ++ return true; ++} ++ ++template ++bool ++HashMap::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 ++typename HashMap::Pair * ++HashMap::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(_arena->alloc())) { ++ new(reinterpret_cast(&e->key)) K(key); ++ new(reinterpret_cast(&e->value)) V(default_value); ++ e->next = _buckets[b]; ++ _buckets[b] = e; ++ _n++; ++ return e; ++ } else ++ return 0; ++} ++ ++template ++void ++HashMap::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 ++void ++HashMap::swap(HashMap &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 ++_HashMap_const_iterator::_HashMap_const_iterator(const HashMap *hm, bool begin) ++ : _hm(hm) ++{ ++ size_t nb = _hm->_nbuckets; ++ typename HashMap::Elt **b = _hm->_buckets; ++ for (_bucket = 0; _bucket < nb && begin; _bucket++) ++ if (b[_bucket]) { ++ _elt = b[_bucket]; ++ return; ++ } ++ _elt = 0; ++} ++ ++template ++void ++_HashMap_const_iterator::operator++(int) ++{ ++ if (_elt->next) ++ _elt = _elt->next; ++ else { ++ size_t nb = _hm->_nbuckets; ++ typename HashMap::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 ++void ++HashMap::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 ++HashMap::HashMap() ++ : _default_value(0), _arena(0) ++{ ++ initialize(0, DEFAULT_INITIAL_NBUCKETS); ++} ++ ++template ++HashMap::HashMap(void *def, HashMap_ArenaFactory *factory) ++ : _default_value(def), _arena(0) ++{ ++ initialize(factory, DEFAULT_INITIAL_NBUCKETS); ++} ++ ++template ++void ++HashMap::copy_from(const HashMap &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(_arena->alloc()); ++ new(reinterpret_cast(&ee->key)) K(e->key); ++ ee->value = e->value; ++ ee->next = 0; ++ *pprev = ee; ++ pprev = &ee->next; ++ } ++ } ++ _n = o._n; ++} ++ ++template ++HashMap::HashMap(const HashMap &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 ++HashMap & ++HashMap::operator=(const HashMap &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 ++HashMap::~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 ++void ++HashMap::set_dynamic_resizing(bool on) ++{ ++ if (!on) ++ _capacity = 0x7FFFFFFF; ++ else if (_nbuckets >= MAX_NBUCKETS) ++ _capacity = 0x7FFFFFFE; ++ else ++ _capacity = DEFAULT_RESIZE_THRESHOLD * _nbuckets; ++} ++ ++template ++void ++HashMap::set_arena(HashMap_ArenaFactory *factory) ++{ ++ assert(empty()); ++ if (_arena) ++ _arena->unuse(); ++ _arena = HashMap_ArenaFactory::get_arena(sizeof(Elt), factory); ++ _arena->use(); ++} ++ ++template ++inline size_t ++HashMap::bucket(const K &key) const ++{ ++ return ((size_t) hashcode(key)) % _nbuckets; ++} ++ ++template ++typename HashMap::Pair * ++HashMap::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 ++void ++HashMap::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 ++void ++HashMap::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 ++bool ++HashMap::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(_arena->alloc())) { ++ new(reinterpret_cast(&e->key)) K(key); ++ e->value = value; ++ e->next = _buckets[b]; ++ _buckets[b] = e; ++ _n++; ++ } ++ return true; ++} ++ ++template ++bool ++HashMap::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 ++typename HashMap::Pair * ++HashMap::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(_arena->alloc())) { ++ new(reinterpret_cast(&e->key)) K(key); ++ e->value = default_value; ++ e->next = _buckets[b]; ++ _buckets[b] = e; ++ _n++; ++ return e; ++ } else ++ return 0; ++} ++ ++template ++void ++HashMap::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 ++void ++HashMap::swap(HashMap &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 ++_HashMap_const_iterator::_HashMap_const_iterator(const HashMap *hm, bool begin) ++ : _hm(hm) ++{ ++ size_t nb = _hm->_nbuckets; ++ typename HashMap::Elt **b = _hm->_buckets; ++ for (_bucket = 0; _bucket < nb && begin; _bucket++) ++ if (b[_bucket]) { ++ _elt = b[_bucket]; ++ return; ++ } ++ _elt = 0; ++} ++ ++template ++void ++_HashMap_const_iterator::operator++(int) ++{ ++ if (_elt->next) ++ _elt = _elt->next; ++ else { ++ size_t nb = _hm->_nbuckets; ++ typename HashMap::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_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 _HashMap_const_iterator; ++template class _HashMap_iterator; ++ ++template ++class HashMap { public: ++ ++ struct Pair; ++ ++ HashMap(); ++ explicit HashMap(const V &, HashMap_ArenaFactory * = 0); ++ HashMap(const HashMap &); ++ ~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 &); ++ ++ // iteration ++ typedef _HashMap_const_iterator const_iterator; ++ typedef _HashMap_iterator 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 &operator=(const HashMap &); ++ ++ 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 &); ++ void resize0(size_t); ++ size_t bucket(const K &) const; ++ ++ friend class _HashMap_iterator; ++ friend class _HashMap_const_iterator; ++ ++}; ++ ++template ++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::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 *_hm; ++ typename HashMap::Elt *_elt; ++ size_t _bucket; ++ ++ _HashMap_const_iterator(const HashMap *m, bool begin); ++ friend class HashMap; ++ friend class _HashMap_iterator; ++ ++}; ++ ++template ++class _HashMap_iterator : public _HashMap_const_iterator { public: ++ ++ typedef _HashMap_const_iterator inherited; ++ ++ typedef typename HashMap::Pair Pair; ++ Pair *pair() const { return const_cast(inherited::pair()); } ++ V &value() const { return const_cast(inherited::value()); } ++ ++ private: ++ ++ _HashMap_iterator(HashMap *m, bool begin) : inherited(m, begin) { } ++ friend class HashMap; ++ ++}; ++ ++template ++inline typename HashMap::const_iterator ++HashMap::begin() const ++{ ++ return const_iterator(this, true); ++} ++ ++template ++inline typename HashMap::iterator ++HashMap::begin() ++{ ++ return iterator(this, true); ++} ++ ++template ++inline typename HashMap::const_iterator ++HashMap::end() const ++{ ++ return const_iterator(this, false); ++} ++ ++template ++inline typename HashMap::iterator ++HashMap::end() ++{ ++ return iterator(this, false); ++} ++ ++template ++inline V * ++HashMap::findp(const K &key) const ++{ ++ Pair *p = find_pair(key); ++ return (p ? &p->value : 0); ++} ++ ++template ++inline const V & ++HashMap::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 ++inline const V & ++HashMap::find(const K &key) const ++{ ++ return find(key, _default_value); ++} ++ ++template ++inline const V & ++HashMap::operator[](const K &key) const ++{ ++ return find(key); ++} ++ ++template ++inline ++_HashMap_const_iterator::operator unspecified_bool_type() const ++{ ++ return live() ? &_HashMap_const_iterator::live : 0; ++} ++ ++ ++template ++class HashMap { public: ++ ++ struct Pair; ++ ++ HashMap(); ++ explicit HashMap(void *, HashMap_ArenaFactory * = 0); ++ HashMap(const HashMap &); ++ ~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 &); ++ ++ // iterators ++ typedef _HashMap_const_iterator const_iterator; ++ typedef _HashMap_iterator 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 &operator=(const HashMap &); ++ ++ 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 &); ++ void resize0(size_t); ++ size_t bucket(const K &) const; ++ ++ friend class _HashMap_iterator; ++ friend class _HashMap_const_iterator; ++ ++}; ++ ++template ++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::Pair Pair; ++ const Pair *pair() const { return _elt; } ++ ++ const K &key() const { return _elt->key; } ++ void *value() const { return _elt->value; } ++ ++ private: ++ ++ const HashMap *_hm; ++ typename HashMap::Elt *_elt; ++ size_t _bucket; ++ ++ _HashMap_const_iterator(const HashMap *, bool begin); ++ template friend class _HashMap_const_iterator; ++ template friend class _HashMap_iterator; ++ template friend class HashMap; ++ ++}; ++ ++template ++class _HashMap_iterator : public _HashMap_const_iterator { public: ++ ++ typedef _HashMap_const_iterator inherited; ++ ++ typedef typename HashMap::Pair Pair; ++ Pair *pair() const { return const_cast(inherited::pair()); } ++ void *&value() const { return this->_elt->value; } ++ ++ private: ++ ++ _HashMap_iterator(HashMap *m, bool begin) : inherited(m, begin) { } ++ template friend class HashMap; ++ ++}; ++ ++template ++inline typename HashMap::const_iterator ++HashMap::begin() const ++{ ++ return const_iterator(this, true); ++} ++ ++template ++inline typename HashMap::iterator ++HashMap::begin() ++{ ++ return iterator(this, true); ++} ++ ++template ++inline typename HashMap::const_iterator ++HashMap::end() const ++{ ++ return const_iterator(this, false); ++} ++ ++template ++inline typename HashMap::iterator ++HashMap::end() ++{ ++ return iterator(this, false); ++} ++ ++template ++inline void ** ++HashMap::findp(const K &key) const ++{ ++ Pair *p = find_pair(key); ++ return (p ? &p->value : 0); ++} ++ ++template ++inline void * ++HashMap::find(const K &key, void *default_value) const ++{ ++ Pair *p = find_pair(key); ++ return (p ? p->value : default_value); ++} ++ ++template ++inline void * ++HashMap::find(const K &key) const ++{ ++ return find(key, _default_value); ++} ++ ++template ++inline void * ++HashMap::operator[](const K &key) const ++{ ++ return find(key); ++} ++ ++template ++inline ++_HashMap_const_iterator::operator unspecified_bool_type() const ++{ ++ return live() ? &_HashMap_const_iterator::live : 0; ++} ++ ++ ++template ++class HashMap : public HashMap { public: ++ ++ typedef HashMap inherited; ++ struct Pair; ++ ++ HashMap() : inherited() { } ++ explicit HashMap(T *def, HashMap_ArenaFactory *factory = 0) ++ : inherited(def, factory) { } ++ HashMap(const HashMap &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(inherited::find_pair(k)); } ++ T **findp(const K &k) const { return reinterpret_cast(inherited::findp(k)); } ++ T *find(const K &k, T *v) const { return reinterpret_cast(inherited::find(k, v)); } ++ T *find(const K &k) const { return reinterpret_cast(inherited::find(k)); } ++ T *operator[](const K &k) const { return reinterpret_cast(inherited::operator[](k)); } ++ ++ Pair *find_pair_force(const K &k, T *v) { return reinterpret_cast(inherited::find_pair_force(k, v)); } ++ Pair *find_pair_force(const K &k) { return reinterpret_cast(inherited::find_pair_force(k)); } ++ T **findp_force(const K &k, T *v) { return reinterpret_cast(inherited::findp_force(k, v)); } ++ T *&find_force(const K &k, T *v) { return *reinterpret_cast(inherited::findp_force(k, v)); } ++ T **findp_force(const K &k) { return reinterpret_cast(inherited::findp_force(k)); } ++ T *&find_force(const K &k) { return *reinterpret_cast(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 &o) { inherited::swap(o); } ++ ++ // iteration ++ typedef _HashMap_const_iterator const_iterator; ++ typedef _HashMap_iterator iterator; ++ inline const_iterator begin() const; ++ inline iterator begin(); ++ inline const_iterator end() const; ++ inline iterator end(); ++ ++ // dynamic resizing methods inherited ++ ++ HashMap &operator=(const HashMap &o) { return static_cast &>(inherited::operator=(o)); } ++ ++ struct Pair { ++ K key; ++ T *value; ++ }; ++ ++}; ++ ++template ++class _HashMap_const_iterator { public: ++ ++ typedef _HashMap_const_iterator 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::Pair Pair; ++ const Pair *pair() const { return reinterpret_cast(_i.pair()); } ++ ++ const K &key() const { return _i.key(); } ++ T *value() const { return reinterpret_cast(_i.value()); } ++ ++ private: ++ ++ inherited _i; ++ ++ _HashMap_const_iterator(const HashMap *t, bool begin) : _i(t, begin) { } ++ friend class _HashMap_iterator; ++ template friend class HashMap; ++ ++}; ++ ++template ++class _HashMap_iterator : public _HashMap_const_iterator { public: ++ ++ typedef _HashMap_const_iterator inherited; ++ ++ typedef typename HashMap::Pair Pair; ++ Pair *pair() const { return const_cast(inherited::pair()); } ++ T *&value() const { return pair()->value; } ++ ++ private: ++ ++ _HashMap_iterator(HashMap *t, bool begin) : inherited(t, begin) { } ++ template friend class HashMap; ++ ++}; ++ ++template ++inline typename HashMap::const_iterator ++HashMap::begin() const ++{ ++ return const_iterator(this, true); ++} ++ ++template ++inline typename HashMap::iterator ++HashMap::begin() ++{ ++ return iterator(this, true); ++} ++ ++template ++inline typename HashMap::const_iterator ++HashMap::end() const ++{ ++ return const_iterator(this, false); ++} ++ ++template ++inline typename HashMap::iterator ++HashMap::end() ++{ ++ return iterator(this, false); ++} ++ ++template ++inline ++_HashMap_const_iterator::operator unspecified_bool_type() const ++{ ++ return inherited::live() ? &inherited::live : 0; ++} ++ ++template ++inline bool ++operator==(const _HashMap_const_iterator &a, const _HashMap_const_iterator &b) ++{ ++ return a.pair() == b.pair(); ++} ++ ++template ++inline bool ++operator!=(const _HashMap_const_iterator &a, const _HashMap_const_iterator &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(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_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< 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 ++ ++/* 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 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 ++#include ++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 ++ ++#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 ++ ++#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 uses bpf_timeval. */ ++/* #undef HAVE_BPF_TIMEVAL */ ++ ++/* Define if you have the 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 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 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 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 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 header file. */ ++/* #undef HAVE_NET_BPF_H */ ++ ++/* Define if you have the header file. */ ++/* #undef HAVE_NET_IF_TAP_H */ ++ ++/* Define if you have the header file. */ ++/* #undef HAVE_NET_IF_TUN_H */ ++ ++/* Define if you have the header file. */ ++#define HAVE_NETDB_H 1 ++ ++/* Define if exists and works. */ ++/* #undef HAVE_NEW_H */ ++ ++/* Define if 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 header file. */ ++#define HAVE_POLL_H 1 ++ ++/* Placement new is always provided below. */ ++#define HAVE_PLACEMENT_NEW 1 ++ ++/* Define if you have the 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 header file. */ ++#define HAVE_STRINGS_H 1 ++ ++/* Define if you have the strtoul function. */ ++#define HAVE_STRTOUL 1 ++ ++/* Define if you have the header file. */ ++/* #undef HAVE_SYS_EVENT_H */ ++ ++/* Define if you have the header file. */ ++#define HAVE_SYS_MMAN_H 1 ++ ++/* Define if you have the tcgetpgrp function. */ ++#define HAVE_TCGETPGRP 1 ++ ++/* Define if you have the 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 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 ++#endif ++#include ++ ++/* 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 ++ ++/* 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 ++#elif HAVE_NEW_H ++# include ++#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 ++#endif ++ ++/* Define stuff under a FreeBSD module. */ ++#ifdef CLICK_BSDMODULE ++# include ++#endif ++ ++/* Define stuff under nsclick. */ ++#ifdef CLICK_NS ++# include ++#endif ++ ++/* Define stuff under tools or a user-level driver. */ ++#if defined(CLICK_USERLEVEL) || defined(CLICK_TOOL) ++# include ++#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 ++#include ++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& conf); ++String cp_unargvec(const Vector& conf); ++ ++void cp_spacevec(const String& str, Vector& conf); ++String cp_pop_spacevec(String& str); ++String cp_unspacevec(const String* begin, const String* end); ++inline String cp_unspacevec(const Vector& 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* 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& 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& conf, CP_VA_PARSE_ARGS_REST) CP_SENTINEL; ++ ++int cp_assign_arguments(const Vector& argv, const String *keys_begin, const String *keys_end, Vector* 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*, 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*, 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& 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& 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& 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(result)); ++} ++ ++inline bool cp_integer(const String& str, int base, long* result) ++{ ++ return cp_integer(str, base, reinterpret_cast(result)); ++} ++ ++inline bool cp_integer(const String& str, long* result) ++{ ++ return cp_integer(str, reinterpret_cast(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(result)); ++} ++ ++inline bool cp_integer(const String& str, int base, unsigned long* result) ++{ ++ return cp_integer(str, base, reinterpret_cast(result)); ++} ++ ++inline bool cp_integer(const String& str, unsigned long* result) ++{ ++ return cp_integer(str, reinterpret_cast(result)); ++} ++#endif ++ ++inline bool cp_ip_address(const String& str, struct in_addr* ina CP_CONTEXT) ++{ ++ return cp_ip_address(str, reinterpret_cast(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_DECLS ++ ++template ++DEQueue::DEQueue(const DEQueue &o) ++ : _l(0), _n(0), _cap(0), _head(0), _tail(0) ++{ ++ *this = o; ++} ++ ++template ++DEQueue::~DEQueue() ++{ ++ for (int i = _head, j = 0; j < _n; i = next_i(i), j++) ++ _l[i].~T(); ++ CLICK_LFREE(_l, _cap * sizeof(T)); ++} ++ ++template DEQueue & ++DEQueue::operator=(const DEQueue &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 DEQueue & ++DEQueue::assign(int n, const T &e) ++{ ++ resize(0, e); ++ resize(n, e); ++ return *this; ++} ++ ++template bool ++DEQueue::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 void ++DEQueue::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 void ++DEQueue::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 void ++DEQueue::swap(DEQueue &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 inline void ++DEQueue::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_DECLS ++ ++template ++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 &); ++ ~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 &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 &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(const_iterator::operator[](n)); } ++ T &operator*() const { return const_cast(const_iterator::operator*()); } ++ T *operator->() const { return const_cast(const_iterator::operator->()); } ++ }; ++ ++ iterator begin() { return iterator(*this, 0); } ++ const_iterator begin() const { return const_iterator((DEQueue &) *this, 0); } ++ iterator end() { return iterator(*this, _n); } ++ const_iterator end() const { return const_iterator((DEQueue &) *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 &operator=(const DEQueue &); ++ DEQueue &assign(int n, const T &e = T()); ++ void swap(DEQueue &); ++ ++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 inline void ++DEQueue::push_front(const T &e) ++{ ++ if (_n < _cap || reserve(-1)) { ++ _head = prev_i(_head); ++ new(velt(_head)) T(e); ++ _n++; ++ } ++} ++ ++template inline void ++DEQueue::pop_front() ++{ ++ assert(_n > 0); ++ --_n; ++ _l[_head].~T(); ++ _head = next_i(_head); ++} ++ ++template inline void ++DEQueue::push_back(const T &e) ++{ ++ if (_n < _cap || reserve(-1)) { ++ new(velt(_tail)) T(e); ++ _n++; ++ _tail = next_i(_tail); ++ } ++} ++ ++template inline void ++DEQueue::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 ++ ++#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 &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 &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 ++#include ++#include ++#include ++CLICK_DECLS ++class Router; ++class Master; ++class Task; ++class Timer; ++class Element; ++class ErrorHandler; ++class Bitvector; ++class Handler; ++ ++/** @file ++ * @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&, 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&) const; ++ String configuration() const; ++ ++ virtual bool can_live_reconfigure() const; ++ virtual int live_reconfigure(Vector&, 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_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&); ++ ++}; ++ ++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 ++#if defined(CLICK_USERLEVEL) || defined(CLICK_TOOL) ++# include ++#endif ++#include ++#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 ++#include ++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(_data); ++} ++ ++/** @brief Returns a pointer to the address data. */ ++inline unsigned char * ++EtherAddress::data() ++{ ++ return reinterpret_cast(_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 ++#include ++CLICK_DECLS ++ ++/** @file ++ * @brief Click's classes for supporting exponentially weighted moving ++ * averages. ++ */ ++ ++/** @class DirectEWMAX include/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. unsigned ++ * and uint64_t 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. ++ * ++ *
++ *
P::value_type
++ *
The EWMA's value type. Example: unsigned.
++ * ++ *
P::signed_value_type
++ *
The signed version of P::value_type. Used internally. ++ * Example: int.
++ * ++ *
unsigned P::stability_shift()
++ *
This function should return this EWMA's stability shift ++ * (see below).
++ * ++ *
unsigned P::scale()
++ *
This function should return this EWMA's scaling factor ++ * (see below).
++ * ++ *
unsigned P::compensation()
++ *
This function should return this EWMA's stability compensation, ++ * which normally equals 1 @<@< (stability_shift - 1).
++ *
++ * ++ * 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 ++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 ++inline void ++DirectEWMAX

::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(val_scaled - _avg) >> stability; ++#else ++ if (val_scaled < _avg) ++ _avg -= (_avg - val_scaled) >> stability; ++ else ++ _avg += (val_scaled - _avg) >> stability; ++#endif ++} ++ ++template ++void ++DirectEWMAX

::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(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 ++inline String ++DirectEWMAX

::unparse() const ++{ ++ return cp_unparse_real2(scaled_average(), P::scale()); ++} ++ ++/** @class FixedEWMAXParameters include/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: DirectEWMAX@ ++ * @> 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: DirectEWMAX@ @> defines a EWMA with alpha 1/8 (stability shift 3), ++ * scaling factor 10, and value type uint64_t. ++ */ ++template ++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 unsigned. */ ++typedef DirectEWMAX > DirectEWMA; ++ ++/** @brief A DirectEWMAX with stability shift 3 (alpha 1/8), scaling factor ++ * 10 (10 bits of fraction), and underlying type unsigned. */ ++typedef DirectEWMAX > FastDirectEWMA; ++ ++ ++/** @class StabilityEWMAXParameters include/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: DirectEWMAX@ ++ * @> defines a EWMA with user-settable alpha (stability shift) ++ * initially equal to 1/16, scaling factor 10, and value type unsigned. ++ * ++ * A DirectEWMAX@ @> object has ++ * stability_shift() and set_stability_shift() methods. ++ */ ++template ++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 ++ * @brief An exponentially weighted moving average used to measure a rate. ++ * ++ * The RateEWMAX template class represents an exponentially weighted moving ++ * average that measures a rate: 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 ++ * second, 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: ++ * ++ *

++ *
P::rate_count
++ *
The rate count, as a static constant (for example, defined by an ++ * enum).
++ * ++ *
unsigned P::epoch()
++ *
This function returns the current epoch number.
++ * ++ *
unsigned P::epoch_frequency()
++ *
This function returns the number of epochs per second.
++ *
++ * ++ * 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 ++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

_avg[P::rate_count]; ++ ++ inline void update_time(unsigned now); ++ ++}; ++ ++/** @class RateEWMAXParameters include/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: RateEWMAX@ ++ * @> defines a rate EWMA with user-settable alpha (stability shift) ++ * initially equal to 1/16, scaling factor 10, and value type unsigned. ++ */ ++template ++class RateEWMAXParameters : public FixedEWMAXParameters { 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 unsigned ++ * that measures epochs in jiffies. */ ++typedef RateEWMAX > RateEWMA; ++ ++ ++template ++inline void ++RateEWMAX

::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 ++inline void ++RateEWMAX

::update(signed_value_type delta, unsigned ratenum) ++{ ++ update_time(P::epoch()); ++ _current[ratenum] += delta; ++} ++ ++template ++inline int ++RateEWMAX

::rate(unsigned ratenum) const ++{ ++ return (scaled_average(ratenum) * P::epoch_frequency()) >> _avg[ratenum].scale(); ++} ++ ++template ++inline String ++RateEWMAX

::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 ++# 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_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

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_CXX_PROTECT ++# ifdef WANT_MOD_USE_COUNT ++# define __NO_VERSION__ ++# include ++# define HAVE_MOD_USE_COUNT 1 ++# endif ++# include ++# include ++# include ++# include ++# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) ++# include ++# include ++# include ++# else ++# include ++# endif ++# include ++# include ++# include ++CLICK_CXX_UNPROTECT ++# include ++ ++#elif CLICK_BSDMODULE ++ ++# include ++CLICK_CXX_PROTECT ++# include ++# include ++# include ++# include ++# include ++# include ++# include ++# include ++# include ++# include ++CLICK_CXX_UNPROTECT ++# include ++ ++#else /* CLICK_USERLEVEL */ ++ ++# include ++# include ++# include ++# include ++# include ++# include ++# include ++# include ++# include ++# 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(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 ++# 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 ++# 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_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. ++ * ++ *

Immediate Handler Calls

++ * ++ * 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 ++ * ++ *

HandlerCall Objects

++ * ++ * 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 &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 &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 "[ename.]hname[ value]" ++ * ++ * 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(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 ++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(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 ++ ++#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 ++ ++#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_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 ++#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 ++#include ++#include ++#include ++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 ++#include ++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 ++#include ++#include ++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 _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 ++#include ++#include ++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(&_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(&_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 ++#include ++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 ++#include ++#include ++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 _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 ++#include ++#include ++#include ++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 &) 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 _element_type_map; ++ Vector _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 _element_map; ++ Compound *_c; ++ ++ TunnelEnd *_definputs; ++ TunnelEnd *_defoutputs; ++ ++ // compound elements ++ int _anonymous_offset; ++ ++ // requirements ++ Vector _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 &, Router *); ++ ++ void find_connections(const Hookup &, bool, Vector &) const; ++ void expand_connection(const Hookup &, bool, Vector &) 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 ++# include ++#else ++# include ++# include ++#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 ++} ++# else ++# define __CLICK_LLRPC_CAST(x) (x) ++# include ++# 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 ++#include ++#include ++#include ++#include ++#if CLICK_USERLEVEL ++# include ++# include ++# if HAVE_POLL_H ++# include ++# endif ++#endif ++#if CLICK_NS ++# include ++#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 _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_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 _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 _pollfds; ++ Vector _read_poll_elements; ++ Vector _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 ++ . 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 . ++ 1999-05-03 lpd Original version. ++ */ ++ ++#ifndef CLICK_MD5_H ++#define CLICK_MD5_H ++#if CLICK_LINUXMODULE ++#include ++CLICK_CXX_PROTECT ++#include ++#include ++CLICK_CXX_UNPROTECT ++#include ++ ++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 ++#include ++#include ++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_roots; ++ Vector _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 _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 ++#include ++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&) 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: ++ * ++ *
++ *
SEARCH_STOP
++ *
Stop searching along this path. This is the default.
++ *
SEARCH_CONTINUE
++ *
Continue searching along this path.
++ *
SEARCH_CONTINUE_WAKE
++ *
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.
++ *
++ */ ++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 ++#include ++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) &); ++ ++#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 ++#include ++#include ++#include ++#if CLICK_LINUXMODULE ++# include ++#else ++# include ++#endif ++struct click_ether; ++struct click_ip; ++struct click_icmp; ++struct click_ip6; ++struct click_tcp; ++struct click_udp; ++ ++#if CLICK_NS ++# include ++#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 ×tamp_anno() const; ++ inline Timestamp ×tamp_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(mac_header()); ++} ++ ++inline const click_ip * ++Packet::ip_header() const ++{ ++ return reinterpret_cast(network_header()); ++} ++ ++inline const click_ip6 * ++Packet::ip6_header() const ++{ ++ return reinterpret_cast(network_header()); ++} ++ ++inline const click_icmp * ++Packet::icmp_header() const ++{ ++ return reinterpret_cast(transport_header()); ++} ++ ++inline const click_tcp * ++Packet::tcp_header() const ++{ ++ return reinterpret_cast(transport_header()); ++} ++ ++inline const click_udp * ++Packet::udp_header() const ++{ ++ return reinterpret_cast(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 ×tamp) ++{ ++#if CLICK_LINUXMODULE ++# if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 13) ++ memcpy(&skb()->stamp, ×tamp, 8); ++# else ++ memcpy(&skb()->tstamp, ×tamp, 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(skb); ++ } else { ++ Packet *p = reinterpret_cast(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(skb())); ++#else ++ return (_data_packet || _use_count > 1); ++#endif ++} ++ ++inline WritablePacket * ++Packet::uniqueify() ++{ ++ if (!shared()) ++ return static_cast(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(d); ++ _tail = _end = const_cast(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(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(h); ++#else /* User-space and BSD kernel module */ ++ _mac = const_cast(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(h); ++ skb()->network_header = const_cast(h) + len; ++#else /* User-space and BSD kernel module */ ++ _mac = const_cast(h); ++ _nh = const_cast(h) + len; ++#endif ++} ++ ++inline void ++Packet::set_ether_header(const click_ether *h) ++{ ++ set_mac_header(reinterpret_cast(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(h); ++ skb()->transport_header = const_cast(h) + len; ++#else /* User-space and BSD kernel module */ ++ _nh = const_cast(h); ++ _h = const_cast(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(iph), len); ++} ++ ++inline void ++Packet::set_ip6_header(const click_ip6 *ip6h, uint32_t len) ++{ ++ set_network_header(reinterpret_cast(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(Packet::data()); ++} ++ ++inline unsigned char * ++WritablePacket::end_data() const ++{ ++ return const_cast(Packet::end_data()); ++} ++ ++inline unsigned char * ++WritablePacket::buffer() const ++{ ++ return const_cast(Packet::buffer()); ++} ++ ++inline unsigned char * ++WritablePacket::end_buffer() const ++{ ++ return const_cast(Packet::end_buffer()); ++} ++ ++inline unsigned char * ++WritablePacket::buffer_data() const ++{ ++ return const_cast(Packet::buffer()); ++} ++ ++inline unsigned char * ++WritablePacket::mac_header() const ++{ ++ return const_cast(Packet::mac_header()); ++} ++ ++inline unsigned char * ++WritablePacket::network_header() const ++{ ++ return const_cast(Packet::network_header()); ++} ++ ++inline unsigned char * ++WritablePacket::transport_header() const ++{ ++ return const_cast(Packet::transport_header()); ++} ++ ++inline click_ether * ++WritablePacket::ether_header() const ++{ ++ return const_cast(Packet::ether_header()); ++} ++ ++inline click_ip * ++WritablePacket::ip_header() const ++{ ++ return const_cast(Packet::ip_header()); ++} ++ ++inline click_ip6 * ++WritablePacket::ip6_header() const ++{ ++ return const_cast(Packet::ip6_header()); ++} ++ ++inline click_icmp * ++WritablePacket::icmp_header() const ++{ ++ return const_cast(Packet::icmp_header()); ++} ++ ++inline click_tcp * ++WritablePacket::tcp_header() const ++{ ++ return const_cast(Packet::tcp_header()); ++} ++ ++inline click_udp * ++WritablePacket::udp_header() const ++{ ++ return const_cast(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_DECLS ++ ++template ++struct Pair { ++ T first; ++ U second; ++ Pair() : first(), second() { } ++ Pair(const T &t, const U &u) : first(t), second(u) { } ++ typedef size_t (Pair::*unspecified_bool_type)() const; ++ inline operator unspecified_bool_type() const; ++ inline size_t hashcode() const; ++}; ++ ++template ++inline Pair::operator unspecified_bool_type() const ++{ ++ return first || second ? &Pair::hashcode : 0; ++} ++ ++template ++inline bool operator==(const Pair &a, const Pair &b) ++{ ++ return a.first == b.first && a.second == b.second; ++} ++ ++template ++inline bool operator!=(const Pair &a, const Pair &b) ++{ ++ return a.first != b.first || a.second != b.second; ++} ++ ++template ++inline bool operator<(const Pair &a, const Pair &b) ++{ ++ return a.first < b.first ++ || (!(b.first < a.first) && a.second < b.second); ++} ++ ++template ++inline size_t Pair::hashcode() const ++{ ++ return (CLICK_NAME(hashcode)(first) << 13) ^ CLICK_NAME(hashcode)(second); ++} ++ ++template ++inline Pair make_pair(const T &t, const U &u) ++{ ++ return Pair(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 ++#include ++#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 ++#include ++#include ++#include ++#include ++#if CLICK_NS ++# include ++#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& 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& result); ++ int upstream_elements(Element* e, int port, ElementFilter* filter, Vector& 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& 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& 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 *> _listenvecs; ++ Vector* 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 _elements; ++ Vector _element_names; ++ Vector _element_configurations; ++ Vector _element_landmarks; ++ Vector _element_configure_order; ++ ++ Vector _hookup_from; ++ Vector _hookup_to; ++ ++ /** @cond never */ ++ struct Gport { ++ Vector e2g; ++ Vector g2e; ++ int size() const { return g2e.size(); } ++ }; ++ /** @endcond never */ ++ Gport _gports[2]; ++ ++ Vector _hookup_gports[2]; ++ ++ Vector _requirements; ++ ++ volatile int _state; ++ bool _have_connections : 1; ++ volatile int _running; ++ ++ Vector _ehandler_first_by_element; ++ Vector _ehandler_to_handler; ++ Vector _ehandler_next; ++ ++ Vector _handler_first_by_name; ++ ++ enum { HANDLER_BUFSIZ = 256 }; ++ Handler** _handler_bufs; ++ int _nhandlers_bufs; ++ int _free_handler; ++ ++ Vector _attachment_names; ++ Vector _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 _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&) 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 ¶m, 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& ++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& ++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 ++ * "no element named 'name'". 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 ++#include ++#if CLICK_LINUXMODULE ++# include ++CLICK_CXX_PROTECT ++# include ++CLICK_CXX_UNPROTECT ++# include ++#endif ++#if CLICK_BSDMODULE ++# include ++CLICK_CXX_PROTECT ++# include ++CLICK_CXX_UNPROTECT ++# include ++#endif ++ ++#define CLICK_DEBUG_SCHEDULING 0 ++ ++// NB: user must #include before . ++// We cannot #include 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_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 ++#include ++#ifdef HAVE_IP6 ++# include ++#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 and C 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 is an ambiguous ++reference to some address, but C is always an IPv4 address, ++C is always an IPv4 network address (IPv4 address prefix), ++C is always an IPv6 address, C is always an IPv6 ++network address, and C 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 defaults to ++DEVNAME's Ethernet address. (At userlevel, this works only on BSD and Linux.) ++ ++=item * ++ ++C 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 &, 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_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 ++ * Ith input will start `OFFSETI' bytes ++ * off from a `MODULUSI'-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 &, ErrorHandler *); ++ ++ bool query1(Element *, int port, int &chunk, int &offset) const; ++ static bool query(Element *, int port, int &chunk, int &offset); ++ ++ private: ++ ++ Vector _elem_offset; ++ Vector _elem_icount; ++ Vector _chunks; ++ Vector _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_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 &, 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 ++#include ++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 and C 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 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', and comments starting with `C<#>' are ignored. Thus, ++lines from F 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 &, 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_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'. ++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&, 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 ++#include ++#ifdef CLICK_LINUXMODULE ++# include ++#elif defined(CLICK_BSDMODULE) ++# include ++#else /* User-space */ ++# include ++#endif ++CLICK_DECLS ++ ++/** @file ++ @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(_s); ++ } ++ ++ /** @overload */ ++ inline char *data() { ++ return reinterpret_cast(_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 ith 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(_s[i]); ++ } ++ ++ /** @brief Returns a reference to the ith 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(_s[i]); ++ } ++ ++ /** @brief Returns the last character in the string. ++ @pre length() > 0 */ ++ char back() const { ++ assert(_len > 0); ++ return static_cast(_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(_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(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(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(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(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(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(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(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(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(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(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 ++#include ++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(&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 ++#include ++#if CLICK_LINUXMODULE && defined(__SMP__) ++# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) ++# include ++# else ++# include ++# endif ++# include ++# 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 ++ * @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 ++#include ++#if __MTCLICK__ ++# include ++# include ++#endif ++CLICK_DECLS ++ ++#if CLICK_BSDMODULE ++extern "C" { ++ #include ++ #include ++} ++#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_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(_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(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 ++#include ++#include ++#include ++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_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 ++#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 ×pec() 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 ++#include ++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&); ++ ++void parse_tabbed_lines(const String &, Vector *, ...); ++ ++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 *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 ++#include ++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 &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 _names; ++ Vector _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 ++#include ++CLICK_DECLS ++ ++template ++Vector::Vector(const Vector &o) ++ : _l(0), _n(0), _capacity(0) ++{ ++ *this = o; ++} ++ ++template ++Vector::~Vector() ++{ ++ for (size_type i = 0; i < _n; i++) ++ _l[i].~T(); ++ delete[] (unsigned char *)_l; ++} ++ ++template Vector & ++Vector::operator=(const Vector &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 Vector & ++Vector::assign(size_type n, const T &e) ++{ ++ resize(0, e); ++ resize(n, e); ++ return *this; ++} ++ ++template typename Vector::iterator ++Vector::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 typename Vector::iterator ++Vector::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 bool ++Vector::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 void ++Vector::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 void ++Vector::swap(Vector &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_DECLS ++ ++template ++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 ... ++ Vector(const Vector &); ++ ~Vector(); ++ ++ Vector& operator=(const Vector&); ++ Vector& assign(size_type n, const T& e = T()); ++ // template ... ++ ++ // 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 &); ++ 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 inline void ++Vector::push_back(const T& e) ++{ ++ if (_n < _capacity || reserve(RESERVE_GROW)) { ++ new(velt(_n)) T(e); ++ _n++; ++ } ++} ++ ++template inline void ++Vector::pop_back() ++{ ++ assert(_n > 0); ++ --_n; ++ _l[_n].~T(); ++} ++ ++template inline typename Vector::iterator ++Vector::erase(iterator i) ++{ ++ return (i < end() ? erase(i, i + 1) : i); ++} ++ ++template inline void ++Vector::push_front(const T& e) ++{ ++ insert(begin(), e); ++} ++ ++template inline void ++Vector::pop_front() ++{ ++ erase(begin()); ++} ++ ++ ++template <> ++class Vector { 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 &); ++ ~Vector(); ++ ++ Vector &operator=(const Vector &); ++ Vector &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 clear() { _n = 0; } ++ ++ private: ++ ++ void **_l; ++ size_type _n; ++ size_type _capacity; ++ ++}; ++ ++inline void ++Vector::push_back(void *e) ++{ ++ if (_n < _capacity || reserve(RESERVE_GROW)) { ++ _l[_n] = e; ++ _n++; ++ } ++} ++ ++inline void ++Vector::pop_back() ++{ ++ assert(_n > 0); ++ --_n; ++} ++ ++inline Vector::iterator ++Vector::erase(Vector::iterator e) ++{ ++ return (e < end() ? erase(e, e + 1) : e); ++} ++ ++inline void ++Vector::push_front(void *e) ++{ ++ insert(begin(), e); ++} ++ ++inline void ++Vector::pop_front() ++{ ++ erase(begin()); ++} ++ ++ ++template ++class Vector: private Vector { ++ ++ typedef Vector 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 &o) : Base(o) { } ++ ~Vector() { } ++ ++ Vector &operator=(const Vector &o) ++ { Base::operator=(o); return *this; } ++ Vector &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 &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 ++ ++/* ++ * -- 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 ++ ++/* ++ * -- 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 ++ ++/* ++ * -- 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 ++ ++/* ++ * -- 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_CXX_PROTECT ++#if CLICK_LINUXMODULE ++#include ++# include ++# include ++#else ++# include ++# include ++#endif ++ ++/* ++ * -- 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 ++#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 ++#undef s6_addr ++#undef s6_addr16 ++#undef s6_addr32 ++#undef s6_addr64 ++ ++/* ++ * -- 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 @@ ++/* ++ * - 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 ++ ++/* ++ * -- 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 ++ ++/* ++ * ++ */ ++ ++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 ++ ++/* ++ * -- 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 ++ ++/* ++ * -- 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 @@ ++/* ++ * - 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 ++#include ++#include ++#include ++#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 &) const; ++ virtual void collect_overloads(Vector &) const; ++ ++ static ElementT *expand_element(ElementT *, RouterT *, const String &prefix, VariableEnvironment &, ErrorHandler *); ++ ++ virtual ElementClassT *resolve(int ninputs, int noutputs, Vector &args, ErrorHandler *, const String &landmark); ++ virtual ElementT *complex_expand_element(ElementT *, const String &, Vector &, 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 *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 &, ErrorHandler *, const String &); ++ ElementT *complex_expand_element(ElementT *, const String &, Vector &, RouterT *, const String &prefix, VariableEnvironment &, ErrorHandler *); ++ ++ void collect_types(HashMap &) const; ++ void collect_overloads(Vector &) 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(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 _e; ++ HashMap _name_map; ++ ++ Vector _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&, 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 &, int start = 0) const; ++ int force_index_in(Vector &, int start = 0) const; ++ ++ String unparse_input() const; ++ String unparse_output() const; ++ ++ static void sort(Vector &); ++ ++}; ++ ++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 ++ ++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< ++#include ++#include ++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 _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 _input_pidx; ++ Vector _output_pidx; ++ Vector _input_elt; ++ Vector _output_elt; ++ Vector _input_processing; ++ Vector _output_processing; ++ Vector _connected_input; ++ Vector _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(e), pidx - _input_pidx[e->eindex()]); ++} ++ ++inline PortT ++ProcessingT::output_port(int pidx) const ++{ ++ const ElementT *e = _output_elt[pidx]; ++ return PortT(const_cast(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 ++#include ++#include ++#include ++typedef HashMap 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 *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 &) const; ++ void collect_locally_declared_types(Vector &) const; ++ void collect_overloads(Vector &) const; ++ ++ // CONNECTIONS ++ int nconnections() const { return _conn.size(); } ++ const Vector &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 &) const; ++ void find_connections_from(const PortT &, Vector &) const; ++ void find_connections_to(const PortT &, Vector &) const; ++ void find_connections_to(const PortT &, Vector &) const; ++ void find_connection_vector_from(ElementT *, Vector &) const; ++ void find_connection_vector_to(ElementT *, Vector &) 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 &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 &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 &, ErrorHandler *, const String &landmark); ++ ElementT *complex_expand_element(ElementT *, const String &, Vector &, 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 _elements; ++ ElementT *_free_element; ++ int _n_live_elements; ++ Vector *_new_eindex_collector; ++ ++ Vector _conn; ++ Vector _first_conn; ++ int _free_conn; ++ ++ StringMap _declared_type_map; ++ Vector _declared_types; ++ ++ Vector _requirements; ++ ++ StringMap _archive_map; ++ Vector _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 *port_expansions, const Vector &ports, bool is_output, int which, ErrorHandler *) const; ++ int assign_arguments(const Vector &, Vector *) 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(_e); } ++ ElementT *operator->() const { return const_cast(_e); } ++ ElementT &operator*() const { return const_cast(*_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(_e); } ++ ElementT *operator->() const { return const_cast(_e); } ++ ElementT &operator*() const { return const_cast(*_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 ++ ++class RouterUnparserT { public: ++ ++ RouterUnparserT(ErrorHandler *); ++ ++ struct Pair { ++ ElementClassT *first; ++ ElementClassT *second; ++ Pair(ElementClassT *a, ElementClassT *b) : first(a), second(b) { } ++ }; ++ ++ private: ++ ++ HashMap _tuid_map; ++ Vector _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, 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 ++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 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +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 ++# Created: 1993-05-16 ++# Public domain. ++# ++# This file is maintained in Automake, please report ++# bugs to or send patches to ++# . ++ ++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 ." ++ ++# 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 ++ ++ ++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: ++ ++* 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:: ++ ++ ++File: click.info, Node: Overview, Next: Helper Classes, Prev: Top, Up: Top ++ ++1 Overview ++********** ++ ++* Menu: ++ ++* Packet Transfer:: ++ ++ ++File: click.info, Node: Packet Transfer, Prev: Overview, Up: Overview ++ ++1.1 Packet Transfer ++=================== ++ ++ ++File: click.info, Node: Helper Classes, Next: Packets, Prev: Overview, Up: Top ++ ++2 Helper Classes ++**************** ++ ++* Menu: ++ ++* ErrorHandler:: ++ ++ ++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 ++`'. ++ ++* Menu: ++ ++* ErrorHandler Initialization:: ++* Reporting Errors:: ++* Error Format Strings:: ++* Counting Errors:: ++* Basic ErrorHandlers:: ++* Error Veneers:: ++* Writing ErrorHandlers:: ++ ++ ++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'. ++ ++ ++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'. ++ ++ ++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. ++ ++ ++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 ++ } ++ ++ ++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. ++ ++ ++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 ++ ++ ++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'. ++ ++ ++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 ++`'. ++ ++* Menu: ++ ++* Packet Structure and Contents:: ++* Packet Creation:: ++* Packets and sk_buffs:: ++* Packet Sharing:: ++* Packet Buffer Manipulation:: ++* Annotations:: ++* Packet Out-of-Memory:: ++* Handlers:: ++ ++ ++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() ++ ++ ++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. ++ ++ ++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'. ++ ++ ++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. ++ ++ ++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. ++ ++ ++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:: ++ ++ ++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. ++ ++ ++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 `' 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 `'. ++ ++ 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. ++ ++ ++File: click.info, Node: Specific User Annotations, Next: Other Annotations, Prev: User Annotations, Up: Annotations ++ ++3.6.3 Specific User Annotations ++------------------------------- ++ ++The `' 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 `'. ++ ++ #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 ++`'. ++ ++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' ++ ++ ++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:: ++ ++ ++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. ++ ++ ++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. ++ ++ ++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. ++ ++ ++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 ++ `'. ++ ++ -- 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'. ++ ++ ++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. ++ ++ ++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.) ++ ++ ++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. ++ ++ ++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:: ++ ++ ++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. ++ ++ ++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. ++ ++ ++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 ++ ++ ++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:: ++ ++ ++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()'. ++ ++ ++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 &RESULTS) ++ Appends to RESULTS all the handler indexes for ELEMENT's handlers, ++ or all global handlers if ELEMENT is null. ++ ++ ++File: click.info, Node: LLRPC Overview, Prev: Accessing Handlers Internally, Up: Handlers ++ ++3.8.5 LLRPC Overview ++-------------------- ++ ++ ++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 `' header file. ++ ++* Menu: ++ ++* Task Initialization:: ++* Scheduling Tasks:: ++* Tickets:: ++* Task Thread Choice:: ++* Task Status:: ++* Task Handlers:: ++* Task Cleanup:: ++ ++ ++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 ++`' 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. ++ ++ ++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. ++ ++ ++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. ++ ++ ++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. ++ ++ ++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. ++ ++ ++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". ++ ++ ++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. ++ ++ ++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 `' header file. ++ ++* Menu: ++ ++* Timer Initialization:: ++* Scheduling Timers:: ++* Timer Status Methods:: ++* Timer Cleanup:: ++ ++ ++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. ++ ++ ++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. ++ ++ ++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. ++ ++ ++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. ++ ++ ++File: click.info, Node: Notification, Next: Coding Standards, Prev: Timers, Up: Top ++ ++6 Notification ++************** ++ ++ ++File: click.info, Node: Coding Standards, Next: Index, Prev: Notification, Up: Top ++ ++7 Coding Standards ++****************** ++ ++* Menu: ++ ++* Upper and lower case names:: ++* Common name patterns:: ++ ++ ++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'). ++ ++ ++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). ++ ++ ++File: click.info, Node: Index, Prev: Coding Standards, Up: Top ++ ++Index ++***** ++ ++[index] ++* 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) ++ ++ ++ ++Tag Table: ++Node: Top233 ++Node: Overview2218 ++Node: Packet Transfer2353 ++Node: Helper Classes2470 ++Node: ErrorHandler2618 ++Node: ErrorHandler Initialization3523 ++Node: Reporting Errors4673 ++Node: Error Format Strings8229 ++Node: Counting Errors12734 ++Node: Basic ErrorHandlers13677 ++Node: Error Veneers15602 ++Node: Writing ErrorHandlers19343 ++Node: Packets22748 ++Node: Packet Structure and Contents24424 ++Node: Packet Creation26727 ++Node: Packets and sk_buffs30171 ++Node: Packet Sharing32385 ++Node: Packet Buffer Manipulation33889 ++Node: Annotations38510 ++Node: Header Annotations39633 ++Node: User Annotations44362 ++Node: Specific User Annotations46926 ++Node: Other Annotations48352 ++Node: Destination Address Annotation49046 ++Node: Timestamp Annotation50312 ++Node: Device Annotation51557 ++Node: Packet Type Annotation52750 ++Node: Performance Counter Annotation54390 ++Node: Annotations In General55128 ++Node: Packet Out-of-Memory55784 ++Node: Handlers56549 ++Node: Read and Write Handler Overview57053 ++Node: Adding Handlers60246 ++Ref: Changing Handler Flags62106 ++Node: Default Handlers62591 ++Node: Accessing Handlers Internally65097 ++Node: Handler Objects65946 ++Node: Handlers By Name or Index69116 ++Node: LLRPC Overview71591 ++Node: Tasks71730 ++Node: Task Initialization73013 ++Node: Scheduling Tasks76105 ++Node: Tickets79882 ++Ref: Tickets-Footnote-180864 ++Node: Task Thread Choice81096 ++Node: Task Status82460 ++Node: Task Handlers83806 ++Node: Task Cleanup84870 ++Node: Timers85502 ++Node: Timer Initialization86263 ++Node: Scheduling Timers87370 ++Node: Timer Status Methods89646 ++Node: Timer Cleanup90505 ++Node: Notification91069 ++Node: Coding Standards91191 ++Node: Upper and lower case names91386 ++Node: Common name patterns93028 ++Node: Index93763 ++ ++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. ++ ++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" 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 ++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 "" ++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 ++
    ++<~elements entry="
  • <~name link> :: <~type link>
  • "> ++
++.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, +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 ++

Here is a pretty picture: ++

++ ++ Back to B 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\fR is `<', \f(CWE\fR is `>', \f(CWE\fR is `&', ++\f(CWE\fR is `/', \f(CWE\fR is `|', \f(CWE\fR is `*', ++and \f(CWE\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 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\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 ++). 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", [, \fIKEYWORDS\fR]) ++.br ++\fBFromRawSocket\fR("UDP", [, \fIKEYWORDS\fR]) ++.br ++\fBFromRawSocket\fR("GRE", [, \fIKEYWORDS\fR]) ++.br ++\fBFromRawSocket\fR("ICMP", [, \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 &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", [, \fIKEYWORDS\fR]) ++.br ++\fBRawSocket\fR("UDP", [, \fIKEYWORDS\fR]) ++.br ++\fBRawSocket\fR("GRE", [, \fIKEYWORDS\fR]) ++.br ++\fBRawSocket\fR("ICMP", [, \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", ) ++.br ++\fBToRawSocket\fR("UDP", ) ++.br ++\fBToRawSocket\fR("GRE", ) ++.br ++\fBToRawSocket\fR("ICMP", ) ++ ++\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

By Function: ++.\"html Basic Sources and Sinks - Basic Classification and Selection - Basic Packet Transfer - Counters - Timestamps - Basic Packet Modification - Packet Storage - Active Queue Management - Packet Scheduling - Traffic Shaping - Information Elements - Network Devices - Host and Socket Communication - Ethernet - ARP - IPv4 - IPv4 Routing - ICMP - Network Address Translation - TCP - UDP - Trace Manipulation - TCP/IP Measurement - CRCs - Paint Annotations - Annotations - Debugging - Control - Multithreaded Click - devices
++.\"html Alphabetical List

++.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

By Function: ++.\"html Basic Sources and Sinks - Basic Classification and Selection - Basic Packet Transfer - Counters - Timestamps - Basic Packet Modification - Packet Storage - Active Queue Management - Packet Scheduling - Traffic Shaping - Information Elements - Network Devices - Host and Socket Communication - Ethernet - ARP - IPv4 - IPv4 Routing - ICMP - Network Address Translation - TCP - UDP - Trace Manipulation - TCP/IP Measurement - CRCs - Paint Annotations - Annotations - Debugging - Control - Multithreaded Click - devices - Basic Sources and Sinks - Basic Classification and Selection - Basic Packet Transfer - Counters - Timestamps - Basic Packet Modification - Packet Storage - Active Queue Management - Packet Scheduling - Traffic Shaping - Information Elements - Network Devices - Host and Socket Communication - Ethernet - ARP - IPv4 - IPv4 Routing - ICMP - Network Address Translation - TCP - UDP - Trace Manipulation - TCP/IP Measurement - CRCs - Paint Annotations - Annotations - Debugging - Control - Multithreaded Click - devices
++.\"html Alphabetical List

++.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 ++#include ++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 ++#if CLICK_BSDMODULE ++# include ++# include ++#endif ++#include ++#if CLICK_LINUXMODULE ++# include ++#else ++# include ++#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 ++#include ++#include ++#include ++#if INO_DEBUG ++# include ++#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(v1); ++ const ClickIno::Entry *b = reinterpret_cast(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(v1); ++ const String *b = reinterpret_cast(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 his; ++ Router::element_hindexes(Router::element(_router, parent_elementno), his); ++ Vector 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 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 ++#include ++#include ++#include ++#include ++#include ++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(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 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 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 ++#include ++#include ++#include ++#include ++#include ++#include ++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. ++ * ++ *

Out-of-memory StringAccums

++ * ++ * 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(const_cast(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(_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(_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(-num), base, uppercase); ++ } else ++ append_numeric(static_cast(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 ++#include ++#include ++#include ++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. ++ * ++ *

Initialization

++ * ++ * 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. ++ * ++ *

Out-of-memory strings

++ * ++ * 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(_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(_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(_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(_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(_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(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(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(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(end()); ++ for (const uint8_t *x = reinterpret_cast(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(&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 ++ * 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 ++#include ++#include ++CLICK_DECLS ++ ++Vector::Vector(const Vector &o) ++ : _l(0), _n(0), _capacity(0) ++{ ++ *this = o; ++} ++ ++Vector::~Vector() ++{ ++ delete[] _l; ++} ++ ++Vector & ++Vector::operator=(const Vector &o) ++{ ++ if (&o != this) { ++ _n = 0; ++ if (reserve(o._n)) { ++ _n = o._n; ++ memcpy(_l, o._l, sizeof(void *) * _n); ++ } ++ } ++ return *this; ++} ++ ++Vector & ++Vector::assign(size_type n, void* e) ++{ ++ _n = 0; ++ resize(n, e); ++ return *this; ++} ++ ++bool ++Vector::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::iterator ++Vector::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::iterator ++Vector::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::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::swap(Vector& 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 + #include + #include ++ + #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 ++#include ++#include ++#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 ++#include ++#include ++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 + #include ++#include ++ + #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 ++#include ++#ifndef EXPORT_SYMTAB ++# define EXPORT_SYMTAB ++#endif ++#ifdef CONFIG_MODVERSIONS ++# define MODVERSIONS ++# if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) ++# include ++# endif ++#endif ++#include ++#include "proclikefs.h" ++#include ++#include ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) ++# include ++#endif ++#include ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) ++# include ++#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 "); ++#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 + + ++ + #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 ++#include ++#include ++#include ++ ++ ++#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 ++#include "modulepriv.hh" ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++CLICK_CXX_PROTECT ++#include ++#include ++#include ++#include ++#include ++#include ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) ++# include ++#endif ++CLICK_CXX_UNPROTECT ++#include ++ ++#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 *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(¤t->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(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(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; ++ 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 "" ++# 1 "" ++# 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 ++inline __attribute__((always_inline)) T * ++find(T *begin, T *end, const T &val) ++{ ++ while (begin < end && *begin != val) ++ begin++; ++ return begin; ++} ++ ++template ++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(¬ifier->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(&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(_s); ++ } ++ ++ ++ inline __attribute__((always_inline)) char *data() { ++ return reinterpret_cast(_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(_s[i]); ++ } ++ ++ ++ ++ ++ ++ char &operator[](int i) { ++ ; ++ return reinterpret_cast(_s[i]); ++ } ++ ++ ++ ++ char back() const { ++ ; ++ return static_cast(_s[_len - 1]); ++ } ++ ++ ++ ++ char &back() { ++ ; ++ return reinterpret_cast(_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(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(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(i); ++} ++ ++ ++ ++ ++inline __attribute__((always_inline)) StringAccum & ++operator<<(StringAccum &sa, unsigned short u) ++{ ++ return sa << static_cast(u); ++} ++ ++ ++ ++ ++inline __attribute__((always_inline)) StringAccum & ++operator<<(StringAccum &sa, int i) ++{ ++ return sa << static_cast(i); ++} ++ ++ ++ ++ ++inline __attribute__((always_inline)) StringAccum & ++operator<<(StringAccum &sa, unsigned u) ++{ ++ return sa << static_cast(u); ++} ++ ++ ++ ++ ++ ++inline __attribute__((always_inline)) StringAccum & ++operator<<(StringAccum &sa, long long q) ++{ ++ sa.append_numeric(static_cast(q)); ++ return sa; ++} ++ ++ ++ ++ ++inline __attribute__((always_inline)) StringAccum & ++operator<<(StringAccum &sa, unsigned long long q) ++{ ++ sa.append_numeric(static_cast(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(_data); ++ ++ ++ ++ ; ++ deref(); ++ assign(_data, _length); ++ return const_cast(_data); ++} ++ ++ ++ ++ ++char * ++String::mutable_c_str() ++{ ++ (void) mutable_data(); ++ (void) c_str(); ++ return const_cast(_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(_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(_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(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(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(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(end()); ++ for (const uint8_t *x = reinterpret_cast(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(&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 -- 2.43.0