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